diff options
Diffstat (limited to 'pkg/language/doc/stty.hlp')
-rw-r--r-- | pkg/language/doc/stty.hlp | 589 |
1 files changed, 589 insertions, 0 deletions
diff --git a/pkg/language/doc/stty.hlp b/pkg/language/doc/stty.hlp new file mode 100644 index 00000000..8556a43b --- /dev/null +++ b/pkg/language/doc/stty.hlp @@ -0,0 +1,589 @@ +.help stty Feb88 language +.ih +NAME +stty -- set/show terminal characteristics +.ih +USAGE +stty [terminal] +.ih +PARAMETERS +.ls terminal +The logical name of the terminal to be used, i.e., the name of the device +given in the \fIdev$termcap\fR file. +.le +.ls baud = 9600 +Set to some nonzero value to inform the VOS of the baud rate; the software +does not automatically sense the baud rate. The baud rate must be known to +accurately generate delays. +.le +.ls ncols = 80 +The logical width of the screen in characters; may be set to some value less +than the physical width to produce more readable output on very high resolution +terminals. +.le +.ls nlines = 24 +The logical height of the screen in characters. +.le +.ls show = no +Show the current terminal driver settings. The \fIshow\fR function is +automatically enabled if \fIstty\fR is called with no arguments. +.le +.ls all = no +Show all terminal driver settings, including those which are not currently +in use. Setting \fIall\fR automatically sets \fIshow\fR. +.le +.ls reset = no +Reset the terminal driver settings to their default (login time) values. +Note that the terminal driver is not a task in the normal sense but is always +active, and once a parameter is set the new value is retained indefinitely. +.le +.ls resize = no +Recompute the terminal screen size parameters, \fBttyncols\fR and +\fBttynlines\fR, and update their values in the environment. +If the terminal supports runtime querying of the screen size it will be +queried (allowing the screen size to change dynamically at runtime), +otherwise the values from the termcap entry for the terminal will be used. +.le +.ls clear = no +Clear the function(s) which follow on the command line, e.g., +"clear ucasein ucaseout" is equivalent to "ucasein=no ucaseout=no". +.le +.ls ucasein = no +Map terminal input to lower case, e.g., when working on an old monocase +terminal, or on a modern terminal with the shiftlock key on. +.le +.ls ucaseout = no +Map terminal output to upper case. +.le +.ls login = "home$ttyin.log" [off] +Log all input from the terminal to the named text file. +.le +.ls logio = "home$ttyio.log" [off] +Log all terminal i/o to the named text file. May not be used if either +\fIlogin\fR or \fIlogout\fR mode is in effect, and vice versa. +.le +.ls logout = "home$ttyout.log" [off] +Log all output to the terminal to the named text file. +.le +.ls playback = "home$ttyin.log" [off] +Divert terminal driver input to the named "stty login" style text file, +i.e., take input from a file instead of from the terminal. The effect is +to exactly repeat a previous terminal session executed with \fIlogin\fR +mode in effect, e.g., to test or demo software. +.le +.ls verify = no +If \fIverify\fR is enabled during \fIplayback\fR mode the terminal driver +will read a key from the keyboard before executing each command in the +logfile. Tap the space bar to execute the command, \fIq\fR to terminate +playback mode, or \fIg\fR to continue execution with \fIverify\fR mode +disabled. Typing any other key causes a help line to be printed. +.le +.ls delay = 500 (msec) +If \fIverify\fR is disabled during \fIplayback\fR mode the terminal driver +will pause for \fIdelay\fR milliseconds before executing each logfile command. +.le + +.ih +DESCRIPTION +The \fIstty\fR task is used to set or display the terminal device +characteristics and VOS terminal driver options. +Without arguments, \fIstty\fR prints the current characteristics of the +terminal. The default terminal type can be changed by setting \fIttyname\fR. +The terminal characteristics \fIncols\fR, \fInlines\fR or \fIbaud\fR, +may be changed by typing new values explicitly on the command line. + +The most common use of \fIstty\fR is to inform IRAF of the type of terminal +being used, e.g., + + cl> stty vt100 + +would set the terminal type to "vt100". An error message will be printed +unless an entry for the named terminal is present in the \fBtermcap\fR file; +if the named terminal is a graphics terminal, there must also be an entry +in the \fBgraphcap\fR file. + +To find out about the current terminal settings, type + +.ks +.nf + cl> stty +or + cl> stty all +.fi +.ke + +A limited number of terminal driver options may also be set. In particular, +the VOS terminal driver (not to be confused with the host operating system +terminal driver, a lower level facility) implements facilities for case +conversion upon input or output, and for logging all i/o to the terminal +and playing back a terminal session logged in a file. + +.ih 4 1 +Case Conversions +The \fBucasein\fR option, if set, +will cause all upper case terminal input to be mapped to lower +case (e.g., when working from an old monocase terminal). In this mode, +individual upper case characters may be input by preceding them with the +escape character ^, e.g., "^MAKEFILE" equates to "Makefile". The full set +of ^ escapes is summarized below. The option \fBucaseout\fR will cause all +terminal output to be mapped to upper case. Preceding either or both of +these option keywords by \fBclear\fR causes the options to be cleared. + +.ks +.nf + ^ shift next character to upper case + ^+ shift lock (caps lock) + ^- clear shift lock + ^^ the character ^ +.fi +.ke + +Case shifting is disabled in raw mode, e.g., while in cursor mode, and in +\fBeparam\fR. All standard IRAF software, however, will sense that ucase +mode is set before entering raw mode, and will behave as expected. Ucase mode +is also disabled by the STDGRAPH kernel whenever the graphics workstation is +activated. + +Note that ^ is also the history meta-character, hence ^^ must be used when +in \fIucasein\fR mode to pass a single ^ to the CL history mechanism. +In cursor mode, upper case keystrokes are intercepted by cursor mode unless +escaped with a backslash. Escaped keystrokes are mapped to lower case by +cursor mode if \fIucasein\fR mode is in effect, terminating cursor mode and +returning a lowercase key to the applications program. + +.ih +Recording Terminal I/O +The terminal driver options \fBlogio\fR, \fBlogout\fR, and \fBlogin\fR +may be used to log, respectively, all terminal i/o, all output to the terminal, +or all input from the terminal. The logfile names are "home$ttyin.log", +"home$ttyout.log", or "home$ttyio.log", unless a different logfile name is +specified by the user. All logfiles are standard textfiles containing only +printable characters. + +Terminal i/o logging is especially useful for debugging \fItermcap\fR and +\fIgraphcap\fR entries for new terminals. All IRAF terminal i/o is logged, +including raw mode i/o and graphics output. Terminal i/o from foreign tasks +or OS escapes is not logged since these tasks bypass the VOS to talk directly +to the user terminal. + +Each sequence of characters read from or written to the terminal (via a zgettt +or zputtt call to the driver) appears as one logical line of text in the +logfile, delimited by the data character \n (newline). +When reading from a terminal in raw mode, each input character will appear +on a separate line in the logfile with no newline, since only a single +data character is read at a time during raw mode input. +All control characters embedded in the data, including newline terminators, +are rendered into printable form. Long lines are broken near the right margin, +adding an escaped newline and indenting continuation lines 4 spaces. + +Terminal i/o logging is intended primarily for debugging purposes, rather +than for logging user commands; the IRAF command language provides a more +user friendly facility for command logging (see the \fIlanguage.logging\fR +manpage for further information on the CL command logging facilities). +All unprintable ASCII codes are rendered in the logfile in a printable form +intended to eliminate any ambiguity regarding the exact sequence of characters +sent to or received from the terminal. In addition to the standard escape +sequences \n, \t, \r, etc., the following special escape sequences are used: + +.ks +.nf + \\ \ + \^ ^ + ^@ NUL (ascii 000) + ^[A-Z] ctrl/a - ctrl/z (ascii 001 - 032) + ^[ ESC (ascii 033) + ^\ FS (ascii 034) + ^] GS (ascii 035) + ^^ RS (ascii 036) + ^_ US (ascii 037) + \s blank (ascii 040) + \<newline> long i/o record continued on next line +.fi +.ke + +These special escape sequences, plus any ordinary characters, constitute the +\fIdata\fR recorded in the logfile. The following additional escape +sequences are used to record information about the logging session itself in +the logfile. + +.ks +.nf + \# rest of line is a comment + \T terminal device name at log time + \G stdgraph device name at log time + \O timestamp written at start of log session +.fi +.ke + +Any whitespace (unescaped blanks, tabs, or newlines) appearing +in the logfile is put there only to make the file more readable, and is not +considered data. Blocks of text may be enclosed in a logfile delimited by +escaped curly brackets, i.e., "\{ ... \}". This is used for the \fBplayback\fR +facility described in the next section. + +.ih +Playback of Terminal Sessions +The terminal driver has the capability not only of recording terminal i/o +in a file, but of taking input from a logfile to repeat a sequence of commands +previously entered by the user with terminal input logging enabled. +Note that we are not talking about simply playing back recorded output, +but of actually executing an arbitrary sequence of commands formerly entered +by the user. This is different from executing a sequence of commands entered +into, for example, a CL script, because \fIall\fR input is recorded, +including not only the commands, but also all responses to parameter queries, +all rawmode keystroke input, and all graphics cursor input occurring +interactively during execution of the recorded commands. +These \fBplayback scripts\fR are useful for preparing automated demos or +tutorials of complex software, and for preparing scripts to be used to +automatically test software. + +The basic sequence used to record and later playback a terminal session is as +follows: + +.ks +.nf + cl> stty login [= logfilename] + <execute an arbitrary sequence of commands> + cl> stty clear login # or stty reset + cl> stty playback [= logfilename] +.fi +.ke + +Naturally, the playback script must be executed in the same context as when +the script was generated, i.e., one must ensure that all necessary packages +have been loaded, that the current directory has been set to the proper +value if it matters, and so on. It is not necessary to execute a playback +script on the same type of video terminal or graphics terminal as was +used when the script was recorded; since only the terminal input is being +recorded, playback scripts are device independent and may be played back on +any terminal. + +If desired the commands necessary to establish the starting context may be +recorded as part of the script. If the script is going to be repeatedly +executed it may also be desirable to include commands at the end of the +recording session to clean up, e.g., deleting any temporary files created +during the recording session. If anything has changed which causes a command +to abort during execution of a playback script, normal terminal input is +automatically restored, aborting the script. Note that if the "stty playback" +command gets into the playback script for some reason, e.g., because the +"stty reset" (or "stty login=no" etc.) was omitted, then the script will +repeat indefinitely. This may or may not be what was desired. + +Two \fBstty\fR command line arguments are provided for controlling the +execution of a playback script. By default, when a script is played back +the terminal driver will pause for \fBdelay\fR milliseconds after echoing +the command to be executed, to give the user watching the playback a chance +to read the command. Aside from this programmed delay, execution is fully +automated. For example, + + cl> stty play=filename delay=2000 + +would playback the file "filename", with a delay of 2 seconds following echo +of each line of recorded input text. + +Alternatively, the user may request that the driver pause and wait for the +user to type a key before executing each logged command (i.e., before +returning each input line of text to the application). This is called the +\fBverify\fR option. In verify mode, the following keystrokes may be +entered to continue execution: + +.ks +.nf + space, return continue execution + 'g' go: turn verify mode off and continue + 'q' quit: terminate playback mode +.fi +.ke + +Verify mode is automatically disabled during raw mode input since the input +consists of single characters and an inordinate number of verification +keystrokes would be required from the user. Either of the \fBverify\fR or +\fBdelay\fR options may be overridden by control directives embedded in the +playback text, as we shall see in the next section. + +.ih +Customizing Playback Scripts +Although playback scripts may be and often are generated and played back +without ever looking at or modifying the actual playback script, there are +cases where it may be desirable to do so. For example, when generating a +script to be used as a demo or tutorial, it may be desirable to insert +explanatory text into the script to be printed out on the terminal when +the script is played back, to explain to the person running the script what +is going on. Likewise, it may be desirable to control the verify and delay +options at a granularity finer than the entire script. + +Explanatory text and/or playback control directives may be inserted into the +script using the following construct: + + "\{" [<control_directives>] [<text>] "\}" + +where \fBcontrol_directive\fR refers to one of the following: + +.ks +.nf + %V+ turn verify on + %V- turn verify off + %NNN set \fBdelay\fR to NNN milliseconds +.fi +.ke + +For example, + +.ks +.nf + dir\{%5000 + [list the current directory]\}\n +.fi +.ke + +would cause the following to be output, followed after a 5 second delay by a +listing of the current directory (the "<>" is not printed, but shows where +the cursor will be during the 5 second pause): + +.ks +.nf + cl> dir + [list the current directory]<> +.fi +.ke + +Note that the newline following the "\{%5000" in the above example is textual +data, and will be output to the terminal along with whatever follows, up until +the closing brace, i.e., "\}". The amount of text to be output may be +arbitrarily large; there is a builtin limit (currently 4096 characters), +but it is unlikely that this limit will ever be exceedd, since no more than +one pageful of text should ever be output in a single call. + +Normally, a %V or %NNN control directive refers only to the input record +with which the enclosing \{...\} control block is associated. The global +value of \fIverify\fR or \fIdelay\fR is temporarily overridden for the +current record. If desired, the global value may instead be permanently +modified by adding a ! after the %, e.g., + + \{%!V-%3000...\} + +would permanently disable \fIverify\fR (unless a %V+ or %!V+ directive +follows later in the script) then output the text "..." followed by a 3 +second delay. + +To know where to insert the control directives into a script, it is +important to understand that input from the script is \fBrecord oriented\fR, +and that a control directive refers to the input record with which it is +associated. An input record is a single \fIlogical\fR line of text in the +input file. Note that a logical line of text may span multiple physical lines, +if the newlines are escaped or present as textual data within a control +directive. The position of the control directive within the input record +determines where the explanatory text will be positioned relative to the +input text, when both are echoed to the terminal. Any programmed delay or +pause will always occur after echoing the full record on the terminal. + +.ih +Raw Mode Playback +When a program is executing which reads from the terminal in raw mode, +each character is read from the terminal as soon as it is typed, and +input characters are not echoed to the terminal unless the application +explicitly does the echoing. Examples of programs which use raw mode input are +\fIeparam\fR and \fIpage\fR, which are keystroke driven, and any program +which reads the \fBgraphics cursor\fR, since a graphics cursor read uses raw +mode input. + +Playback works much the same for raw input mode as for line input mode, +except that during raw mode input the input records normally consist of +single characters, rather than entire lines of text. By default, \fBverify\fR +is turned off while reading from the terminal in raw mode, to avoid having +the user verify each individual character. Also, the terminal driver will not +echo text read from the playback file in raw mode, since the text would not +have been echoed if playback were not in effect. + +.ih +Cursor Reads in Playback Mode +A typical Tektronix style cursor read will look something like the following, +as recorded in an \fBstty login\fR script file following a recording session: + +.ks +.nf + K + 3 + ) + ' + * + \r +.fi +.ke + +This six character sequence consists of the key value of the cursor read (K), +followed by the [x,y] cursor coordinate encoded as four ascii characters +("3)'*" in this case), followed by the "GIN mode terminator" character or +characters, normally a single CR (\r). Of course, if the terminal is not a +Tektronix compatible terminal (e.g., DEC-Regis), the details will differ +from this example. + +The single character per line format of a cursor read reflects the fact that +each input record is a single character when reading from the terminal in +raw mode. For the purposes of playback, however, such a sequence may be +reformatted on a single line if desired, to improve the readability of a +script (the extra whitespace in the second example is ignored, since if a +space were data it would appear as \s). + +.ks +.nf + K3)'*\r +or + K 3 ) ' * \r +or + K + 3)'* + \r +etc. +.fi +.ke + +To set the values of the \fIverify\fR or \fIdelay\fR parameters for a cursor +read one may insert the \{...\} sequence anywhere before the \r delimiter +is returned to the application, e.g., + + K3)'*\r\{%V+\} + +would do, since the sequence shown forms one logical input record in the +playback file, and the control directive included will be processed before +any input data characters from the record are returned to the application. +If the multi-line form of a cursor read is used, the control directive may +be tacked onto any of the records K through \r in the example. + +Output of explanatory text in an interactive graphics session is a little +more tricky, since if one is not careful the text will come out while in +graphics mode, causing it to be rendered as random lines drawn all over the +screen. A safe technique for outputting comments during playback of a +graphics session is to output the text to the \fBstatus line\fR, +taking care of course to output only a single line of text at once +(since multiple lines written to the status line would rapidly flash by, +leaving only the last line visible on the screen). We can do this by taking +advantage of the : command sequence, which can be used to put the terminal +temporarily into status line output mode. + +.ks +.nf + :####\r + \{%5000 + This is a status line comment\} + ^U\177 +.fi +.ke + +For example, insertion of the above sequence between any two cursor reads +in a recorded interactive graphics session would cause the text +"This is a status line comment" to be written to the status line, +with normal execution of the script occurring after a 5 second delay +followed by erasure of the status line and exit from status line mode +(due to the ctrl/u and rubout inserted as data after the colon cursor read). + +While executing an interactive graphics session via playback, cursor values +are read from the playback script instead of from the terminal, hence the +user never sees the actual cursor crosshairs on the screen. To give the +user some idea of what is going on, the key values of successive cursor mode +keystrokes are echoed in ascii down the left side of the screen, starting at +the upper left. The keystroke value is also echoed at the position of the +cursor, to indicate where the cursor crosshairs would have been in an actual +interactive session. + +.ih +Sample Playback Script +We conclude with an example of a complete playback script which can be +entered into a file and played back to demonstrate some of the features of +the \fIimplot\fR task in the PLOT package (the PLOT package must already +be loaded). + +.ks +.nf + \O=NOAO/IRAF V2.6 iraf@pavo Fri 20:09:21 01-Jan-88 + \T=gterm40 + \G=gterm + \n + imheader\sdev$pix\slo+\suser-\n\{%3000 + [Print image header]\} + \n + implot\sdev$pix\n + J3..8\r J3-,)\r J3+)9\r K3)'*\r J3((0\r l3&';\r + :####\r + \{%5000 + [use key `o' to overplot]\} + ^U\177 + o3&';\r + K3&';\r K3%*(\r K3#,3\r l3!.?\r + :####\r + \{%5000 + [key `X' expands the plot in x]\} + ^U\177 + X3!.?\r + qXXXX\r + stty\sreset\n +.fi +.ke + +.ih +EXAMPLES +1. Show the current terminal type and attributes. + +.nf + cl> stty + Terminal=vt640, ncols=80, nlines=24, 9600 baud + ucasein=no, ucaseout=no, logio=off +.fi + +2. Tell the system that the terminal is a vt100. + + cl> stty vt100 + +3. Set the baud rate of the current terminal to 9600 baud. + + cl> stty baud=9600 + +4. Set the width of the screen to 80 columns, e.g., to get short menus on a +workstation where the physical number of columns may be much greater than 80. + + cl> stty ncols=80 + +5. Set the terminal type to 4012 and set ucasein and ucaseout modes. + + cl> stty 4012 ucasein ucaseout + +6. Clear the ucasein and ucaseout modes. + + cl> stty clear ucasein ucaseout + +7. Record a terminal session in the default logfile (home$ttyio.log). + + cl> stty logio + +8. Record input from the terminal in the file "demo". + + cl> stty login=demo + +9. Terminate logging and playback the terminal session recorded in this file. + +.nf + cl> stty reset + cl> stty playback=demo +.fi +.ih +BUGS +1. Note that, when working with a terminal which supports runtime querying +of the screen size, the screen size is queried when the \fBstty resize\fR +command is executed, rather than when the terminal screen actually changes size. +Hence, the screen size parameters printed by a command such as \fBstty show\fR +will not necessarily reflect the actual screen size. \fBstty resize show\fR +queries the terminal for the screen size, hence should always be correct. +The screen size is automatically queried whenever the \fIpage\fR or \fIhelp\fR +tasks are run. + +2. The terminal screen size is determined by querying the terminal for the +screen size, and reading the response back (this technique has the advantage +that it works remotely over IPC and network connections, and is host system +independent). If the terminal does not respond for some reason, e.g., +because the terminal type has been set improperly and the terminal does not +support the query function, then \fBstty\fR will hang. Typing a carriage +return causes execution to resume, after which the error should be corrected. +.ih +SEE ALSO +language.logging, fio$zfiott.x, etc$sttyco.x +.endhelp |