IMPLEMENTATION MODULE KbdInput; (* * 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/kbdinput.mov 1.8 17 Mar 1991 17:56:26 coleb $ * *) IMPORT BigSets; IMPORT ErrorManager; IMPORT FAPI; IMPORT LowLevel; IMPORT M2Strings; IMPORT StrConv; IMPORT StrEdit; IMPORT StringIO; IMPORT SYSTEM; VAR Initialized : BOOLEAN; VAR KbdState: FAPI.KBDINFO; PROCEDURE DefaultKeyHit( LegalKeys: KeyNumSet ): CARDINAL; VAR CharData: FAPI.KBDKEYINFO; bufch: CHAR; TmpResult: CARDINAL; BEGIN REPEAT IF NOT TypeAheadLegal THEN TmpResult:=FAPI.KBDFLUSHBUFFER(0) END; IF FAPI.KBDCHARIN(SYSTEM.ADR(CharData), 0, 0) # 0 THEN ErrorManager.WARN( "KBDCHARIN"); END; IF (CharData.chChar = FAPI.UCHAR(0C)) OR (CharData.chChar = FAPI.UCHAR(CHR(0E0H))) THEN TmpResult := ORD(CharData.chScan) + Extended; ELSE TmpResult := ORD(CharData.chChar); END; UNTIL BigSets.InSet(LegalKeys, TmpResult); RETURN(TmpResult); END DefaultKeyHit; PROCEDURE CAPkey( KeyNum: CARDINAL ): CARDINAL; (*This routine serves the same function for numeric key values that CAP serves for ASCII values.*) BEGIN IF (KeyNum >= 97) (*ORD('a')*) AND (KeyNum <= 122) (*ORD('z')*) THEN RETURN KeyNum - 32; (*ORD('a') - ORD('A')*) ELSE RETURN KeyNum; END; END CAPkey; PROCEDURE ReassignKey(KeyCode : CARDINAL; NewDefn : ARRAY OF CHAR); BEGIN END ReassignKey; PROCEDURE Init(); BEGIN IF Initialized THEN RETURN; ELSE Initialized := TRUE; END; BigSets.Init(); ErrorManager.Init(); LowLevel.Init(); M2Strings.Init(); StrConv.Init(); StrEdit.Init(); StringIO.Init(); (*EntryDiag: StringIO.WriteEol( 1, 'Entering KbdInput' ); :EntryDiag*) KeyHit := DefaultKeyHit; TypeAheadLegal := TRUE; BigSets.InitSet( AnyKeyNum ); BigSets.AppendSet( AnyKeyNum, "{0..400}" ); BigSets.InitSet( YorN ); BigSets.AppendSet( YorN, "{'y', 'Y', 'n', 'N'}" ); KbdState.cb := SYSTEM.TSIZE(FAPI.KBDINFO); KbdState.fsMask := FAPI.KEYBOARD_BINARY_MODE; IF FAPI.KBDSETSTATUS(SYSTEM.ADR(KbdState), 0) # 0 THEN ErrorManager.WARN("KBDSETSTATUS"); END; (*EntryDiag: StringIO.WriteEol( 1, 'Exiting KbdInput' ); :EntryDiag*) END Init; BEGIN Initialized := FALSE; Init(); END KbdInput.