USEROPS.MOD 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563
  1. IMPLEMENTATION MODULE UserOps;
  2. (*
  3. * REPERTOIRE
  4. * Release 1.6
  5. * By Charles Bradford and Cole Brecheen
  6. * (c) Copyright 1985-1992 PMI
  7. * Green Bay, Wisconsin
  8. * All rights reserved
  9. * (414) 468-6040
  10. *
  11. * $Header: D:/logfiles/mods/userops.mov 1.7 10 Mar 1991 15:34:08 coleb $
  12. *
  13. *)
  14. (*EntryDiag:
  15. IMPORT Diagnostics;
  16. :EntryDiag*)
  17. IMPORT BigSets;
  18. IMPORT ByteFiddler;
  19. IMPORT ControlUtils;
  20. IMPORT DateFunctions;
  21. IMPORT Editor;
  22. IMPORT ErrorManager;
  23. IMPORT FieldTypes;
  24. IMPORT FramePainter;
  25. IMPORT GenLists;
  26. IMPORT Hash;
  27. IMPORT InputManager;
  28. IMPORT KbdInput;
  29. IMPORT Key;
  30. IMPORT ListUtils;
  31. IMPORT LowLevel;
  32. IMPORT M2Strings;
  33. IMPORT MsgBox2;
  34. IMPORT Numbers;
  35. IMPORT NumInput;
  36. IMPORT NumTypes;
  37. IMPORT PosUtils;
  38. IMPORT ScrnTypes;
  39. IMPORT ScrnUtl1;
  40. IMPORT StrConv;
  41. IMPORT StrEdit;
  42. IMPORT StrInput;
  43. IMPORT SYSTEM;
  44. IMPORT VEditor;
  45. IMPORT VStorage;
  46. IMPORT VWindows;
  47. VAR
  48. Initialized : BOOLEAN;
  49. PROCEDURE ShowMemory( TheFrame: ScrnTypes.DisplayFrame );
  50. VAR
  51. tmpstr: ARRAY [0..31] OF CHAR;
  52. msgstr: ARRAY [0..127] OF CHAR;
  53. BEGIN
  54. msgstr[0] := 0C;
  55. IF VStorage.UsingEms() THEN
  56. StrEdit.Append( msgstr,
  57. 'Expanded memory now available (in bytes): ' );
  58. StrConv.LongIntegerToStr( VStorage.AvailMem(), 0, tmpstr );
  59. StrEdit.Append( msgstr, tmpstr );
  60. StrEdit.Append( msgstr, '. ' );
  61. ELSE
  62. msgstr := 'Expanded memory not in use. ';
  63. END;
  64. StrEdit.Append(msgstr, 'Stack available: ' );
  65. StrConv.CardinalToStr(LowLevel.ofs(SYSTEM.ADR(msgstr))-127, 0, tmpstr);
  66. StrEdit.Append(msgstr, tmpstr);
  67. MsgBox2.StrMsgBoxExterior( TheFrame, VWindows.NE, msgstr );
  68. END ShowMemory;
  69. CONST
  70. OldFunction = "Non-numeric frame name used with old function";
  71. ExitMessage =
  72. 'You pressed the function key that terminates the program. Please confirm.';
  73. PROCEDURE BetweenLongs( TheTxt: ARRAY OF CHAR; LoLong, HiLong: LONGINT) :
  74. BOOLEAN;
  75. VAR
  76. lvalue: LONGINT;
  77. BEGIN
  78. IF NOT StrConv.StrToLongInteger( TheTxt, 0, lvalue) THEN
  79. (*StrToLongInteger skips over leading non-numeric
  80. characters.*)
  81. RETURN FALSE;
  82. END;
  83. RETURN (lvalue >= LoLong) AND (lvalue <= HiLong);
  84. END BetweenLongs;
  85. PROCEDURE BetweenReals( TheTxt: ARRAY OF CHAR; LoReal, HiReal:
  86. NumTypes.Real8) : BOOLEAN;
  87. VAR
  88. rvalue: NumTypes.Real8;
  89. BEGIN
  90. IF NOT StrConv.StrToReal( TheTxt, 0, rvalue) THEN
  91. (*StrToReal skips over leading non-numeric
  92. characters.*)
  93. RETURN FALSE;
  94. END;
  95. RETURN (rvalue >= LoReal) AND (rvalue <= HiReal)
  96. END BetweenReals;
  97. PROCEDURE DefaultKeyHandler( FrameRec : ScrnTypes.DisplayFrame;
  98. VAR LastKey: CARDINAL; VAR NextFrame: ScrnTypes.AFrameName
  99. );
  100. VAR
  101. SavedKeyValue, keyhit: CARDINAL;
  102. FieldRec: ScrnTypes.InputFieldRecord;
  103. BlankFrame : BOOLEAN;
  104. HelpFrame: ScrnTypes.AFrameName;
  105. BEGIN
  106. StrEdit.AssignStr( ScrnTypes.ContinueInput, NextFrame );
  107. BlankFrame := ScrnUtl1.FieldGroupTotal( FrameRec ) = 0;
  108. IF NOT BlankFrame THEN
  109. ScrnUtl1.GetFieldRec( FrameRec, FrameRec^.CurrentField, FieldRec );
  110. END;
  111. IF LastKey = HelpKey THEN
  112. IF (NOT BlankFrame) AND
  113. (M2Strings.Length(FieldRec.HelpFrame) > 0) THEN
  114. M2Strings.Assign( FieldRec.HelpFrame, HelpFrame );
  115. ControlUtils.FrameSeq2( FrameRec^.FromFile,
  116. FrameRec^.ThisFrame, HelpFrame );
  117. ELSIF M2Strings.Length(FrameRec^.HelpFrame) > 0 THEN
  118. M2Strings.Assign( FrameRec^.HelpFrame, HelpFrame );
  119. ControlUtils.FrameSeq2( FrameRec^.FromFile,
  120. FrameRec^.ThisFrame, HelpFrame );
  121. ELSIF NOT ListUtils.IsBlankList(FrameRec^.HelpList) THEN
  122. MsgBox2.LstMsgBoxExterior( FrameRec, VWindows.NW,
  123. FrameRec^.HelpList );
  124. END;
  125. InputManager.LookAlive( FrameRec );
  126. (* Restores pointer bar, correct prompt, highlighting,
  127. etc., in case the input focus went somewhere else
  128. during the help sequence. *)
  129. LastKey := 0;
  130. (*We don't want ControlFrame to do anything else with
  131. this keystroke. We just want it to keep going.*)
  132. ELSIF LastKey = TimeKey THEN
  133. SavedKeyValue := LastKey;
  134. TimeKey := 65535;
  135. (*Disable MemoryKey while in the MemAvail box itself.*)
  136. ShowMemory( FrameRec );
  137. TimeKey := SavedKeyValue;
  138. LastKey := 0;
  139. ELSIF LastKey = BackupKey THEN
  140. M2Strings.Assign( FrameRec^.parent, NextFrame );
  141. ELSIF LastKey = SubmitKey THEN
  142. IF NOT BlankFrame THEN
  143. IF FieldRec.typ = ScrnTypes.GotoCode THEN
  144. M2Strings.Assign( FieldRec.ReturnVal, NextFrame );
  145. ELSE
  146. M2Strings.Assign( FrameRec^.normlnext, NextFrame );
  147. END;
  148. ELSE
  149. M2Strings.Assign( FrameRec^.normlnext, NextFrame );
  150. END;
  151. ELSIF LastKey = ExitKey THEN
  152. SavedKeyValue := ExitKey;
  153. ExitKey := 65535;
  154. (* Disables ExitKey while user is in the ExitKey
  155. message box itself. *)
  156. IF MsgBox2.MsgOkay( FrameRec, VWindows.SW, ExitMessage ) THEN
  157. ErrorManager.CallHalt('');
  158. (*
  159. Logitech users
  160. may want to do
  161. this instead of
  162. StraitToDOS if
  163. it's important
  164. that Logitech
  165. TermProcs get
  166. executed before
  167. returning to DOS.
  168. ErrorManager.DoTermProcs();
  169. RTSMain.Terminate(RTSMain.Normal);
  170. *)
  171. END;
  172. InputManager.LookAlive( FrameRec );
  173. ExitKey := SavedKeyValue;
  174. LastKey := 0;
  175. END;
  176. END DefaultKeyHandler;
  177. PROCEDURE DefaultFieldHandler( FrameRec :
  178. ScrnTypes.DisplayFrame; col1, row1: CARDINAL; VAR LastKey :
  179. CARDINAL; VAR NextFrame: ScrnTypes.AFrameName );
  180. VAR
  181. ChangeCheck1, ChangeCheck2, ChangeCheck3, Check1, Check2,
  182. Check3, keyhit, CursorPos, width, spot: CARDINAL;
  183. ok, done, InDecimals: BOOLEAN;
  184. LocalNextFrame: ScrnTypes.AFrameName;
  185. TmpLegalKeys, InterestingKeys: KbdInput.KeyNumSet;
  186. FieldRec : ScrnTypes.InputFieldRecord;
  187. ImageRec : ScrnTypes.ImageElement;
  188. TheList : GenLists.GenList;
  189. date : DateFunctions.Date;
  190. EdRec : VEditor.AnEdControlRec;
  191. minusOK : BOOLEAN;
  192. BEGIN
  193. ScrnUtl1.GetFieldRec( FrameRec, FrameRec^.CurrentField, FieldRec );
  194. ScrnUtl1.GetFieldImageRec( FrameRec, FrameRec^.CurrentField, ImageRec );
  195. Hash.Compute( ImageRec.text, ChangeCheck1, ChangeCheck2, ChangeCheck3 );
  196. width := M2Strings.Length(ImageRec.text);
  197. InDecimals := FALSE;
  198. CursorPos := 0;
  199. BigSets.SetUnion( FieldExitKeySet, FunctKeySet, InterestingKeys );
  200. ScrnUtl1.SetPointerBarColors( FrameRec );
  201. IF FieldRec.typ = FieldTypes.TypeCode( 'STRING' ) THEN
  202. TmpLegalKeys := StringKeySet;
  203. (* If you want to change which keys are legal in
  204. particular kinds of string fields, insert code here
  205. that looks for the field type or the name of the field you're
  206. interested in changing, and modify TmpLegalKeys with
  207. routines from BigSets if you find it. *)
  208. REPEAT
  209. ScrnUtl1.SetPointerBarColors( FrameRec );
  210. StrInput.ReadWithEdits( FrameRec^.WindowHandle,
  211. ImageRec.text, col1, row1, width, CursorPos,
  212. InsertMode, TRUE, LastKey, TmpLegalKeys,
  213. InterestingKeys );
  214. (* This is where you insert field validation code.
  215. It's also where you put code to update a frame
  216. dynamically as the user completes certain fields--
  217. use ChangeField, RedrawField, or RedrawArea to do
  218. the latter.*)
  219. ScrnUtl1.PutFieldImageRec( ImageRec, FrameRec,
  220. FrameRec^.CurrentField );
  221. (*Updates ImageList so that present state of the
  222. string will be visible in TheKeyHandler.*)
  223. TheKeyHandler( FrameRec, LastKey, LocalNextFrame );
  224. UNTIL BigSets.InSet(FieldExitKeySet, LastKey);
  225. ELSIF FieldRec.typ = FieldTypes.TypeCode( 'INTEGER' ) THEN
  226. done := FALSE;
  227. REPEAT
  228. ScrnUtl1.SetPointerBarColors( FrameRec );
  229. (* Distinguish bewteen integers and cardinals based on iMin *)
  230. IF FieldRec.iMin < NumTypes.L0 THEN (* JDM/MBC *)
  231. minusOK := TRUE; (* JDM/MBC *)
  232. ELSE (* JDM/MBC *)
  233. minusOK := FALSE; (* JDM/MBC *)
  234. END; (* if FieldRec.iMin *) (* JDM/MBC *)
  235. NumInput.ReadNumericField( FrameRec^.WindowHandle,
  236. ImageRec.text, col1, row1, width, 0, minusOK,
  237. LastKey, InterestingKeys ); (* JDM/MBC *)
  238. (* The user can't tell that we're exiting and re-
  239. entering ReadNumeric every time she presses one of
  240. the InterestingKeys. *)
  241. ScrnUtl1.PutFieldImageRec( ImageRec, FrameRec,
  242. FrameRec^.CurrentField );
  243. TheKeyHandler( FrameRec, LastKey, LocalNextFrame );
  244. IF BigSets.InSet(FieldExitKeySet, LastKey) THEN
  245. IF (LastKey = ExitKey) OR (LastKey = BackupKey) THEN
  246. done := TRUE;
  247. ELSE
  248. done := PosUtils.IsBlank(ImageRec.text) OR
  249. BetweenLongs( ImageRec.text, FieldRec.iMin,
  250. FieldRec.iMax );
  251. IF NOT done THEN
  252. MsgBox2.StrMsgBox( FrameRec, VWindows.NE,
  253. "Entry out of range. Press <Enter> to continue." );
  254. END;
  255. END;
  256. END;
  257. UNTIL done;
  258. ELSIF FieldRec.typ = FieldTypes.TypeCode( 'REAL' ) THEN
  259. done := FALSE;
  260. REPEAT
  261. ScrnUtl1.SetPointerBarColors( FrameRec );
  262. (* As with integers, range determines whether minus allowed *)
  263. IF FieldRec.rMin < 0. THEN (* JDM/MBC *)
  264. minusOK := TRUE; (* JDM/MBC *)
  265. ELSE (* JDM/MBC *)
  266. minusOK := FALSE; (* JDM/MBC *)
  267. END; (* if FieldRec.rMin *) (* JDM/MBC *)
  268. NumInput.ReadNumericField( FrameRec^.WindowHandle,
  269. ImageRec.text, col1, row1, width, FieldRec.decimalPlace,
  270. minusOK, LastKey, InterestingKeys ); (* JDM/MBC *)
  271. ScrnUtl1.PutFieldImageRec( ImageRec, FrameRec,
  272. FrameRec^.CurrentField );
  273. TheKeyHandler( FrameRec, LastKey, LocalNextFrame );
  274. IF BigSets.InSet(FieldExitKeySet, LastKey) THEN
  275. IF (LastKey = ExitKey) OR (LastKey = BackupKey) THEN
  276. done := TRUE;
  277. ELSE
  278. done := PosUtils.IsBlank(ImageRec.text) OR
  279. BetweenReals( ImageRec.text, FieldRec.rMin,
  280. FieldRec.rMax );
  281. IF NOT done THEN
  282. MsgBox2.StrMsgBox( FrameRec, VWindows.NE,
  283. "Entry out of range. Press <Enter> to continue." );
  284. END;
  285. END;
  286. END;
  287. UNTIL done;
  288. ELSIF FieldRec.typ = FieldTypes.TypeCode( 'DATE' ) THEN
  289. TmpLegalKeys := StringKeySet;
  290. LOOP
  291. StrInput.ReadWithEdits( FrameRec^.WindowHandle,
  292. ImageRec.text, col1, row1, width, CursorPos,
  293. InsertMode, TRUE, LastKey, TmpLegalKeys,
  294. InterestingKeys );
  295. ScrnUtl1.PutFieldImageRec( ImageRec, FrameRec,
  296. FrameRec^.CurrentField );
  297. TheKeyHandler( FrameRec, LastKey, LocalNextFrame );
  298. IF BigSets.InSet(FieldExitKeySet, LastKey) THEN
  299. IF PosUtils.IsBlank(ImageRec.text) THEN
  300. EXIT;
  301. END;
  302. DateFunctions.StrToDate(ImageRec.text, date, ok);
  303. IF ok OR (LastKey = BackupKey) THEN
  304. EXIT;
  305. END;
  306. MsgBox2.StrMsgBox( FrameRec, VWindows.NE,
  307. "Invalid Date. Press any key." );
  308. END;
  309. END (*loop *);
  310. ELSIF FieldRec.typ = FieldTypes.TypeCode( 'BOOLEAN' ) THEN
  311. LOOP
  312. LastKey := KbdInput.KeyHit( KbdInput.AnyKeyNum );
  313. IF (LastKey = Key.Space) OR (LastKey = Key.Return) THEN
  314. FieldRec.selected:= NOT FieldRec.selected;
  315. IF width # 0 THEN
  316. IF FieldRec.selected THEN
  317. ImageRec.text[0]:=CHR(251);(* û *)
  318. ELSE
  319. ImageRec.text[0]:=' '
  320. END;
  321. END;
  322. ScrnUtl1.PutFieldRec( FieldRec, FrameRec,
  323. FrameRec^.CurrentField );
  324. ScrnUtl1.PutFieldImageRec( ImageRec, FrameRec,
  325. FrameRec^.CurrentField );
  326. FramePainter.RedrawField(FrameRec,FrameRec^.CurrentField,TRUE);
  327. END;
  328. TheKeyHandler( FrameRec, LastKey, LocalNextFrame );
  329. IF BigSets.InSet(FieldExitKeySet, LastKey) THEN
  330. EXIT;
  331. END;
  332. END (*loop *);
  333. ELSIF FieldRec.typ = FieldTypes.TypeCode( 'EDITOR' ) THEN
  334. ScrnUtl1.GetEdRec( FrameRec, FrameRec^.CurrentField, TheList, EdRec );
  335. EdRec.overwriting := NOT InsertMode;
  336. VEditor.TheEditor( TheList, EdRec );
  337. ScrnUtl1.PutEdRec( FrameRec, FrameRec^.CurrentField, TheList, EdRec );
  338. M2Strings.Assign( EdRec.NextFrame, NextFrame );
  339. InsertMode := NOT EdRec.overwriting;
  340. LastKey := EdRec.EdLastKey;
  341. RETURN;
  342. ELSE
  343. ErrorManager.WARN( 'Unexpected field type entered' );
  344. END;
  345. Hash.Compute( ImageRec.text, Check1, Check2, Check3 );
  346. IF (ChangeCheck1 # Check1) OR (ChangeCheck2 # Check2)
  347. OR (ChangeCheck3 # Check3) THEN
  348. FieldRec.ChangeMade := TRUE;
  349. END;
  350. ScrnUtl1.PutFieldRec( FieldRec, FrameRec,
  351. FrameRec^.CurrentField );
  352. M2Strings.Assign( LocalNextFrame, NextFrame );
  353. END DefaultFieldHandler;
  354. PROCEDURE DoFunctions( FrameRec : ScrnTypes.DisplayFrame; VAR LastKey:
  355. CARDINAL ) : INTEGER;
  356. VAR
  357. NextFrame: ScrnTypes.AFrameName;
  358. tmpint: INTEGER;
  359. BEGIN
  360. NextFrame := '';
  361. DefaultKeyHandler( FrameRec, LastKey, NextFrame );
  362. IF PosUtils.Equal( NextFrame, ScrnTypes.ContinueInput ) THEN
  363. tmpint := ContinueCode;
  364. ELSIF NOT StrConv.StrToInteger( NextFrame, 0, tmpint ) THEN
  365. ErrorManager.WARN( OldFunction );
  366. END;
  367. RETURN tmpint;
  368. END DoFunctions;
  369. PROCEDURE DoFieldInput( FrameRec : ScrnTypes.DisplayFrame; col1, row1:
  370. CARDINAL; VAR LastKey : CARDINAL ) : INTEGER;
  371. VAR
  372. NextFrame: ScrnTypes.AFrameName;
  373. tmpint: INTEGER;
  374. BEGIN
  375. NextFrame := '';
  376. DefaultFieldHandler( FrameRec, col1, row1,
  377. LastKey, NextFrame );
  378. IF PosUtils.Equal( NextFrame, ScrnTypes.ContinueInput ) THEN
  379. tmpint := ContinueCode;
  380. ELSIF NOT StrConv.StrToInteger( NextFrame, 0, tmpint ) THEN
  381. ErrorManager.WARN( OldFunction );
  382. END;
  383. RETURN tmpint;
  384. END DoFieldInput;
  385. (*
  386. PROCEDURE OldKeyHandler( FrameRec : ScrnTypes.DisplayFrame; VAR
  387. LastKey: CARDINAL; VAR NextFrame: ScrnTypes.AFrameName );
  388. (*If you want to continue using procedures that you assigned
  389. to the Release 1.4 version of TheFunctProc, assign this
  390. procedure to TheKeyHandler.*)
  391. VAR
  392. tmpint: ScrnTypes.FrameKey;
  393. BEGIN
  394. tmpint := TheFunctProc( FrameRec, LastKey );
  395. IF tmpint = ContinueCode THEN
  396. StrEdit.AssignStr( ScrnTypes.ContinueInput, NextFrame );
  397. ELSE
  398. StrConv.IntegerToStr( tmpint, 0, NextFrame );
  399. END;
  400. END OldKeyHandler;
  401. PROCEDURE OldFieldHandler( FrameRec : ScrnTypes.DisplayFrame;
  402. col1, row1: CARDINAL; VAR LastKey : CARDINAL; VAR
  403. NextFrame: ScrnTypes.AFrameName );
  404. (*If you want to continue using procedures that you assigned
  405. to the Release 1.4 version of TheFieldProc, assign this
  406. procedure to TheFieldHandler.*)
  407. VAR
  408. tmpint: ScrnTypes.FrameKey;
  409. BEGIN
  410. tmpint := TheFieldProc( FrameRec, col1, row1, LastKey );
  411. IF tmpint = ContinueCode THEN
  412. StrEdit.AssignStr( ScrnTypes.ContinueInput, NextFrame );
  413. ELSE
  414. StrConv.IntegerToStr( tmpint, 0, NextFrame );
  415. END;
  416. END OldFieldHandler;
  417. *)
  418. PROCEDURE Init();
  419. BEGIN
  420. IF Initialized THEN
  421. RETURN;
  422. ELSE
  423. Initialized := TRUE;
  424. END;
  425. (*EntryDiag:
  426. Diagnostics.Init();
  427. :EntryDiag*)
  428. BigSets.Init();
  429. ByteFiddler.Init();
  430. ControlUtils.Init();
  431. DateFunctions.Init();
  432. Editor.Init();
  433. ErrorManager.Init();
  434. FieldTypes.Init();
  435. FramePainter.Init();
  436. GenLists.Init();
  437. Hash.Init();
  438. InputManager.Init();
  439. KbdInput.Init();
  440. Key.Init();
  441. ListUtils.Init();
  442. LowLevel.Init();
  443. M2Strings.Init();
  444. MsgBox2.Init();
  445. Numbers.Init();
  446. NumInput.Init();
  447. NumTypes.Init();
  448. PosUtils.Init();
  449. ScrnTypes.Init();
  450. ScrnUtl1.Init();
  451. StrConv.Init();
  452. StrEdit.Init();
  453. StrInput.Init();
  454. VEditor.Init();
  455. VStorage.Init();
  456. VWindows.Init();
  457. (*EntryDiag:
  458. Diagnostics.diagS( 'Entering UserOps', '' );
  459. :EntryDiag*)
  460. VEditor.TheEditor := Editor.DefaultEditor;
  461. Exiting := FALSE;
  462. InsertMode := FALSE;
  463. DoPrompting := TRUE;
  464. (* whether or not to use prompts *)
  465. PromptRow := VWindows.EndRow(VWindows.CurrentWindow) - 1;
  466. PromptCol := 2;
  467. (* the screen row and column to show prompts if they are used *)
  468. PromptLength := VWindows.EndCol(VWindows.CurrentWindow) - 2;
  469. (* the maximum length of prompts used. *)
  470. TheKeyHandler := DefaultKeyHandler;
  471. TheFieldHandler := DefaultFieldHandler;
  472. (* The routine that processes function keys in
  473. ControlFrame; see OldKeyHandler and OldFieldHandler,
  474. above, if you are having problems with upgrading 1.4
  475. code. *)
  476. TheFieldProc := DoFieldInput;
  477. TheFunctProc := DoFunctions;
  478. (* Now, define valid keys for function, screen actions,
  479. and string fields *)
  480. BigSets.InitSet( FunctKeySet );
  481. BigSets.AppendSet( FunctKeySet, "{27, 315, 316, 317, 324}" );
  482. (* extra keys we define as valid: ESC, F1, F2, F9, F10 *)
  483. BigSets.InitSet( ScreenKeySet );
  484. (* These are the keys that are legal when the pointer is
  485. not in an input field -- i.e., when it's in a choice
  486. field or goto field. ScreenInput.ControlFrame adds to
  487. it the FunctKeySet and the selection characters for each
  488. frame. *)
  489. BigSets.AppendSet( ScreenKeySet,
  490. "{13, 9, 271, 328, 336, 329, 331, 333, 337, 374, 388}" );
  491. (* CR, TAB, BTB, UARW, DARW, PGUP, RARW, LARW, PGDN, CtrlPgDn, CtrlPgUp *)
  492. FieldExitKeySet := ScreenKeySet;
  493. BigSets.AppendSet( FieldExitKeySet, "{27, 317, 324}" );
  494. BigSets.InitSet( StringKeySet );
  495. BigSets.AppendSet( StringKeySet, "{8, ' '..'~', 128..175, 224..253}" );
  496. BigSets.AppendSet( StringKeySet,
  497. "{274, 288, 338, 339, 327, 335, 371, 372}" );
  498. (* regular ASCII characters, foreign language characters,
  499. math characters, backspace, AltE, AltD, Ins, Del,
  500. Home, End, CTL arrows *)
  501. HelpKey := Key.F1;
  502. ExitKey := Key.F2;
  503. TimeKey := Key.F3;
  504. SubmitKey := Key.F10;
  505. BackupKey := Key.Escape;
  506. (*EntryDiag:
  507. Diagnostics.diagS( 'Exiting UserOps', '' );
  508. :EntryDiag*)
  509. END Init;
  510. BEGIN
  511. Initialized := FALSE;
  512. Init();
  513. END UserOps.