| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795 |
- IMPLEMENTATION MODULE ControlUtils;
- (*
- * 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/controlu.mov 1.5 10 Mar 1991 15:25:34 coleb $
- *
- *)
- IMPORT DspFiles;
- IMPORT ErrorManager;
- IMPORT ErrorNames;
- IMPORT FrameManager;
- IMPORT FramePainter;
- IMPORT GenLists;
- IMPORT InputManager;
- IMPORT LowLevel;
- IMPORT M2Strings;
- IMPORT MsColors;
- IMPORT NdxBones;
- IMPORT Numbers;
- IMPORT PosUtils;
- IMPORT Rectangles;
- IMPORT ScrnTypes;
- IMPORT ScrnUtl1;
- IMPORT ScrnUtl2;
- IMPORT StrConv;
- IMPORT StrEdit;
- IMPORT SYSTEM;
- IMPORT VEditor;
- IMPORT VWindows;
- VAR
- Initialized : BOOLEAN;
- PROCEDURE Init();
- BEGIN
- IF Initialized THEN
- RETURN;
- ELSE
- Initialized := TRUE;
- END;
- DspFiles.Init();
- ErrorManager.Init();
- ErrorNames.Init();
- FrameManager.Init();
- FramePainter.Init();
- GenLists.Init();
- InputManager.Init();
- LowLevel.Init();
- M2Strings.Init();
- MsColors.Init();
- NdxBones.Init();
- Numbers.Init();
- PosUtils.Init();
- Rectangles.Init();
- ScrnTypes.Init();
- ScrnUtl1.Init();
- ScrnUtl2.Init();
- StrConv.Init();
- StrEdit.Init();
- VEditor.Init();
- VWindows.Init();
- END Init;
- CONST
- AfterLastElmt = 65535;
- PROCEDURE NotFieldWarning( FieldName, FrameName: ARRAY OF CHAR );
- VAR
- dumstr1: ARRAY [0..79] OF CHAR;
- BEGIN
- StrEdit.AssignStr( ' is not a field in frame ', dumstr1 );
- M2Strings.Insert( FieldName, dumstr1, 0 );
- StrEdit.Append( dumstr1, FrameName );
- ErrorManager.WARN( dumstr1 );
- END NotFieldWarning;
- PROCEDURE AddEditorField(VAR TheFrame : ScrnTypes.DisplayFrame;
- VAR TheList: GenLists.GenList; VAR ControlRec:
- VEditor.AnEdControlRec );
- VAR
- ImageNum: CARDINAL;
- TmpRec: ScrnTypes.ImageElement;
- FieldRec: ScrnTypes.InputFieldRecord;
- dumstr : ARRAY [0..1] OF CHAR;
- AreaInBox : Rectangles.ARectangle;
- BEGIN
- ControlRec.FrameRec := TheFrame;
- IF NOT GenLists.Initialized( TheFrame^.FieldList ) THEN
- GenLists.NewList( TheFrame^.FieldList );
- ScrnUtl1.PutFrameLists( TheFrame );
- (*Make sure the new FieldList gets inserted into
- TheFrame's .self list. *)
- END;
- IF NOT GenLists.Initialized( TheFrame^.EdFieldList ) THEN
- GenLists.NewList( TheFrame^.EdFieldList );
- ScrnUtl1.PutFrameLists( TheFrame );
- (*Make sure the new EdFieldList gets inserted into
- TheFrame's .self list. *)
- END;
- dumstr[0] := 0C;
- dumstr[1] := 0C;
- Rectangles.DefineRectangle( AreaInBox, ControlRec.Col1,
- ControlRec.Row1, ControlRec.Col2, ControlRec.Row2 );
- IF ControlRec.EntryBox > 0 THEN
- Rectangles.ShrinkRect( AreaInBox );
- END;
- ScrnUtl2.CreateImageElement( TmpRec, AreaInBox.col1,
- AreaInBox.row1, TheFrame^.normfor, TheFrame^.normbak,
- TheFrame^.normatrb, GenLists.ListLength(
- TheFrame^.FieldList ) + 1, dumstr );
- ScrnUtl2.AddImageElement( TheFrame, TmpRec, ImageNum );
- ScrnTypes.InitField( FieldRec );
- FieldRec.ImageNum := ImageNum;
- FieldRec.typ := ScrnTypes.EditorCode;
- FieldRec.req := FALSE;
- FieldRec.EdFieldNum := GenLists.ListLength( TheFrame^.EdFieldList ) + 1;
- GenLists.ListInsert( TheList, GenLists.ListCode, TheFrame^.EdFieldList,
- FieldRec.EdFieldNum );
- FieldRec.Col2 := AreaInBox.col2;
- FieldRec.Row2 := AreaInBox.row2;
- FieldRec.TextRow1 := ControlRec.TextRow1;
- FieldRec.CursorCol := ControlRec.CursorCol;
- FieldRec.CursorRow := ControlRec.CursorRow;
- FieldRec.MaxLines := ControlRec.MaxLines;
- FieldRec.ReadOnly := ControlRec.ReadOnly;
- ScrnUtl1.PutFieldRec( FieldRec, TheFrame, AfterLastElmt );
- IF TheFrame^.action = 'W' THEN
- TheFrame^.action := 'I';
- END;
- (* The action char is lower case while the frame is
- active. *)
- IF TheFrame^.action = 'w' THEN
- TheFrame^.action := 'i';
- END;
- END AddEditorField;
- PROCEDURE AddStrField(VAR TheFrame : ScrnTypes.DisplayFrame;
- Col, Row : CARDINAL; text : ARRAY OF CHAR; width: CARDINAL );
- VAR
- ImageNum: CARDINAL;
- TmpRec: ScrnTypes.ImageElement;
- FieldRec: ScrnTypes.InputFieldRecord;
- BEGIN
- IF M2Strings.Length(text) # width THEN
- StrEdit.LeftJustify( text, width );
- END;
- IF NOT GenLists.Initialized( TheFrame^.FieldList ) THEN
- GenLists.NewList( TheFrame^.FieldList );
- ScrnUtl1.PutFrameLists( TheFrame );
- (*Make sure the new FieldList gets inserted into
- TheFrame's .self list. *)
- END;
- ScrnUtl2.CreateImageElement( TmpRec, Col, Row, TheFrame^.normfor,
- TheFrame^.normbak, TheFrame^.normatrb, GenLists.ListLength(
- TheFrame^.FieldList ) + 1, text );
- ScrnUtl2.AddImageElement( TheFrame, TmpRec, ImageNum );
- ScrnTypes.InitField( FieldRec );
- FieldRec.ImageNum := ImageNum;
- FieldRec.typ := ScrnTypes.StringCode;
- FieldRec.req := FALSE;
- ScrnUtl1.PutFieldRec( FieldRec, TheFrame, AfterLastElmt );
- IF TheFrame^.action = 'W' THEN
- TheFrame^.action := 'I';
- END;
- (* The action char is lower case while the frame is
- active. *)
- IF TheFrame^.action = 'w' THEN
- TheFrame^.action := 'i';
- END;
- END AddStrField;
- PROCEDURE AddMenuItem( VAR TheFrame : ScrnTypes.DisplayFrame;
- Col, Row : CARDINAL; text : ARRAY OF CHAR; width, MenuKey: CARDINAL;
- ReturnVal : ARRAY OF CHAR );
- VAR
- FieldRec: ScrnTypes.InputFieldRecord;
- BEGIN
- AddStrField( TheFrame, Col, Row, text, width );
- ScrnUtl1.GetFieldRec( TheFrame, ScrnUtl1.FieldListTotal(TheFrame),
- FieldRec );
- FieldRec.typ := ScrnTypes.GotoCode;
- FieldRec.MenuKey := MenuKey;
- M2Strings.Assign( ReturnVal, FieldRec.ReturnVal );
- ScrnUtl1.PutFieldRec( FieldRec, TheFrame,
- ScrnUtl1.FieldListTotal(TheFrame) );
- IF TheFrame^.action = 'W' THEN
- TheFrame^.action := 'I';
- END;
- (* The action char is lower case while the frame is
- active. *)
- IF TheFrame^.action = 'w' THEN
- TheFrame^.action := 'i';
- END;
- END AddMenuItem;
- PROCEDURE ListBox( TheDspFile: ScrnTypes.DisplayFile;
- FormFrameName: ARRAY OF CHAR; TheList: GenLists.GenList;
- VAR ItemChosen: ARRAY OF CHAR; VAR NextFrame:
- ScrnTypes.AFrameName ): BOOLEAN;
- VAR
- TmpFrame: ScrnTypes.DisplayFrame;
- AnItemWasChosen: BOOLEAN;
- BEGIN
- ScrnTypes.InitDisplayFrame( TmpFrame, VWindows.CurrentWindow );
- DspFiles.ReadFrame( TheDspFile, TmpFrame, FormFrameName );
- ScrnUtl2.ChoiceListToFrame( TheList, TmpFrame );
- FramePainter.ShowDisplayFrame( TmpFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TmpFrame, 0, '', FALSE, NextFrame );
- AnItemWasChosen := (NextFrame[0] = 0C);
- (* Dangerous. We are relying here on knowlegde that
- ChoiceListToFrame makes '' the return value for each
- choice. *)
- ScrnUtl1.GetFieldText( TmpFrame,
- TmpFrame^.CurrentField, ItemChosen );
- ScrnUtl2.CloseDisplayFrame( TmpFrame );
- RETURN AnItemWasChosen;
- END ListBox;
- PROCEDURE ChangeField(VAR TheFrame : ScrnTypes.DisplayFrame;
- TheStr : ARRAY OF CHAR; FieldName : ARRAY OF
- CHAR; PreserveLength: BOOLEAN);
- VAR
- padding: ARRAY [0..79] OF CHAR;
- OldLngth, NewLngth: CARDINAL;
- FieldPtr : ScrnTypes.InputFieldPtr;
- ImageRec: ScrnTypes.ImageElement;
- BEGIN
- IF NOT ScrnUtl1.FindField( TheFrame, FieldName,
- FieldPtr, ImageRec ) THEN
- NotFieldWarning( FieldName, TheFrame^.ThisFrame );
- END;
- FieldPtr^.ChangeMade := TRUE;
- IF PreserveLength THEN
- LowLevel.Fill( SYSTEM.ADR(padding), HIGH(padding) + 1, ' ' );
- OldLngth := M2Strings.Length( ImageRec.text );
- NewLngth := M2Strings.Length( TheStr );
- M2Strings.Assign(TheStr, ImageRec.text );
- IF OldLngth > NewLngth THEN
- StrEdit.SetLength( padding, OldLngth - NewLngth );
- StrEdit.Append( ImageRec.text, padding );
- ELSE
- StrEdit.SetLength( ImageRec.text, OldLngth );
- END;
- ELSE
- M2Strings.Assign(TheStr, ImageRec.text);
- END;
- ScrnUtl1.PutFieldImageRec( ImageRec, TheFrame, ImageRec.field );
- END ChangeField;
- PROCEDURE CheckFieldName( TheFrame: ScrnTypes.DisplayFrame; FieldName:
- ARRAY OF CHAR );
- (*Displays a warning message if it can't find FieldName in TheFrame.*)
- VAR
- FieldPtr: ScrnTypes.InputFieldPtr;
- ImageRec: ScrnTypes.ImageElement;
- BEGIN
- IF NOT ScrnUtl1.FindField( TheFrame, FieldName, FieldPtr, ImageRec ) THEN
- NotFieldWarning( FieldName, TheFrame^.ThisFrame );
- END;
- END CheckFieldName;
- PROCEDURE Control( TheFrame: ScrnTypes.DisplayFrame );
- VAR
- FrameName : ScrnTypes.AFrameName;
- (*This gets thrown away.*)
- BEGIN
- InputManager.ControlFrame( TheFrame, 0, '', FALSE, FrameName );
- END Control;
- PROCEDURE FrameListSpot( FrameName: ARRAY OF CHAR;
- FrameList: GenLists.GenList ): CARDINAL;
- VAR
- TypeCode, cnt, ListEnd: CARDINAL;
- TmpFrame: ScrnTypes.DisplayFrameRec;
- BEGIN
- cnt := 1;
- ListEnd := GenLists.ListLength( FrameList );
- WHILE cnt < ListEnd DO
- GenLists.GetElmt( FrameList, cnt, TmpFrame, TypeCode );
- IF PosUtils.Equal( TmpFrame.ThisFrame, FrameName ) THEN
- RETURN cnt;
- END;
- cnt := cnt + 2;
- END;
- RETURN 0;
- END FrameListSpot;
- PROCEDURE AddToFrameList( TheFrame: ScrnTypes.DisplayFrame;
- VAR FrameList: GenLists.GenList );
- VAR
- TmpList: GenLists.GenList;
- spot: CARDINAL;
- SavedFlag : BOOLEAN;
- BEGIN
- spot := FrameListSpot( TheFrame^.ThisFrame, FrameList );
- IF spot > 0 THEN
- (*A frame of this name is already in the FrameList. We can't just
- delete it and add the new copy because they probably share lists;
- look at how GetFrameFromList gives the gotten frame pointers
- directly into its own sublists.*)
- RETURN;
- END;
- TheFrame^.CurrentField := 1;
- SavedFlag := TheFrame^.SelfSharedWithFile;
- (* Added this SavedFlag thing on 2 Nov 88 at suggestion
- of John McMonagle to prevent memory loss problems. *)
- TheFrame^.SelfSharedWithFile := TRUE;
- (* We're using this to prevent ReadFrame from
- disposing of the .self list next time. *)
- GenLists.ListInsert( TheFrame^, 0, FrameList, AfterLastElmt );
- TheFrame^.SelfSharedWithFile := SavedFlag;
- GenLists.CopyList( TheFrame^.self, TmpList );
- (*We copy the self list so it won't go away when the
- ListBuf changes.*)
- GenLists.ListInsert( TmpList, GenLists.ListCode,
- FrameList, AfterLastElmt );
- END AddToFrameList;
- PROCEDURE DisposeFrameList( VAR FrameList: GenLists.GenList );
- VAR
- ListEnd, cnt, dumc, TypeCode: CARDINAL;
- TmpFrame: ScrnTypes.DisplayFrame;
- BEGIN
- ListEnd := GenLists.ListLength( FrameList );
- cnt := 1;
- WHILE cnt < ListEnd DO
- GenLists.GetElmtAdr( FrameList, cnt, TmpFrame, dumc, TypeCode );
- FrameManager.FrameDeactivated( TmpFrame );
- cnt := cnt + 2;
- END;
- GenLists.DisposeList( FrameList );
- END DisposeFrameList;
- PROCEDURE DeleteFrom( VAR TheFrame: ScrnTypes.DisplayFrame;
- VAR FrameList: GenLists.GenList );
- VAR
- TmpList: GenLists.GenList;
- spot: CARDINAL;
- BEGIN
- spot := FrameListSpot( TheFrame^.ThisFrame, FrameList );
- IF spot > 0 THEN
- GenLists.GetChildList( FrameList, spot + 1, TmpList );
- IF GenLists.SameList( TmpList, TheFrame^.self ) THEN
- (*We're going to confuse the hell out of the programmer
- who deletes a frame from a FrameList after retrieving it
- but before using it. We leave some tracks to make it
- easier to find the problem.*)
- StrEdit.AssignStr( 'DeleteFrom', TheFrame^.ThisFrame );
- GenLists.NilList( TheFrame^.self );
- GenLists.NilList( TheFrame^.ImageList );
- GenLists.NilList( TheFrame^.FieldList );
- END;
- GenLists.ListDelete( FrameList, spot, 2 );
- END;
- END DeleteFrom;
- PROCEDURE PointFrameAtList( FrameList: GenLists.GenList;
- FrameName: ARRAY OF CHAR; VAR TheFrame:
- ScrnTypes.DisplayFrame ): BOOLEAN;
- (* The difference between this and GetFrameFromList is that
- PointFrameAtList forces TheFrame to point at the DisplayFrameRec
- which is stored in the list; GetFrameFromList copies the
- DisplayFrameRec out into whatever TheFrame happens to be
- pointing at. *)
- VAR
- dumc, spot, TypeCode: CARDINAL;
- BEGIN
- spot := FrameListSpot( FrameName, FrameList );
- IF spot = 0 THEN
- RETURN FALSE;
- END;
- GenLists.GetElmtAdr( FrameList, spot, TheFrame, dumc, TypeCode );
- GenLists.GetChildList( FrameList, spot + 1, TheFrame^.self );
- ScrnUtl1.GetFrameLists( TheFrame );
- TheFrame^.CurrentField := GenLists.ElmtNow(TheFrame^.FieldList);
- (*ElmtNow returns 0 if the list is NIL.*)
- RETURN TRUE;
- END PointFrameAtList;
- PROCEDURE GetFrameFromList( FrameList: GenLists.GenList;
- FrameName: ARRAY OF CHAR; VAR TheFrame:
- ScrnTypes.DisplayFrame ): BOOLEAN;
- VAR
- spot, TypeCode: CARDINAL;
- BEGIN
- spot := FrameListSpot( FrameName, FrameList );
- IF spot = 0 THEN
- RETURN FALSE;
- END;
- IF GenLists.SameList( TheFrame^.self,
- TheFrame^.FromFile^.ListBuf ) THEN
- (*Make sure the NdxFile system doesn't think it is still
- managing this frame.*)
- GenLists.DisposeList( TheFrame^.FromFile^.ListBuf );
- TheFrame^.FromFile^.BufRecName[0] := 0C;
- END;
- (*Note that we don't dispose of TheFrame's self list if
- it's not part of the list buffer because it may be part
- of the FrameList. Means someone else has to be in charge
- of disposing of the self list if it was created by CopyList.*)
- GenLists.GetElmt( FrameList, spot, TheFrame^, TypeCode );
- GenLists.GetChildList( FrameList, spot + 1, TheFrame^.self );
- ScrnUtl1.GetFrameLists( TheFrame );
- TheFrame^.CurrentField := GenLists.ElmtNow(TheFrame^.FieldList);
- (*ElmtNow returns 0 if the list is NIL.*)
- RETURN TRUE;
- END GetFrameFromList;
- PROCEDURE LoadFrameList( dfile: ScrnTypes.DisplayFile;
- StartFrame: ARRAY OF CHAR; VAR FrameList: GenLists.GenList );
- VAR
- TmpFrame: ScrnTypes.DisplayFrame;
- FrameAbove, FrameBelow, FrameRight, FrameLeft: ScrnTypes.AFrameName;
- BEGIN
- IF NOT FrameExists( dfile, StartFrame ) THEN
- RETURN;
- END;
- IF FrameListSpot( StartFrame, FrameList ) > 0 THEN
- (*StartFrame is already in FrameList *)
- RETURN;
- END;
- ScrnTypes.InitDisplayFrame( TmpFrame, VWindows.CurrentWindow );
- DspFiles.ReadFrameFast( dfile, TmpFrame, StartFrame );
- (* It's okay here to use ReadFrameFast, which does not
- copy the file's listbuf, because AddToFrameList is
- about to make a copy anyway. *)
- AddToFrameList( TmpFrame, FrameList );
- ScrnUtl1.GetFrameLinks( TmpFrame, FrameAbove, FrameBelow,
- FrameLeft, FrameRight );
- ScrnUtl2.CloseDisplayFrame( TmpFrame );
- IF FrameAbove[0] # 0C THEN
- LoadFrameList( dfile, FrameAbove, FrameList );
- END;
- IF FrameBelow[0] # 0C THEN
- LoadFrameList( dfile, FrameBelow, FrameList );
- END;
- IF FrameLeft[0] # 0C THEN
- LoadFrameList( dfile, FrameLeft, FrameList );
- END;
- IF FrameRight[0] # 0C THEN
- LoadFrameList( dfile, FrameRight, FrameList );
- END;
- END LoadFrameList;
- PROCEDURE ControlSeparately( FrameList: GenLists.GenList;
- VAR NextFrame: ScrnTypes.AFrameName; VAR SelectedChar:
- CHAR; VAR EndingFrame: ScrnTypes.AFrameName );
- VAR
- FrameAbove, FrameBelow, FrameRight, FrameLeft: ScrnTypes.AFrameName;
- TmpFrame: ScrnTypes.DisplayFrame;
- BEGIN
- (* Notice that we don't initialize TmpFrame because we are
- forcing it to point into the FrameList. *)
- LOOP
- IF NOT PointFrameAtList( FrameList, NextFrame, TmpFrame ) THEN
- EXIT;
- END;
- M2Strings.Assign( NextFrame, EndingFrame );
- ScrnUtl1.GetFrameLinks( TmpFrame, FrameAbove, FrameBelow,
- FrameLeft, FrameRight );
- FramePainter.ShowDisplayFrame( TmpFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TmpFrame, TmpFrame^.CurrentField, '',
- FALSE, NextFrame );
- SelectedChar := ScrnUtl1.SelectedChar( TmpFrame );
- END;
- END ControlSeparately;
- PROCEDURE ControlFrameList( FrameList: GenLists.GenList;
- TheFrame: ScrnTypes.DisplayFrame; VAR NextFrame:
- ScrnTypes.AFrameName; VAR SelectedChar: CHAR; VAR
- EndingFrame: ScrnTypes.AFrameName );
- VAR
- FrameAbove, FrameBelow, FrameRight, FrameLeft: ScrnTypes.AFrameName;
- BEGIN
- LOOP
- IF NOT GetFrameFromList( FrameList, NextFrame, TheFrame ) THEN
- EXIT;
- END;
- M2Strings.Assign( NextFrame, EndingFrame );
- ScrnUtl1.GetFrameLinks( TheFrame, FrameAbove, FrameBelow,
- FrameLeft, FrameRight );
- FramePainter.ShowDisplayFrame( TheFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TheFrame, TheFrame^.CurrentField, '',
- FALSE, NextFrame );
- SelectedChar := ScrnUtl1.SelectedChar( TheFrame );
- END;
- END ControlFrameList;
- PROCEDURE ControlFrameGroup( TheFrame: ScrnTypes.DisplayFrame;
- VAR NextFrame: ScrnTypes.AFrameName; VAR SelectedChar: CHAR;
- VAR EndingFrame: ScrnTypes.AFrameName );
- VAR
- FrameList : GenLists.GenList;
- BEGIN
- GenLists.NewList( FrameList );
- LoadFrameList( TheFrame^.FromFile, NextFrame, FrameList );
- ControlFrameList( FrameList, TheFrame, NextFrame, SelectedChar,
- EndingFrame );
- DisposeFrameList( FrameList );
- END ControlFrameGroup;
- PROCEDURE FrameExists( TheScreenFile: ScrnTypes.DisplayFile;
- FrameName: ARRAY OF CHAR ): BOOLEAN;
- VAR
- duml: LONGINT;
- dumc: CARDINAL;
- BEGIN
- StrEdit.CrunchBlanks( FrameName );
- RETURN NdxBones.FindRecord( TheScreenFile, FrameName, duml,
- dumc, dumc );
- END FrameExists;
- PROCEDURE FrameSequence( TheFrame: ScrnTypes.DisplayFrame;
- VAR StartFrame: ScrnTypes.AFrameName );
- BEGIN
- ScrnUtl2.PushFrame( TheFrame );
- FrameSeqReturn( TheFrame, StartFrame);
- ScrnUtl2.PopFrame( TheFrame );
- InputManager.ReconstructFrame( TheFrame );
- END FrameSequence;
- PROCEDURE FrameSeqReturn( TheFrame : ScrnTypes.DisplayFrame;
- VAR StartFrame : ScrnTypes.AFrameName );
- VAR
- CheckFrame: ScrnTypes.AFrameName;
- SavedHeight: CARDINAL;
- BEGIN
- IF NOT FrameExists( TheFrame^.FromFile, StartFrame ) THEN
- RETURN;
- END;
- SavedHeight := VWindows.GetCursorHeight( TheFrame^.WindowHandle );
- VWindows.SetCursorHeight( TheFrame^.WindowHandle, 0 );
- CheckFrame := TheFrame^.ThisFrame;
- LOOP
- DspFiles.ReadFrame( TheFrame^.FromFile, TheFrame,
- StartFrame );
- FramePainter.ShowDisplayFrame( TheFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TheFrame, 0, '', FALSE, StartFrame );
- IF PosUtils.Equal( StartFrame, ScrnTypes.ProgramExit ) THEN
- EXIT;
- END;
- IF PosUtils.Equal( StartFrame, CheckFrame ) THEN
- ErrorNames.WarningName('CircSeq');
- EXIT;
- END;
- IF NOT FrameExists( TheFrame^.FromFile, StartFrame ) THEN
- EXIT;
- END;
- END;
- VWindows.SetCursorHeight( TheFrame^.WindowHandle, SavedHeight );
- END FrameSeqReturn;
- PROCEDURE FrameSeq2( TheFile : ScrnTypes.DisplayFile;
- CheckFrame: ARRAY OF CHAR; VAR StartFrame : ARRAY OF CHAR );
- VAR
- NextFrame, DummyName: ScrnTypes.AFrameName;
- TmpFrame: ScrnTypes.DisplayFrame;
- FrameAbove, FrameBelow, FrameRight, FrameLeft: ScrnTypes.AFrameName;
- FrameList : GenLists.GenList;
- dumc: CHAR;
- BEGIN
- IF NOT FrameExists( TheFile, StartFrame ) THEN
- RETURN;
- END;
- M2Strings.Assign( StartFrame, NextFrame );
- ScrnTypes.InitDisplayFrame( TmpFrame, VWindows.CurrentWindow );
- LOOP
- DspFiles.ReadFrame( TheFile, TmpFrame, NextFrame );
- ScrnUtl1.GetFrameLinks( TmpFrame, FrameAbove, FrameBelow,
- FrameLeft, FrameRight );
- IF (FrameAbove[0] # 0C) OR (FrameBelow[0] # 0C) OR
- (FrameLeft[0] # 0C) OR (FrameRight[0] # 0C) THEN
- GenLists.NewList( FrameList );
- LoadFrameList( TheFile, NextFrame, FrameList );
- ControlSeparately( FrameList, NextFrame, dumc,
- DummyName );
- DisposeFrameList( FrameList );
- ELSE
- FramePainter.ShowDisplayFrame( TmpFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TmpFrame, 0, '', FALSE, NextFrame );
- END;
- IF PosUtils.Equal( NextFrame, ScrnTypes.ProgramExit ) THEN
- EXIT;
- END;
- IF PosUtils.Equal( NextFrame, CheckFrame ) THEN
- ErrorNames.WarningName('CircSeq');
- EXIT;
- END;
- IF NOT FrameExists( TheFile, NextFrame ) THEN
- EXIT;
- END;
- END;
- M2Strings.Assign( NextFrame, StartFrame );
- ScrnUtl2.CloseDisplayFrame( TmpFrame );
- END FrameSeq2;
- PROCEDURE FindNextField( TheFrame: ScrnTypes.DisplayFrame; typ:
- CHAR; VAR spot: CARDINAL; VAR FieldPtr:
- ScrnTypes.InputFieldPtr ): BOOLEAN;
- VAR
- found: BOOLEAN;
- ListEnd: CARDINAL;
- BEGIN
- ListEnd := ScrnUtl1.FieldListTotal( TheFrame );
- FieldPtr := NIL;
- found := FALSE;
- WHILE (spot <= ListEnd) AND (NOT found) DO
- ScrnUtl1.GetFieldPtr( TheFrame, spot, FieldPtr );
- IF (typ = 0C) OR (FieldPtr^.typ = typ) THEN
- found := TRUE;
- ELSE
- INC( spot );
- END;
- END;
- RETURN found;
- END FindNextField;
- PROCEDURE GetStrResponse( TheFile:
- ScrnTypes.DisplayFile; FrameName, Default: ARRAY
- OF CHAR; VAR TheStr: ARRAY OF CHAR ): BOOLEAN;
- VAR
- MsgFrame: ScrnTypes.DisplayFrame;
- fnum : CARDINAL;
- FieldPtr: ScrnTypes.InputFieldPtr;
- result: BOOLEAN;
- NextFrame: ScrnTypes.AFrameName;
- TmpFrame: ScrnTypes.DisplayFrame;
- BEGIN
- ScrnTypes.InitDisplayFrame( MsgFrame, VWindows.CurrentWindow );
- DspFiles.ReadFrame( TheFile, MsgFrame, FrameName );
- fnum := 1;
- IF NOT FindNextField( MsgFrame, ScrnTypes.StringCode, fnum,
- FieldPtr ) THEN
- result := FALSE;
- ELSE
- ChangeField( MsgFrame, Default, FieldPtr^.fnam, TRUE );
- FramePainter.ShowDisplayFrame( MsgFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( MsgFrame, 1, '', FALSE, NextFrame );
- IF PosUtils.Equal( MsgFrame^.parent, NextFrame ) THEN
- result := FALSE;
- ELSE
- result := TRUE;
- END;
- ReadInput( MsgFrame, TheStr, FieldPtr^.fnam );
- END;
- StrEdit.CrunchBlanks( TheStr );
- ScrnUtl2.CloseDisplayFrame( MsgFrame );
- RETURN result;
- END GetStrResponse;
- PROCEDURE ReadShowAndCntrl( TheFile: ScrnTypes.DisplayFile;
- TheFrame: ScrnTypes.DisplayFrame; VAR FrameName :
- ScrnTypes.AFrameName );
- BEGIN
- DspFiles.ReadFrame( TheFile, TheFrame, FrameName );
- FramePainter.ShowDisplayFrame( TheFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TheFrame, 1, '', FALSE, FrameName );
- END ReadShowAndCntrl;
- PROCEDURE RdShwAndCntrlConst( TheFile: ScrnTypes.DisplayFile;
- TheFrame: ScrnTypes.DisplayFrame; FrameName : ARRAY OF CHAR );
- VAR
- TmpName: ScrnTypes.AFrameName;
- BEGIN
- M2Strings.Assign( FrameName, TmpName );
- ReadShowAndCntrl( TheFile, TheFrame, TmpName );
- END RdShwAndCntrlConst;
- PROCEDURE Input( TheFrame: ScrnTypes.DisplayFrame; VAR
- FrameName : ScrnTypes.AFrameName );
- BEGIN
- DspFiles.ReadFrame( TheFrame^.FromFile, TheFrame,
- FrameName );
- FramePainter.ShowDisplayFrame( TheFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TheFrame, 1, '', FALSE, FrameName );
- END Input;
- PROCEDURE InputConst( TheFrame: ScrnTypes.DisplayFrame;
- FrameName : ARRAY OF CHAR );
- VAR
- TmpName: ScrnTypes.AFrameName;
- BEGIN
- M2Strings.Assign( FrameName, TmpName );
- DspFiles.ReadFrame( TheFrame^.FromFile, TheFrame,
- TmpName );
- FramePainter.ShowDisplayFrame( TheFrame, 0, 0, 0, 0 );
- InputManager.ControlFrame( TheFrame, 0, '', FALSE, TmpName );
- END InputConst;
- PROCEDURE ReadInput(VAR TheFrame : ScrnTypes.DisplayFrame; VAR TheStr :
- ARRAY OF CHAR; FieldName : ARRAY OF CHAR);
- VAR
- FieldPtr : ScrnTypes.InputFieldPtr;
- ImageRec: ScrnTypes.ImageElement;
- BEGIN
- IF NOT ScrnUtl1.FindField( TheFrame, FieldName, FieldPtr, ImageRec ) THEN
- NotFieldWarning( FieldName, TheFrame^.ThisFrame );
- END;
- M2Strings.Assign(ImageRec.text, TheStr);
- END ReadInput;
- PROCEDURE ReadNextField(VAR TheFrame : ScrnTypes.DisplayFrame;
- VAR TheStr : ARRAY OF CHAR; skip : CARDINAL);
- (* will skip first field if it is input field *)
- VAR
- i : CARDINAL;
- ImagePtr: ScrnTypes.ImageElmtPtr;
- BEGIN
- IF (skip + TheFrame^.CurrentField) >
- GenLists.ListLength(TheFrame^.FieldList) THEN
- ErrorNames.WarningName('EndFld');
- END;
- FOR i := 0 TO skip DO
- INC( TheFrame^.CurrentField );
- END;
- END ReadNextField;
- PROCEDURE ReadNextInput(VAR TheFrame : ScrnTypes.DisplayFrame;
- VAR TheStr : ARRAY OF CHAR; skip : CARDINAL);
- (* will skip first field if it is input field *)
- VAR
- MaxField, i : CARDINAL;
- ImagePtr: ScrnTypes.ImageElmtPtr;
- BEGIN
- (*
- This version of ReadNextInput added at suggestion of Douglas Wrege
- on 27 Dec 89 to make ReadNextInput skip Display fields, as it did
- in release 1.4. ReadNextField, above, reads every field, display
- or not.
- *)
- MaxField := GenLists.ListLength( TheFrame^.FieldList );
- FOR i := 0 TO skip DO
- IF TheFrame^.CurrentField < MaxField THEN
- INC( TheFrame^.CurrentField );
- ELSE
- ErrorNames.WarningName( 'EndFld' );
- END;
- WHILE (TheFrame^.CurrentField < MaxField) AND
- (ScrnUtl1.FieldType(TheFrame,TheFrame^.CurrentField)
- = ScrnTypes.DispCode) DO
- INC( TheFrame^.CurrentField );
- END;
- END;
- ScrnUtl1.GetFieldImagePtr( TheFrame, TheFrame^.CurrentField, ImagePtr );
- M2Strings.Assign( ImagePtr^.text, TheStr );
- END ReadNextInput;
- BEGIN
- Initialized := FALSE;
- Init();
- END ControlUtils.
|