| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- IMPLEMENTATION MODULE DspFiles;
- (*
- * REPERTOIRE
- * Release 1.6
- * By Charles Bradford and Cole Brecheen
- * (c) Copyright 1985-1992 PMI
- * Green Bay, Wisconsin
- * All rights reserved
- * (414) 468-6040
- *
- * $Header: D:/logfiles/mods/dspfiles.mov 1.7 10 Mar 1991 15:26:32 coleb $
- *
- *)
- (*EntryDiag:
- IMPORT Diagnostics;
- :EntryDiag*)
- IMPORT ErrorManager;
- IMPORT ErrorNames;
- IMPORT HandleIO;
- IMPORT GenLists;
- IMPORT M2Strings;
- IMPORT MsColors;
- IMPORT NdxBones;
- IMPORT NdxTypes;
- IMPORT PosUtils;
- IMPORT ScrnTypes;
- IMPORT ScrnUtl1;
- IMPORT StrEdit;
- IMPORT StringIO;
- IMPORT SYSTEM;
- IMPORT VStorage;
- IMPORT VWindows;
- VAR
- Initialized : BOOLEAN;
- PROCEDURE Init();
- BEGIN
- IF Initialized THEN
- RETURN;
- ELSE
- Initialized := TRUE;
- END;
- (*EntryDiag:
- Diagnostics.Init();
- :EntryDiag*)
- ErrorManager.Init();
- ErrorNames.Init();
- HandleIO.Init();
- GenLists.Init();
- M2Strings.Init();
- MsColors.Init();
- NdxTypes.Init();
- NdxBones.Init();
- PosUtils.Init();
- ScrnTypes.Init();
- ScrnUtl1.Init();
- StrEdit.Init();
- StringIO.Init();
- VStorage.Init();
- VWindows.Init();
- (*EntryDiag:
- Diagnostics.diagS( 'Entering DspFiles', '' );
- :EntryDiag*)
- MainFrame := NIL;
- (*EntryDiag:
- Diagnostics.diagS( 'Exiting DspFiles', '' );
- :EntryDiag*)
- END Init;
- PROCEDURE ReMapCol( TheFrame: ScrnTypes.DisplayFrame;
- DspFileCol: CARDINAL ): CARDINAL;
- VAR
- diff: CARDINAL;
- BEGIN
- IF DspFileCol > VWindows.EndCol(TheFrame^.WindowHandle) THEN
- IF DspFileCol <= 128 THEN
- RETURN VWindows.EndCol(TheFrame^.WindowHandle) - 1;
- ELSIF DspFileCol <= 256 THEN
- diff := 256 - DspFileCol;
- IF diff <= VWindows.EndCol(TheFrame^.WindowHandle) THEN
- RETURN VWindows.EndCol(TheFrame^.WindowHandle) - diff - 1;
- END;
- END;
- ErrorNames.WarningName( 'InvCrd' );
- END;
- RETURN DspFileCol;
- END ReMapCol;
- PROCEDURE ReMapRow( TheFrame: ScrnTypes.DisplayFrame;
- DspFileRow: CARDINAL ): CARDINAL;
- VAR
- diff: CARDINAL;
- BEGIN
- IF DspFileRow > VWindows.EndRow(TheFrame^.WindowHandle) THEN
- IF DspFileRow <= 128 THEN
- (* Some sort of mistake. Force it into acceptable range. *)
- RETURN VWindows.EndRow(TheFrame^.WindowHandle) - 1;
- ELSIF DspFileRow <= 256 THEN
- (* They're trying to tell us to use EndRow, whatever it
- happens to be. *)
- diff := 256 - DspFileRow;
- IF diff <= VWindows.EndRow(TheFrame^.WindowHandle) THEN
- RETURN VWindows.EndRow(TheFrame^.WindowHandle) - diff - 1;
- END;
- END;
- ErrorNames.WarningName( 'InvCrd' );
- END;
- RETURN DspFileRow;
- END ReMapRow;
- PROCEDURE OpenDisplayFile(VAR TheDspFile : ScrnTypes.DisplayFile;
- fname : ARRAY OF CHAR): BOOLEAN;
- VAR
- tmpstr: ScrnTypes.AFrameName;
- RightVersion : BOOLEAN;
- TypeCode: CARDINAL;
- BEGIN (*OpenDisplayFile*)
- IF (MainFrame = NIL) THEN
- ScrnTypes.InitDisplayFrame( MainFrame, VWindows.CurrentWindow );
- END;
- (* find and open the file if it exists *)
- IF NOT NdxBones.OpenNdxFile( TheDspFile, fname ) THEN
- RETURN FALSE;
- END;
- IF NdxBones.InitBuffer( TheDspFile, 'RepVers' ) THEN
- GenLists.GetElmt( TheDspFile^.ListBuf, 1, tmpstr, TypeCode );
- IF PosUtils.Equal( '1.5c', tmpstr ) THEN
- RightVersion := TRUE;
- ELSE
- RightVersion := FALSE;
- END;
- ELSE
- RightVersion := FALSE;
- END;
- IF NOT RightVersion THEN
- ErrorNames.WarningName( 'RecompileDsp' );
- END;
- IF (MainFrame^.FromFile = NIL) THEN
- MainFrame^.FromFile := TheDspFile;
- END;
- RETURN TRUE;
- END OpenDisplayFile;
- PROCEDURE CloseDisplayFile(VAR TheDspFile : ScrnTypes.DisplayFile);
- BEGIN
- IF TheDspFile # NIL THEN
- WITH TheDspFile^ DO
- (*Note that we don't call CloseNdxFile here because it
- pulls in code that updates the file's ndx if it's been
- changed. Since we don't write to NdxFile's in the
- basic screen system, we can avoid linking all that code
- in by doing a few extra deallocations here.*)
- GenLists.DisposeList( ListBuf);
- GenLists.DisposeList( StructLst);
- GenLists.DisposeList( Ndx );
- GenLists.DisposeList( AltKeys );
- (*Note that we don't dispose of the FileBufPtr because
- it should always have been absorbed into the ListBuf.*)
- IF handle # 0 THEN
- (*handle may be 0 if the NdxFile record was initialized
- but never passed to OpenNdxFile.*)
- StringIO.PrintMessage( HandleIO.CloseHandle( handle) );
- END;
- END;
- VStorage.DosDealloc( TheDspFile, SYSTEM.TSIZE(NdxTypes.NdxRecord) );
- END;
- END CloseDisplayFile;
- PROCEDURE UnPackFrame( PackedRec: ScrnTypes.PackedFrame; VAR FrameRec:
- ScrnTypes.DisplayFrame);
- BEGIN
- WITH FrameRec^ DO
- (*
- PushedFrame := NIL;
- DO NOT set PushedFrame to NIL because we have to preserve
- FrameRec's linked to any frames that may be pushed underneath
- it.
- *)
- CurrentField := 1;
- RowsScrolled := 0;
- ColsScrolled := 0;
- FrameChanged := FALSE;
- ClearFirst := PackedRec^.ClearFirst;
- ClearAfter := PackedRec^.ClearAfter;
- EntryBox := PackedRec^.EntryBox;
- ExitBox := PackedRec^.ExitBox;
- M2Strings.Assign( PackedRec^.Caption, Caption );
- VirtualWidth := PackedRec^.VirtualWidth;
- VirtualHeight := PackedRec^.VirtualHeight;
- headline := PackedRec^.headline;
- startcol := PackedRec^.startcol;
- endcol := ReMapCol( FrameRec, PackedRec^.endcol );
- startrow := PackedRec^.startrow;
- endrow := ReMapRow( FrameRec, PackedRec^.endrow );
- action := PackedRec^.action;
- pbfor := PackedRec^.pbfor;
- pbbak := PackedRec^.pbbak;
- selfor := PackedRec^.selfor;
- selbak := PackedRec^.selbak;
- normfor := PackedRec^.normfor;
- normbak := PackedRec^.normbak;
- bordfor := PackedRec^.bordfor;
- bordbak := PackedRec^.bordbak;
- msgfor := PackedRec^.msgfor;
- msgbak := PackedRec^.msgbak;
- promfor := PackedRec^.promfor;
- prombak := PackedRec^.prombak;
- pbatrb := PackedRec^.pbatrb;
- selatrb := PackedRec^.selatrb;
- normatrb := PackedRec^.normatrb;
- bordatrb := PackedRec^.bordatrb;
- msgatrb := PackedRec^.msgatrb;
- promatrb := PackedRec^.promatrb;
- END;
- END UnPackFrame;
- PROCEDURE GetFrameFromList( TheList: GenLists.GenList;
- VAR FrameRec: ScrnTypes.DisplayFrame );
- VAR
- TypeCode, size: CARDINAL;
- PackedRec: ScrnTypes.PackedFrame;
- BEGIN
- FrameRec^.self := TheList;
- GenLists.GetElmt( FrameRec^.self, 1, FrameRec^.HelpFrame, TypeCode );
- GenLists.GetElmt( FrameRec^.self, 2, FrameRec^.parent, TypeCode );
- GenLists.GetElmt( FrameRec^.self, 3, FrameRec^.normlnext, TypeCode );
- GenLists.GetElmtAdr( FrameRec^.self, 4, PackedRec, size, TypeCode );
- UnPackFrame( PackedRec, FrameRec);
- ScrnUtl1.GetFrameLists( FrameRec );
- END GetFrameFromList;
- PROCEDURE InitEdFields( VAR TheFrame: ScrnTypes.DisplayFrame );
- VAR
- ListEnd, cnt: CARDINAL;
- TmpList1, TmpList2: GenLists.GenList;
- BEGIN
- IF NOT GenLists.Initialized( TheFrame^.FieldList ) THEN
- RETURN;
- END;
- ListEnd := GenLists.ListLength( TheFrame^.FieldList );
- FOR cnt := 1 TO ListEnd DO
- IF ScrnUtl1.FieldType( TheFrame, cnt ) = ScrnTypes.EditorCode THEN
- IF ScrnUtl1.GetFieldDataList( TheFrame, cnt, TmpList1 ) THEN
- GenLists.CopyList( TmpList1, TmpList2 );
- IF NOT ScrnUtl1.ListToEdField( TmpList2, TheFrame, cnt ) THEN
- (* no response *)
- END;
- END;
- END;
- END;
- END InitEdFields;
- PROCEDURE ReadFrame(VAR TheDspFile: ScrnTypes.DisplayFile;
- VAR FrameRec: ScrnTypes.DisplayFrame; FrameName: ARRAY OF
- CHAR );
- (* Reads screen FrameName from TheDspFile, into frame record
- FrameRec. Differs from ReadFrameFast in that it
- disconnects FrameRec's lists from TheDspFile, so they will not
- be disposed of the next time something is read from
- TheDspFile. They will be disposed of the next time we call
- ReadFrame, or when the frame is closed. Safer, but a
- little slower, than ReadFrameFast.*)
- VAR
- TmpMsg: ARRAY [0..79] OF CHAR;
- BEGIN
- (* ReadFrame *)
- IF (TheDspFile = NIL) OR
- (TheDspFile^.InitCheck # 46102) THEN
- (* Temporary measure -- NdxTypes needs to export a version of
- CheckInit that returns a boolean so we don't have to know
- what the private InitKey value is. *)
- ErrorManager.WARN( "Attempt to use unopened .DSP file" );
- END;
- StrEdit.SetLength( TheDspFile^.BufRecName, 0 );
- IF NOT NdxBones.InitBuffer( TheDspFile, FrameName ) THEN
- StrEdit.AssignStr( 'Unable to load frame ', TmpMsg );
- StrEdit.Append( TmpMsg, FrameName );
- StrEdit.Append( TmpMsg, ' from file ' );
- StrEdit.Append( TmpMsg, TheDspFile^.name );
- ErrorManager.WARN( TmpMsg );
- END;
- M2Strings.Assign( FrameName, FrameRec^.ThisFrame );
- IF NOT FrameRec^.SelfSharedWithFile THEN
- GenLists.DisposeList( FrameRec^.self );
- ELSE
- GenLists.NilList( FrameRec^.self );
- (* Useless, but it gives us something to look for in
- the RTD. *)
- END;
- GenLists.CopyList( TheDspFile^.ListBuf, FrameRec^.self );
- GetFrameFromList( FrameRec^.self, FrameRec );
- FrameRec^.FromFile := TheDspFile;
- FrameRec^.SelfSharedWithFile := FALSE;
- InitEdFields( FrameRec );
- END ReadFrame;
- PROCEDURE ReadDisplayFrame(VAR TheDspFile: ScrnTypes.DisplayFile;
- VAR FrameRec: ScrnTypes.DisplayFrame; FrameName: ARRAY OF
- CHAR );
- BEGIN
- ReadFrame( TheDspFile, FrameRec, FrameName );
- END ReadDisplayFrame;
- PROCEDURE ReadFrameFast(VAR TheDspFile: ScrnTypes.DisplayFile;
- VAR FrameRec: ScrnTypes.DisplayFrame; FrameName: ARRAY OF
- CHAR );
- (* Reads screen FrameName from TheDspFile, into frame record
- FrameRec.*)
- VAR
- TmpMsg: ARRAY [0..79] OF CHAR;
- BEGIN
- (* ReadFrameFast *)
- IF (TheDspFile = NIL) OR
- (TheDspFile^.InitCheck # 46102) THEN
- (* Temporary measure -- NdxTypes needs to export a version of
- CheckInit that returns a boolean so we don't have to know
- what the private InitKey value is. *)
- ErrorManager.WARN( "Attempt to use unopened .DSP file" );
- END;
- StrEdit.SetLength( TheDspFile^.BufRecName, 0 );
- (*Makes sure repeated reads of same frame dispose of old
- frame each time.*)
- IF NOT NdxBones.InitBuffer( TheDspFile, FrameName ) THEN
- StrEdit.AssignStr( 'Unable to load frame ', TmpMsg );
- StrEdit.Append( TmpMsg, FrameName );
- StrEdit.Append( TmpMsg, ' from file ' );
- StrEdit.Append( TmpMsg, TheDspFile^.name );
- ErrorManager.WARN( TmpMsg );
- END;
- M2Strings.Assign( FrameName, FrameRec^.ThisFrame );
- IF NOT FrameRec^.SelfSharedWithFile THEN
- GenLists.DisposeList( FrameRec^.self );
- END;
- GetFrameFromList( TheDspFile^.ListBuf, FrameRec );
- FrameRec^.FromFile := TheDspFile;
- FrameRec^.SelfSharedWithFile := TRUE;
- END ReadFrameFast;
- BEGIN
- Initialized := FALSE;
- Init();
- END DspFiles.
|