GENEDT.MOD 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. IMPLEMENTATION MODULE GenEdt;
  2. (*
  3. * ModBase
  4. * Release 3.0
  5. * (c) Copyright 1986 - 1991 PMI
  6. Copyright 1988 - 1991 John McMonagle
  7. * P.O. Box 8402
  8. * Green Bay Wi 53308
  9. * All Rights Reserved
  10. * by Ed Ross
  11. *)
  12. FROM DataTypes IMPORT DataElmtRec,IndexElmtRec;
  13. FROM HandleIO IMPORT CreateFile,CloseHandle;
  14. FROM StringIO IMPORT ErrorMessage,WriteStr,WriteEol,outp;
  15. FROM StrConv IMPORT CardinalToStr,StrToCardinal;
  16. FROM StrEdit IMPORT Append,CrunchBlanks,SetLength,CAPstr,LowerStr;
  17. FROM PosUtils IMPORT Pos, Equal, Present;
  18. FROM GenLists IMPORT GenList,GetElmtAdr,ListLength;
  19. FROM Str IMPORT Copy;
  20. (* generate code for database acess (modbase stuff ) *)
  21. VAR
  22. FH : CARDINAL; (* file handle for def file *)
  23. Str : ARRAY[0..80] OF CHAR;
  24. Len : CARDINAL;
  25. LnCnt : CARDINAL;
  26. B : BOOLEAN;
  27. PROCEDURE GenEdtFile(FileName : ARRAY OF CHAR; FldList,IdxList : GenList);
  28. VAR
  29. FN : ARRAY[0..18] OF CHAR;
  30. IdxFld : ARRAY[0..7] OF CHAR;
  31. FH : CARDINAL;
  32. Cnt : CARDINAL;
  33. Size,Code : CARDINAL;
  34. FldPnt : POINTER TO DataElmtRec;
  35. IdxPnt : POINTER TO IndexElmtRec;
  36. EM : ErrorMessage;
  37. BEGIN
  38. Copy(FN , FileName);
  39. Append(FN,'.Edt'); (* make edt file file name *)
  40. (* FH := outp; *)
  41. EM := CreateFile(FH,FN);
  42. WriteEol(FH,'');
  43. (* gen the screen name *)
  44. WriteEol(FH,'===================================================');
  45. WriteEol(FH,':TopMenu');
  46. WriteEol(FH,' FrameBelow : FileMenu');
  47. WriteEol(FH,'Fields :{ ');
  48. WriteEol(FH,"(F) '' GoTo FileMenu");
  49. WriteEol(FH,"(E) '' GoTo EditMenu");
  50. WriteEol(FH,"(X) '' GoTo Exit");
  51. WriteEol(FH,"(H) '' GoTo Help");
  52. WriteEol(FH,'}');
  53. WriteEol(FH,'Window :{ ');
  54. WriteEol(FH,'Position:( 1,1,80,3)');
  55. WriteEol(FH,'}');
  56. WriteEol(FH,'--------------------------------------------------');
  57. WriteEol(FH,'');
  58. WriteEol(FH,' #File # #Edit # #eXit # #Help#');
  59. WriteEol(FH,'');
  60. (* Generate the file pulldown menu *)
  61. WriteEol(FH,'===================================================');
  62. WriteEol(FH,':FileMenu');
  63. WriteEol(FH,' ParentFrame : TopMenu');
  64. WriteEol(FH,' FrameLeft : EditMenu');
  65. WriteEol(FH,' FrameRight : EditMenu');
  66. WriteEol(FH,'Fields :{ ');
  67. (* *)
  68. (* Add a menu item for each indexed file *)
  69. (* *)
  70. LnCnt := 4;
  71. FOR Cnt := 1 TO ListLength(IdxList) DO (* create index for each indexed item*)
  72. GetElmtAdr(IdxList,Cnt,IdxPnt,Size,Code); (* get each field *)
  73. INC(LnCnt);
  74. CrunchBlanks(IdxPnt^.EdtName);
  75. WriteStr(FH,' (');
  76. WriteStr(FH,IdxPnt^.HighLight);
  77. WriteStr(FH,") '' GoTo ");
  78. WriteEol(FH,IdxPnt^.FldName);
  79. END;
  80. (* put in the standard menu items *)
  81. WriteEol(FH," (N) '' GoTo Next");
  82. WriteEol(FH," (P) '' GoTo Prev");
  83. WriteEol(FH," (F) '' GoTo First");
  84. WriteEol(FH," (L) '' GoTo Last");
  85. WriteEol(FH," (A) '' GoTo Add");
  86. WriteEol(FH,' } ');
  87. (* *)
  88. (* Put the window statment in *)
  89. (* *)
  90. WriteEol(FH,'Window:{');
  91. CardinalToStr(LnCnt+6,2,Str); (* this is how long the window should be*)
  92. WriteStr(FH ,' Position:( 2,3,25,');
  93. WriteStr(FH,Str);
  94. WriteEol(FH, ')');
  95. WriteEol(FH,'}');
  96. WriteEol(FH,'');
  97. WriteEol(FH,'');
  98. WriteEol(FH,'----------------------------------------------------');
  99. WriteEol(FH,'');
  100. FOR Cnt := 1 TO ListLength(IdxList) DO (* create index for each indexed item*)
  101. GetElmtAdr(IdxList,Cnt,IdxPnt,Size,Code); (* get each field *)
  102. WriteStr(FH,' # search by ');
  103. WriteStr(FH,IdxPnt^.EdtName);
  104. WriteEol(FH,' #');
  105. END;
  106. (* add standard menu items *)
  107. WriteEol(FH,' # Next # ');
  108. WriteEol(FH,' # Prev # ');
  109. WriteEol(FH,' # First # ');
  110. WriteEol(FH,' # Last # ');
  111. WriteEol(FH,' # Add # ');
  112. WriteEol(FH,'');
  113. WriteEol(FH,'');
  114. (* *)
  115. (* Generate the edit screen with *)
  116. (* update and delete menu items *)
  117. (* *)
  118. WriteEol(FH,'');
  119. WriteEol(FH,'====================================================');
  120. WriteEol(FH,':EditMenu');
  121. WriteEol(FH,' ParentFrame : TopMenu');
  122. WriteEol(FH,' FrameLeft : FileMenu');
  123. WriteEol(FH,' FrameRight : FileMenu');
  124. WriteEol(FH,'Fields:{');
  125. WriteEol(FH," (U) '' GoTo UpDate");
  126. WriteEol(FH," (D) '' GoTo Delete");
  127. WriteEol(FH,'}');
  128. WriteEol(FH,'Window:{');
  129. WriteEol(FH,' Position:(15,3,30,9)');
  130. WriteEol(FH,' }');
  131. WriteEol(FH,'------------------------------------------------------');
  132. WriteEol(FH,'');
  133. WriteEol(FH,' # Update #');
  134. WriteEol(FH,' # Delete #');
  135. WriteEol(FH,'');
  136. (* *)
  137. (* Generate a screen with all of the database*)
  138. (* fields for testing *)
  139. WriteEol(FH,'===================================================');
  140. WriteStr(FH,':');
  141. WriteEol(FH,FileName);
  142. WriteEol(FH,'Fields :{ ');
  143. (* *)
  144. (* Add a screen field for each database field *)
  145. (* *)
  146. LnCnt := 4;
  147. FOR Cnt := 1 TO ListLength(FldList) DO (* create index for each indexed item*)
  148. GetElmtAdr(FldList,Cnt,FldPnt,Size,Code); (* get each field *)
  149. CrunchBlanks(FldPnt^.Name);
  150. CAPstr(FldPnt^.Name);
  151. WriteStr(FH,"() '");
  152. CAPstr(FldPnt^.Name);
  153. WriteStr(FH,FldPnt^.Name);
  154. WriteStr(FH,"'");
  155. IF FldPnt^.Type = 'C'
  156. THEN WriteEol(FH,' String')
  157. ELSIF FldPnt^.Type = 'N'
  158. THEN
  159. IF FldPnt^.Len > 0
  160. THEN
  161. WriteEol(FH,' Real [0..99999]')
  162. ELSE
  163. WriteEol(FH,' INTEGER [0..9999]');
  164. END;
  165. ELSIF FldPnt^.Type = 'M' (* memo *)
  166. THEN WriteEol(FH, 'Editor; 2 lines');
  167. ELSIF FldPnt^.Type = 'D' (* date type *)
  168. THEN WriteEol(FH, ' Date');
  169. ELSE (* don't know what to do with choice fields Type 'L'*)
  170. WriteEol(FH,' String');
  171. END; (* end of if elsif *)
  172. END; (* end of for each field *)
  173. WriteEol(FH,'}'); (* end of field section *)
  174. WriteEol(FH,'');
  175. WriteEol(FH,'');
  176. WriteEol(FH,'Window :{');
  177. WriteEol(FH,'Position:(1,4,80,24)');
  178. WriteEol(FH,'}');
  179. WriteEol(FH,'-----------------------------------------------------');
  180. (* now paint the screen with each field *)
  181. WriteEol(FH,'');
  182. FOR Cnt := 1 TO ListLength(FldList) DO (* create index for each indexed item*)
  183. GetElmtAdr(FldList,Cnt,FldPnt,Size,Code); (* get each field *)
  184. IF FldPnt^.Type = 'D'
  185. THEN FldPnt^.Len := 8;
  186. END;
  187. WriteStr(FH,' ');
  188. WriteStr(FH, FldPnt^.Name);
  189. Str :=
  190. ' # ';
  191. SetLength(Str,FldPnt^.Len+4);
  192. WriteStr(FH,Str);
  193. WriteEol(FH,'#');
  194. END;
  195. EM := CloseHandle(FH);
  196. END GenEdtFile;
  197. END GenEdt.
  198.