IMPLEMENTATION MODULE GenEdt; (* * ModBase * Release 3.0 * (c) Copyright 1986 - 1991 PMI Copyright 1988 - 1991 John McMonagle * P.O. Box 8402 * Green Bay Wi 53308 * All Rights Reserved * by Ed Ross *) FROM DataTypes IMPORT DataElmtRec,IndexElmtRec; FROM HandleIO IMPORT CreateFile,CloseHandle; FROM StringIO IMPORT ErrorMessage,WriteStr,WriteEol,outp; FROM StrConv IMPORT CardinalToStr,StrToCardinal; FROM StrEdit IMPORT Append,CrunchBlanks,SetLength,CAPstr,LowerStr; FROM PosUtils IMPORT Pos, Equal, Present; FROM GenLists IMPORT GenList,GetElmtAdr,ListLength; FROM Str IMPORT Copy; (* generate code for database acess (modbase stuff ) *) VAR FH : CARDINAL; (* file handle for def file *) Str : ARRAY[0..80] OF CHAR; Len : CARDINAL; LnCnt : CARDINAL; B : BOOLEAN; PROCEDURE GenEdtFile(FileName : ARRAY OF CHAR; FldList,IdxList : GenList); VAR FN : ARRAY[0..18] OF CHAR; IdxFld : ARRAY[0..7] OF CHAR; FH : CARDINAL; Cnt : CARDINAL; Size,Code : CARDINAL; FldPnt : POINTER TO DataElmtRec; IdxPnt : POINTER TO IndexElmtRec; EM : ErrorMessage; BEGIN Copy(FN , FileName); Append(FN,'.Edt'); (* make edt file file name *) (* FH := outp; *) EM := CreateFile(FH,FN); WriteEol(FH,''); (* gen the screen name *) WriteEol(FH,'==================================================='); WriteEol(FH,':TopMenu'); WriteEol(FH,' FrameBelow : FileMenu'); WriteEol(FH,'Fields :{ '); WriteEol(FH,"(F) '' GoTo FileMenu"); WriteEol(FH,"(E) '' GoTo EditMenu"); WriteEol(FH,"(X) '' GoTo Exit"); WriteEol(FH,"(H) '' GoTo Help"); WriteEol(FH,'}'); WriteEol(FH,'Window :{ '); WriteEol(FH,'Position:( 1,1,80,3)'); WriteEol(FH,'}'); WriteEol(FH,'--------------------------------------------------'); WriteEol(FH,''); WriteEol(FH,' #File # #Edit # #eXit # #Help#'); WriteEol(FH,''); (* Generate the file pulldown menu *) WriteEol(FH,'==================================================='); WriteEol(FH,':FileMenu'); WriteEol(FH,' ParentFrame : TopMenu'); WriteEol(FH,' FrameLeft : EditMenu'); WriteEol(FH,' FrameRight : EditMenu'); WriteEol(FH,'Fields :{ '); (* *) (* Add a menu item for each indexed file *) (* *) LnCnt := 4; FOR Cnt := 1 TO ListLength(IdxList) DO (* create index for each indexed item*) GetElmtAdr(IdxList,Cnt,IdxPnt,Size,Code); (* get each field *) INC(LnCnt); CrunchBlanks(IdxPnt^.EdtName); WriteStr(FH,' ('); WriteStr(FH,IdxPnt^.HighLight); WriteStr(FH,") '' GoTo "); WriteEol(FH,IdxPnt^.FldName); END; (* put in the standard menu items *) WriteEol(FH," (N) '' GoTo Next"); WriteEol(FH," (P) '' GoTo Prev"); WriteEol(FH," (F) '' GoTo First"); WriteEol(FH," (L) '' GoTo Last"); WriteEol(FH," (A) '' GoTo Add"); WriteEol(FH,' } '); (* *) (* Put the window statment in *) (* *) WriteEol(FH,'Window:{'); CardinalToStr(LnCnt+6,2,Str); (* this is how long the window should be*) WriteStr(FH ,' Position:( 2,3,25,'); WriteStr(FH,Str); WriteEol(FH, ')'); WriteEol(FH,'}'); WriteEol(FH,''); WriteEol(FH,''); WriteEol(FH,'----------------------------------------------------'); WriteEol(FH,''); FOR Cnt := 1 TO ListLength(IdxList) DO (* create index for each indexed item*) GetElmtAdr(IdxList,Cnt,IdxPnt,Size,Code); (* get each field *) WriteStr(FH,' # search by '); WriteStr(FH,IdxPnt^.EdtName); WriteEol(FH,' #'); END; (* add standard menu items *) WriteEol(FH,' # Next # '); WriteEol(FH,' # Prev # '); WriteEol(FH,' # First # '); WriteEol(FH,' # Last # '); WriteEol(FH,' # Add # '); WriteEol(FH,''); WriteEol(FH,''); (* *) (* Generate the edit screen with *) (* update and delete menu items *) (* *) WriteEol(FH,''); WriteEol(FH,'===================================================='); WriteEol(FH,':EditMenu'); WriteEol(FH,' ParentFrame : TopMenu'); WriteEol(FH,' FrameLeft : FileMenu'); WriteEol(FH,' FrameRight : FileMenu'); WriteEol(FH,'Fields:{'); WriteEol(FH," (U) '' GoTo UpDate"); WriteEol(FH," (D) '' GoTo Delete"); WriteEol(FH,'}'); WriteEol(FH,'Window:{'); WriteEol(FH,' Position:(15,3,30,9)'); WriteEol(FH,' }'); WriteEol(FH,'------------------------------------------------------'); WriteEol(FH,''); WriteEol(FH,' # Update #'); WriteEol(FH,' # Delete #'); WriteEol(FH,''); (* *) (* Generate a screen with all of the database*) (* fields for testing *) WriteEol(FH,'==================================================='); WriteStr(FH,':'); WriteEol(FH,FileName); WriteEol(FH,'Fields :{ '); (* *) (* Add a screen field for each database field *) (* *) LnCnt := 4; FOR Cnt := 1 TO ListLength(FldList) DO (* create index for each indexed item*) GetElmtAdr(FldList,Cnt,FldPnt,Size,Code); (* get each field *) CrunchBlanks(FldPnt^.Name); CAPstr(FldPnt^.Name); WriteStr(FH,"() '"); CAPstr(FldPnt^.Name); WriteStr(FH,FldPnt^.Name); WriteStr(FH,"'"); IF FldPnt^.Type = 'C' THEN WriteEol(FH,' String') ELSIF FldPnt^.Type = 'N' THEN IF FldPnt^.Len > 0 THEN WriteEol(FH,' Real [0..99999]') ELSE WriteEol(FH,' INTEGER [0..9999]'); END; ELSIF FldPnt^.Type = 'M' (* memo *) THEN WriteEol(FH, 'Editor; 2 lines'); ELSIF FldPnt^.Type = 'D' (* date type *) THEN WriteEol(FH, ' Date'); ELSE (* don't know what to do with choice fields Type 'L'*) WriteEol(FH,' String'); END; (* end of if elsif *) END; (* end of for each field *) WriteEol(FH,'}'); (* end of field section *) WriteEol(FH,''); WriteEol(FH,''); WriteEol(FH,'Window :{'); WriteEol(FH,'Position:(1,4,80,24)'); WriteEol(FH,'}'); WriteEol(FH,'-----------------------------------------------------'); (* now paint the screen with each field *) WriteEol(FH,''); FOR Cnt := 1 TO ListLength(FldList) DO (* create index for each indexed item*) GetElmtAdr(FldList,Cnt,FldPnt,Size,Code); (* get each field *) IF FldPnt^.Type = 'D' THEN FldPnt^.Len := 8; END; WriteStr(FH,' '); WriteStr(FH, FldPnt^.Name); Str := ' # '; SetLength(Str,FldPnt^.Len+4); WriteStr(FH,Str); WriteEol(FH,'#'); END; EM := CloseHandle(FH); END GenEdtFile; END GenEdt.