Annotation of coherent/g/usr/lib/uucp/tay104/contrib/xchat.man, revision 1.1.1.1

1.1       root        1: .TH xchat 8
                      2: .SH NAME
                      3: xchat - Extended chat processor
                      4: .SH SYNOPSIS
                      5: .BI "xchat " "scriptfile"
                      6: .RI " [ " parameter... " ] "
                      7: .PP
                      8: where
                      9: .I scriptfile
                     10: is the name of a file containing an 
                     11: .I xchat
                     12: script. If 
                     13: .I scriptfile
                     14: begins with ``/'', then it is assumed to be a full path name for the
                     15: script file. If not, a configuration-dependent default directory path
                     16: (usually
                     17: .B "/usr/local/conf/uucp/"
                     18: ) is prepended to the script file name. Normally, the default path
                     19: is the same as that for the Taylor UUCP configuration files.
                     20: .SH DESCRIPTION
                     21: .I Xchat
                     22: is a general-purpose dialing and login program designed for use 
                     23: with Taylor UUCP as a ``chat-program'', taking the place (or 
                     24: augmenting) the built-in chat scripting facility. It provides the 
                     25: ability to closely control timeouts, multiple simultaneous ``expect'' 
                     26: strings with separate actions, extended terminal control, modem 
                     27: command character pacing, and more.
                     28: .PP
                     29: When used in conjunction with Taylor UUCP's
                     30: configuration features, 
                     31: .I xchat
                     32: can provide you the ability to manage the most intricate login, 
                     33: dial and hangup needs. The scripts are written in a shell-like (well, 
                     34: sort-of) style with labels, commands, and parameters, easing the task 
                     35: of writing procedures for complex terminal communications situations.
                     36: .PP
                     37: Because 
                     38: .I xchat
                     39: assumes that it is connected to the terminal device via stdin/stdout, 
                     40: you can easily debug scripts by invoking it from the shell and 
                     41: responding to the script from the keyboard. A debug logging facility 
                     42: is included, with the debug output going to a separate user-specified 
                     43: file. This makes it easy to debug connection problems without wading 
                     44: through large 
                     45: .I uucico
                     46: log and debug files.
                     47: .PP
                     48: Formally, a script describes a state machine; 
                     49: .I xchat
                     50: interprets the script and does what the state machine
                     51: tells it to. This section will be much easier to understand 
                     52: if you obtain listings of the script files supplied with
                     53: .I xchat.
                     54: .SH "SCRIPT FILE FORMAT"
                     55: Script files are ordinary text files containing comments, labels,
                     56: and statements. Blank lines are ignored. 
                     57: Comments are denoted by leading ``#''
                     58: characters. Some statements (those which do not end with an
                     59: ``extended string'' argument; see below) can also have trailing
                     60: comments.
                     61: .PP
                     62: .I Labels 
                     63: begin in column one and are ended by colons (:). A label
                     64: specifies a state name. All lines between a pair of labels are
                     65: the statements for a single state.
                     66: .PP
                     67: Processing always begins at the head of the script (no leading
                     68: state name is necessary).
                     69: .PP
                     70: .I Statements 
                     71: are divided into two categories, ``action'' and ``expect''.
                     72: When a state is entered, all of its actions are performed in the
                     73: order in which they appear in the file.
                     74: .PP
                     75: A 
                     76: .I transition 
                     77: to another state may occur for any of three reasons:
                     78: .IP (1) 5
                     79: One of the actions may cause a transition to
                     80: another state, in which case the rest of the
                     81: current state's actions are skipped.
                     82: Processing resumes with the first action
                     83: statement of the new state.
                     84: .IP (2) 5
                     85: If none of the actions cause a state
                     86: transition, and there are no expects in the
                     87: state, processing ``falls through'' to the next
                     88: state in the file.
                     89: .IP (3) 5
                     90: If none of the actions cause a state
                     91: transition, but there are expects in the
                     92: state, the state machine pauses until one of
                     93: the expects is ``satisfied''. It then transitions 
                     94: to the state named in the expect
                     95: statement.
                     96: .PP
                     97: Finally, there are two action statements which, when executed,
                     98: cause the script to exit.
                     99: .SH "SCRIPT FILE STATEMENTS"
                    100: This section describes all of the statements that may appear in script
                    101: files, except for a few special action statements. Those are described
                    102: in a later section, ``Overriding Defaults''.
                    103: .PP
                    104: Some statements accept one or two arguments, referred to in the
                    105: following descriptions as 
                    106: .IR int ", " ns ", " str ", or "
                    107: .IR xstr ", to"
                    108: indicate whether the argument is an integer, a new state name, a
                    109: string, or an ``extended string'' (described in a later section).
                    110: .PP
                    111: For all statements that accept two arguments, the first is the
                    112: name of a new state, and the second specifies a condition or
                    113: reason for changing to the new state.
                    114: .SS "Termination And Informational Statements"
                    115: These statements are used to place entries into the Taylor UUCP
                    116: .I Log
                    117: file, and to cause 
                    118: .I xchat
                    119: to exit with successful or failure status. It is also possible to open a 
                    120: separate
                    121: .I debug
                    122: log file and control the level of tracing and error reporting that will go
                    123: into that log file. This is very useful in debugging 
                    124: .I xchat
                    125: scripts.
                    126: .br
                    127: .ta 1.0i 1.5i 2.0i
                    128: .TP 2.0i
                    129: .B failed
                    130: Exit script with ``failed'' status. This causes 
                    131: .I xchat 
                    132: to exit with status 0.
                    133: .TP 2.0i
                    134: .B success
                    135: Exit script with ``success'' status. This causes
                    136: .I xchat
                    137: to exit with status 1.
                    138: .TP 2.0i
                    139: .BI "log       " xstr     
                    140: Send informational message
                    141: .I xstr 
                    142: to standard error. When used with Taylor UUCP, this is the 
                    143: .I Log
                    144: file for the 
                    145: .I uucico
                    146: program.
                    147: .TP 2.0i
                    148: .BI "logerr    " xstr     
                    149: Send message
                    150: .I xstr 
                    151: to standard error, with ``ERROR:'' indicator. When used 
                    152: with Taylor UUCP, this is the 
                    153: .I Log
                    154: file for the 
                    155: .I uucico
                    156: program.
                    157: .TP 2.0i
                    158: .BI "dbgfile   " xstr
                    159: Open script debugging file 
                    160: .I xstr.
                    161: If
                    162: .I xstr
                    163: begins with ``/'', it is assumed to be an absolute path name for the
                    164: debugging file. If not, then a configuration-dependent default directory 
                    165: path (usually
                    166: .B "/usr/spool/uucp"
                    167: ) is prepended to
                    168: .I xstr.
                    169: Normally the default path is that of the directory where Taylor UUCP 
                    170: puts its log files.
                    171: The debugging file is used to capture a detailed log of the data sent
                    172: and received, errors encountered, and a trace of script execution.
                    173: The various types of logging are controlled by the
                    174: .I "debug mask,"
                    175: described next. 
                    176: .B Note:
                    177: A new log file is created each time 
                    178: .I xchat
                    179: runs. Use the 
                    180: .B log
                    181: and
                    182: .B loge
                    183: commands to log 
                    184: continuous information onto standard out, which is connected
                    185: to the Taylor UUCP
                    186: .I Log
                    187: file when 
                    188: .I xchat
                    189: is run by the Taylor
                    190: .I uucico.
                    191: .TP 2.0i
                    192: .BI "dbgset    " int
                    193: Set the bits specified in 
                    194: .I int
                    195: in the debugging mask. The value in
                    196: .I int
                    197: is ``or''ed into the mask. Set bit 0 (value \= 1) for error messages,
                    198: bit 1 (value \= 2) for dial, login and init errors, bit 2 (value \= 4)
                    199: for dial, login and init trace with character I/O, and bit 3 (value \= 8)
                    200: for script processing internals. Normally, you will just turn it all on
                    201: with a value of 15.
                    202: .TP 2.0i
                    203: .BI "dbgclr    " int
                    204: Clear the bits specified in
                    205: .I int
                    206: from the debugging mask.
                    207: .TP 2.0i
                    208: .BI "debug     " xstr
                    209: Write 
                    210: .I
                    211: xstr
                    212: into the debug log. The entry will be enclosed in angle brackets.
                    213: .TP 2.0i
                    214: .BI "debuge    " xstr
                    215: Write
                    216: .I xstr
                    217: into the debug log with ``ERROR: '' prepended. The entry will be enclosed
                    218: in angle brackets. 
                    219: .SS "Sending Data"
                    220: These statements are used to transmit data to standard out (the tty or TCP
                    221: port when used with Taylor UUCP).
                    222: .I
                    223: No implied carriage returns are sent.
                    224: You must include a \\r if you want a carriage return in the string
                    225: sent by the 
                    226: .B send
                    227: command. If you want a return sent after 
                    228: .B dial
                    229: or
                    230: .B sendstr,
                    231: you must send it with a separate
                    232: .B send
                    233: command.
                    234: .TP 2.0i
                    235: .B dial
                    236: Send the string previously set by the 
                    237: .B telno
                    238: command to the serial port.
                    239: .B W
                    240: and
                    241: .B P
                    242: characters in the phone number are
                    243: converted as described under 
                    244: .B 
                    245: Dial Strings,
                    246: below. This statement also sets a default
                    247: timeout value, as described under the 
                    248: .B timeout
                    249: statement.
                    250: .TP 2.0i
                    251: .BI "send      " xstr
                    252: Send the string 
                    253: .I xstr 
                    254: to the serial port.
                    255: .TP 2.0i
                    256: .BI "sendstr   " int
                    257: The argument of this statement is a digit from 0
                    258: through 7. Send the corresponding string
                    259: parameter as passed to 
                    260: .I xchat
                    261: following the script file name. The parameter is interpreted 
                    262: as an extended string.
                    263: .SS "Special Terminal Control Statements"
                    264: These statements are used to cause the terminal port to perform some special action, or to change the mode of the port.
                    265: .I 
                    266: The modes of the port are restored to their original settings
                    267: .I
                    268: by xchat before it exits.
                    269: .TP 2.0i
                    270: .B flush
                    271: Flush the terminal port's input buffer.
                    272: .TP 2.0i
                    273: .B break
                    274: Send a break signal.
                    275: .TP 2.0i
                    276: .B hangup
                    277: Momentarily drop Data Terminal Ready (DTR) on the
                    278: serial port, causing the modem to hang up. (Not
                    279: usually needed, since 
                    280: .I uucico
                    281: does this at the end of each call.)
                    282: .TP 2.0i
                    283: .B 7bit
                    284: Change the port to strip incoming characters to 7 bits. 
                    285: .I
                    286: This is the default mode.
                    287: This mode 
                    288: is implied when the port has parity enabled, since parity characters
                    289: are 7-bits wide.
                    290: .TP 2.0i
                    291: .B 8bit
                    292: Change the port to allow incoming 8-bit characters to be passed 
                    293: to the script processor. This mode has no effect if parity is 
                    294: enabled, since parity characters are 7-bits wide.
                    295: .TP 2.0i
                    296: .B nopar
                    297: Change the port to 8-bits, no parity. 
                    298: .I
                    299: This is the default mode.
                    300: .TP 2.0i
                    301: .B evenpar
                    302: Change the port to 7-bits, even parity. 
                    303: .I 
                    304: Incoming characters with parity errors are discarded.
                    305: .TP 2.0i
                    306: .B oddpar
                    307: Change the port to 7-bits, odd parity.
                    308: .I 
                    309: Incoming characters with parity errors are discarded.
                    310: .SS "Counting, Branching, Timing and Testing Statements"
                    311: These statements are used to control the flow of the 
                    312: .I xchat
                    313: script itself, including branching, delays, and counter manipulation.
                    314: .TP 2.0i
                    315: .BI "sleep     " int 
                    316: Delay for 
                    317: .I int
                    318: milliseconds.
                    319: .TP 2.0i
                    320: .B zero
                    321: Clear the counter.
                    322: .TP 2.0i
                    323: .B count
                    324: Add one to the counter.
                    325: .TP 2.0i
                    326: .BI "ifgtr     " "ns   int"
                    327: Go to state 
                    328: .I ns
                    329: if counter greater than 
                    330: .I int.
                    331: .TP 2.0i
                    332: .BI "goto      " ns
                    333: Go to state 
                    334: .I ns 
                    335: unconditionally.
                    336: .TP 2.0i
                    337: .BI "ifstr     " "ns   int"
                    338: Go to state 
                    339: .I ns
                    340: if string parameter 
                    341: .I int
                    342: is nonempty.
                    343: .TP 2.0i
                    344: .BI "ifnstr    " "ns   int"
                    345: Go to state
                    346: .I ns
                    347: if string parameter 
                    348: .I int
                    349: is empty.
                    350: .TP 2.0i
                    351: .BI "ifblind   " ns
                    352: Change to state
                    353: .I ns
                    354: if the port is ``blind'' without carrier (CD) asserted.
                    355: .I 
                    356: This is not yet implemented, the test always fails.
                    357: .TP 2.0i
                    358: .BI "ifblgtr   " "ns   int"
                    359: Change to state
                    360: .I ns
                    361: if the port is ``blind'' without carrier (CD) asserted, and counter
                    362: is greater then
                    363: .I int.
                    364: .I 
                    365: This is not yet implemented, the test always fails.
                    366: .SS "Expect Statements"
                    367: Expect statements are usually the last statements that appear in a
                    368: given state, though in fact they can appear anywhere within the
                    369: state. Even if they appear at the beginning, the script processor
                    370: always does all of the action statements first. As a practical
                    371: matter, the order of these statements is not significant; they are
                    372: all interpreted ``in parallel''.
                    373: .TP 2.0i
                    374: .BI "expect    " "ns   xstr"
                    375: Change to state 
                    376: .I ns 
                    377: if the string specified by
                    378: .I xstr 
                    379: is received from standard input (usually the serial port). 
                    380: Case is significant, but high-order bits are not
                    381: checked.
                    382: .TP 2.0i
                    383: .BI "ifcarr    " ns
                    384: Change to state
                    385: .I ns 
                    386: if Carrier Detect (CD) is true.
                    387: .I
                    388: Not currently implemented. Always changes state.
                    389: .TP 2.0i
                    390: .BI "ifhang    " ns
                    391: Change to state
                    392: .I ns
                    393: if a data set hangup occurs (SIGHUP signal received).
                    394: .TP 2.0i
                    395: .BI "timeout   " "ns   int"
                    396: Change to state 
                    397: .I ns 
                    398: if the time (in milliseconds)
                    399: given by 
                    400: .I int
                    401: has elapsed without satisfying any
                    402: expects. If the time specified is 0, a default
                    403: timeout value (calculated from the length and
                    404: other characteristics of the most recent dial
                    405: string) is used.
                    406: .SH "SCRIPT PROCESSING DETAILS"
                    407: .SS "Extended Strings"
                    408: In the statements that accept string arguments, the strings are
                    409: interpreted as 
                    410: .I 
                    411: extended strings. 
                    412: Extended strings begin with
                    413: the first nonblank character and continue, including all imbedded
                    414: and trailing blanks and other whitespace, until (but not
                    415: including) the end of the line in the script file. (There is no
                    416: provision for line continuation.)  No trailing spaces should be
                    417: present between the last ``desired'' character of the string and the
                    418: end of the line, as they will be included in the stored string and
                    419: sent or expected, just as they appear in the script file. And,
                    420: obviously, no trailing comments are permitted!  They will just be
                    421: stored as part of the string.
                    422: .PP
                    423: Within an extended string, the following ``escape sequences'' will
                    424: be converted as indicated before being sent or expected:
                    425: .br
                    426: .nf
                    427: .in +0.5i
                    428: \fB\\d\fR      EOT character (control-D)
                    429: \fB\\N\fR      null character
                    430: \fB\\n\fR      line feed
                    431: \fB\\r\fR      carriage return
                    432: \fB\\s\fR      space
                    433: \fB\\t\fR      tab
                    434: \fB\\\-\fR     hyphen
                    435: \fB\\\\\fR     backslash
                    436: \fB\\ooo\fR    character with value ooo (in octal)
                    437: .in -0.5i
                    438: .fi
                    439: .PP
                    440: Since extended strings in scripts can include embedded spaces,
                    441: tabs, etc., these escape sequences are only required in strings
                    442: appearing in systems entries, though they may be used in script
                    443: files to improve readability.
                    444: .PP
                    445: The octal-character specification (\\ooo) may have from one to
                    446: three octal digits; it is terminated either after the third digit
                    447: or when a non-octal character is encountered. But if you want to
                    448: specify one of these followed by something that happens to be a
                    449: valid octal character (for example, a control-A followed by a 7)
                    450: make sure to include all three digits after the \\ . So \\0017
                    451: would become a control-A followed by the Ascii character ``7'', but
                    452: \\17 or \\017 would become a control-Y (decimal value 25). \\1S
                    453: would convert to a control-A followed by an ``S''.
                    454: .PP
                    455: Extended strings are stored without a trailing carriage return
                    456: unless one is explicitly present in the string (via \\r).
                    457: .SS "String Parameters"
                    458: The 
                    459: .B sendstr 
                    460: statement sends (after conversion from extended string
                    461: format) one of the parameters given on the 
                    462: .I xchat
                    463: command line following the script file name. 
                    464: The parameter is selected by the integer
                    465: argument of the statement.
                    466: .PP
                    467: This allows ``generic'' script files to serve
                    468: for many different systems; the string parameters 
                    469: provide the phone number, username, password, etc. Character
                    470: substitutions described under ``extended strings'' above are
                    471: performed on these strings.
                    472: .PP
                    473: The ifstr and ifnstr statements allow further generality in script
                    474: files, by testing whether a particular parameter is present in the
                    475: systems entry. For example, a single script can be
                    476: used both for those systems that require a password and
                    477: those that do not. The password is specified as the last argument
                    478: in the 
                    479: .xchat
                    480: command; the script can test for this
                    481: parameter's existence and skip the password sequence if
                    482: the parameter is empty.
                    483: .SS "``Wait'' And ``Pause'' Characters In Dial Strings"
                    484: An additional conversion is performed on dial strings. Dial strings
                    485: are interpreted as extended strings. Then the characters
                    486: .B W 
                    487: and
                    488: .B P
                    489: within a dial string are interpreted as ``wait for dial
                    490: tone'' and ``pause'', and may be converted to other characters. By
                    491: default, 
                    492: .B W
                    493: is left alone, and
                    494: .B P
                    495: is converted to a comma (,);
                    496: these are appropriate for Hayes-type modems. The script may
                    497: specify other substitutions (see below).
                    498: .PP
                    499: .B NOTE: 
                    500: The Taylor UUCP documentation states that the ``wait'' and ``pause''
                    501: characters are ``='' and ``-'', respectively. These are actual characters
                    502: understood by some modems. When using
                    503: .I xchat
                    504: you should put
                    505: .B W
                    506: and
                    507: .B P
                    508: in the dial strings you specify in the Taylor configuration files. 
                    509: This way, the 
                    510: .I xchat
                    511: processor can make the substitution appropriate for the particular 
                    512: modem in use. Make a separate 
                    513: .I xchat
                    514: script for each modem type, e.g.,
                    515: .I "dial.hayes"
                    516: and specify the translation there. This way, the phone number strings
                    517: in the Taylor configuration files can be used with a variety of modems.
                    518: .SS "Default Timeouts For Dial Strings"
                    519: When a 
                    520: .B dial 
                    521: statement is executed, a default timeout value is set.
                    522: This is the timeout value used by a subsequent timeout statement
                    523: if the statement specifies a timeout value of 0.
                    524: .PP
                    525: The default timeout is given by:
                    526: .br
                    527: .nf
                    528: .in +2
                    529: \fIctime\fR + (\fIndigits\fR * \fIdgttime\fR) + (\fInwchar\fR * \fIwtime\fR) + (\fInpchar\fR * \fI ptime\fR) 
                    530: .in -2
                    531: .fi
                    532: .PP
                    533: where 
                    534: .I 
                    535: ndigits, nwchar, 
                    536: and 
                    537: .I npchar
                    538: are the number of digits, wait characters, and pause characters in
                    539: the dial string, and 
                    540: .I ctime, dgttime, wtime, 
                    541: and 
                    542: .I ptime 
                    543: are 45 seconds, 0.1 seconds, 10 seconds, and 2 seconds, 
                    544: respectively.
                    545: All of these times may be changed as specified below under
                    546: ``Overriding Defaults.''
                    547: .SS "Trailing Carriage Returns Not Assumed"
                    548: In the 
                    549: .B dial
                    550: and
                    551: .B sendstr 
                    552: statements, the dial string or
                    553: parameter is sent with no trailing carriage return;
                    554: if a carriage return must be sent after one of these, a separate
                    555: send statement must provide it.
                    556: .SH "OVERRIDING DEFAULTS"
                    557: The script processor sets several default values. The following
                    558: statements, which override these defaults, may be useful in
                    559: certain circumstances.
                    560: .TP 2.0i
                    561: .BI "chrdly    " int
                    562: Since many modems cannot accept dialing commands
                    563: at full ``computer speed'', the script processor
                    564: sends all strings with a brief inter-character
                    565: delay. This statement specifies the delay time,
                    566: in milliseconds. The default is 100 (0.1 second).
                    567: .TP 2.0i
                    568: .BI "pchar     " str
                    569: Specifies the character to which 
                    570: .BR P s 
                    571: in the
                    572: dial string should be converted. Default is
                    573: ``,'', for use with Hayes-type modems.
                    574: .TP 2.0i
                    575: .BI "ptime     " int
                    576: Specifies the time, in milliseconds, to allow in
                    577: the default timeout for each pause character in
                    578: the dial string. Default is 2000 (2 seconds).
                    579: .TP 2.0i
                    580: .BI "wchar     " str
                    581: Specifies the character to which 
                    582: .BR W s 
                    583: in the
                    584: dial string should be converted. Default is
                    585: ``W'', for Hayes modems.
                    586: .TP 2.0i
                    587: .BI "wtime     " int
                    588: Specifies the time, in milliseconds, to allow in
                    589: the default timeout for each wait-for-dialtone
                    590: character in the dial string. Default is 10000
                    591: (10 seconds).
                    592: .TP 2.0i
                    593: .BI "dgttime   " int
                    594: Specifies the time, in milliseconds, to allow in
                    595: the default timeout for each digit character in
                    596: the dial string. Default is 100 (0.1 second).
                    597: .TP 2.0i
                    598: .BI "ctime     " int
                    599: Specifies the time, in milliseconds, to allow in
                    600: the default timeout for carrier to appear after
                    601: the dial string is sent. Default is 45000 (45
                    602: seconds).
                    603: .SH "SEE ALSO"
                    604: uucico(8) for Taylor UUCP, and documentation for Taylor UUCP.
                    605: .SH AUTHOR
                    606: Robert B. Denny ([email protected])
                    607: .SH HISTORY
                    608: This program is an adaptation of the dial/login script processing 
                    609: code that is a part of DECUS UUCP for VAX/VMS, written by Jamie 
                    610: Hanrahan, et. al.
                    611: .SH BUGS
                    612: This version (1.1) does not support BSD terminal facilities. Anyone 
                    613: volunteer to add this?
                    614: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.