xt.1
上传用户:duobangkj
上传日期:2007-01-07
资源大小:70k
文件大小:43k
源码类别:

Telnet客户端

开发平台:

Unix_Linux

  1. XT(1)      UNIX        (printed 7/8/97)
  2. Name
  3. xt - communications program using telnet
  4. Syntax
  5. xxxxtttt [ [----nnnnhostname] | [----ssssscript] ]
  6. Description
  7. XXXXtttt connects to a remote host using the telnet protocol. It can manage
  8. an interactive session or be called from ccccrrrroooonnnn(C).  It has various means
  9. for transferring files between computers, and can be partially or
  10. totally under the control of scripts.
  11. XXXXtttt starts up by reading the file ._x_t_r_c, which is sought for in this
  12. order: in "XT_PATH", in the current directory, in your _H_O_M_E directory,
  13. or in a default directory defined at compile time. This startup file
  14. may contain any of the valid _S_E_T commands described below. XXXXtttt then
  15. displays the current settings, and presents an <_X_T> prompt, unless the
  16. ----ssss option was used.
  17.    _O_p_t_i_o_n_s
  18. ----nnnn_h_o_s_t_n_a_m_e Connect to the specified _h_o_s_t_n_a_m_e, which may be given as a
  19.    Fully Qualified Domain Name (e.g., who.excitement.com) or as
  20.    an IP octet (e.g., 198.207.210.2). If a telnet command
  21.    issued from a shell prompt can reach a site, then xxxxtttt can
  22.    reach it too.
  23. ----ssss_s_c_r_i_p_t   Execute the specified _s_c_r_i_p_t after program startup.
  24. The two options are mutually exclusive.
  25.    _E_n_v_i_r_o_n_m_e_n_t
  26. The environment may contain a variable called "XT_PATH", consisting of
  27. colon separated absolute paths to directories. If this variable is set
  28. to, say, "/usr/joe/xt:/usr/lib/xt", then those two directories are the
  29. first places searched for any scripts.
  30.    _C_o_m_m_a_n_d _M_o_d_e
  31. When entering characters in command mode (that is, at the <_X_T> prompt),
  32. control characters echo as ^x, where "x" is the control character that
  33. was entered. Backspacing (using whatever key is defined in the current
  34. environment) backspaces over both positions of the displayed control
  35. character, as expected.
  36. An "interpreted" key can be added in a manner similar to that of vvvviiii(C);
  37. simply type ^V followed by the character to insert (backspace, delete,
  38. carriage return, or newline).
  39. The following commands are available at the <_X_T> command prompt:
  40. cccc
  41. cccciiiissss  Respond to an ENQ signal for a CIS B-Plus protocol
  42.  transfer. This command is used for both uploading and
  43.  downloading from CompuServe.
  44. nnnn _h_o_s_t_n_a_m_e
  45. nnnneeeetttthhhhoooosssstttt _h_o_s_t_n_a_m_e Establish a telnet connection to _h_o_s_t_n_a_m_e, then enter
  46.  terminal mode.
  47. ssss _f_i_l_e
  48. ssssccccrrrriiiipppptttt _f_i_l_e  Execute _f_i_l_e, which contains appropriate xxxxtttt script
  49.  commands. Enters terminal mode when the script is com-
  50.  plete.
  51. sssseeeetttt [_o_p_t_i_o_n_s]  Display or set the parameters used by xxxxtttt. See below.
  52. tttt
  53. tttteeeerrrrmmmm  Enter terminal mode.
  54. xxxx
  55. qqqq
  56. eeeexxxxiiiitttt
  57. qqqquuuuiiiitttt  Exit program. Return to invoking program/shell.
  58. ????
  59. hhhheeeellllpppp  Displays a brief summary of xxxxtttt commands, the SET
  60.  options, and terminal-escape commands.
  61. [Note: a compile-time option can disable the following three options to
  62. prevent any access to shells or other programs outside of xxxxtttt.]
  63. !!!! _c_o_m_m_a_n_d      Execute the specified _c_o_m_m_a_n_d as a child process. If
  64.        _c_o_m_m_a_n_d is omitted, execute a local interactive shell.
  65.        (A space is required between the !!!! and the _c_o_m_m_a_n_d.)
  66. !!!!!!!!        Re-execute the last shell command string.
  67. $$$$ _c_o_m_m_a_n_d      Execute a shell _c_o_m_m_a_n_d with stdin and stdout redirected
  68.        to the telnet socket. This effectively puts the computer
  69.        into a "host" mode.  (A space is required between the $$$$
  70.        and the _c_o_m_m_a_n_d.)
  71.    _U_s_i_n_g _t_h_e _S_E_T _C_o_m_m_a_n_d
  72. The _S_E_T command is used to display and set/reset xxxxtttt's tunable parame-
  73. ters. Any of these commands may be placed in the ._x_t_r_c file which is
  74. read upon starting up xxxxtttt.
  75. Used alone, _S_E_T displays xxxxtttt's current parameters.
  76. The following parameters can be set (note that except in the case of
  77. _n_a_m_es, these commands are case-_i_nsensitive, and that there are alterna-
  78. tive forms of the commands shown on the XT help screen):
  79. set auto on|off Sets the auto-capture feature. When entering terminal
  80. mode, capturing commences without the necessity to
  81. manually request it.
  82. set cfile _n_a_m_e Set the _n_a_m_e of the capture file.
  83. set cis on|off Set response to a CompuServe file transfer request
  84. (<ENQ>). An "on" value specifies that when in terminal
  85. mode, an <ENQ> character will launch a CIS B-Plus pro-
  86. tocol transfer. This parameter should be set "off"
  87. when not connecting to CompuServe, as line noise may
  88. cause a bogus file transfer request.
  89. set cr on|off In uploads using B-Plus protocol, setting this option
  90. "on" will insert a carriage-return after each newline
  91. in an ASCII file. If you expect your ASCII upload to
  92. be captured by DOS users, it is best to set cr "on".
  93. If your ASCII upload is meant strictly for Unix users,
  94. then you may set cr "off".  The B-Plus protocol imple-
  95. mentation used by xxxxtttt will always strip end-of-line
  96. carriage-returns from incoming ASCII files.
  97. set dir _n_a_m_e Set the current working directory.
  98. set menu on|off By default, a one-line menu is displayed above the
  99. <_X_T> prompt to remind the user of options most fre-
  100. quently chosen at this point: "[t]erminal mode [q]uit
  101. [s]cript [?]help".  Setting the option "off" turns off
  102. this display.
  103. set nl on|off If this option is set "on", then newlines are sent as
  104. carriage-returns. If this option is set "off", then
  105. newlines are sent as newlines (carriage-returns are in
  106. any case always sent as carriage-returns).  This
  107. option applies to input from the keyboard, or from a
  108. disk file using the "XXXXCCCCAAAAPPPPEEEE FFFF" facility or a script
  109. "type" command (See below).  This option has no effect
  110. on B-Plus protocol transmissions, and has no effect on
  111. incoming data.
  112. set xcape _c_h_a_r
  113. set escape _c_h_a_r Set the XXXXCCCCAAAAPPPPEEEE character (see below) to _c_h_a_r. This
  114. should be set to some non-printing character (other
  115. than backspace, tab, newline, of course).  The charac-
  116. ter may be entered by depressing the Control key first
  117. and then typing a letter, or by typing a caret (^)
  118. followed by a letter.
  119.    _T_e_r_m_i_n_a_l _M_o_d_e
  120. In terminal mode, all characters typed at the keyboard are sent to the
  121. telnet connection, except that newline characters (0x0A) are translated
  122. to carriage-returns (0x0D) when you have "set nl 'on'"; all characters
  123. received from the telnet connection are displayed on the local terminal
  124. screen.
  125. XXXXCCCCAAAAPPPPEEEE is a key that will, when typed in terminal mode, introduce an xxxxtttt
  126. "escape" command. Don't confuse XXXXCCCCAAAAPPPPEEEE with the <ESCAPE> key.  The
  127. default definition for XXXXCCCCAAAAPPPPEEEE is ASCII 1, or Control-A. It can be rede-
  128. fined at run time with the "set escape _C" command (or it can be rede-
  129. fined in the ._x_t_r_c startup script).
  130. When the XXXXCCCCAAAAPPPPEEEE key is typed in terminal mode, the program will examine
  131. the next key pressed. If this key has been "bound" to perform a certain
  132. function, that function will be performed; otherwise, the second char-
  133. acter is sent to the telnet connection. Thus, to send the XXXXCCCCAAAAPPPPEEEE charac-
  134. ter through the telnet connection, it is necessary to press the key
  135. TWICE.
  136. Thus the ESCAPE key itself would be a terrible choice for XXXXCCCCAAAAPPPPEEEE,
  137. because it is used so often by other programs: if you were logged into
  138. a remote system and running, say, vvvviiii, it would be a great annoyance to
  139. have to hit ESCAPE twice to get it transmitted once.
  140. The following keys (case _i_nsensitive) are bound at startup time. Others
  141. may be added through the binding commands available in xxxxtttt scripts.
  142. Command  Function     Description
  143. XXXXCCCCAAAAPPPPEEEE ////  Help       Display the table of bound keys
  144. XXXXCCCCAAAAPPPPEEEE ????  Help       Display the table of bound keys
  145. XXXXCCCCAAAAPPPPEEEE ffff  _File       Send a file through the telnet connection (ASCII
  146.       transfer).
  147. XXXXCCCCAAAAPPPPEEEE ssss  _Script       XXXXtttt will request the name of a script to execute.
  148. XXXXCCCCAAAAPPPPEEEE yyyy  Capture _Yes  Open the capture file in APPEND mode (text
  149.       received over the telnet connection accumulates
  150.       at the end of the file). If the file is already
  151.       open, a message is printed to that effect.
  152. XXXXCCCCAAAAPPPPEEEE nnnn  Capture _No   Close the capture file. If it wasn't open, a
  153.       message of regret is printed.
  154. XXXXCCCCAAAAPPPPEEEE xxxx  e_Xit       Exit terminal mode back to _<_X_T_> command mode.
  155. XXXXCCCCAAAAPPPPEEEE qqqq  _Quit       Quit xxxxtttt altogether.
  156.    _S_c_r_i_p_t_s
  157. The xxxxtttt script language is intended to be closely similar to the Unix
  158. Bourne shell language. Unfortunately, it isn't identical to the Bourne
  159. shell, so it has the same problem that the aaaawwwwkkkk(C) program does for
  160. those experienced in the C language: an aaaawwwwkkkk script LOOKS like C, but it
  161. isn't, really; and in the same way, an xxxxtttt script LOOKS like a Bourne
  162. shell script, but isn't. So the operation of the Bourne shell, if
  163. you're familiar with it, is useful as an analogy in understanding the
  164. xxxxtttt script language, but only as an analogy.
  165. An xxxxtttt script consists of lists of commands. Commands are set off from
  166. each other within a list by either a newline ('n') or a semicolon (;),
  167. as is the case with the Bourne shell. The semicolon and the newline
  168. have identical effect as command separators, so (anticipating a bit
  169. here) you could say either
  170.   if counter morethan 5
  171.   then
  172.     transmit "bye^M"
  173.     quit
  174.   endif
  175. or
  176.   if counter morethan 5; then transmit "bye^M"; quit; endif
  177. and the result will be the same either way. The newline and the semi-
  178. colon are treated the same way as in the Bourne shell, except that a
  179. newline cannot be quoted so as to remove its interpretation as a com-
  180. mand terminator (in other words, a quoted string cannot contain a new-
  181. line).
  182. Commands are composed of _w_o_r_ds separated by spaces or tab characters,
  183. and a _w_o_r_d can be one of the following:
  184. *  One of the xxxxtttt script language keywords, which are listed below, with
  185.    appropriate explanations.
  186. *  A number, meaning a sequence consisting only of digits, with an
  187.    optional leading minus sign to indicate a negative number.
  188. *  A literal string of characters surrounded by double-quotation marks
  189.    ('"'); such a string can be no longer than 80 characters. A double-
  190.    quotation mark can be imbedded within the string by preceding it
  191.    with a backslash ('"'); when the string is interpreted, the
  192.    backslash is disregarded and the double-quotation mark is treated as
  193.    part of the string. Mismatched quotation marks result in a syntax
  194.    error.
  195. *  The name of a user variable, which can have either a string or a
  196.    numeric value.  The name of a user variable must begin with an
  197.    alphabetic character.
  198. *  The name of a shell environment variable, preceded by a dollar sign
  199.    ('$'). The xxxxtttt script language examines the Unix environment for the
  200.    specified variable and, if such a variable exists, substitutes the
  201.    value of that variable. The result is treated as if it were a quoted
  202.    literal string, and, therefore, should not be more than 80 charac-
  203.    ters long, or else it will be truncated to its first 80 characters.
  204.    Similarly, such an environment variable should not contain a new-
  205.    line.
  206. *  An expression surrounded by back-quotation marks ('`'). This sort of
  207.    expression operates similarly to the Bourne shell's command-substi-
  208.    tution mechanism: the contents of the back-quotes are passed to the
  209.    Bourne shell, and the standard output of the back-quoted command is
  210.    treated as if it were a quoted literal string. Therefore, the
  211.    command's output should not be more than 80 characters long, nor
  212.    contain a newline. Also, the contents of the back-quotes cannot be
  213.    longer than 80 characters, nor contain a newline.
  214. *  An expression introduced by a pound-sign (or number-sign: '#'),
  215.    which is treated as a comment. All characters from the '#' until the
  216.    end of the physical line are ignored. This comment mechanism is the
  217.    same as in the Bourne shell.
  218. *  A limitation of the script language is that only one character
  219.    string can be passed as an argument to any of the script commands.
  220.    The _b_i_n_d__f_u_n_c_t_i_o_n, _b_i_n_d__s_c_r_i_p_t, and _b_i_n_d__s_t_r_i_n_g commands thus need
  221.    to use a decimal digit to represent the key that is to be bound. The
  222.    ASCII value of the the key is employed. As an example, Control-C is
  223.    identified as 3, Control-Z is 26, the ESCAPE key is 27, a space is
  224.    32, the number "1" is 49; letters are case-_i_nsensitive so that iden-
  225.    tifying the bound key as "65" or as "97" will always bind _b_o_t_h "a"
  226.    and "A" to the same command.
  227. Quoted literal strings (and the two other mechanisms that act like
  228. quoted literal strings, shell environment variables and back-quoted
  229. shell commands) may be up to 80 characters long. All other words must
  230. be no longer than 16 characters, and are treated case-independently
  231. (which is to say, uppercase is the same as lowercase); note, though,
  232. that the names of shell environment variables are case-dependent
  233. (uppercase must match uppercase and lowercase must match lowercase),
  234. because they are case-dependent in the shell.
  235. Any word not recognizable within the foregoing categories is treated as
  236. the name of a new user variable. Such a word, if longer than 16 charac-
  237. ters, is considered to be a syntax error.
  238. User variables are created with the 'assign' script keyword, and may
  239. have either numeric or string values. The type of a user variable is
  240. determined by how it's created; if it's assigned to a string, it's a
  241. string variable, and if it's assigned to a number, it's a numeric vari-
  242. able. The value of any user variable can be changed with another
  243. 'assign' command, and numeric variables can be changed to string vari-
  244. ables and vice-versa. Shell environment variables cannot be changed
  245. within an xxxxtttt script, but the value of a shell environment variable can
  246. be assigned to a user variable, and the value of the user variable can
  247. thereafter be changed.
  248. Scripts are contained in ASCII text disk files, one script to a file. A
  249. script can invoke another script as a subroutine with the 'call' key-
  250. word; up to 5 scripts can be nested in this way at any single time.
  251. With all this said, the following list of xxxxtttt script language commands
  252. should be comprehensible. The format "<something>" means that a token,
  253. or word-type, of the "something" type is meant rather than the literal
  254. sequence 'something'.
  255.    _S_c_r_i_p_t _L_a_n_g_u_a_g_e _C_o_m_m_a_n_d_s
  256. Note that all the commands are case-_i_nsensitive!
  257. _a_f_f_i_r_m
  258.     Syntax: affirm
  259.     Reads a string from the terminal, and returns TRUE if the string
  260.     begins with 'y' or 'Y'; otherwise, returns FALSE.  Used in evaluat-
  261.     ing conditional expressions.  The string must be terminated by a
  262.     newline or carriage-return.
  263.     Example:
  264.       echo -n "Continue (y/n)? "
  265.       if affirm
  266.       then
  267. continue
  268.       else
  269. break
  270.       endif
  271. _a_s_s_i_g_n
  272.     Syntax: assign <varname> eq <number>
  273.     assign <varname> eq "string"
  274.     assign <varname> eq "string" ["string"|<varname>] ...
  275.     assign <varname1> eq <varname2>
  276.     assign <varname> eq <script-command>
  277.     Assigns to user variable <varname> the value following "eq"; if
  278.     that value is a number, then <varname> becomes a numeric user vari-
  279.     able; if that value is a string, then <varname> becomes a string
  280.     user variable. If <varname> does not already exist as a user vari-
  281.     able, it is created. Variable space is allocated dynamically, but
  282.     running out of memory space for variables is unlikely. All vari-
  283.     ables are global across scripts that run at the same time via the
  284.     'call' keyword, and all variables vanish when a script, called
  285.     directly from xxxxtttt as opposed to called from another script, exits.
  286.     In other words, variable values are not static except during 'call'
  287.     execution. Variable names cannot be longer than 8 characters. Suc-
  288.     cessive 'assigns' are permissible, and the type of the variable
  289.     changes according to the type of the value following "eq". A user
  290.     variable is destroyed with the 'unassign' keyword.
  291.     If a variable is assigned the value of a script command, then it
  292.     becomes a numeric variable with value TRUE or FALSE, depending on
  293.     the status returned by the script command. If a variable is
  294.     assigned the value of a back-quoted command, it becomes a string
  295.     variable with the value of the first 80 characters of the back-
  296.     quoted command. If a variable is assigned equal to an environment
  297.     variable, it becomes a string variable with the value of the first
  298.     80 characters of the value of the environment variable.
  299.     If the third form given above is used, then the various strings are
  300.     concatenated. A string variable can be created from a numerical
  301.     variable with 'assign "" numvar' or 'assign "" 678'.
  302.     Examples:
  303.       assign numvar eq 5
  304.       assign strvar eq "This variable is a string"
  305.       assign strvar eq "This" " variable is a " 7 " word string"
  306.       assign mydir eq $HOME
  307.       assign numvar2 eq numvar
  308.       assign strvar2 eq strvar
  309.       assign numvar eq true
  310.       assign today eq `date`; echo "today is " today
  311. _b_e_e_p
  312.     Syntax: beep
  313.     Sends a Control-G to the terminal. Useful for alerting the user
  314.     that some event has occurred, for example the end of a lengthy file
  315.     transfer operation.
  316. _b_i_n_d__f_u_n_c_t_i_o_n
  317.     Syntax: bind_function _c_o_d_e "function"
  318.     Bind the character identified by the number specified by _c_o_d_e to
  319.     the xxxxtttt builtin function "function".
  320.     The "function" may be one of the following (case is ignored):
  321.       CAPTEND Turn off terminal mode capture
  322.       CAPTYES Turn on terminal mode capture
  323.       DIVCHAR Send file through the telnet connection
  324.       DOSCRPT Execute script file (prompts interactively)
  325.       EMITSTR Emit string
  326.       ENDCHAR Exit terminal mode
  327.       HLPCHAR Display terminal mode key bindings
  328.       QUITCHR Quit program
  329.       SCRPCHR Prompt for script file
  330.     Example:
  331.       bind_function 26 "quitchr"
  332.     This binds Control-Z to quit the XT program.
  333. _b_i_n_d__s_c_r_i_p_t
  334.     Syntax: bind_script _c_o_d_e "scriptname"
  335.     Bind the character identified by the number specified by _c_o_d_e to
  336.     execute the script named by "scriptname".
  337.     Upon termination of the script, the program will resume terminal
  338.     mode, unless the "quit" script function was executed.
  339.     Examples:
  340.       bind_script 18 "/usr/lib/xt/.rz"
  341.     This binds Control-R to execute the script /usr/lib/xt/.rz. The .rz
  342.     script supplied with the source code contains:
  343.       tty "on"
  344.       echo -n "What files are to be received? "
  345.       read FILES
  346.       transmit "sz -y "
  347.       transmit FILES
  348.       transmit "^M"
  349.       echo "Starting ZMODEM Receive (rz -y)"
  350.       pipe "rz -y"
  351.     Pressing XXXXCCCCAAAAPPPPEEEE ^^^^RRRR will ask for some file name(s), and start an sssszzzz
  352.     command on the remote system, and an rrrrzzzz on the local system to
  353.     receive the file(s).
  354.       bind_script 19 "/usr/lib/xt/.sz"
  355.     This binds Control-S to execute the script /usr/lib/xt/.sz. The .sz
  356.     script supplied with the source code contains:
  357.       tty "on"
  358.       echo -n "What files are to be sent? "
  359.       read FILES
  360.       echo "Starting ZMODEM send (sz -y " FILES ")"
  361.       pipe "sz -y " FILES
  362.     Pressing XXXXCCCCAAAAPPPPEEEE ^^^^SSSS will ask for some file name(s), and then launch
  363.     sssszzzz on the current system.  SSSSzzzz will itself start an rrrrzzzz process on
  364.     the remote system.
  365. _b_i_n_d__s_t_r_i_n_g
  366.     Syntax: bind_string _c_o_d_e "string"
  367.     Bind the character identified by the number specified by _c_o_d_e to
  368.     emit the string specified by "string".
  369.     The string is sent to the telnet connection untranslated; eg, it is
  370.     not examined for embedded terminal mode escapes.
  371.     Example:
  372.       bind_string 49 "pwd^M"
  373.     This binds "1" to send the sequence to report your current direc-
  374.     tory on a remote system.
  375. _b_r_e_a_k
  376.     Syntax: break
  377.     Exits from the immediately enclosing 'while' loop. Identical to the
  378.     C language 'break', and to the Bourne shell 'break' except that the
  379.     xxxxtttt script language 'break' does not take a numeric argument.
  380. _c_a_l_l
  381.     Syntax: call "scriptname"
  382.     Suspends execution of the current script, and attempts to load and
  383.     run the specified scriptname. The scriptname must be a quoted
  384.     literal string. There is no xxxxtttt analogue of the Bourne shell "exec"
  385.     command; all subscripts in xxxxtttt are treated as sub-routines. All
  386.     variables are global across subscripts, so if a subscript changes
  387.     the value of a variable, then that change will remain in effect
  388.     after return to the parent script. Shell environment variables can-
  389.     not be changed by any xxxxtttt script.
  390. _c_a_p_t_u_r_e
  391.     Syntax: capture "on"
  392.     capture "off"
  393.     Turns the file-capture function on or off. Note that the arguments
  394.     must be quoted literal strings. Note also that when the script
  395.     exits into terminal mode, the file-capture function is turned off.
  396.     If you have 'set auto "on"', then you will begin capturing immedi-
  397.     ately upon entering, or returning to, terminal mode. If not, then
  398.     you must manually type "XXXXCCCCAAAAPPPPEEEE YYYY" to start capturing when entering
  399.     terminal mode.
  400. _c_o_n_t_i_n_u_e
  401.     Syntax: continue
  402.     Resumes execution at the top of the immediately enclosing 'while'
  403.     loop.  Identical to the C language 'continue' instruction, and to
  404.     the Bourne shell 'continue' command except that no numeric argument
  405.     is accepted.
  406. _d_e_b_u_g
  407.     Syntax: debug "on"
  408.     debug "off"
  409.     If the 'debug' option is on, then xxxxtttt will make many parenthetical
  410.     comments about what it's doing while it runs the script. These com-
  411.     ments can sometimes be helpful in debugging script logic. Note that
  412.     the argument must be a quoted literal string.
  413.     While debugging a script containing a password, turn this option
  414.     off, then on again, to reduce the excitement-level of any col-
  415.     leagues collected circa your screen.
  416.     See, below, the _D_e_b_u_g_g_i_n_g Section.
  417. _d_e_c_r
  418.     Syntax: decr <numeric-variable>
  419.     Decrements the value of the specified numeric user variable by 1.
  420.     Useful in controlling loop execution. If the specified variable
  421.     isn't numeric, or doesn't exist, a syntax error results.
  422. _e_c_h_o
  423.     Syntax: echo "string" <variable> ...
  424.     echo -n "string" <variable> ...
  425.     This command sends its arguments to the user's terminal. The number
  426.     of arguments is optional, except that the total result may not
  427.     exceed 80 characters. Variables and back-quoted shell commands are
  428.     expanded as necessary.
  429.     If the "-n" switch is present, then no carriage-return/newline
  430.     sequence is appended to the output.
  431.     Examples:
  432.       echo "The time and date are now " `date`
  433.       echo "My terminal type is " $TERM
  434.       echo "My terminal type is " $TERM " today."
  435.     Note that whitespace isn't echoed unless it's part of a quoted
  436.     literal string.
  437. _e_x_i_t
  438.     Syntax: exit
  439.     Terminates execution of the current script. If a script reaches its
  440.     end, it exits automatically, so 'exit' is useful mainly to ter-
  441.     minate a script prematurely.
  442. _f_a_l_s_e
  443.     Syntax: false
  444.     Same as the Unix 'false' command. Does nothing, but returns a FALSE
  445.     status value. Useful within conditional expressions.
  446.     Example:
  447.       if waitfor "CONNECT" 30 eq false
  448.       then
  449. quit
  450.       endif
  451.     Note that above example could be rewritten using the negating
  452.     modifier "!":
  453.       if ! waitfor "CONNECT" 30
  454.       then
  455. quit
  456.       endif
  457.     and note too that the "!" must be separated from its argument by
  458.     whitespace.
  459. _f_i_l_e
  460.     Syntax: file <script-command>
  461.     The standard output of the specified script command is sent to the
  462.     current capture file. If the "capture" option is not set, then an
  463.     error message is displayed, but script execution continues.
  464.     Examples:
  465.       file echo "--------- CUT HERE ----------"
  466.     Sends the output of the 'echo' command to the current capture file,
  467.     provided that the "capture" option is now "on".
  468.       file echo `date`
  469.     Sends a timestamp to the current capture file, provided that the
  470.     "capture" option is now "on". The same thing could have been done
  471.     with
  472.       file shell "date"
  473. _h_o_s_t
  474.     Syntax: host "hostname"
  475.     Open a telnet connection to a hostname, given either as a domain
  476.     name or a dotted quad. If there is a current telnet connection
  477.     open, it will be terminated with extreme prejudice.
  478. _i_f
  479.     Syntax: if <list1>; then <list2>; [ else <list3>; ] endif
  480.     If <list1> evaluates as TRUE, performs <list2>; otherwise, if
  481.     <list3> is specified, performs <list3>; then resumes execution
  482.     immediately following 'endif'. To accommodate those whose minds
  483.     wander while writing scripts, 'fi' is an acceptable synonym for
  484.     'endif'.
  485.     Each list may consist of any number of script commands separated by
  486.     semicolons or newlines. The value of <list1> is determined by
  487.     inclusively OR'ing the value of each directive in the list, so that
  488.     if any of the directives in <list1> evaluates as TRUE, then so will
  489.     <list1>. <list1> is performed in its entirety regardless of the
  490.     value of any of its component commands.
  491.     The keywords 'then', 'else', and 'endif' (or 'fi') must be immedi-
  492.     ately preceded by command separators, either a semicolon or a new-
  493.     line, just as is the case in the Bourne shell.
  494.     For conditional evaluation in 'if' and 'while' constructions, the
  495.     following comparators are available in addition to the script
  496.     directives mentioned elsewhere:
  497.       <varname1> eq "string"
  498.       <varname1> eq <number>
  499.       <varname1> eq <varname2>
  500.       <varname1>
  501.       "string"
  502.     evaluates as TRUE if the value of user variable <varname1> is the
  503.     same as that of a specified string or numeric constant or of a
  504.     specified second variable name. If the variable name <varname1> is
  505.     not followed by anything else, then the expression evaluates as
  506.     TRUE if the variable is numeric and has a non-zero value, or if the
  507.     variable is a string variable and has a non-zero length; otherwise,
  508.     the expression evaluates as FALSE. Comparing a string variable to a
  509.     numeric variable, or vice-versa, causes a syntax error.
  510.     If a conditional expression consists only of a quoted literal
  511.     string, the expression evaluates as TRUE if the string's length is
  512.     non-zero, and otherwise evaluates to FALSE. Because environment
  513.     variables and back-quoted shell commands are treated as if their
  514.     output/value were quoted literal strings, this allows direct test-
  515.     ing of a shell command or of an environment for non-zero length.
  516.     Nonexistent environment variables are treated as if they exist with
  517.     the value "" (a string of zero length).
  518.       <varname1> neq "string"
  519.       <varname1> neq <number>
  520.       <varname1> neq <varname2>
  521.     evaluates as TRUE if the value of user variable <varname1> is not
  522.     equal to that of a specified string or numeric constant or of a
  523.     specified second variable name. Comparing a string variable to a
  524.     numeric variable, or vice-versa, causes a syntax error.
  525.       <varname1> lessthan "string"
  526.       <varname1> lessthan <number>
  527.       <varname1> lessthan <varname2>
  528.     evaluates as TRUE if the value of user variable <varname1> is less
  529.     than that of a specified string or numeric constant or of a speci-
  530.     fied second variable name. String variables are compared lexically
  531.     according to ASCII value.
  532.       <varname1> morethan "string"
  533.       <varname1> morethan <number>
  534.       <varname1> morethan <varname2>
  535.     operates identically to 'lessthan', except in reverse.
  536.     The value of any conditional expression may be negated by preceding
  537.     it with an exclamation point followed by a space or tab.
  538.     Examples:
  539.       if counter eq 0; then break; endif;
  540.       if var1 eq var2; then echo "identical"; endif
  541.       if counter morethan 20; then break; endif;
  542.       if counter lessthan 0; then break; endif;
  543.       if ! counter; then echo "counter is " counter; endif
  544.     To perform a list if any of a set of conditions exist:
  545.       if counter morethan 5;
  546. counter eq brkvalue;  # a second comparator
  547.       then break;
  548.       endif;
  549.     i.e., perform the 'break' directive if the value of numeric user
  550.     variable 'counter' is greater than the numeric constant 5, or if
  551.     the value of 'counter' is equal to that of the user numeric vari-
  552.     able 'brkvalue'.
  553. _i_n_c_r
  554.     Syntax: incr <numeric-variable>
  555.     Increments the value of the specified numeric user variable by 1.
  556.     The opposite of 'decr'.
  557. _p_a_u_s_e
  558.     Syntax: pause <number>
  559.     Suspends execution for the specified <number> of SECONDS. Identical
  560.     to Unix "sleep."
  561. _p_i_p_e
  562.     Syntax: pipe "<shell-command>"
  563.     The standard input and standard output of the specified shell com-
  564.     mand are connected to the telnet connection, and the command is
  565.     executed. This is the equivalent of the command mode "$" command.
  566.     Examples:
  567.       pipe "echo "177""
  568.     sends a DELETE character to the telnet connection.
  569.       pipe "rz"
  570.     performs a file receive via ZMODEM, assuming that Chuck Forsberg's
  571.     'rz/sz' programs reside on your system.
  572. _q_u_i_t
  573.     Syntax: quit
  574.     Exits the script and terminates xxxxtttt entirely. The user's terminal
  575.     will be restored to the state it was in when xxxxtttt was invoked.
  576. _r_e_a_d
  577.     Syntax: read <variable-name>
  578.     Takes a string from the user's keyboard and places it into the
  579.     specified user variable. Any previous value of the specified vari-
  580.     able is discarded.
  581. _s_e_e_n
  582.     Syntax: seen "string" <number>
  583.     Evaluates as TRUE if "string" has occurred within the last <number>
  584.     characters received during the most recent 'waitfor' command. Only
  585.     up to 2048 characters are remembered at any one time during 'wait-
  586.     for' processing. If no <number> is specified, then all the charac-
  587.     ters received during the most recent 'waitfor' command are exam-
  588.     ined, up to a maximum of 2048. The 'seen' buffer is reset at the
  589.     beginning of each 'waitfor' command. This is useful to tell which
  590.     of several strings has been received.
  591.     Example:
  592.       if waitfor "string1" 20
  593.       then
  594. echo "Received 'string1'."
  595.       else
  596. if seen "string2"
  597. then
  598.   echo "Received 'string2' instead."
  599. endif
  600.       endif
  601. _s_e_t
  602.     Syntax: set <xxxxtttt-set-option> <value>
  603.     This command is the same as the command-mode xxxxtttt 'set' command, such
  604.     as "set bps 1200", "set cis on", and so forth, except that a string
  605.     <value> must be enclosed within double-quotation marks.
  606.     Examples:
  607.       set cis "on"
  608.       set cfile "newfilename"
  609.       set auto "on"
  610.       set bps 2400
  611. _s_h_e_l_l
  612.     Syntax: shell "<shell-command>"
  613.     The shell command enclosed within the double-quotation marks is
  614.     executed. This is similar to the xxxxtttt command-mode "!" command.
  615.     Remember that if the shell command contains double-quotation marks,
  616.     they must be escaped with backslashes.
  617. _t_i_m_e_o_u_t
  618.     Syntax: timeout <number>
  619.     If <number> is greater than zero, starts a timer which will cause
  620.     the MOST DEEPLY NESTED script to exit when <number> of MINUTES
  621.     expire. If <number> is zero, then any pending timeout is cancelled.
  622.     If <number> is negative, nothing happens.
  623.     Expiration of the specified timeout causes the most deeply nested
  624.     script to exit, not to terminate xxxxtttt.  To cause the program to quit
  625.     if a timeout expires, use a subscript.
  626.     Example:
  627.       'script1' contains:
  628. call "script2"
  629. if expired
  630. then
  631.   quit
  632. endif
  633. # more commands
  634.       'script2' contains:
  635. assign expired eq 1
  636. timeout 5      # limit of 5 minutes
  637. while ! waitfor "login:" 30
  638. do
  639.   xmitbrk
  640. done
  641. assign expired eq 0
  642. exit
  643.     When 'script2' exits, the numeric variable 'expired' will be set to
  644.     1 if 'script2' timed out, and will be 0 otherwise. 'script1' can
  645.     act on this information accordingly.
  646. _t_r_a_n_s_m_i_t
  647.     Syntax: transmit "string"
  648.     Sends a string to the telnet connection.  Within the string, any
  649.     alphabetic character preceded by a caret (^) is translated to the
  650.     corresponding Control-character.
  651.     Example:
  652.       transmit "date^M"
  653.     sends the string "date" to the telnet connection, followed by a
  654.     carriage-return character.
  655. _t_r_u_e
  656.     Syntax: true
  657.     Does nothing, but always evaluates as TRUE. Useful in conditional
  658.     expressions. The opposite of 'false'.
  659. _t_t_y
  660.     Syntax: tty "on"
  661.     tty "off"
  662.     Ordinarily, during script execution, characters received from the
  663.     telnet connection are echoed to the user's terminal screen. This
  664.     happens only during 'waitfor' and 'type' execution, so it may be a
  665.     bit choppy. This echoing can be turned off with
  666.       tty "off"
  667.     and turned back on with
  668.       tty "on"
  669.     Note that "on" and "off" must be enclosed in quotation marks.
  670. _t_y_p_e
  671.     Syntax: type "<filename>"
  672.     Sends the specified ASCII file to the telnet connection. This is
  673.     the same as the xxxxtttt terminal-mode "send ASCII file" escape.
  674. _u_n_a_s_s_i_g_n
  675.     Syntax: unassign <variablename>
  676.     Erases the specified user variable. The variable may be either
  677.     numeric or string type. The variable name must not be enclosed in
  678.     quotation marks, because variable names are considered to be xxxxtttt
  679.     script keywords, and not literal strings.
  680. _w_a_i_t_f_o_r
  681.     Syntax: waitfor "string" <number>
  682.     Scans input from the telnet connection for an occurrence of the
  683.     specified string, which must be enclosed in quotation marks. The
  684.     scanning continues for the specified <number> of SECONDS or until
  685.     the specified string is identified in the telnet input stream,
  686.     whichever comes first. This command evaluates as TRUE if the speci-
  687.     fied string is found, and as FALSE if the specified <number> of
  688.     SECONDS elapses and the string isn't found within that time. The
  689.     default time, if no <number> is specified, is roughly 30 seconds.
  690.     String matching is performed on a case-_i_nsensitive basis.  Within
  691.     the string, any alphabetic character preceded by a caret (^) is
  692.     translated to the corresponding Control-character.
  693.     Examples:
  694.       assign counter eq 1
  695.       while ! waitfor "login:" 15
  696.       do
  697. xmitbrk; incr counter; if counter morethan 5
  698. then
  699.   quit
  700. endif
  701.       done
  702.     If in a CompuServe Forum the "prompt character" has been set by the
  703.     user to be a backspace, this test will log off if the main prompt
  704.     is not seen in the next sixty seconds:
  705.       if ! waitfor "forum !^H" 60
  706.       then
  707. transmit "bye^M"; quit
  708.       endif
  709.     If the 'cis' option has been set to "on", either in the ._x_t_r_c
  710.     startup script, or by a direct 'set' command from command mode, or
  711.     with
  712.       set cis "on"
  713.     within a current script, and if during 'waitfor' processing a CIS
  714.     B-Plus protocol file transfer request is received, then the B-Plus
  715.     protocol transfer is performed, the <number> argument is reset to
  716.     its original value, and 'waitfor' processing continues. This allows
  717.     automatic B-Plus protocol file transfers from within a script.
  718. _w_h_i_l_e
  719.     Syntax: while <list1>; do <list2>; done
  720.     Operates similarly to the 'if' command, except that <list2> is exe-
  721.     cuted repeatedly so long as <list1> evaluates as TRUE. All the con-
  722.     ditional comparators and rules for comparisons that apply for the
  723.     'if' command also apply to 'while'. (Note that 'while' loops can be
  724.     nested within 'if' commands and vice-versa.)
  725.    _F_i_l_e _T_r_a_n_s_f_e_r_s
  726. When transferring files using CompuServe B-Plus protocol, the format of
  727. the file is specified by the host. An ASCII mode will force xxxxtttt to per-
  728. form TEXT mode translation; a BINARY mode will not do any translation.
  729. This means that, in either direction, a BINARY mode will send bytes "as
  730. is", whereas in ASCII mode, an incoming file will always be stripped of
  731. end-of-line carriage-returns, while an ASCII file being uploaded may or
  732. may not have carriage-returns added after each newline, depending on
  733. the "on" or "off" setting of the "cr" option.
  734. When using a CompuServe B-Plus download command, xxxxtttt will check if the
  735. file name you specify already exists on your system, and ask for an OK
  736. to overwrite the file, or for an alternative name. In the CompuServe
  737. case, there will also be an option to "Resume" a download. If the CRC
  738. checksum of the bytes that you already have in the file matches
  739. CompuServe's checksum on the the same initial bytes in its version of
  740. the file, file transfer will proceed from that point onwards. This
  741. saves connect time when a very large download has been interrupted dur-
  742. ing a prior session.
  743. Script-driven file transfers using the CompuServe B-Plus protocol are
  744. more or less built into the xxxxtttt script language, since during 'waitfor'
  745. processing, a file transfer request from the telnet connection will
  746. trigger a B-Plus transfer if the "cis" mode is set.  The difficulty in
  747. performing such transfers isn't in the transfer itself, but rather in
  748. the maneuvering required to get into position to transfer the correct
  749. file, and is something that probably only experienced script writers
  750. should wrestle with. However, if we assume that in the midst of a
  751. script, you've reached a point where you can issue a "download" command
  752. to CompuServe, for instance a "Disposition" prompt during a File
  753. Library "BROWSE" command, and you want to download the present file,
  754. which is "XCALL.C" on CompuServe, and "xcall.c" does not exist in your
  755. current working directory, you'd use the following sequence of script
  756. commands to do it:
  757.   set cis on # can't do auto file B-Plus transfer otherwise
  758.   transmit "dow^M"
  759.   pause 2     # wait for CIS to display protocol menu
  760.   transmit "2^M"  # B-Plus is number 2 on that menu
  761.   transmit "xcall.c^M" # "file name for your computer:"
  762.   waitfor "Disposition"
  763. During the final "waitfor" processing, the CompuServe ENQ character
  764. will be recognized and the transfer will proceed automatically. Then
  765. 'waitfor' will continue waiting for the "Disposition" prompt, after
  766. which your script can proceed. The same sort of thing can be done with
  767. file uploads, but once again, the difficulty isn't with the transfer,
  768. but rather with setting things up so that the transfer will be
  769. requested at the correct place.
  770. A shell script, cccciiiissssddddoooowwwwnnnnllllooooaaaadddd provided with the distribution, can
  771. automatically retrieve a single file from a CompuServe library.
  772. For XMODEM, YMODEM, and ZMODEM transfers, we strongly recommend that
  773. you obtain Chuck Forsberg's excellent, shareware utility called "RZSZ",
  774. which can handle XMODEM, XMODEM-1K, YMODEM, and ZMODEM transfers and
  775. which can be used from within xxxxtttt with the 'pipe' command, or from com-
  776. mand mode with the '$' command, or using the examples under the
  777. _b_i_n_d__s_c_r_i_p_t command above.
  778.    _D_e_b_u_g_g_i_n_g
  779. There are three varieties of debugging in xxxxtttt.  The script command (set
  780. debug "on" or set debug "off") will control echoing of each line of a
  781. script to the screen.
  782. If the program was compiled with LOG set to 1 in xt.h, all screen out-
  783. put will be captured in a file called _x_t._l_o_g in the current directory,
  784. providing that it exists before entering xxxxtttt,,,, and providing that output
  785. is not being diverted to a current capture file. The _x_t._l_o_g file is
  786. overwritten each time xxxxtttt is run.
  787. If you forgot to turn on capturing, if the program was compiled with
  788. LOG set to 1, and if _x_t._l_o_g exists, all is not lost: your session is
  789. recorded in _x_t._l_o_g.
  790. Note that capturing to files is turned off when exiting terminal mode,
  791. and this includes running the built-in B+ protocol.
  792. Finally, in the xtb+.c module, there is a CIS_DEBUG definition line
  793. which is normally commented out. If this definition is uncommented,
  794. then a B+ transfer will record every byte in a file called _x_t_b+_l_o_g.
  795. This file is created if needed, in the current directory, and overwrit-
  796. ten on each run of xxxxtttt.
  797. Exit Codes
  798. 0000  Successful, uneventful completion.
  799. 1111  Error in command-line arguments.
  800. 2222  Failure in forking to execute a command or run a shell.
  801. 6666  No environment variable TERM has been set.
  802. 7777  No entry for the current TERM setting in the terminfo database.
  803. Copyright
  804. XXXXtttt and its source files and sample scripts and manual page are Copy-
  805. right 1995, 1997 by Jean-Pierre Radley.
  806. Permission is granted to the public to use this code in any manner,
  807. without any warranty, implied or otherwise, of fitness for a particular
  808. purpose.
  809. By virtue of a restriction previously placed upon all code derivative
  810. from xxxxccccoooommmmmmmm, the xxxxtttt code and associated files may not be sold by anyone
  811. to anyone, nor incorporated into any product that is not also free.
  812. It's OK to transfer them for free.
  813. Authors
  814. This manual page was written by Fred Buck (1989) and Jean-Pierre Radley
  815. (1990-1997).  XXXXtttt itself is the product of many synergistic wise minds.
  816. See the README document.
  817. Version
  818. This edition of the manual is for XT version 1.2 JPRadley 8 July 1997.