IMPLEMENTATION MODULE ScreenInput; (* * 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/screenin.mov 1.5 10 Mar 1991 15:31:54 coleb $ * *) (* Provided only for compatibility with rel 1.4 code *) IMPORT ControlUtils; IMPORT DspFiles; IMPORT ErrorManager; IMPORT FramePainter; IMPORT GenLists; IMPORT InputManager; IMPORT M2Strings; IMPORT MsColors; IMPORT PosUtils; IMPORT ScrnTypes; IMPORT ScrnUtl1; IMPORT ScrnUtl2; IMPORT SmartScreen; IMPORT StrConv; IMPORT StrEdit; IMPORT VWindows; IMPORT WindowPrims; VAR Initialized : BOOLEAN; PROCEDURE Init(); BEGIN IF Initialized THEN RETURN; ELSE Initialized := TRUE; END; ControlUtils.Init(); DspFiles.Init(); ErrorManager.Init(); FramePainter.Init(); GenLists.Init(); InputManager.Init(); M2Strings.Init(); MsColors.Init(); PosUtils.Init(); ScrnTypes.Init(); ScrnUtl1.Init(); ScrnUtl2.Init(); SmartScreen.Init(); StrConv.Init(); StrEdit.Init(); VWindows.Init(); WindowPrims.Init(); END Init; CONST OldFunction = "Non-numeric frame name used with old function"; PROCEDURE WarnNotNumberedFrame( FrameName: ARRAY OF CHAR ); VAR dumstr: ARRAY [0..79] OF CHAR; BEGIN M2Strings.Assign( FrameName, dumstr ); StrEdit.Append( dumstr, ' passed to routine that expects numbered frames' ); ErrorManager.WARN( dumstr ); END WarnNotNumberedFrame; PROCEDURE ReadNextInput(VAR TheFrame : ScrnTypes.DisplayFrame; VAR thestr : ARRAY OF CHAR; VAR selected : BOOLEAN; skip : CARDINAL); VAR FieldRec: ScrnTypes.InputFieldRecord; BEGIN ControlUtils.ReadNextInput( TheFrame, thestr, skip ); IF ScrnUtl1.FieldType( TheFrame, TheFrame^.CurrentField ) = ScrnTypes.GroupMember THEN ScrnUtl1.GetFieldRec( TheFrame, TheFrame^.CurrentField, FieldRec ); selected := FieldRec.selected; ELSE selected := FALSE; END; END ReadNextInput; PROCEDURE ReadInput(VAR TheFrame : ScrnTypes.DisplayFrame; VAR thestr : ARRAY OF CHAR; VAR selected : BOOLEAN; FieldName : ARRAY OF CHAR); VAR FieldRec: ScrnTypes.InputFieldRecord; BEGIN ControlUtils.ReadInput( TheFrame, thestr, FieldName ); IF ScrnUtl1.FieldType( TheFrame, TheFrame^.CurrentField ) = ScrnTypes.GroupMember THEN ScrnUtl1.GetFieldRec( TheFrame, TheFrame^.CurrentField, FieldRec ); selected := FieldRec.selected; ELSE selected := FALSE; END; END ReadInput; PROCEDURE ChangeField(VAR TheFrame : ScrnTypes.DisplayFrame; thestr : ARRAY OF CHAR; FieldName : ARRAY OF CHAR; PreserveLength: BOOLEAN); BEGIN ControlUtils.ChangeField( TheFrame, thestr, FieldName, PreserveLength ); END ChangeField; PROCEDURE ListToEdField( TheList: GenLists.GenList; TheFrame: ScrnTypes.DisplayFrame; TheField: CARDINAL ): BOOLEAN; BEGIN RETURN ScrnUtl1.ListToEdField( TheList, TheFrame, TheField ); END ListToEdField; PROCEDURE ListFromEdField( TheFrame: ScrnTypes.DisplayFrame; TheField: CARDINAL; VAR TheList: GenLists.GenList ): BOOLEAN; BEGIN RETURN ScrnUtl1.ListFromEdField( TheFrame, TheField, TheList ); END ListFromEdField; PROCEDURE AddToMenu(VAR TheFrame : ScrnTypes.DisplayFrame; ScrCol, ScrRow : CARDINAL; ScrText : ARRAY OF CHAR; FieldType : CHAR; foreground, background: MsColors.AColor; MonoAttribute: MsColors.AMonoAttribute ); VAR FieldRec : ScrnTypes.InputFieldRecord; RecNum : CARDINAL; BEGIN VWindows.SetForeColor( DspFiles.MainFrame^.WindowHandle, foreground ); VWindows.SetBackColor( DspFiles.MainFrame^.WindowHandle, background ); VWindows.SetMonoAttr( DspFiles.MainFrame^.WindowHandle, MonoAttribute ); ControlUtils.AddMenuItem( TheFrame, ScrCol, ScrRow, ScrText, M2Strings.Length(ScrText), 0, TheFrame^.normlnext ); (* Following lines added 27 Dec 89 at suggestion of Douglas Wrege to preserve compatibility with release 1.4. *) RecNum := ScrnUtl1.FieldListTotal( TheFrame ); ScrnUtl1.GetFieldRec( TheFrame, RecNum, FieldRec ); FieldRec.typ := FieldType; ScrnUtl1.PutFieldRec( FieldRec, TheFrame, RecNum ); END AddToMenu; PROCEDURE FrameSequence( StartFrame: ScrnTypes.FrameKey); VAR screen : WindowPrims.ScreenType; FrameName : ScrnTypes.AFrameName; SavedHeight : CARDINAL; BEGIN StrConv.IntegerToStr( StartFrame, 0, FrameName ); WindowPrims.ScreenSave(screen, 1, 1, SmartScreen.MaxCol, SmartScreen.MaxRow); ScrnUtl2.PushFrame( DspFiles.MainFrame); SavedHeight := VWindows.GetCursorHeight( DspFiles.MainFrame^.WindowHandle ); VWindows.SetCursorHeight( DspFiles.MainFrame^.WindowHandle, 0 ); REPEAT DspFiles.ReadDisplayFrame( DspFiles.MainFrame^.FromFile, DspFiles.MainFrame, FrameName ); FramePainter.ShowDisplayFrame( DspFiles.MainFrame, 0, 0, 0, 0 ); InputManager.ControlFrame( DspFiles.MainFrame, 1, '', FALSE, FrameName ); UNTIL PosUtils.Equal( FrameName, ScrnTypes.ProgramExit ); ScrnUtl2.PopFrame( DspFiles.MainFrame); WindowPrims.ScreenRestore(screen, 1, 1); VWindows.SetCursorHeight( DspFiles.MainFrame^.WindowHandle, SavedHeight ); END FrameSequence; PROCEDURE Input( VAR FrameNum : ScrnTypes.FrameKey); VAR FrameName : ScrnTypes.AFrameName; BEGIN StrConv.IntegerToStr( FrameNum, 0, FrameName ); ControlUtils.Input( DspFiles.MainFrame, FrameName ); IF NOT StrConv.StrToInteger( FrameName, 0, FrameNum ) THEN WarnNotNumberedFrame( FrameName ); END; END Input; PROCEDURE Control(): ScrnTypes.FrameKey; VAR FrameName: ScrnTypes.AFrameName; TmpInt: INTEGER; BEGIN InputManager.ControlFrame( DspFiles.MainFrame, 0, '', FALSE, FrameName ); IF NOT StrConv.StrToInteger( FrameName, 0, TmpInt ) THEN WarnNotNumberedFrame( FrameName ); END; RETURN TmpInt; END Control; PROCEDURE ControlFrame(VAR FrameRec : ScrnTypes.DisplayFrame; LandingField : CARDINAL; message : ARRAY OF CHAR; showfields : BOOLEAN) : ScrnTypes.FrameKey; VAR NextFrame: ScrnTypes.AFrameName; tmpint: INTEGER; BEGIN InputManager.ControlFrame( FrameRec, LandingField, message, showfields, NextFrame ); IF NOT StrConv.StrToInteger( NextFrame, 0, tmpint ) THEN ErrorManager.WARN( OldFunction ); END; RETURN tmpint; END ControlFrame; BEGIN Initialized := FALSE; Init(); END ScreenInput.