DBUTILS.MOD 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. IMPLEMENTATION MODULE DBUtils;
  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 BigSets IMPORT ExclCh, InclCh;
  13. FROM ControlUtils IMPORT ChangeField, Control, Input,
  14. ReadNextInput,ReadInput,AddStrField;
  15. FROM DspFiles IMPORT ReadDisplayFrame;
  16. FROM EnvironUtils IMPORT GetDate;
  17. FROM DateFunctions IMPORT Date, DateToStr, StrToDate;
  18. FROM HandleIO IMPORT BlockRead, BlockWrite, CloseHandle, CreateFile,
  19. FileExists, FileOffSet, OpenFile, SetFilePtr;
  20. FROM FramePainter IMPORT RedrawField, ShowDisplayFrame;
  21. FROM M2Strings IMPORT Length,Assign,Delete;
  22. FROM LowLevel IMPORT Fill;
  23. FROM HandleIO IMPORT OpenFile,CloseHandle;
  24. FROM NumTypes IMPORT Real8;
  25. FROM StrConv IMPORT ReturnedCard,StrToReal,CardinalToStr,RealToStr;
  26. FROM ScrnTypes IMPORT AFrameName, DispCode, DisplayFrame, InitDisplayFrame,
  27. InputFieldPtr,ImageElement,InputFieldRecord, IntCode,ImageElmtPtr,
  28. DisplayFile;
  29. FROM ScrnUtl1 IMPORT FieldListTotal, GetFieldRec, GetFieldText,
  30. PutFieldRec,CurrentField,GetImagePtr,NumberOfImages,ResetFieldPtr,
  31. GetFieldImagePtr,GetFieldPtr;
  32. FROM ScrnUtl2 IMPORT CloseDisplayFrame;
  33. FROM StrEdit IMPORT CrunchBlanks,LeftJustify,Center;
  34. FROM StringIO IMPORT ErrorMessage,WriteEol,WriteStr;
  35. FROM SYSTEM IMPORT ADR;
  36. FROM UserOps IMPORT AKeyHandler, ScreenKeySet, TheKeyHandler;
  37. IMPORT VWindows;
  38. FROM GenLists IMPORT GenList,NewList,ListInsert,StrCode;
  39. VAR
  40. OldKey :AKeyHandler;
  41. Today : Date;
  42. Str1,Str2 : ARRAY[0..8] OF CHAR;
  43. PROCEDURE SelectServices(VAR SerList : GenList);
  44. VAR
  45. DF : DisplayFrame;
  46. NxtFrame : AFrameName;
  47. ReturnVal: ARRAY[0..40] OF CHAR;
  48. Row : CARDINAL;
  49. Drive : CHAR;
  50. Card : CARDINAL;
  51. PathName : ARRAY[0..63] OF CHAR;
  52. Str : ARRAY[0..12] OF CHAR;
  53. FileName : AFrameName;
  54. EM : ErrorMessage;
  55. ImageRec: ImageElement;
  56. FullTableName : ARRAY[0..63] OF CHAR;
  57. BEGIN
  58. END SelectServices;
  59. PROCEDURE GetSelected(VAR TheList : GenList; DF : DisplayFrame);
  60. VAR
  61. J : CARDINAL;
  62. Image : ImageElmtPtr;
  63. str :ARRAY[0..79] OF CHAR;
  64. (* FieldPtr : InputFieldPtr;*)
  65. BEGIN
  66. NewList(TheList);
  67. FOR J := 1 TO FieldListTotal(DF) DO
  68. GetImagePtr(DF, J,Image);
  69. IF Image^.text[0] = CHR(251) (* if checked with sq root sign *)
  70. THEN
  71. Assign(Image^.text,str);
  72. Delete(str,0,1);
  73. (* GetFieldPtr(DF,J,FieldPtr); *)
  74. ListInsert(str,StrCode,TheList,100);
  75. END;
  76. END;
  77. END GetSelected;
  78. PROCEDURE NewKeyHandler( DF : DisplayFrame; VAR Key : CARDINAL;
  79. VAR NxtFrame : AFrameName);
  80. VAR
  81. Image : ImageElmtPtr;
  82. C : CARDINAL;
  83. BEGIN
  84. OldKey(DF, Key, NxtFrame); (* process the keys first *)
  85. IF Key = 32 (* if the space bar was hit *)
  86. THEN
  87. C := CurrentField(DF);
  88. GetImagePtr(DF, C,Image);
  89. IF Image^.text[0] = CHR(251) (* if checked with sq root sign *)
  90. THEN Image^.text[0] := ' '
  91. ELSE Image^.text[0] := CHR(251);
  92. END;
  93. RedrawField(DF,C,TRUE);
  94. END;
  95. END NewKeyHandler;
  96. PROCEDURE SelectFromScreen(VAR DF : DisplayFrame);
  97. BEGIN
  98. OldKey := TheKeyHandler;
  99. TheKeyHandler := NewKeyHandler;
  100. ShowDisplayFrame(DF,0,0,0,0);
  101. InclCh(ScreenKeySet,' '); (* look for space bar *)
  102. Control(DF);
  103. ExclCh(ScreenKeySet,' ');
  104. TheKeyHandler := OldKey;
  105. END SelectFromScreen;
  106. PROCEDURE AddFldTypes(VAR DF : DisplayFrame; Col,Row: CARDINAL;
  107. Text : ARRAY OF CHAR;Len: CARDINAL; Type : CHAR);
  108. (* copy of add menu item from control utils *)
  109. VAR
  110. FieldRec : InputFieldRecord;
  111. BEGIN
  112. AddStrField(DF,Col,Row,Text,Len);
  113. GetFieldRec( DF, FieldListTotal(DF),
  114. FieldRec );
  115. CASE Type OF
  116. IntCode : FieldRec.typ := IntCode;
  117. FieldRec.iMax := 20;
  118. FieldRec.iMin := 0;
  119. |DispCode : FieldRec.typ := DispCode;
  120. END; (* end case of *)
  121. PutFieldRec( FieldRec, DF,
  122. FieldListTotal(DF) );
  123. END AddFldTypes;
  124. PROCEDURE PrintFrame(DF : DisplayFrame; Handle : CARDINAL);
  125. (* Given a display frame created by adding menu items or string items
  126. print it to the report printer*)
  127. CONST
  128. FF = CHR(12);
  129. VAR
  130. J : CARDINAL;
  131. Cnt : CARDINAL;
  132. Str : ARRAY[0..80] OF CHAR;
  133. Lines : CARDINAL;
  134. FldImagePnt : ImageElmtPtr;
  135. FirstLine : ARRAY[0..80] OF CHAR;
  136. EM : CARDINAL;
  137. PROCEDURE PrintHeader(Handle : CARDINAL);
  138. VAR M : CARDINAL;
  139. BEGIN
  140. FOR M := 0 TO 6 DO
  141. WriteEol(Handle,PrintTitle[M]);
  142. END;
  143. WriteEol(Handle,'');
  144. WriteEol(Handle,FirstLine);
  145. Fill(ADR(Str),78,'-'); (* dash line *)
  146. WriteEol(Handle,Str);
  147. Lines := 50;
  148. END PrintHeader;
  149. BEGIN
  150. Cnt := NumberOfImages(DF);
  151. WriteStr(Handle,027C+'C'+66C); (* set lines per page *)
  152. GetFieldImagePtr(DF,1,FldImagePnt);
  153. Assign(FldImagePnt^.text,FirstLine );
  154. ResetFieldPtr(DF);
  155. PrintHeader(Handle);
  156. FOR J := 1 TO Cnt-1 DO
  157. IF (J MOD Lines) = 0
  158. THEN
  159. WriteStr(Handle,FF); (* form feed *)
  160. PrintHeader(Handle);
  161. END;
  162. ReadNextInput(DF,Str,0);
  163. WriteEol(Handle,Str);
  164. END;
  165. END PrintFrame;
  166. PROCEDURE GetDateRange(VAR D1, D2 : Date; PMIScreens : DisplayFile);
  167. VAR
  168. DF : DisplayFrame;
  169. BEGIN
  170. InitDisplayFrame(DF,VWindows.CurrentWindow);
  171. ReadDisplayFrame(PMIScreens,DF,'DateRange');
  172. D1 := Today;
  173. D1.mo := 1; (* jan 1st of this year *)
  174. D1.day := 1;
  175. ChangeDateField(DF,D1,'Date1');
  176. ChangeDateField(DF,Today,'Date2');
  177. ShowDisplayFrame(DF,0,0,0,0);
  178. Control(DF);
  179. ReadDateField(DF,D1,'Date1');
  180. ReadDateField(DF,D2,'Date2');
  181. CloseDisplayFrame(DF);
  182. END GetDateRange;
  183. PROCEDURE ReadCardField(DF : DisplayFrame; VAR TheCard : CARDINAL;
  184. FldName : ARRAY OF CHAR);
  185. VAR S : ARRAY [0..10] OF CHAR;
  186. B : BOOLEAN;
  187. BEGIN
  188. ReadInput(DF,S,FldName);
  189. TheCard := ReturnedCard(S);
  190. END ReadCardField;
  191. PROCEDURE ReadRealField(DF : DisplayFrame; VAR TheReal : Real8;
  192. FldName : ARRAY OF CHAR);
  193. VAR
  194. S : ARRAY [0..15] OF CHAR;
  195. B : BOOLEAN;
  196. BEGIN
  197. ReadInput(DF,S,FldName);
  198. B := StrToReal(S,0,TheReal);
  199. END ReadRealField;
  200. PROCEDURE ChangeCardField(DF : DisplayFrame; TheCard : CARDINAL;
  201. FldName : ARRAY OF CHAR);
  202. VAR
  203. S : ARRAY[0..7] OF CHAR;
  204. BEGIN
  205. CardinalToStr(TheCard,5,S);
  206. CrunchBlanks(S);
  207. ChangeField(DF,S,FldName,TRUE);
  208. END ChangeCardField;
  209. PROCEDURE ChangeRealField(DF : DisplayFrame; TheReal : Real8;
  210. FldName : ARRAY OF CHAR);
  211. VAR
  212. S : ARRAY[0..15] OF CHAR;
  213. BEGIN
  214. RealToStr(TheReal,2,8,S);
  215. CrunchBlanks(S);
  216. ChangeField(DF,S,FldName,TRUE);
  217. END ChangeRealField;
  218. PROCEDURE ReadDateField( DF : DisplayFrame; VAR D : Date;
  219. FldName : ARRAY OF CHAR);
  220. VAR
  221. S : ARRAY [0..15] OF CHAR;
  222. Ok : BOOLEAN;
  223. BEGIN
  224. ReadInput(DF,S,FldName);
  225. StrToDate(S,D,Ok);
  226. END ReadDateField;
  227. PROCEDURE ChangeDateField(VAR DF : DisplayFrame; D : Date;
  228. FldName : ARRAY OF CHAR);
  229. VAR
  230. S : ARRAY[0..15] OF CHAR;
  231. B : BOOLEAN;
  232. BEGIN
  233. DateToStr(D,S,B);
  234. ChangeField(DF,S,FldName,TRUE);
  235. END ChangeDateField;
  236. PROCEDURE BoolExists(B : BOOLEAN) : CHAR;
  237. (* returns an * if the boolean is true - for change field *)
  238. (* this is used to signal on the screen that some condition exists *)
  239. BEGIN
  240. IF B
  241. THEN RETURN '*'
  242. ELSE RETURN ' '
  243. END;
  244. END BoolExists;
  245. BEGIN
  246. GetDate(Today.mo,Today.day,Today.yr,Str1,Str2);
  247. END DBUtils.
  248.