| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- IMPLEMENTATION MODULE Scrn2DBF;
- (*
- * ModBase
- * Release 3.0
- * (c) Copyright 1986 - 1991 Donald G. Fletcher
- * (c) Copyright 1986 - 1991 PMI
- * P.O. Box 8402
- * Green Bay Wi 53308
- * All Rights Reserved
- *
- * Contributed by John McMonagle of McMonagle Software
- * Green Bay, Wisconsin.
- *)
- (* 12/23/88 replaced LeftJustify with LeftJust to save leading blanks *)
- (* increased memosize limit to 4k *)
- (* 6/22/89 @DELETED,@RECNUM,@RECOUNT TO Frame to DBF *)
- IMPORT DateFunctions;
- IMPORT DBFields;
- IMPORT ErrorManager;
- IMPORT FieldTypes;
- IMPORT GenLists;
- IMPORT LowLevel;
- IMPORT MemoFunctions;
- IMPORT ModBase3;
- IMPORT PosUtils;
- IMPORT ScrnTypes;
- IMPORT ScrnUtl1;
- IMPORT StrConv;
- IMPORT StrEdit;
- IMPORT StringIO;
- IMPORT M2Strings;
- IMPORT SYSTEM;
- FROM VStorage IMPORT
- DosAlloc, DosDealloc;
- CONST
- MemoSize=4000;
- PROCEDURE DEALLOCATE(VAR loc:SYSTEM.ADDRESS;size:CARDINAL);
- BEGIN
- DosDealloc(loc,size);
- END DEALLOCATE;
- PROCEDURE ALLOCATE(VAR loc:SYSTEM.ADDRESS;size:CARDINAL);
- BEGIN
- DosAlloc(loc,size);
- END ALLOCATE;
- PROCEDURE LeftJust( VAR TheStr: ARRAY OF CHAR;
- RequiredLength: CARDINAL );
- VAR strlength: CARDINAL;
- BEGIN
- strlength := M2Strings.Length( TheStr );
- IF strlength > RequiredLength THEN
- StrEdit.SetLength( TheStr, RequiredLength );
- ELSE
- WHILE strlength < RequiredLength DO
- StrEdit.Append( TheStr, ' ' );
- INC( strlength );
- END;
- END;
- END LeftJust;
- PROCEDURE FrameToDBF
- ( VAR DBF : ModBase3.DBFile;
- VAR TheFrame : ScrnTypes.DisplayFrame) : BOOLEAN;
- VAR
- string : ARRAY[ 0 .. 128 ] OF CHAR;
- TotalFields,
- size,
- i,
- FieldCount,
- k,
- J : CARDINAL;
- offby : INTEGER;
- dumbool : BOOLEAN;
- date : DateFunctions.Date;
- list : GenLists.GenList;
- text : POINTER TO ARRAY[ 0 .. MemoSize-1 ] OF CHAR;
- FieldPtr : ScrnTypes.InputFieldPtr;
- ImagePtr : ScrnTypes.ImageElmtPtr;
- fldptr : ModBase3.DBFieldPtr;
- BEGIN
- TotalFields := ScrnUtl1.FieldListTotal( TheFrame );
- fldptr:=ModBase3.FieldList(DBF);
- FieldCount := 1;
- REPEAT
- ScrnUtl1.GetFieldPtr( TheFrame, FieldCount, FieldPtr );
- IF M2Strings.Length( FieldPtr^.fnam ) # 0 THEN
- ScrnUtl1.GetFieldImagePtr( TheFrame, FieldCount, ImagePtr );
- i := ModBase3.PosOfField( DBF, FieldPtr^.fnam );
- IF i # 0 THEN
- CASE fldptr^[i].fldtype OF
- 'C' :
- M2Strings.Assign( ImagePtr^.text, string );
- DBFields.Replace( DBF, i, string ); |
- 'D' :
- (* as dates are to be checked in userops count and errorcheck
- are to be dropped *)
- (* should modify to use fieldptr variables *)
- IF NOT PosUtils.IsBlank( ImagePtr^.text ) THEN
- DateFunctions.StrToDate( ImagePtr^.text, date, dumbool );
- IF NOT dumbool THEN
- RETURN FALSE
- END (* if *);
- DBFields.ReplaceD( DBF, i, date );
- ELSE
- DBFields.Replace( DBF, i, ' ' );
- END (* if *); |
- 'L' :
- (* should work fine for both group and boolean fields *)
- DBFields.ReplaceL( DBF, i, FieldPtr^.selected ); |
- 'M' :
- IF FieldPtr^.typ = FieldTypes.TypeCode( 'EDITOR' ) THEN
- dumbool := ScrnUtl1.ListFromEdField( TheFrame, FieldCount,
- list );
- size := GenLists.ListLength( list );
- (* cludge because empty list has 1 element !!!*)
- IF size=1 THEN
- GenLists.GetElmt( list, 1, string, k );
- END;
- NEW(text);
- text^ := '';
- IF (size # 0 ) AND NOT ((size =1) AND (string[0]=0C)) THEN
- FOR J := 1 TO size DO
- GenLists.GetElmt( list, J, string, k );
- StrEdit.Append( text^, string );
- StrEdit.Append( text^, StringIO.CrLf );
- (* for *)
- END (* for J *);
- END (* if size *);
- MemoFunctions.ReplaceM( DBF, i, text^ );
- DISPOSE(text);
- END (* if FieldPtr *);
- |
- 'N' :
- M2Strings.Assign( ImagePtr^.text, string );
- StrEdit.DeleteChar( ' ', string );
- IF M2Strings.Pos( '.', string ) > HIGH( string ) THEN
- StrEdit.Append( string, '.' );
- (* no decimal point *)
- END (* if M2Strings.Pos *);
- (* if *)
- offby := -INTEGER( fldptr^[i].decplaces ) + INTEGER(
- M2Strings.Length( string ) )
- - INTEGER( M2Strings.Pos( '.', string ) + 1 );
- IF offby < 0 THEN
- REPEAT
- StrEdit.Append( string, '0' );
- INC( offby );
- UNTIL offby = 0;
- ELSE
- StrEdit.SetLength( string, M2Strings.Length( string ) -
- CARDINAL( offby ) );
- END (* if offby *);
- (* if *)
- IF fldptr^[i].decplaces = 0 THEN
- StrEdit.SetLength( string, M2Strings.Pos( '.', string ) );
- END (* if DBF.fieldlist^ *);
- (* if *)
- (* Right justify *)
- WHILE M2Strings.Length( string ) < fldptr^[i].size DO
- M2Strings.Concat( ' ', string, string );
- (* while *)
- END (* while M2Strings.Length *);
- DBFields.Replace( DBF, i, string );
- ELSE
- END (* case DBF.fieldlist^ *);
- END (* if i *);
- END (* if M2Strings.Length *);
- INC( FieldCount );
- UNTIL FieldCount > TotalFields;
- RETURN TRUE;
- END FrameToDBF;
- PROCEDURE DBFToFrame
- ( VAR DBF : ModBase3.DBFile;
- VAR TheFrame : ScrnTypes.DisplayFrame);
- VAR
- string : ARRAY[ 0 .. 79 ] OF CHAR;
- TotalFields,
- size,
- FieldCount,
- i : CARDINAL;
- ok : BOOLEAN;
- date : DateFunctions.Date;
- list : GenLists.GenList;
- FieldPtr : ScrnTypes.InputFieldPtr;
- ImagePtr : ScrnTypes.ImageElmtPtr;
- Block : SYSTEM.ADDRESS;
- fldptr : ModBase3.DBFieldPtr;
- text : POINTER TO ARRAY[ 0 .. MemoSize-1 ] OF CHAR;
- BEGIN
- fldptr:=ModBase3.FieldList(DBF);
- TotalFields := ScrnUtl1.FieldListTotal( TheFrame );
- FieldCount := 1;
- REPEAT
- ScrnUtl1.GetFieldPtr( TheFrame, FieldCount, FieldPtr );
- IF M2Strings.Length( FieldPtr^.fnam ) # 0 THEN
- ScrnUtl1.GetFieldImagePtr( TheFrame, FieldCount, ImagePtr );
- i := ModBase3.PosOfField( DBF, FieldPtr^.fnam );
- IF i # 0 THEN
- CASE fldptr^[i].fldtype OF
- 'C' :
- ModBase3.GetField( DBF, i, string );
- size := M2Strings.Length( ImagePtr^.text );
- LeftJust( string, size );
- LowLevel.Move(SYSTEM.ADR(string),SYSTEM.ADR(ImagePtr^.text),
- size);
- (* if *) |
- 'N' :
- ModBase3.GetField( DBF, i, string );
- size := M2Strings.Length( ImagePtr^.text );
- StrEdit.RightJustify( string, size );
- LowLevel.Move(SYSTEM.ADR(string),SYSTEM.ADR(ImagePtr^.text),
- size);
- (* if *) |
- 'D' :
- (* should add code to initalize date paramaters in
- fieldptr *)
- DBFields.GetDateField( DBF, i, date );
- DateFunctions.DateToStr( date, string, ok );
- IF NOT ok THEN
- string:='';
- END (* if ok *);
- size := M2Strings.Length( ImagePtr^.text );
- LeftJust( string, size );
- LowLevel.Move(SYSTEM.ADR(string),SYSTEM.ADR(ImagePtr^.text),
- size);
- (* if *) |
- 'L' :
- DBFields.GetLogicalField( DBF, i, FieldPtr^.selected );
- IF (FieldPtr^.typ = FieldTypes.TypeCode('BOOLEAN') ) THEN
- IF FieldPtr^.selected THEN
- (* if boolean code mark *)
- ImagePtr^.text[0]:=CHR(251);(* û *)
- ELSE
- ImagePtr^.text[0]:=' ';
- END;
- END; |
- 'M' :
- IF FieldPtr^.typ = FieldTypes.TypeCode( 'EDITOR' ) THEN
- NEW( text );
- (* LowLevel.Fill( text, HIGH( text^ )+1, 0 );*)
- (* to clear block for block to list*)
- MemoFunctions.GetMemoField( DBF, i, text^ );
- GenLists.NewList(list);
- size:=M2Strings.Length( text^ );
- IF size # 0
- THEN
- (* check to see ends with crlf *)
- IF NOT ((text^[size-2]=StringIO.CrLf[0]) AND
- (text^[size-1]=StringIO.CrLf[1]))
- THEN
- StrEdit.Append(text^,StringIO.CrLf);
- INC(size,2);
- END;
- (* do this so that only enough memory is kept *)
- ALLOCATE(Block,size);
- LowLevel.Move(text,Block,size);
- GenLists.BlockToList( Block, size,
- StringIO.CrLf, StringIO.CrLf, 0,
- GenLists.StrCode, list );
- END (* if M2Strings.Length *);
- DISPOSE( text );
- ok := ScrnUtl1.ListToEdField( list, TheFrame, FieldCount );
- END (* if FieldPtr *);
- ELSE
- END (* case DBF.fieldlist^ *);
- (* case *)
- ELSIF PosUtils.Equal('@DELETED',FieldPtr^.fnam)
- THEN
- IF ModBase3.Deleted(DBF)
- THEN
- string:='DELETED'
- ELSE
- string:='';
- END;
- size := M2Strings.Length( ImagePtr^.text );
- LeftJust( string, size );
- LowLevel.Move(SYSTEM.ADR(string),SYSTEM.ADR(ImagePtr^.text),
- size);
- ELSIF PosUtils.Equal('@RECNO',FieldPtr^.fnam)
- THEN
- size := M2Strings.Length( ImagePtr^.text );
- StrConv.LongIntegerToStr(ModBase3.Record(DBF),size,string);
- LowLevel.Move(SYSTEM.ADR(string),SYSTEM.ADR(ImagePtr^.text),
- size);
- ELSIF PosUtils.Equal('@RECCOUNT',FieldPtr^.fnam)
- THEN
- size := M2Strings.Length( ImagePtr^.text );
- StrConv.LongIntegerToStr(ModBase3.NumberRecords(DBF),size,string);
- LowLevel.Move(SYSTEM.ADR(string),SYSTEM.ADR(ImagePtr^.text),
- size);
- END (* if i *);
- (* IF*)
- END (* if M2Strings.Length *);
- INC( FieldCount );
- UNTIL FieldCount > TotalFields;
- END DBFToFrame;
- BEGIN
- END Scrn2DBF.
|