This manual describes the SAFEIO system for programming of safe dialogues in a SIMULA program. SAFEIO is an interface between the user and a SIMULA program. This document reflects version 4.0 of the SAFEIO system. Page 2 Declaration examples 1. DECLARATION EXAMPLES There is another CLASS SAFEI which is a reduced version of SAFEIO. It has only one formal parameter - the language parameter. CLASS SAFEI performs the operations of CLASS SAFEIO minus the file handling facilities. Thus it is possible to use SAFEIO during program development and testing and then recompile with SAFEI. A further reduced version is SAFMIN, see SAFMIN.HLP. Thera are also three classes SIMMIN, SIMEI and SIMEIO identical to SAFMIN, SAFEI and SAFEIO respectively in all respects but prefixed by SIMULATION. The SAFEIO CLASS has two formal parameters : 1. File specification for log file saving all accepted input from the start of execution - TEXT by VALUE. If actual value is NOTEXT, no log file will be generated from start. 2. Message file parameter (language parm.) - TEXT by VALUE. IF the value is NOTEXT ("") the message file SAFEIO.ENG will be used. If no such file exists on the user's disk area, the SYS: version is used. Otherwise the following procedure is followed: A. If parm. contains no dot ('.'), add "SAFEIO." - possibly after device colon (':'). B. Search file on specified area. C. If found, use it. Else D. Try to find it on the SYS: area. E. If found there, use it. Else F. Print message and use SYS:SAFEIO.ENG. In order to create an own message file (almost every message produced by SAFEI(O) is taken from the message file) it is recommended to start from a copy of SYS:SAFEIO.ENG (or SYS:SAFEIO.SWE). Class SAFEI uses the same message file(s) as SAFEIO (though only partly). Example 1 - prefixing with SAFEIO. BEGIN EXTERNAL REF (Infile) PROCEDURE findinfile; EXTERNAL REF (Outfile) PROCEDURE findoutfile; EXTERNAL TEXT PROCEDURE conc,upcase, Page 3 Declaration examples frontstrip,rest,checkextension; EXTERNAL CHARACTER PROCEDURE fetchar,findtrigger; EXTERNAL LONG REAL PROCEDURE scanreal; EXTERNAL INTEGER PROCEDURE checkreal,checkint, scanint,ilog; EXTERNAL BOOLEAN PROCEDURE menu; EXTERNAL CLASS safeio; SAFEIO("input.log","ENG") BEGIN .....using safeio procedures.... END of prefixed block; ....calculations not requiring safeio.... END of program Example 2 - prefixing with SAFEI. BEGIN EXTERNAL declarations ...; EXTERNAL CLASS safei; SAFEI("SAFEIO.ENG[123,456]") BEGIN ..... using safei procedures .... END of prefixed block; ....calculations not requiring safei.... END of program Example 3 - Inspecting SAFEIO. BEGIN EXTERNAL declarations ...; .... INSPECT NEW safeio(NOTEXT,NOTEXT) DO BEGIN ....using safeio.... ! Closing possible open files: ; closefiles; END inspection; .... END of program Example 4 - creating your own subclass to SAFEIO. safeio CLASS myclass; Page 4 Declaration examples BEGIN .... END of myclass; Create your main program: BEGIN EXTERNAL declarations ...; myclass("log","MYMESS.TXT") BEGIN ! The log file "log.saf" will be opened.; ! The message file MYMESS.TXT[123,456] will be used.; .... END prefixed block END of program Page 5 3. SAFEIO REQUEST AND INPUTCHECKING PROCEDURES 2. SAFEIO REQUEST AND INPUTCHECKING PROCEDURES 2.1 REQUEST PROCEDURE The main procedure when programming with SAFEIO is REQUEST : request (promptingquestion,defaultvalue,inputok,errormessage,help); The parameters are : 1. Promptingquestion - TEXT by VALUE - The prompting question preferably ending with some prompting character as ':'. This text will be printed on the user's terminal followed by a call to Breakoutimage. 2. Defaultvalue - TEXT by NAME - The value which should be accepted if the user answers with just Carriage Return (i.e. an empty answer). The default value will be presented to the user in the following manner : Enter input:/55/: assuming the the prompting question was "Enter input:" and the default value was "55". The '/' is the value of a SAFEIO attribute character DEFAULTQUOTE and may be changed by the programmer. Likewise the final ':' is the initial value of character attibute PROMPTINGCHAR. If no default answer should be allowed the SAFEIO attribute NODEFAULT may be used (in which case the defaultquotes and the promptingchar will not be displayed). 3. Inputok - BOOLEAN by NAME - This parameter shall be true if the input is to be accepted else false. Usually the actual parameter consists of a call to a syntax and validity checking procedure (see Inputchecking Procedures). 4. Errormessage - TEXT by NAME - The text will be printed on the user's terminal if inputok is evaluated to be false and the SYNTAXOK flag (a SAFEIO boolean attribute) is true. Page 6 3. SAFEIO REQUEST AND INPUTCHECKING PROCEDURES 5. Help - BOOLEAN by NAME - This parameter will be evaluated each time the user types in an answer starting with a questionmark '?'. Page 7 3. SAFEIO REQUEST AND INPUTCHECKING PROCEDURES 2.2 INPUTCHECKING PROCEDURES The syntax and validity checking procedures are : 1. Intinput 2. Realinput 3. Longrealinput 4. Textinput 5. Boolinput The general structure of a syntax and validity checking procedure is : BOOLEAN PROCEDURE ***input(result,validity); NAME result,validity; *** result; BOOLEAN validity; BEGIN COMMENT The input line is stored in currentfile.Image; IF ...syntax is OK... THEN BEGIN COMMENT Get value from currentfile.Image: ; result:= ...; syntaxok:= TRUE; COMMENT syntaxok is a global SAFEIO attribute. ; COMMENT Since the parameter transmission mode is by NAME the actual validity parameter may be (and often is) an expression containing the result variable. ; check:= IF checkvalidity THEN validity ELSE TRUE END ELSE BEGIN Outtext( for example: ? Illegal *** input: ); Outtext( the rest of the stripped currentfile.Image ); Outimage; syntaxok:= FALSE END error END of check; The type of result (***) depends on the procedure in an obvious manner. The programmer may use the procedure skeleton presented Page 8 3. SAFEIO REQUEST AND INPUTCHECKING PROCEDURES above in order to design his own checking procedures. The predefined SAFEIO procedures will only accept input lines containing a legal item of the corresponding type and nothing else. If, however the programmer codes CHECKVALIDITY:= FALSE then no validity checking will be done. Though saving (may be) lots of execution time this should be used with care, since the security enabled through validity checking will be lost! The textinput procedure will accept any character sequence as a syntactically correct input. The boolinput procedure, however, has just one parameter; result. There is no use putting the prompting question if just one of the yes/no (true/false) alternatives is valid! The intinput, realinput and longrealinput procedures will reject not only items not conforming to the correct syntax, but also such numeric input that otherwise would have caused a run time arithmetic overflow error. For convenient simple command validity checking the LIBSIM boolean procedure MENU may be used as the actual parameter to an ***input procedure. (For texts with national characters - }{` $#@ - use procedure MENY instead.) The MENU procedure will return the value TRUE if a nonambiguous match is found (though an exact match is always accepted - even if it is a substring of another table element). The index parameter will indicate the table index for which the match was found. If no match is found it will return zero. If t is ambiguous the index will be set to -1. The contents of t will be converted to upper case letters. Note that the table must contain upper case letters only and no blanks at the end of the text. An example of the use of MENU : ... SAFEIO("","") BEGIN TEXT t; TEXT ARRAY table[1:5]; INTEGER index; SWITCH action:= start,stop,delete,delayed,delay; table[1]:- Copy("START"); table[2]:- Copy("STOP"); table[3]:- Copy("DELETE"); table[4]:- Copy("DELAYED"); table[5]:- Copy("DELAY"); request("*",nodefault, textinput(t,menu(t,index,table,5)), Page 9 3. SAFEIO REQUEST AND INPUTCHECKING PROCEDURES commandmessage(index), ! SAFEIO PROC. attribute ! answering with proper ! error message.; commandhelp(table,5)); ! SAFEIO PROC. attribute ! displaying available ! commands in TABLE.; GO TO action[index]; start: ... stop: ... delete: ... delayed: ... delay: ... ... The following input strings will be accepted : START start Start sta dele delaye while the following will be rejected : S st del dela xxx 2.3 HELP PROCEDURES There is two SAFEIO boolean help procedures, HELP and NOHELP. Procedure HELP takes one text parameter (by NAME). If the text is longer than Sysout.Length then the text will be copied and displayed with Carriage Return substituted for relevant blanks. Procedure NOHELP will simply inform the user than the programmer was too lazy to provide any help information. Page 10 4. SAFEIO COMMANDS 3. SAFEIO COMMANDS The following facilities are included in the SAFEIO class. 1. Substituting terminal input for disk file input. 2. Creating log files saving all accepted input. A SAFEIO command may be typed in at any question (call of request) during the conversation. 3.1 CLASS SAFEI There exists another class - SAFEI which should be used if these facilities are not wanted. The SAFEI class has just one formal parameter - the language parameter. The following code could be used if a log file should be generated when using SAFEI : BEGIN EXTERNAL declarations ...; safei("eng") BEGIN REF (Outfile) recordfile; TEXT recordname; PROCEDURE askfor(prompt,default,inputok,errormessage,help); NAME prompt,default,inputok,errormessage,help; TEXT prompt,default,errormessage; BOOLEAN inputok,help; BEGIN request(prompt,default,inputok,errormessage,help); INSPECT recordfile DO Outimage END of askfor; request("Log file:",nodefault, textinput(recordname,TRUE),"",nohelp); IF recordname =/= NOTEXT THEN BEGIN recordfile:- NEW Outfile(recordname); recordfile.Open(Sysin.Image) Page 11 4. SAFEIO COMMANDS END name given; ! for example: ; askfor("i:","2",intinput(i,i>0),"? Must be > 0.",nohelp); ... etc. using askfor instead of request ... INSPECT recordfile DO Close; END safei END of program 3.2 CONTROLLING LOG FILES The following commands may be used in order to control a log file : !> By typing "!>filespec" (where filespec is a file specification) the user will open a new log file. If another log file already is active he will be told so and no new file will be created. By typing "!>" (with nothing after the >) the current log file will be closed. If no log file is active the user will be told so. When the log file has been closed a subsqeuent "!>filespec" with the same file name will destroy the old contents of the file (when the new log file is closed). !+ By typing "!+" the current log file will be closed and then immediately opened again in such way that the following log information will be added to the file (so called append mode). If no log file is active the user will be told so. The created log file(s) will contain the prompting questions as well as the submitted and accepted answers. 3.3 CONTROLLING INPUT FILES The user may at any question demand that input should be read from a disk file. The input file can be of two formats : 1. Containing just the answers - with one answer on each line. No line may be longer than Max(80,Sysout.Length) characters (could be easily changed in the SAFEIO code). Page 12 4. SAFEIO COMMANDS 2. SAFEIO log file format. If Sysin.Endfile becomes TRUE, a jump to VIRTUAL LABEL EOF will occur. If the user block has such a label, then the program exexcution will continue there. Otherwise the block will terminate through an internal safeio jump. NOTE! Once Sysin.Endfile becomes TRUE - which happens if the user types ^Z - no more input on Sysin is possible. The following commands are available : !_ By typing "!_filespec" the user may request that the answer for the current question and those following should be read from a disk file. The SAFEIO system will print on the terminal the activated questions and the read-in answers (could be suppressed by typing != or starting and ending the input file with !=). There is no (soft) way to interfere with the reading process which will continue until the file is exhausted. The user will be informed when end of file has been encountered. !< By typing "! Sysout.Length. Also calling Outimage.; ....; BOOLEAN PROCEDURE irange(test,low,high); INTEGER test,low,high; ! Returns TRUE if low <= test <= high.; ....; BOOLEAN PROCEDURE range(test,low,high); REAL test,low,high; ! Ditto for REAL variables.; ....; TEXT PROCEDURE outofirange(low,high); INTEGER low,high; ! Returns a text reference containing a complete ! errormessage with upper and lower limits indicated.; ....; Page 16 5. SUMMARY OF CLASS SAFEIO ATTRIBUTES TEXT PROCEDURE outofrange(low,high); REAL low,high; ! Ditto for REAL variables.; ....; BOOLEAN PROCEDURE commandhelp(table,n); TEXT ARRAY table; INTEGER n; ! Displays the contents of TABLE[1:N] on the user's terminal.; ....; TEXT PROCEDURE commandmessage(index); INTEGER index; ! Returns a text reference indicating that the user's ! answer was "UNKNOWN" (index=0) or "AMBIGIOUS" (index NE 0). ....; PROCEDURE special; ! The programmer may specify his own procedure special ! (with exactly that name and no parameter). Since it ! is virtual the local procedure will be called when the ! user types in '!%'. ! Note that the programmer may implement code for analysing ! the rest of the currentfile.image following the '!%'. ! Note also that the special procedure may call other ! procedures which in turn may have parameters. ! This declaration has the sole purpose of avoiding run time ! error ("No virtual match") if the programmer has not ! declared his own special procedure. ; ....; PROCEDURE cmdclose; ! This procedure closes all open input SAFEIO files. ! If no input file is used a message is printed. ; ....; PROCEDURE recordclose; ! This procedure will close the recording (log) file. ! If no recordfile is open no action is taken. ; ....; PROCEDURE recordappend; ! This procedure closes the current recording file and opens ! it again in append mode. The programmer may insert calls to ! recordappend whenever he wants this kind of checkpoint. ! The user may call the procedure by typing in '!+'. ; ....; CLASS fileitem(file,filename,wait); VALUE filename; TEXT filename; Page 17 5. SUMMARY OF CLASS SAFEIO ATTRIBUTES ! Class fileitem describes the elements in the input ! file stack. ! Since input file calls ('!<' and '!') may be nested we ! need this class. The currentitem (REF (fileitem) ) ! always points at the top of the stack. Usually the ! currentfile (REF (Infile) ) points at currentitem.file. ! However when an illegal or invalid input has been ! read, currentfile will temporarly be switched to Sysin. ! The filename is used to remember the filenames of the input ! files. ! The wait attribute flags the wait/nowait state of the input ! operations. ; REF (Infile) file; BOOLEAN wait; BEGIN REF (fileitem) p,s; PROCEDURE up(x); REF (fileitem) x; ! The procedure up will add a new input file to ! the stack. ! The new file will be opened. ; ....; PROCEDURE down; ! This procedure removes the top element of the ! stack if not equal to Sysin (when a message will ! be issued). ; ....; END OF FILEITEM; BOOLEAN PROCEDURE nohelp; ! The nohelp procedure issues a message that no special help ! information is available. The programmer is however ! encouraged to define his specific help procedures ! when using the request procedure. ; ....; BOOLEAN PROCEDURE help(message); NAME message; TEXT message; ! This procedure will display the contents of message on the ! user's terminal. If the message is longer than Sysout.Length ! it will be typed out with a new line at the first blank ! found after scanning the (rest of the) text from the right ! starting at Sysout.Length positions from start. ....; Page 18 5. SUMMARY OF CLASS SAFEIO ATTRIBUTES BOOLEAN PROCEDURE intinput(result,valid); ! This procedure checks that the rest of the ! currentfile.image contain exactly one integer item ! (and nothing more). ! If so syntaxok will be flagged true (so that the ! errormessage in the request may be printed) and the intinput ! will return the value of the dynamically evaluated ! parameter valid (which usually is a boolean expression). ! Otherwise a message will be issued and syntaxok will ! be flagged false. ; NAME result,valid; INTEGER result; BOOLEAN valid; ....; BOOLEAN PROCEDURE realinput(result,valid); ! This procedure checks a real item. Otherwise as intinput. ; NAME result,valid; REAL result; BOOLEAN valid; ....; BOOLEAN PROCEDURE longrealinput(result,valid); ! This procedure checks a real item in double ! precision. The syntax checking does not differ from that ! in realinput, but the result parameter is long real so ! that long results may be returned. ; NAME result,valid; LONG REAL result; BOOLEAN valid; ....; BOOLEAN PROCEDURE boolinput(result); NAME result; BOOLEAN result; ! The boolinput procedure has one parameter only. The ! validity check is of course unnecessary for boolean ! parameters. Accepted input depends on the contents ! of the SAFEIO.language file. ! The input line may contain lower case letters. ! In the English case it is YES, NO, TRUE OR FALSE. ! P} svenska g{ller JA, NEJ, SANN eller FALSK.; ....; BOOLEAN PROCEDURE textinput(result,valid); ! This procedure returns a copy of the stripped ! rest of the input line. ! The syntax is always considered correct.; NAME result,valid; TEXT result; BOOLEAN valid; ....; PROCEDURE request(prompt,default,inputok,errormessage,help); ! The request procedure has the following parameters: ! Prompt is the prompting question, often ending with a ! prompting character as ':'. Page 19 5. SUMMARY OF CLASS SAFEIO ATTRIBUTES ! Default is the default text value. If default action is ! to be prohibited, the nodefault variable should ! be used. ! Inputok shall become true if the input is to be accepted, ! else false. Usually the actual parameter is a ! call to an ***input procedure.; ! Errormessage is a text that will be printed if inputok is ! is false and syntaxok is true (c.f. comment ! for intinput). ! Help is a boolean parameter which will be ! evaluated each time the user starts his answer ! with a questionmark '?'. !; VALUE prompt; NAME default,errormessage,inputok,help; TEXT prompt,default,errormessage; BOOLEAN inputok,help; ....; PROCEDURE nooverride; ! A call of nooverride shortcircuits the '!&' override ! validity test facility. See procedure switchtest. ; ....; PROCEDURE switchtest(mustprompt,continue,help); ! This procedure takes care of all input lines starting with ! '!' or '?'. ; LABEL mustprompt,continue; PROCEDURE help; ....; PROCEDURE switchhelp; ! This procedure prints information on the SAFEIO commands. ; ....; PROCEDURE cmdswitch(c,continue); CHARACTER c; LABEL continue; ! This procedure takes care of !< and !_ commands. ; ....; PROCEDURE recordswitch; ! This procedure takes care of the !> command. ; ....; PROCEDURE closefiles; ! Close all open input and recording SAFEIO files. ; ....; Page 20 5. SUMMARY OF CLASS SAFEIO ATTRIBUTES REF (Infile) currentfile; REF (fileitem) currentitem; TEXT cmdbuffer,mainprompt,recordname,recordbuffer, nodefault,defaultextension,posfield,u; TEXT ARRAY message[1:91]; BOOLEAN trace,syntaxok,displayprompt,displayinput, displaydefault,inputsaved,checkprompt,overrideflag, waitforsysin; REF (Outfile) recordfile; INTEGER margin,cmdcount,maxcmdfiles,reqcount; CHARACTER cmdchar,recordchar,displaychar,tracechar, promptswitchchar,switchchar,cmdnowaitchar,helpchar, inputchar,promptingchar,defaultquote,closechar, commentchar,appendchar,specialchar,overridechar; ! Length of images may be increased. ; u:- Blanks(20); maxcmdfiles:= 10; cmdbuffer:- Blanks(IF Length > 80 THEN Length ELSE 80); recordbuffer:- Blanks(cmdbuffer.Length); readmessages; ! Set up initial values. ; nodefault:- message[76]; defaultextension:- message[77]; checkprompt:= syntaxok:= displaydefault:= displayprompt:= displayinput:= trace:= TRUE; currentfile:- Sysin; currentitem:- NEW fileitem(currentfile,message[78],waitforsysin); ! May be changed to zero if no indentation of answers ! is wanted. Could also be increased if very long questions. ; margin:= 35; ! All these characters may be changed. However be ! carefull for clashes. See procedure switchtest about the ! testing order. Note the possibility to shortcircuit ! a facility by setting the corresponding character ! to ' '. ; cmdchar:= '<'; recordchar:= '>'; helpchar:= '?'; displaychar:= '/'; tracechar:= '['; promptswitchchar:= '*'; inputchar:= '='; Page 21 5. SUMMARY OF CLASS SAFEIO ATTRIBUTES switchchar:= '!'; cmdnowaitchar:= '_'; defaultquote:= '/'; promptingchar:= ':'; specialchar:= '%'; overridechar:= '&'; appendchar:= '+'; commentchar:= ';'; closechar:= '^'; ! Initializing recordfile from start. ; IF savefilename =/= NOTEXT THEN BEGIN Sysin.Image:= savefilename; Sysin.Setpos(1); recordswitch; Sysin.Setpos(0); END; ! Eliminating page skipping on Sysout. ; INSPECT Sysout WHEN Printfile DO Linesperpage(-1); INNER; ! Jump here if Sysin.Endfile is TRUE:; eof: closefiles; ! NOTE. SAFEI and SIMEI has no such procedure.; END of safeio; Page 22 6. RESTRICTIONS 5. RESTRICTIONS The following restrictions are valid for the SAFEIO version 4.0. 1. Input texts will be stripped of blanks from the right and stripped of blanks and tabs from the left. 2. The input starting with "?" cannot be transferred to a text. 3. Texts starting with the current value of switchchar (initially '!') cannot be transferred. 4. The image length of sysout may not be less than the longest text in the message file. 5. Length of input lines may not exceed image length of sysout. 6. Input lines ending with formfeed (FF) or vertical tab (VT) will be ignored by SAFEIO. Page 23 7. INDEX 6. INDEX Additional safeio commands . . 13 Append mode . . . . . . . . . 11 Appendchar . . . . . . . . . . 20 Boolinput . . . . . . . . . . 7-8, 18 Checkpoint. . . . . . . . . . 16 Checkprompt . . . . . . . . . 13, 20 Checkvalidity . . . . . . . . 8 Class fileitem . . . . . . . . 17 Class safei . . . . . . . . . 2 Closechar . . . . . . . . . . 20 Closefiles . . . . . . . . . . 19-20 Cmd . . . . . . . . . . . . . 20 Cmdchar . . . . . . . . . . . 20 Cmdclose . . . . . . . . . . . 16 Cmdname . . . . . . . . . . . 20 Cmdnowaitchar . . . . . . . . 20 Cmdswitch . . . . . . . . . . 19 Commandhelp . . . . . . . . . 9, 16 Commandmessage . . . . . . . . 8, 16 Commentchar . . . . . . . . . 20 Comments . . . . . . . . . . . 12 Control-Z . . . . . . . . . . 12 Controlling input files . . . 11 Controlling log files. . . . . 11 Currentfile . . . . . . . . . 20 Currentitem . . . . . . . . . 20 Default . . . . . . . . . . . 19 Defaultextension . . . . . . . 20 Defaultquote . . . . . . . . . 5, 20 Defaultvalue . . . . . . . . . 5 Displaychar . . . . . . . . . 20 Displaydefault . . . . . . . . 20 Displayinput . . . . . . . . . 20 Displayprompt . . . . . . . . 20 Down . . . . . . . . . . . . . 17 End-of-file on Sysin . . . . . 12 Eof, virtual label . . . . . . 12 Errormessage . . . . . . . . . 5, 18-19 File status messages. . . . . 14 Fileitem . . . . . . . . . . . 16 Formal parameters . . . . . . 2 Formats . . . . . . . . . . . 11 Fracput . . . . . . . . . . . 15 Help . . . . . . . . . . . . . 6, 19 Help procedure . . . . . . . . 9 Helpchar . . . . . . . . . . . 20 Inputchar . . . . . . . . . . 20 Inputok . . . . . . . . . . . 5, 19 Inputsaved . . . . . . . . . . 20 Intinput . . . . . . . . . . . 7-8, 18 Intput . . . . . . . . . . . . 15 Irange . . . . . . . . . . . . 15 Language . . . . . . . . . . . 15 Language parameter . . . . . . 2 Log file . . . . . . . . . . . 2 Log file. . . . . . . . . . . 11 Longrealinput . . . . . . . . 7-8, 18 Mainprompt . . . . . . . . . . 20 Margin . . . . . . . . . . . . 20 Menu . . . . . . . . . . . . . 8 Meny . . . . . . . . . . . . . 8 Message . . . . . . . . . . . 20 Message files . . . . . . . . 2 Nodefault . . . . . . . . . . 5, 20 Nohelp . . . . . . . . . . . . 17 Nohelp procedure . . . . . . . 9 Nooverride . . . . . . . . . . 19 Nooverride. . . . . . . . . . 13 Outline . . . . . . . . . . . 15 Outofirange . . . . . . . . . 15 Outofrange . . . . . . . . . . 16 Overridechar . . . . . . . . . 13, 20 Overrideflag . . . . . . . . . 20 Posfield . . . . . . . . . . . 20 Printint . . . . . . . . . . . 15 Printreal . . . . . . . . . . 15 Procedure special . . . . . . 16 Prompt . . . . . . . . . . . . 18 Promptingchar . . . . . . . . 20 Promptingchar. . . . . . . . . 5 Promptingquestion . . . . . . 5 Promptswitchchar . . . . . . . 20 Range . . . . . . . . . . . . 15 Read in a stepwise manner . . 12 Realinput . . . . . . . . . . 7-8, 18 Realput . . . . . . . . . . . 15 Record . . . . . . . . . . . . 20 Recordappend . . . . . . . . . 16 Recordchar . . . . . . . . . . 20 Recordclose . . . . . . . . . 16 Recordfile . . . . . . . . . . 20 Recordname . . . . . . . . . . 20 Recordswitch . . . . . . . . . 19-20 Request . . . . . . . . . . . 5, 18 Restrictions . . . . . . . . . 22 Safei class . . . . . . . . . 10 Safeio command . . . . . . . . 10 Safmin . . . . . . . . . . . . 2 Savefilename . . . . . . . . . 15 Sime . . . . . . . . . . . . . 2 Simeio . . . . . . . . . . . . 2 Simmin . . . . . . . . . . . . 2 Simulation, using SAFEIO . . . 2 Special . . . . . . . . . . . 13, 16 Specialchar . . . . . . . . . 20 Superseed the input . . . . . 12 Switchchar . . . . . . . . . . 13, 20 Switches . . . . . . . . . . . 13 Switchhelp . . . . . . . . . . 19 Switchtest . . . . . . . . . . 19 Syntax and validity checking . 5 Syntaxok . . . . . . . . . . . 18, 20 Syntaxok flag . . . . . . . . 5 Textinput . . . . . . . . . . 7-8, 18 Trace . . . . . . . . . . . . 20 Tracechar . . . . . . . . . . 20 Triggering characters . . . . 13 Up . . . . . . . . . . . . . . 17 Wait . . . . . . . . . . . . . 17 Wait attribute . . . . . . . . 17 Waitforsysin . . . . . . . . . 20 ^z . . . . . . . . . . . . . . 12