ckermit2.txt
上传用户:dufan58
上传日期:2007-01-05
资源大小:3407k
文件大小:668k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1.   indicated number of NUL bytes.  If /SIZE was not given, this switch is
  2.   ignored.
  3. /RPAD[:value]
  4.   Like LPAD, but pads on the right.
  5. /CHARACTER
  6.   Specifies that one character should be written.  If the <text> is empty or
  7.   not given, a NUL character is written; otherwise the first character of
  8.   <text> is given.  Synonym: /BYTE.
  9. /STRING
  10.   Specifies that the <text> is to be written as-is, with no terminator added.
  11. Here's an example in which we copy a text file line by line:
  12.   file open /read %c oofa.txt            ; Open input file
  13.   if fail exit 1 Can't open input file    ; Check that it's open
  14.   file open /write %d new.txt            ; Open output file
  15.   if fail exit 1 Can't open output file   ; Check
  16.   while true {                            ; Loop to copy lines
  17.       file read /line %c line            ; Read a line
  18.       if fail break                       ; Assume failure = end of file
  19.       file write /line %d {m(line)}     ; Write the line to output file
  20.       if fail exit 1 Write failure        ; Failure here is fatal
  21.   }
  22.   file close %c                          ; Close the two files
  23.   file close %d
  24. Note that since /LINE is the default for both FILE READ and FILE WRITE, it can
  25. be omitted as in the following example, where we also use the short names for
  26. the FILE commands.
  27.   fopen /read %c oofa.txt                ; Open input file
  28.   if fail exit 1 Can't open input file    ; Check that it's open
  29.   fopen /write %d new.txt                ; Open output file
  30.   if fail exit 1 Can't open output file   ; Check
  31.   while true {                            ; Loop to copy lines
  32.       fread %c line                      ; Read a line
  33.       if fail break                       ; Assume failure = end of file
  34.       fwrite %d {m(line)}               ; Write the line to output file
  35.       if fail exit 1 Write failure        ; Failure here is fatal
  36.   }
  37.   fclose %c                              ; Close the two files
  38.   fclose %d
  39. Here's the same example using "record i/o" (the open and close sequences are
  40. are omitted since they are the same as above).  The result is the same, but
  41. execution is much faster:
  42.   while true {                            ; Loop to copy blocks
  43.       fread /size:512 %c block           ; Read a block into %a
  44.       if fail break                       ; Assume failure = end of file
  45.       fwrite /string %d {m(block)}      ; Write the block to output file
  46.       if fail exit 1 Write failure        ; Failure here is fatal
  47.   }
  48. Although record i/o is faster, it should not be used in line-oriented
  49. applications, since it returns arbitrary chunks of the file to your script,
  50. rather than lines.  In this example, FWRITE /STRING is used rather than FWRITE
  51. /SIZE:512 to avoid the last output block being padded beyond the original
  52. file's length.
  53. A file can also be copied character by character, but this is much slower than
  54. line i/o and VERY much slower than block i/o:
  55.   while true {                            ; Loop to copy blocks
  56.       fread /char %c c                   ; Read a character into c
  57.       if fail break                       ; Assume failure = end of file
  58.       fwrite /char %d {m(c)}            ; Write character to output file
  59.       if fail exit 1 Write failure        ; Failure is fatal
  60.   }
  61. Although character i/o is slow, it is the only way to process files that
  62. contain NUL characters (i.e. bytes composed of only zero bits).  In the
  63. example above, when "fread /char %c c" returns a NUL, the c variable is
  64. empty.  But since the FREAD /CHAR command did not fail, we know the result was
  65. really a NUL.  FWRITE /CHAR, when given an empty variable (or no variable at
  66. all) writes a NUL.  Thus the loop above will copy any file at all (very
  67. slowly).  In non-copying applications, NULs are detected like this:
  68.   fread /char %c c
  69.   if fail (do something)
  70.   if not def c (a NUL byte was read)
  71. Finally some advanced file operations:
  72. FILE FLUSH <channel>
  73.   For output files only: commits all previous writes to disk,
  74.   in case the computer was buffering them.  Synonym: FFLUSH.
  75. FILE COUNT [ { /BYTES, /LINES, /LIST, /NOLIST } ] <channel>
  76.   By default, or if the /BYTES switch is given, counts the bytes in the
  77.   file, if any, open on the given channel.  If the /LINES switch is given,
  78.   counts lines in the file.  If the /LIST switch is given, the result is
  79.   printed.  If the /NOLIST switch is given, the result is not printed.
  80.   /QUIET is a synonym for /NOLIST.  If neither /LIST nor /NOLIST is given,
  81.   the result is printed if the command is given at top level, i.e. not from
  82.   a command file or macro.  In all cases, the result of the most recent FILE
  83.   COUNT command is stored in the variable v(f_count).  Note that FILE COUNT
  84.   /LINE works (and can only work) by reading the entire file; expect it to
  85.   take some time if the file is large.  Synonym: FCOUNT.
  86. FILE REWIND <channel>
  87.   Moves the read/write pointer to the beginning of the file.  Equivalent to
  88.   FILE SEEK <channel> 0.  Synonym: FREWIND.
  89. FILE SEEK [ switches ] <channel> { [{+,-}]<number>, LAST, EOF }
  90.   Moves the read/write pointer for the file on this channel to the given
  91.   position, which may be a byte (character) number or a line number,
  92.   expressed in either absolute or relative terms.  Switches:
  93.    /BYTE     - The number given is a byte number.  Synonym: /CHARACTER.
  94.    /LINE     - The number given is a line number.
  95.    /ABSOLUTE - The number given is absolute.
  96.    /RELATIVE - The number given is relative to the current position.
  97.   By default, or if the /BYTE switch is given, the <number> is a
  98.   byte number (0 = first byte).  If /LINE is given, the <number> is a line
  99.   number (0 = first line).  EOF means to move to the end of the file.
  100.   LAST means to move to the last line or character of the file, depending
  101.   on whether it's a line or character seek.
  102.   If neither the /RELATIVE nor the /ABSOLUTE switch is given, then if a
  103.   signed number is given, the motion is relative to the current position.
  104.   An expression that evaluates to a negative number is not considered signed
  105.   for this purpose; that is, a sign (+ or -) must be included as the first
  106.   character of the <number> in the command itself to force a relative seek
  107.   (in the absence of /RELATIVE or /ABSOLUTE).
  108.   If the number has no sign, or if the /ABSOLUTE switch is given, the number
  109.   represents an absolute position (relative to the beginning of the file).
  110.   Subsequent FILE READs or WRITEs will take place at the new position.
  111.   If the read/write pointer is placed after the end of the file, a
  112.   subsequent FILE READ will fail, but a FILE WRITE will succeed (possibly
  113.   creating a file with "holes").  If a FILE SEEK /BYTE command is given, the
  114.   current line becomes unknown (unless the position is 0) and subsequent
  115.   FILE SEEK /RELATIVE /LINE commands will fail until the next non-relative
  116.   FILE SEEK /LINE command is given.  Synonym: FSEEK.
  117. An absolute FILE SEEK to a negative position fails silently, as does a
  118. relative seek to a position before the beginning of the file.
  119. A caution about relative SEEKs: remember that the number is relative to the
  120. current position.  Whenever you read or write, this changes the position.
  121. In each of the following examples, assume the file open on channel %c is
  122. positioned at line "n" (the FREAD target variable is omitted for lack of
  123. space):
  124.   { FREAD %c, FSEEK /LINE %c -1, FREAD %c }  <-- Reads line n twice
  125.   { FREAD %c, FSEEK /LINE %c +0, FREAD %c }  <-- Reads lines n and n+1
  126.   { FREAD %c, FSEEK /LINE %c +1, FREAD %c }  <-- Reads lines n and n+2
  127.   { FREAD %c, FSEEK /LINE %c -2, FREAD %c }  <-- Reads lines n and n-1
  128.   { FREAD %c, FSEEK /LINE %c -3, FREAD %c }  <-- Reads lines n and n-2
  129. Another caution: Using FSEEK and FREAD /SIZE to repeatedly read the same disk
  130. block (e.g. when sampling a database record that is frequently updated) might
  131. not give you updated disk blocks due to the internal buffering and caching of
  132. the C library (this probably varies from one platform/compiler combination to
  133. another).  If necessary you can force a fresh disk read with a close/open
  134. sequence:
  135.   FCLOS %c
  136.   FOPEN %c <samefilename>
  137.   FSEEK %c <samespot>
  138.   FREAD /SIZE:<howmanybytes> %c <variable>
  139. 1.22.3. FILE Command Examples
  140. To read the last 10 lines of a text file into an array:
  141.   fopen /read %c oofa.txt                ; Open the file
  142.   if fail exit 1 Can't open oofa.txt      ; Always check for failure
  143.   dcl &a[10]                             ; Declare a 10-element array
  144.   fcount /line %c                        ; Count lines in the file
  145.   fseek /line %c v(f_count)-10          ; Seek to 10 lines from the end
  146.   if fail exit 1 Can't seek               ; Check for failure
  147.   for %i 1 10 1 { fread %c &a[%i] }   ; Read the last 10 lines
  148.   fclose %c                              ; Close the file
  149. Note that blank lines show up as empty (undefined) array elements, for example
  150. if you give a "show array a" command at this point.  This is normal.  You
  151. can still use these elements; e.g.:
  152.   for %i 1 10 1 { echo %i. &a[%i] }   ; Display the 10 lines
  153. Here is how to read the last line of a file (already open on channel %c):
  154.   fseek /line %c last                    ; Seek directly to last line
  155. Alternatively:
  156.   fseek /line %c eof                     ; Seek to end of file
  157.   fseek /line %c -1                      ; Seek to beginning of last line
  158. Alternatively:
  159.   fcount /line %c                        ; Count the file's lines
  160.   fseek /line %c v(f_count)-1           ; Seek to last line
  161.   fread %c                               ; Read it
  162. To read every other line from the file (using relative SEEK), skipping
  163. the first line:
  164.   fopen /read %c oofa.txt                ; Open the file
  165.   while ( success ) {                     ; Loop through lines
  166.       fseek /line %c +1                  ; Skip a line
  167.       if success fread %c                ; Read & display a line
  168.   }
  169.   fclose %c                              ; Close the file
  170. Here is how to read the lines of a file in reverse order:
  171.   fopen /read %c oofa.txt                ; Open
  172.   if fail exit 1                          ; Check
  173.   fseek /line %c last                    ; Seek to last line
  174.   while success {                         ; Loop
  175.       fread %c                           ; Read line
  176.       fseek /line %c -2                  ; Seek backwards two lines
  177.   }
  178.   fclose %c                              ; Close the file
  179. The loop works because a relative SEEK outside the file fails.
  180. It is also possible to use block i/o to manage random-access files with
  181. fixed-length records (as long as they don't contain NUL characters).  Suppose,
  182. for example, you have a file of "card image" records with fixed-field
  183. information about customers, such as:
  184.   Name:     Columns  1-32  (column numbers are 1-based)
  185.   Address:  Columns 33-72
  186.   Balance:  Columns 73-80
  187. The records are indexed by customer number, starting with 0.  There are no
  188. line terminators separating them.  Therefore the record for customer number
  189. n starts at position n x 80 (%n*80).
  190. Now suppose we received a payment from customer number 173 and want to update
  191. the balance:
  192.   .%n = 173                               ; Customer (record) number
  193.   .%a = 12.72                             ; Amount
  194.   fopen /read /write %c customer.db       ; Open the file
  195.   if fail stop 1 OPEN FAILED: f_errmsg()  ; Check
  196.   fseek /byte %c 80*%n                   ; Seek to record
  197.   fread /size:80 %c r                     ; Read the record
  198.   if fail stop 1 READ FAILED: f_errmsg()  ; Check (IMPORTANT)
  199.   .%b := fright(m(r),8)                 ; Extract the balance
  200.   .%b := ffpadd(%b,%a,2)               ; Add the new payment
  201.   if fail stop 1 ARITHMETIC ERROR: %b/%a ; Catch bad records
  202.   .r := {fleft(m(r),72)flpad(%b,8)}    ; Update the record
  203.   fseek /byte %c 80*%n                   ; Reposition to same spot
  204.   fwrite /size:80 %c {m(r)}              ; Replace the record
  205.   if fail stop 1 WRITE FAILED: f_errmsg() ; Check
  206.   fclose %c                               ; Close the file
  207. REMEMBER: Using FILE SEEK to move beyond the end of file can result in a file
  208. with holes when writing; when reading, an end-of-file error will occur --
  209. be sure to check for it.
  210. 1.22.4. Channel Numbers
  211. C-Kermit's channel numbers are integers from 0 to some platform-dependent
  212. limit, such as 46 or 1985 (the value of v(f_max)).  This is the limit placed
  213. by the operating system on the number of files that may be opened by one
  214. process or user or job, minus the standard input, output, and error files, and
  215. minus the number of files reserved by C-Kermit for logs, OPEN READ and WRITE,
  216. and file transfer (and maybe some command files -- the v(f_max) number can't
  217. be exact).
  218. Although you must include a variable in the FILE OPEN command, to which the
  219. channel number is assigned, you don't have to use a variable in the other FILE
  220. commands if you know what the number is -- you can just put the number.  This
  221. saves you a few keystrokes when typing commands at the prompt:
  222.   fopen %c oofa.txt
  223.   flist
  224.   0. /usr/olga.oofa.txt (R) 0
  225. This tells the channel number is 0 (the number on the left is the channel
  226. file's channel number).  Of course you can also find it by echoing the
  227. variable:
  228.   echo %c
  229.   0
  230. Or with "fstatus %c".  Now you can type commands like:
  231.   fread 0
  232. to read a line from the file.  Obviously, however, using digits rather than
  233. a variable for the channel number  would be poor practice in a script.
  234. If in commands like:
  235.   fread %c %a
  236. you have trouble remembering which variable is which, note that the channel
  237. number is, indeed, a number.  Anywhere C-Kermit accepts a number it can also
  238. accept an expression, so you can put parentheses around the channel number to
  239. remind you it's the channel number and not the variable into which data is to
  240. be read:
  241.   fread (%c) %a
  242. Normally channel numbers are assigned sequentially as 0, 1, 2, ... up to the
  243. limit.  However, once you start closing files, there can be holes in the
  244. sequence.  New channels are assigned to fill in the holes.  Thus you can't
  245. depend on channel numbers being in any particular sequence.
  246. 1.22.5. FILE Command Errors
  247. Each FILE command sets the variable v(f_error) to one of the following values:
  248.     0 = No error
  249.    -1 = System error
  250.    -2 = Attempt to read after end of file
  251.    -3 = Channel not open
  252.    -4 = Channel number out of range (negative or too large)
  253.    -5 = Numeric argument (size, ...) out of range
  254.    -6 = File not found
  255.    -7 = Bad or missing filename
  256.    -8 = Too many files are already open (FILE OPEN only)
  257.    -9 = Forbidden operation (e.g. write to a read-only file)
  258.   -10 = Access denied
  259.   -11 = Illegal combination of OPEN modes (FILE OPEN only)
  260.   -12 = Buffer overflow
  261.   -13 = Current line number unknown (for relative line seeks)
  262.   -14 through -98: Reserved.
  263.   -99 = Requested operation not implemented in this version of C-Kermit
  264.  -999 = Unknown error
  265. When v(f_error) is -1, this means the FILE command failed because because
  266. of a system error, in which case you can examine the following variables:
  267.   v(errno)     = System error number.
  268.   v(errstring) = Error message corresponding to v(errno).
  269. A special function is available for translating the v(f_error) code to an
  270. error message string:
  271. f_errmsg([code])
  272.   If the code is -1, returns error message of the most recent system
  273.   error; otherwise if the code is a valid v(f_error) value, the associated
  274.   message is returned.  If the code is omitted, the status message
  275.   corresponding to the current v(f_error) value is returned.
  276. A FILE command that fails prints the appropriate error message automatically,
  277. except when the command is READ or SEEK and the error is -2 (end of file); in
  278. that case, the command still fails, but does not print a message.  This allows
  279. constructions such as:
  280.   fopen %c oofa.txt
  281.   while success { fread %c }
  282.   fclose %c
  283. to work as expected, i.e. without an annoying message when the end of file
  284. is reached.
  285. 1.22.6. File I/O Variables
  286. The variables associated with the file i/o package are:
  287.   v(f_count) - Result of the most recent FILE COUNT (FCOUNT) command.
  288.   v(f_error) - Numeric error code of most recent FILE command (0 = no error).
  289.   v(f_max)   - Maximum number of files open simultaneously.
  290. 1.22.7. File I/O Functions
  291. Some of the FILE commands can also be issued as function calls, which makes
  292. script writing a bit more convenient, especially for C programmers.  Also,
  293. several functions are provided that do not have command equivalents.  Each of
  294. these functions takes a channel number as the first argument.  These functions
  295. do not work for OPEN { READ, !READ, WRITE, !WRITE, and APPEND } files.
  296. f_status(channel)
  297.   Returns 0 if the channel is not open, otherwise a number between 1 and 15
  298.   which is the sum of the OPEN modes:
  299.     1 = /READ
  300.     2 = /WRITE
  301.     4 = /APPEND
  302.     8 = /BINARY
  303. The remaining functions work only for open channels.  Each of these functions
  304. can fail for the applicable reasons listed in Section 1.22.5.  For instructions
  305. on handling function errors, see Section 7.12.
  306. f_pos(channel)
  307.   Returns the file's current read/write pointer (0-based).  There is no FILE
  308.   command equivalent.
  309. f_line(channel)
  310.   Returns the file's current line number (0-based), if known, otherwise -1.
  311.   There is no FILE command equivalent.  The line number is known as long as
  312.   no character or block i/o has been done on the channel.
  313. f_handle(channel)
  314.   Returns the "file handle" of the file.  That is, it translates the portable
  315.   C-Kermit channel number into a system-specific file handle or number that
  316.   can be passed to other programs on the same platform.  In UNIX this is a
  317.   file descriptor.  There is no FILE command equivalent.
  318. f_eof(channel)
  319.   Returns 1 if the read/write pointer of the file on the given channel is at
  320.   the end of the file, 0 otherwise.  Convenient in WHILE statements, e.g.:
  321.     while not f_eof(%c) { fread %c }
  322. f_getchar(channel)
  323.   Equivalent to FREAD /CHAR.  Returns the character actually read.
  324.   If f_getchar() does not fail but the return value is empty, this means
  325.   a NULL character was read.
  326. f_getline(channel)
  327.   Equivalent to FREAD /LINE.  Returns the line actually read, but with the line
  328.   terminator stripped.  If f_getline() does not fail but the return value is
  329.   empty, this normally means an empty line was read.
  330. f_getblock(channel,n)
  331.   Equivalent to FREAD /SIZE:n.  Returns the block of characters actually read.
  332.   If the returned block is smaller than n, it indicates either that the end
  333.   of file was reached or a NUL character is in the block.
  334. f_putchar(channel,c)
  335.   Equivalent to FWRITE /CHARACTER.  Writes the character c.  If c contains
  336.   more than one character, only the first is written.  If c is empty a NUL
  337.   is written.  Returns the number of characters written on success, or a
  338.   negative error code upon failure.
  339. f_putline(channel,string)
  340.   Equivalent to FWRITE /LINE.  Writes the string and adds the appropriate line
  341.   termination character or sequence.  If the string is empty or omitted, an
  342.   empty line is written.  Returns the number of characters written on success,
  343.   or a negative error code upon failure.
  344. f_putblock(channel,string)
  345.   Equivalent to FWRITE /STRING.  Writes the string as given.  If the string is
  346.   empty or omitted, nothing is written.  Returns the number of characters
  347.   written on success, or a negative error code upon failure.
  348. 1.22.8. File I/O Function Examples
  349.   fopen /read %c oofa.txt            ; Open our favorite file for reading
  350.   if failure exit 1                   ; Check that it's open
  351.   while not f_eof(%c) {             ; Loop until EOF
  352.       .line := f_getline(%c)        ; Get a line
  353.       if success echo {m(line)}      ; Echo it
  354.   }
  355.   if not f_eof(%c) {                ; Check reason for loop exit
  356.       exit 1 File Error: f_errmsg()  ; If not EOF say so.
  357.   }
  358.   frewind %c                         ; Rewind the file
  359.   while not f_eof(%c) {             ; Same thing but with block i/o
  360.       .block := f_getblock(%c,256)  ; (much faster than line i/o)
  361.       if success xecho {m(block)}
  362.   }
  363.   frewind %c                         ; Rewind again
  364.   while not f_eof(%c) {             ; Same deal but with character i/o
  365.       .c := f_getchar(%c)           ; (much slower than line i/o)
  366.       if success xecho {m(c)}
  367.   }
  368.   close %c
  369. To close all open files (equivalent to FCLOSE ALL):
  370.   for %i 0 v(f_max)-1 1 {
  371.       if f_status(%i) fclose %i
  372.   }
  373. 1.23. The EXEC Command
  374. The EXEC command is available only in UNIX.
  375. EXEC [ /REDIRECT ] <command> [ <arg1> [ <arg2> [ ... ] ]
  376.   Runs the given command with the arguments in such a way that the <command>
  377.   replaces C-Kermit in memory, and C-Kermit ceases to execute.  EXEC is like
  378.   RUN, except instead of returning to C-Kermit when finished, the <command>
  379.   returns to whatever process invoked Kermit.
  380. In the normal case, no files are closed, so the EXEC'd command inherits the
  381. open files, read/write pointers, working directory, process ID, user ID
  382. (unless <command> is SUID), group ID (unless command is SGID), groups, etc.
  383. (In UNIX, the EXEC command is simply a front end for execvp().)
  384. If the /REDIRECT switch is included, then if a connection is open (SET LINE
  385. or SET HOST), it becomes the standard input and output of the EXEC'd program.
  386. If no connection is open, the /REDIRECT switch has no effect.  For example
  387. to use C-Kermit for PPP dialing in Linux:
  388.   set modem type usr          ; Specify the kind of modem you have
  389.   set line /dev/ttyS1         ; Specify the device it's connected to
  390.   set speed 57600             ; and the speed
  391.   set flow rts/cts            ; and flow control.
  392.   set dial retries 100        ; Try the dial sequence up to 100 times.
  393.   dial {{9-212-555-1212}{9-212-555-1213}{9-212-555-1214}{9-212-555-1215}}
  394.   if fail exit 1
  395.   for %i 1 16 1 {            ; Try up to 16 times to get login prompt
  396.       input 10 Login:         ; Wait 10 sec for it to appear
  397.       if success break        ; Got it - proceed...
  398.       output 13              ; Send a carriage return and try again
  399.   }
  400.   if ( > %i 16 ) stop 1 NO LOGIN PROMPT
  401.   lineout (myuserid)         ; Send user ID
  402.   input 30 assword:           ; Wait for Password prompt
  403.   if fail stop 1 NO PASSWORD PROMPT
  404.   lineout m(mypassword)      ; Send the password.
  405.   exec /redirect pppd         ; Replace ourselves with pppd.
  406. In this example we assume that the script has already set up the myuserid and
  407. mypassword variables -- normally the password should be prompted for, rather
  408. than stored on disk.  Notice the advantages over the well-known "chat script":
  409.  . You don't have to control the modem itself with AT commands; Kermit's
  410.    DIAL command does this for you.
  411.  . You can have Kermit automatically redial as many times as you want
  412.    until it gets a connection (if this is legal in your country).
  413.  . You can have Kermit fetch the number or numbers from a dialing directory.
  414.  . You can have Kermit cycle through a list of phone numbers (this is new
  415.    to C-Kermit 7.0; see Section 2.1.16) without having to enter the numbers
  416.    in a dialing directory.
  417.  . Dialing is location-independent; you can use the same script to dial from
  418.    different areas or countries.
  419.  . Once the connection is made, the full power of Kermit's script language
  420.    is available to manage the dialog with the terminal server or other
  421.    device that answers the phone call.
  422. 1.24. Getting Keyword Lists with '?'
  423. Suppose you type "te" at the C-Kermit> prompt and then Esc or Tab to request
  424. keyword completion.  Kermit beeps, indicating that more than one command
  425. starts with "te".  But if you type '?'  to see what they are, Kermit shows
  426. only "telnet".  So why the beep?  Because of invisible keywords like "telopt",
  427. "terminal", and "text".  Lots of keywords are invisible because they are
  428. either synonyms for other keywords or else esoteric options to be used only
  429. in special circumstances, so we don't want them cluttering up the menus.
  430. But then there is no way for you to discover them.  So in C-Kermit 7.0, if you
  431. type '?' AFTER the beginning of a keyword field, then invisible keywords are
  432. shown too:
  433.   C-Kermit>te<Esc><BEEP>
  434.   C-Kermit>te? Command, one of the following:
  435.    telnet    telopt    terminal  text
  436.   C-Kermit>te
  437. But if '?' is typed at the beginning of a field, only visible keywords are
  438. shown, as before (so, in this example, if '?' is typed at the C-Kermit>
  439. prompt, "telnet" is the only command shown that starts with "te").
  440. (2) MAKING AND USING CONNECTIONS
  441. The SET LINE, SET HOST, and SET PORT (a synonym for SET LINE) commands have
  442. new synonyms, in which the word SET is replaced by the word OPEN: OPEN LINE,
  443. etc.  There is no new functionality here, but OPEN is a better verb, since SET
  444. generally takes no action, whereas these commands actually try to open a
  445. connection.  Furthermore, there is the symmetry with CLOSE.
  446. 2.0. SET LINE and SET HOST Command Switches
  447. The SET LINE (SET PORT) and SET HOST commands now allow switches before the
  448. device or host name, in most cases, and under certain circumstances, also at
  449. the end.  The new syntax is backwards compatible with the previous syntax;
  450. thus SET LINE, SET PORT, and SET HOST commands in command files written for
  451. C-Kermit 6.0 or earlier still work.  The expanded syntax is:
  452.  { OPEN,SET } { LINE,PORT,HOST } [ switches ] <device-or-address> [ switches ]
  453. The first group of switches is:
  454. /NETWORK-TYPE:{TCP/IP,X.25,PIPE,PTY...}
  455.   When more than one network type is available, this lets you specify the
  456.   type of network to use for this connection without affecting your global
  457.   SET NETWORK TYPE.  See Section 2.7 about pipes and ptys.
  458. /USERID:[string]
  459.   This switch is equivalent to SET LOGIN USERID.  If a string is given, it
  460.   sent to host during Telnet negotiations; if this switch is given but the
  461.   string is omitted, no user ID is sent to the host.  If this switch is not
  462.   given, your current LOGIN USERID (v(userid) value), if any, is sent.
  463.   Unlike most other switches, this one is "sticky", since the value must
  464.   persist throughout the session in case the server requests the ID string
  465.   at a later time.
  466. /CONNECT
  467.   Enter CONNECT mode immediately and automatically after the device or
  468.   connection is open.  On serial devices, however, when CARRIER-WATCH is
  469.   not OFF, wait up to 1 second for the Carrier Detect signal to appear
  470.   before trying to connect, to give the device time to react DTR, which
  471.   might have been off prior to opening the device.
  472. /SERVER
  473.   Enter server mode immediately and automatically after the device or
  474.   connection is open.  Treatment of carrier is the same as for /CONNECT.
  475. /WAIT
  476. /NOWAIT
  477.   For Telnet connections only: Like SET TELNET WAIT { ON, OFF }, but applies
  478.   only to this connection, and in fact applies only when OPENing this
  479.   connection (which is usually the only place it matters).  Typically you
  480.   would use TELNET /NOWAIT to make a connection to a misbehaving Telnet
  481.   server that does not reply to negotiations as required by the Telnet
  482.   protocol definition.
  483. Note: /CONNECT and /SERVER switches are not available in the RLOGIN and TELNET
  484. commands, since these commands already include an implicit /CONNECT and
  485. preclude automatic entry into server mode.
  486. The /CONNECT and /SERVER switches are especially useful with "set host *"
  487. connections.  For example, suppose you want to start a Kermit server on socket
  488. 3000 of your TCP host.  Normally you would have to give the command:
  489.   set host * 3000
  490. and then wait for a connection to come in, and only then could you give the
  491. SERVER command (or else define a macro to do this, and then execute the macro).
  492. Now you can do it in one step:
  493.   set host /server * 3000
  494. This tells C-Kermit to wait for the connection and then enter server mode
  495. once it comes in, no matter how long it takes.  Similarly, "set host /conn *"
  496. can be used to wait for a "chat" connection to come in.
  497. Another set of switches is available in VMS only, for use only with SET LINE:
  498. /SHARE
  499.   Allows the SET LINE device to be opened in shared mode.  Normally it makes
  500.   no sense to open a serial device in shared mode, but it's necessary when
  501.   C-Kermit is running in an environment such as DECIntact, that opens your
  502.   job's controlling terminal in such a way that C-Kermit can't open it too,
  503.   unless it enables SHARE privilege.  Note: SHARE privilege is required.
  504. /NOSHARE
  505.   Requires that the SET LINE device not be in use by any other process in
  506.   order for it to be successfully opened by C-Kermit.  If neither /SHARE nor
  507.   /NOSHARE is specified, /NOSHARE is used.
  508. The second group of switches is:
  509. /NO-TELNET-INIT
  510.   Do not send initial Telnet negotiations even if this is a Telnet port.
  511. /RAW-SOCKET
  512.   This is a connection to a raw TCP socket (Section 2.3.5).
  513. /RLOGIN
  514.   Use Rlogin protocol even if this is not an Rlogin port.
  515. /TELNET
  516.   Send initial Telnet negotiations even if this is not a Telnet port.
  517. As of C-Kermit 7.0 and K95 1.1.18, the TELNET command includes an implicit
  518. /TELNET switch.  So if you TELNET to a non-TELNET port, Kermit sends initial
  519. Telnet negotiations.  This makes sense, since that's what "telnet" means.
  520. If you want to make a connection to a non-Telnet port without sending initial
  521. Telnet negotiations, use:
  522.   set host [ /connect ] <name-or-address> <port>
  523. or:
  524.   telnet <name-or-address> <port> /no-telnet-init
  525. Additional switches might be added in the future; type "set host ?" or "set
  526. line ?" to see a current list.
  527. 2.1. Dialing
  528. Automatic redialing is illegal or restricted in many countries, so until
  529. C-Kermit 7.0, it was disabled by default, i.e. until a SET DIAL RETRIES
  530. command was given.  In C-Kermit 7.0, if no SET DIAL RETRIES command has been
  531. given, a default is picked dynamically at DIAL time based on the calling
  532. country code, if known.  At this writing, the only country code known to have
  533. no restrictions on automatic redialing is 1.  So in this case a limit of 10
  534. is chosen; otherwise 1.  If you have not given an explicit SET DIAL RETRIES
  535. command, SHOW DIAL shows the value as "(auto)", and then the value actually
  536. used is shown when you give the DIAL command.
  537. As of C-Kermit 7.0, automatic redialing is automatically canceled if the
  538. call could not be placed because no dialtone was detected.
  539. 2.1.1. The Dial Result Message
  540. If DIAL DISPLAY is not ON, the "Call complete" message now shows the modem's
  541. call result message, for example:
  542.   Dialing: ...
  543.   Call complete: "CONNECT 31200/ARQ/V32/LAPM/V42BIS"
  544. The exact format and contents of this message, of course, depends on the
  545. make, model, and configuration of your modem, so use your modem manual to
  546. interpret it.  The call result message is also available in C-Kermit's
  547. v(dialresult) variable.
  548.   C-Kermit> echo v(dialresult)
  549.   CONNECT 31200/ARQ/V32/LAPM/V42BIS
  550.   C-Kermit> echo Speed = fword(v(dialresult),2)
  551.   Speed = 31200
  552.   C-Kermit>
  553. Suppose your modem reports the modulation speed as shown above and you want to
  554. ensure your call is completed at (say) 24000 bps or more.  You can use a
  555. little macro to do the job:
  556. define HSDIAL {                ; High Speed DIAL
  557.     local %s
  558.     if < v(argc) 1 if not def v(dialnumber) end 1 Usage: %0 number
  559.     set dial retries 100
  560.     set dial interval 1
  561.     while true {
  562. dial %*
  563. if fail end 1 DIAL failed.
  564. asg %s fword(v(dialresult),2)
  565. if def %s if numeric %s if not < %s 24000 break
  566.     }
  567. }
  568. (See section 7.5 about the %* variable.)
  569. 2.1.2. Long-Distance Dialing Changes
  570. Due to the glut of cell phones, pagers, fax machines, ISPs, etc, area codes
  571. and dialing rules are changing all the time.  In the North American Numbering
  572. Plan (NANP) countries (USA, Canada, etc), area codes are split or overlayed
  573. with increasing frequency, and 10- and 11-digit dialing is gradually becoming
  574. the norm for local calls.  Changes are occurring In Europe, too, partly for
  575. these reasons and partly because of some new EC rules.
  576. In France, effective 18 October 1996, all calls, even local ones, must be
  577. dialed with an area code.  French area codes are presently 1-digit numbers,
  578. 1-6, and the long-distance dialing prefix is 0.  All calls within France are
  579. considered long distance and begin with 01, 02, ..., 06.
  580. Effective 1 May 1997, all calls within the US state of Maryland, even local
  581. ones, must be dialed with an area code but WITHOUT the long-distance prefix --
  582. this is the now widely-known North American phenomenon of "ten digit dialing".
  583. The same is happening elsewhere -- many cities in Florida adopted 10-digit
  584. dialing in 1998.
  585. In Italy beginning 19 June 1998, all calls to fixed (as opposed to mobile)
  586. numbers must be prefixed by 0.  When calling into Italy from outside, the 0
  587. must follow the country code (39).  Calls to cell phones, however, must be
  588. placed without the 0.  Then on 29 December 2000, the 0 will become a 4 (for
  589. calling fixed numbers) and a prefix of 3 must used for calling mobile phones.
  590. More info at: http://www.telecomitalia.it/npnn/.
  591. In Spain, effective 4 April 1998, with hard cutover on 18 July 1998, all
  592. calls within the country must be dialed with 9 digits, and all calls from
  593. outside Spain must also be dialed with 9 digits (after the country code, 34).
  594. The new 9-digit numbers all begin with "9".  More info at:
  595. http://www.telefonica.es/cambiodenumeracion/
  596. Several new dialing features and commands have been added in version 6.1 and
  597. 7.0 to address these changes.
  598. C-Kermit 6.0 and Kermit 95 1.1.11 and earlier handle the French situation
  599. via a reasonable subterfuge (setting the local area code to a nonexistent
  600. one), but did not handle "ten-digit dialing" well at all; the recommended
  601. technique was to change the long-distance dialing prefix to nothing, but this
  602. defeated Kermit's "list numbers for one name" feature when the numbers were in
  603. different locations.  For example:
  604.   set dial ld-prefix
  605.   dial onlineservice
  606. where "onlineservice" is a dialing directory entry name corresponding to
  607. entries that are in (say) Maryland as well as other states, would not
  608. correctly dial the numbers not in Maryland.
  609. A new command lets you specify a list of area codes to be considered local,
  610. except that the area code must be dialed:
  611.   SET DIAL LC-AREA-CODES [ areacode [ areacode [ areacode [ ... ] ] ] ]
  612. The list may include up to 32 area codes.  If a number is called whose area
  613. code is in this list, it is dialed WITHOUT the long-distance prefix, but WITH
  614. the area code.  So in Maryland, which (last time we looked) has two area
  615. codes, 410 and 301, the setup would be:
  616.   SET DIAL LC-AREA-CODES 410 301
  617. Example:
  618.   SET DIAL LD-PREFIX 1
  619.   SET DIAL AREA-CODE 301
  620.   SET DIAL LC-AREA-CODES 410 301 <-- Area codes in 10-digit dialing region
  621.   DIAL +1 (301) 765-4321         <-- Dials 3017654321  (local with area code)
  622.   DIAL +1 (410) 765-4321         <-- Dials 4107654321  (local with area code)
  623.   DIAL +1 (212) 765-4321         <-- Dials 12127654321 (long distance)
  624. The SET DIAL LC-AREA-CODES command does not replace the SET DIAL AREA-CODE
  625. command.  The latter specifies the area code you are dialing from.  If the
  626. called number is in the same area code, then the area code is dialed if it is
  627. also in the LC-AREA-CODES list, and it is not dialed otherwise.  So if "301"
  628. had not appeared in the LC-AREA-CODES list in the previous example:
  629.   SET DIAL LD-PREFIX 1
  630.   SET DIAL AREA-CODE 301
  631.   SET DIAL LC-AREA-CODES 410     <-- Area codes in 10-digit dialing region
  632.   DIAL +1 (301) 765-4321         <-- Dials 7654321     (local)
  633.   DIAL +1 (410) 765-4321         <-- Dials 4107654321  (local with area code)
  634.   DIAL +1 (212) 765-4321         <-- Dials 12127654321 (long distance)
  635. The new Kermit versions also add a Local Call Prefix and Local Call Suffix, in
  636. case you have any need for it.  These are added to the beginning and of local
  637. phone numbers (i.e. numbers that are not long-distance or international).
  638. Examples:
  639.   SET DIAL LD-PREFIX 1
  640.   SET DIAL LC-PREFIX 9
  641.   SET DIAL LC-SUFFIX *
  642.   SET DIAL LC-AREA-CODES 410     <-- Area codes in 10-digit dialing region
  643.   SET DIAL AREA-CODE 301
  644.   DIAL +1 (301) 765-4321         <-- Dials 97654321*     (local)
  645.   DIAL +1 (410) 765-4321         <-- Dials 94107654321*  (local with area code)
  646.   DIAL +1 (212) 765-4321         <-- Dials 12127654321   (long distance)
  647. 2.1.3. Forcing Long-Distance Dialing
  648. Suppose a number is in your country and area, but for some reason you need to
  649. dial it long-distance anyway (as is always the case in France).  There have
  650. always been various ways to handle this:
  651.  1. Temporarily set your area code to a different (or nonexistent or
  652.     impossible) one (but this required knowledge of which area codes were
  653.     nonexistent or impossible in each country).
  654.  2. Dial the number literally instead of using the portable format, but this
  655.     defeats the purpose of the portable dialing directory.
  656. Now there is also a new command that, very simply, can force long-distance
  657. dialing:
  658. SET DIAL FORCE-LONG-DISTANCE { ON, OFF }
  659.   If a call is placed to a portable phone number within the same country
  660.   code as the calling number, it is dialed with the long-distance prefix
  661.   and the area code if FORCE-LONG-DISTANCE is ON.  If OFF, the regular
  662.   rules and procedures apply.
  663. Example (France):
  664.   SET DIAL COUNTRY-CODE 33
  665.   SET DIAL AREA-CODE 6
  666.   SET DIAL FORCE-LONG-DISTANCE ON
  667. (In fact, SET DIAL COUNTRY-CODE 33 automatically sets DIAL FORCE-LONG-DISTANCE
  668. ON...)
  669. Example (USA, for a certain type of reverse-charge calling in which the
  670. called number must always be fully specified):
  671.   SET DIAL PREFIX 18002666328$     ; 1-800-COLLECT
  672.   SET DIAL COUNTRY-CODE 1
  673.   SET DIAL AREA-CODE 212
  674.   SET DIAL FORCE-LONG-DISTANCE ON
  675. Example (Toronto, where calls to exchange 976 within area code 416 must be
  676. dialed as long distance, even when you are dialing from area code 416):
  677.   SET DIAL COUNTRY-CODE 1
  678.   SET DIAL AREA-CODE 416
  679.   SET DIAL FORCE-LONG-DISTANCE ON
  680.   DIAL +1 (416) 976-xxxx
  681. If dialing methods were consistent and sensible, of course it would be
  682. possible to always dial every domestic call as if it were long distance.  But
  683. in many locations this doesn't work or if it does, it costs extra.  The
  684. following macro can be used for dialing any given number with forced
  685. long-distance format:
  686.   define LDIAL {
  687.       local %x
  688.       set dial force-long-distance on
  689.       dial %*
  690.       asg %x v(success)
  691.       set dial force-long-distance off
  692.       end %x
  693.   }
  694. (See section 7.5 about the %* variable.)
  695. 2.1.4. Exchange-Specific Dialing Decisions
  696. This applies mainly to the North American Numbering Plan (NANP).  Refer to the
  697. section "Alternative notations" in "Using C-Kermit" 2nd Edition, pages
  698. 106-107, and the story about Toronto on page 110.  Using the new LC-AREA-CODES
  699. list, we can address the problem by treating the exchange as part of the area
  700. code:
  701.   SET DIAL LD-PREFIX 1
  702.   SET DIAL AREA-CODE 416
  703.   SET DIAL LC-AREA-CODES 905276
  704.   DIAL +1 416 765 4321               <-- 7654321      (local)
  705.   DIAL +1 905 276 4321               <-- 9052764321   (local with area code)
  706.   DIAL +1 905 528 4321               <-- 19055284321  (long distance)
  707. The same technique can be used in Massachusetts (story at top of page 111)
  708. and in any other place where dialing to some exchanges within a particular
  709. area code is local, but to others in the same area code is long distance.
  710. 2.1.5. Cautions about Cheapest-First Dialing
  711. Kermit does not maintain a knowledge base of telephony information; it only
  712. provides the tools to let you enter a phone number in a standard format and
  713. dial it correctly from any location in most cases.
  714. In particular, Kermit does not differentiate the charging method from the
  715. dialing method.  If a call that is DIALED as long-distance (e.g. from 212 to
  716. 718 in country code 1) is not CHARGED as long distance, we have no way of
  717. knowing that without keeping a matrix of charging information for every
  718. area-code combination within every country, and any such matrix would be
  719. obsolete five minutes after it was constructed.  Thus, "cheapest-first"
  720. sorting is only as reliable as our assumption that the charging method follows
  721. the dialing method.  A good illustration would be certain online services that
  722. have toll-free dialup numbers which they charge you a premium (in your online
  723. service bill) for using.
  724. 2.1.6. Blind Dialing (Dialing with No Dialtone)
  725. C-Kermit's init string for Hayes-like modems generally includes an X4 command
  726. to enable as many result codes as possible, so that Kermit can react
  727. appropriately to different failure reasons.  One of the result codes that X4
  728. enables is "NO DIALTONE".  A perhaps not obvious side effect of enabling this
  729. result code that the modem must hear dialtone before it will dial.
  730. It is becoming increasingly necessary to force a modem to dial even though it
  731. does not hear a dialtone on the phone line; for example, with PBXs that have
  732. strange dialtones, or with phone systems in different countries, or with ISDN
  733. phones, etc.  This is called "blind dialing".
  734. C-Kermit 7.0 has two new commands to cope with this situation:
  735. SET DIAL IGNORE-DIALTONE { ON, OFF }
  736.   OFF (the default) means to tell the modem to wait for dialtone before
  737.   dialing.  ON means to enable "blind dialing", i.e. tell the modem NOT
  738.   to wait for dialtone before dialing.  Generally this is accomplished by
  739.   sending ATX3 to the modem just prior to dialing.  SET MODEM TYPE xxx
  740.   and then SHOW MODEM displays Kermit's built-in "ignore dialtone" command.
  741. SET DIAL COMMAND IGNORE-DIALTONE <text>
  742.   This lets you change the built-in ignore-dialtone command (such as ATX3)
  743.   to whatever you choose, in case the built-in one does not work, or another
  744.   command works better.
  745. Notes:
  746.  1. The ignore-dialtone command is not sent unless SET DIAL IGNORE-DIALTONE
  747.     is ON.
  748.  2. The ATX3 command generally disables not only NO DIALTONE, but also BUSY.
  749.     So this will prevent Kermit from detecting when the line is busy.  This
  750.     is a property of the modem, not of Kermit.
  751. 2.1.7. Trimming the Dialing Dialog
  752. The command:
  753.   SET MODEM COMMAND <action> [ <command> ]
  754. is used to override Kermit's built-in modem commands for each action, for
  755. each kind of modem in its internal database.  If you include a <command>,
  756. this is used instead of the built-in one.  If you omit the <command>, this
  757. restores the original built-in command.
  758. If you want to omit the command altogether, so Kermit doesn't send the command
  759. at all, or wait for a response, use:
  760.   SET MODEM COMMAND <action> {}
  761. That is, specify a pair of empty braces as the command, for example:
  762.   SET MODEM COMMAND ERROR-CORRECTION ON {}
  763. 2.1.8. Controlling the Dialing Speed
  764. The rate at which characters are sent to the modem during dialing is normally
  765. controlled by the built-in modem database.  You might want to override this
  766. if Kermit seems to be dialing too slowly, or it is sending characters to the
  767. modem faster than the modem handle them.  A new command was added for this
  768. in C-Kermit 7.0:
  769. SET DIAL PACING <number>
  770.   Specifies the number of milliseconds (thousandths of seconds) to pause
  771.   between each character when sending commands to the modem during DIAL or
  772.   ANSWER command execution.  0 means no pause at all, -1 (the default) or any
  773.   other negative number means to use the value from the database.  Any number
  774.   greater than 0 is the number of milliseconds to pause.
  775. HINT: You might also need to control the rate at which the modem generates
  776. Touch Tones during dialing, for example when sending a numeric page.  There
  777. are two ways to do this.  One way is to insert pause characters into the
  778. dialing string.  For modems that use the AT command set, the pause character
  779. is comma (,) and causes a 2-second pause.  On most modems, you can use the S8
  780. register to change the pause interval caused by comma in the dialing string.
  781. The other way is to set your modem's tone generation interval, if it has a
  782. command for that.  Most AT-command-set modems use S11 for this; the value is
  783. in milliseconds.  For example on USR modems:
  784.   ATS11=200
  785. selects an interval of 200 milliseconds to separate each dialing tone.
  786. Hint: To add S-Register settings or other commands to your dialing procedure,
  787. use the new SET MODEM COMMAND PREDIAL-INIT command (Section 2.2.2).
  788. 2.1.9. Pretesting Phone Number Conversions
  789. The LOOKUP command now accepts telephone numbers as well as directory-entry
  790. names, for example:
  791.   LOOKUP +1 (212) 7654321
  792. When given a phone number, LOOKUP prints the result of converting the phone
  793. number for dialing under the current dialing rules.  For example, if my
  794. country code is 1 and my area code is 212, and I am dialing out from a PBX
  795. whose outside-line prefix is "93,":
  796.   C-Kermit> lookup +1 (212) 7654321
  797.   +1 (212) 7654321 => 93,7654321
  798.   C-Kermit>
  799. You can also use the fdialconvert(phone-number) function (Section 2.1.11)
  800. to do this programmatically:
  801.   C-Kermit> echo "fdialconvert(+1 (212) 7654321)"
  802.   "93,7654321"
  803.   C-Kermit>
  804. So the new LOOKUP behaves as follows:
  805. LOOKUP <portable-format-phone-number>
  806.   Displays how the number would actually be dialed
  807.   Sets FAILURE if there was a conversion error, otherwise SUCCESS.
  808. LOOKUP <literal-format-phone-number>
  809.   Displays the same <literal-format-phone-number>
  810.   Always sets SUCCESS.
  811. LOOKUP <dialing-directory-name>
  812.   Displays all matching entries and converts portable phone numbers.
  813.   Sets SUCCESS if at least one entry was found, otherwise FAILURE.
  814. LOOKUP =anything
  815.   Displays "=anything" and sets SUCCESS.
  816. There is, at present, no programmatic way to fetch numbers from the dialing
  817. directory.  This will be considered for a future release.
  818. 2.1.10. Greater Control over Partial Dialing
  819. The following rules now apply to partial dialing:
  820.  . Phone number transformations based on country and area code,
  821.    application of prefixes, etc, are performed only on the first PDIAL.
  822.  . Each PDIAL argument is looked up in the dialing directory, so it is
  823.    possible have directory entries for pieces of phone numbers or other
  824.    information.
  825.  . Suffixes are not applied automatically, since there is no way for C-Kermit
  826.    to know in which PDIAL segment you want them to be applied.
  827. However, the suffix that *would* have been applied, based on the dialing rules
  828. that were invoked when processing the first PDIAL command, is stored in the
  829. variable:
  830.   v(dialsuffix)
  831. which you can include in any subsequent PDIAL or DIAL commands.
  832. Example:
  833.   pdial {m(my_long_distance_pager_number_part_1)}
  834.   pdial {m(my_long_distance_pager_number_part_2)}
  835.   pdial {v(dialsuffix)}
  836.   pdial {m(my_long_distance_pager_number_part_3)}
  837.   pdial {@m(numeric_pager_code)#}
  838. 2.1.11. New DIAL-related Variables and Functions
  839. fdialconvert(s)
  840.   s is a phone number in either literal or portable format (not a dialing
  841.   directory entry name).  The function returns the dial string that would
  842.   actually be used by the DIAL command when dialing from the current location,
  843.   after processing country code, area code, and other SET DIAL values, and
  844.   should be the same as the result of LOOKUP when given a telephone number.
  845. v(dialsuffix)
  846.   Contains the suffix, if any, that was applied in the most recent DIAL
  847.   command, or the suffix that would have been applied in the most recent PDIAL
  848.   command.  Use this variable to send the dial suffix at any desired point in
  849.   a PDIAL sequence.
  850. v(dialtype)
  851.   A number indicating the type of call that was most recently placed.  Can
  852.   be used after a normal DIAL command, or after the first PDIAL command in
  853.   a PDIAL sequence.  Values are:
  854.     -2: Unknown because TAPI handled the phone number translation.
  855.     -1: Unknown because some kind of error occured.
  856.      0: Internal within PBX.
  857.      1: Toll-free.
  858.      2: Local within calling area.
  859.      3: Unknown (e.g. because a literal-format phone number was given).
  860.      4: Long distance within country.
  861.      5: International
  862. v(dialcount)
  863.   The current value of the DIAL retry counter, for use in a DIAL macro
  864.   (Section 2.1.13).
  865. v(d$px)
  866.   PBX Exchange (see Section 2.1.12).
  867. Other dial-related variables, already documented in "Using C-Kermit" (or
  868. other sections of this document, e.g. 2.1.1), include v(dialnumber),
  869. v(dialstatus), etc.  A convenient way to display all of them is:
  870.   show variable dial  ; hint: abbreviate "sho var dial"
  871. This shows the values of all the variables whose names start with "dial".
  872. Also "show variable d$" (to show the v(d$...) variables).
  873. 2.1.12. Increased Flexibility of PBX Dialing
  874. Refer to "Using C-Kermit", 2nd Edition, pages 107-108.  Recall that three
  875. commands are needed to configure C-Kermit for dialing from a PBX:
  876.   SET DIAL PBX-EXCHANGE <number>
  877.   SET DIAL PBX-INSIDE-PREFIX <number>
  878.   SET DIAL PBX-OUTSIDE-PREFIX <number>
  879. Unfortunately, this model does not accommodate PBXs that have more than one
  880. exchange.  For example our PBX at Columbia University (which must handle more
  881. than 10,000 phones) has 853-xxxx and 854-xxxx exchanges.
  882. Beginning in C-Kermit 7.0, the SET DIAL PBX-EXCHANGE command accepts a list of
  883. exchanges, e.g.:
  884.   SET DIAL PBX-EXCHANGE 853 854
  885. (multiple exchanges are separated by spaces, not commas).
  886. So now when dialing a portable-format number that has the same country and
  887. area codes as those of your dialing location, C-Kermit compares the exchange
  888. of the dialed number with each number in the PBX Exchange list (rather than
  889. with a single PBX Exchange number, as it did formerly) to determine whether
  890. this is an internal PBX number or an external call.  If it is an external
  891. call, then the PBX Outside Prefix is applied, and then the normal dialing
  892. rules for local or long-distance calls.
  893. If it is an inside call, the exchange is replaced by the PBX Inside Prefix.
  894. But if the PBX has more than one exchange, a single fixed PBX Inside Prefix is
  895. probably not sufficient.  For example, at Columbia University, we must dial
  896. 3-xxxx for an internal call to 853-xxxx, but 4-xxxx for a call to 854-xxxx.
  897. That is, the inside prefix is the final digit of the exchange we are dialing.
  898. For this reason, C-Kermit 7.0 provides a method to determine the inside prefix
  899. dynamically at dialing time, consisting of a new variable and new syntax for
  900. the SET DIAL PBX-INSIDE-PREFIX command:
  901. v(d$px)
  902.   This variable contains the exchange that was matched when a PBX internal
  903.   call was detected.  For example, if the PBX exchange list is "853 854"
  904.   and a call is placed to +1 (212) 854-9999, v(d$px) is set to 854.
  905. SET DIAL PBX-INSIDE-PREFIX fxxx(...)
  906.   If the PBX Inside Prefix is defined to be a function, its evaluation is
  907.   deferred until dialing time.  Normally, this would be a string function
  908.   having v(d$px) as an operand.  Of course, you can still specify a constant
  909.   string, as before.
  910. So given the following setup:
  911.   SET DIAL COUNTRY-CODE 1
  912.   SET DIAL AREA-CODE 212
  913.   SET DIAL PBX-OUTSIDE-PREFIX 93,
  914.   SET DIAL PBX-EXCHANGE 853 854
  915.   SET DIAL PBX-INSIDE-PREFIX fright(v(d$px),1)
  916. The following numbers give the results indicated:
  917.  Number                   Result
  918.   +1 (212) 854-9876        4-9876
  919.   +1 (212) 853-1234        3-1234
  920.   +1 (212) 765-4321        93,765-4321
  921.   +1 (333) 765-4321        93,1333765-4321
  922. Furthermore, the K_PBX_XCH environment variable may now be set to a list of
  923. exchanges to automatically initialize C-Kermit's PBX exchange list, for
  924. example (in UNIX ksh or bash):
  925.   export K_PBX_XCH="853 854"
  926. (Quotes required because of the space.)  Of course, this variable can also be
  927. set to a single exchange, as before:
  928.   export K_PBX_XCH=853
  929. 2.1.13. The DIAL macro - Last-Minute Phone Number Conversions
  930. After a DIAL or LOOKUP command is given, a list of phone numbers is assembled
  931. from the dialing directory (if any), with all location-dependent conversion
  932. rules applied as described in Chapter 5 of "Using C-Kermit".
  933. However, additional conversions might still be required at the last minute
  934. based on local or ephemeral conditions.  So that you can have the final word
  935. on the exact format of the dial string, C-Kermit 7.0 lets you pass the
  936. converted string through a macro of your own design for final processing
  937. before dialing.  The relevant command is:
  938. SET DIAL MACRO [ name ]
  939.   Specifies the name of a macro to be run on each phone number after all
  940.   built-in conversions have been applied, just before the number is dialed.
  941.   If no name is given, no macro is run.  The phone number, as it would have
  942.   been dialed if there were no dial macro, is passed to the macro.
  943. The dial macro can do anything at all (except start a file transfer).
  944. However, the normal use for the macro would be to modify the phone number.
  945. For this reason the phone number is passed to the macro as argument number 1
  946. (%1).  To cause a modified number to be dialed, the macro should terminate
  947. with a RETURN statement specifying a return value.  To leave the number alone,
  948. the macro should simply end.  Example:
  949.   define xxx return 10108889999$%1
  950.   set dial macro xxx
  951.   dial xyzcorp
  952. This defines a DIAL MACRO called xxx, which puts an access code on the
  953. front of the number.  Another example might be:
  954.   def xxx if equal "v(modem)" "hayes-1200" return freplace(%1,$,{,,,,,})
  955.   set dial macro xxx
  956.   dial xyzcorp
  957. which replaces any dollar-sign in the dial string by a series of five commas,
  958. e.g. because this particular modem does not support the "wait for bong"
  959. feature (remember that commas that are to be included literally in function
  960. arguments must be enclosed in braces to distinguish them from the commas that
  961. separate the arguments) and when the IF condition is not satisfied, the macro
  962. does not return a value, and so the number is not modified.  Then when a DIAL
  963. command is given referencing a dialing directory entry, "xyzcorp".  The macro
  964. is automatically applied to each matching number.
  965. Numerous dial-, modem-, communications-, and time-related variables are
  966. available for decision making your dial macro.  Type SHOW VARIABLES for a
  967. list.  Of particular interest is the v(dialcount) variable, which tells how
  968. many times the DIAL command gone through its retry loop: 1 on the first try,
  969. 2 on the second, 3 on the third, and so on, and the v(dialresult) and
  970. v(dialstatus) variables.
  971. Here are some other applications for the DIAL MACRO (from users):
  972.  . Phone numbers in the dialing directory are formatted with '-'
  973.    for readability, but some modems don't like the hyphens, so the DIAL
  974.    macro is used to remove them before dialing; e.g 0090-123-456-78-99
  975.    becomes 00901234567899: "def xxx return freplace(%1,-)".
  976.  . To set some specific modem (or other) options depending on the called
  977.    customer or telephone number.
  978.  . Choosing the most appropriate provider based on (e.g.) time of day,
  979.    or cycling through a list of providers in case some providers might
  980.    be busy.
  981. To illustrate the final item, suppose you have a choice among many phone
  982. service providers; the provider is chosen by dialing an access code before the
  983. number.  Different providers might be better (e.g. cheaper) for certain times
  984. of day or days of the week, or for dialing certain locations; you can use the
  985. DIAL macro to add the access for the most desirable provider.
  986. Similarly, when the same number might be reached through multiple providers,
  987. it's possible that one provider might not be able to complete the call, but
  988. another one can.  In that case, you can use the DIAL macro to switch providers
  989. each time through the DIAL loop -- that's where the v(dialcount) variable
  990. comes in handy.
  991. The following command can be used to debug the DIAL macro:
  992. SET DIAL TEST { ON, OFF }
  993.   Normally OFF, so the DIAL command actually dials.  When ON, the DIAL
  994.   command performs all lookups and number conversions, and then goes through
  995.   the number list and retry loop, but instead of actually dialing, lists
  996.   the numbers it would have called if none of the DIAL attempts succeeded
  997.   (or more precisely, every number was always busy).
  998. 2.1.14. Automatic Tone/Pulse Dialing Selection
  999. SET DIAL METHOD { AUTO, DEFAULT, PULSE, TONE }
  1000.   Chooses the dialing method for subsequent calls.
  1001. Prior to version 7.0, C-Kermit's DIAL METHOD was DEFAULT by default, meaning
  1002. it does not specify a dialing method to the modem, but relies on the modem
  1003. to have an appropriate default dialing method set.  So, for example, when
  1004. using Hayes compatible modems, the dial string would be something like
  1005. ATD7654321, rather than ATDT7654321 or ATDP7654321.
  1006. In C-Kermit 7.0 and K95 1.1.18, the dial method can be set from the
  1007. environment variable:
  1008.   K_DIAL_METHOD
  1009. when Kermit starts.  The values can be TONE, PULSE, or DEFAULT, e.g. (UNIX):
  1010.   set K_DIAL_METHOD=TONE; export K_DIAL_METHOD
  1011. In the absence of a K_DIAL_METHOD definition, the new default SET DIAL METHOD
  1012. is AUTO rather than DEFAULT.  When DIAL METHOD is AUTO and the local country
  1013. code is known, then if tone dialing is universally available in the
  1014. corresponding area, tone dialing is used; if dialing from a location where
  1015. pulse dialing is mandatory, pulse dialing is used.
  1016. The "tone country" and "pulse country" lists are preloaded according to our
  1017. knowledge at the time of release.  You can see their contents in the SHOW
  1018. DIAL listing.  You can change the lists with:
  1019. SET DIAL TONE-COUNTRIES [ cc [ cc [ ... ] ] ]
  1020.   Replaces the current TONE-COUNTRIES list with the one given.  Each cc is
  1021.   a country code; separate them with spaces (not commas).  Example:
  1022.     set dial tone-countries 1 358 44 46 49
  1023.   If no country codes are given, the current list, if any, is removed, in
  1024.   which case SET DIAL METHOD AUTO is equivalent to SET DIAL METHOD DEFAULT.
  1025. SET DIAL PULSE-COUNTRIES [ cc [ cc [ ... ] ] ]
  1026.   Replaces the current PULSE-COUNTRIES list with the one give.  Syntax and
  1027.   operation is like SET DIAL TONE-COUNTRIES.
  1028. If the same country code appears in both lists, Pulse takes precedence.
  1029. The SET DIAL TONE- and PULSE-COUNTRIES commands perform no verification
  1030. whatsoever on the cc's, since almost any syntax might be legal in some
  1031. settings.  Furthermore, there is no facility to edit the lists; you can only
  1032. replace the whole list.  However, since the only purpose of these lists is to
  1033. establish a basis for picking tone or pulse dialing automatically, all you
  1034. need to override the effect of the list is to set a specific dialing method
  1035. with SET DIAL METHOD TONE or SET DIAL METHOD PULSE.
  1036. 2.1.15. Dial-Modifier Variables
  1037. As of C-Kermit 7.0, dial modifiers are available in the following variables:
  1038.  v(dm_lp) Long pause
  1039.  v(dm_sp) Short pause
  1040.  v(dm_pd) Pulse dial
  1041.  v(dm_td) Tone dial
  1042.  v(dm_wa) Wait for answer
  1043.  v(dm_wd) Wait for dialtone
  1044.  v(dm_rc) Return to command mode
  1045. You can use these in your dial strings in place of hardwired modifiers like
  1046. "@", ",", etc, for increased portability of scripts.  Example:
  1047.   C-Kermit>set modem type usrobotics
  1048.   C-Kermit>sho variables dm
  1049.    v(dm_lp) = ,
  1050.    v(dm_sp) = /
  1051.    v(dm_pd) = P
  1052.    v(dm_td) = T
  1053.    v(dm_wa) = @
  1054.    v(dm_wd) = W
  1055.    v(dm_rc) = ;
  1056.   C-Kermit>exit
  1057. 2.1.16. Giving Multiple Numbers to the DIAL Command
  1058. Prior to C-Kermit 7.0, the only way to give a DIAL command a list of phone
  1059. numbers to try until one answers was to create a dialing directory that had
  1060. multiple entries under the same name, and then use that entry name in the DIAL
  1061. command.  Now a list of numbers can be given to the DIAL command directly in
  1062. the following format:
  1063.   dial {{number1}{number2}{number3}...}
  1064. This is the same list format used by SEND /EXCEPT: and other commands that
  1065. allow a list where normally a single item is given.  Restrictions on this
  1066. form of the DIAL command are:
  1067.  . The first two braces must be adjacent; spacing is optional thereafter.
  1068.  . Each number must be an actual number to dial, not a dialing directory entry.
  1069.  . Dialing directory entries may not contain number lists in this format.
  1070. In all other respects, the numbers are treated as if they had been fetched
  1071. from the dialing directory; they can be in literal or portable format, etc.
  1072. Example:
  1073.   dial {{7654321} {+1 (212) 5551212} { 1-212-5556789 }}
  1074. The list can be any length at all, within reason.
  1075. This feature is especially handy for use with the K95 Dialer, allowing a list
  1076. of phone numbers to be specified in the Telephone Number box without having
  1077. to set up or reference a separate dialing directory.
  1078. You can also use it to add commonly-dialed sequences as variables in your
  1079. C-Kermit customization file, e.g.:
  1080.   define work {{7654321}{7654322}{7654323}}
  1081. and then:
  1082.   dial {m(work)}
  1083. (the variable name must be enclosed in braces).
  1084. Or more simply:
  1085.   define work dial {{7654321}{7654322}{7654323}}
  1086. and then:
  1087.   work
  1088. 2.2. Modems
  1089. 2.2.1. New Modem Types
  1090. Since C-Kermit 6.0:
  1091.   atlas-newcom-33600ifxC Atlas/Newcom 33600
  1092.   att-keepintouch        AT&T KeepinTouch PCMCIA V.32bis Card Modem
  1093.   att-1900-stu-iii       AT&T Secure Data STU-III Model 1900
  1094.   att-1910-stu-iii       AT&T Secure Data STU-III Model 1910
  1095.   bestdata               Best Data
  1096.   cardinal               Cardinal V.34 MVP288X series.
  1097.   compaq                 Compaq Data+Fax (e.g. in Presario)
  1098.   fujitsu                Fujitsu Fax/Modem Adapter
  1099.   generic-high-speed     Any modern error-correcting data-compressing modem
  1100.   itu-t-v25ter/v250      ITU-T (CCITT) V.25ter (V.250) standard command set
  1101.   megahertz-att-v34      Megahertz AT&T V.34
  1102.   megahertz-xjack        Megahertz X-Jack
  1103.   motorola-codex         Motorola Codex 326X Series
  1104.   motorola-montana       Motorola Montana
  1105.   mt5634zpx              Multitech MT5634ZPX
  1106.   rockwell-v90           Rockwell V.90 56K
  1107.   rolm-244pc             Siemens/Rolm 244PC (AT command set)
  1108.   rolm-600-series        Siemens/Rolm 600 Series (AT command set)
  1109.   spirit-ii              QuickComm Spirit II
  1110.   suprasonic             SupraSonic V288+
  1111.   supra-express-v90      Supra Express V.90
  1112. One of the new types, "generic-high-speed" needs a bit of explanation.  This
  1113. type was added to easily handle other types that are not explicitly covered,
  1114. without going through the bother of adding a complete user-defined modem type.
  1115. This one works for modern modems that use the AT command set, on the
  1116. assumption that all the default ("factory") settings of the modem (a) are
  1117. appropriate for Kermit, (b) include error correction, data compression,
  1118. and speed buffering; and (c) are recallable with the command AT&F.
  1119. If the command to recall your modem's profile is not AT&F, use the SET MODEM
  1120. COMMAND INIT-STRING command to specify the appropriate modem command.  The
  1121. default init-string is AT&F13 (that is, AT, ampersand, F, and then carriage
  1122. return); a survey of about 20 modern modem types shows they all support this,
  1123. but they might mean different things by it.  For example, the USR Sportster or
  1124. Courier needs AT&F1 (not AT&F, which is equivalent to AT&F0, which recalls an
  1125. inappropriate profile), so for USR modems:
  1126.   set modem type generic-high-speed
  1127.   set modem command init AT&F113
  1128. Of course, USR modems already have their own built-in modem type.  But if you
  1129. use this one instead, it will dial faster because it has fewer commands to
  1130. give to the modem; in that sense "&F1" is like a macro that bundles numerous
  1131. commands into a single one.  See your modem manual for details about factory
  1132. profiles and commands to recall them.
  1133. WARNING: Do not use the generic-high-speed modem type in operating systems
  1134. like VMS where hardware flow control is not available, at least not unless you
  1135. change the init string from AT&F13 to something else that enables local
  1136. Xon/Xoff or other appropriate type of flow control.
  1137. Also see Section 2.1.7 for additional hints about making dialing go faster.
  1138. 2.2.2. New Modem Controls
  1139. SET MODEM CAPABILITIES <list>
  1140.   In C-Kermit 7.0, this command automatically turns MODEM SPEED-MATCHING OFF
  1141.   if SB (Speed Buffering) is in the <list>, and turns it ON if SB is absent.
  1142. SET MODEM COMMAND PREDIAL-INIT [ <text> ]
  1143.   Commands to be sent to the modem just prior to dialing.  Normally none.
  1144. SET MODEM SPEAKER { ON, OFF }
  1145.   Determines whether modem speaker is on or off while call is being placed.
  1146.   ON by default.  Note: This command does not provide fine-grained control
  1147.   over when the speaker is on or off.  Normally, ON means while the call is
  1148.   being placed, until the point at which carrier is successfully established.
  1149.   If your modem has a different speaker option that you want to choose, then
  1150.   use the SET MODEM COMMAND SPEAKER ON <text> command to specify this option.
  1151. SET MODEM COMMAND SPEAKER { ON, OFF } [ <text> ]
  1152.   Specify or override the commands to turn your modem's speaker on and off.
  1153. SET MODEM VOLUME { LOW, MEDIUM, HIGH }
  1154.   When MODEM SPEAKER is on, select volume.  Note: In some modems, especially
  1155.   internal ones, these commands have no effect; this is a limitation of the
  1156.   particular modem, not of Kermit.
  1157. SET MODEM COMMAND VOLUME { LOW, MEDIUM, HIGH } [ <text> ]
  1158.   Specify or override the commands to set your modem's speaker volume.
  1159. SET MODEM COMMAND IGNORE-DIALTONE [ <text> ]
  1160.   The command to enable blind dialing (section 2.1.6).
  1161. SET MODEM ESCAPE-CHARACTER <code>
  1162.   Has been augmented to allow codes of 0 or less:
  1163.     < 0 means the escape mechanism is disabled.
  1164.     = 0 means to use (restore) the default value from the modem database.
  1165.     > 0 and < 128 is a literal value to be used instead of the default one.
  1166.     > 127 means the escape mechanism is disabled.
  1167.   This affects "modem hangup".  When the escape mechanism is disabled, but
  1168.   SET MODEM HANGUP-METHOD is MODEM-COMMAND, it sends the hangup command
  1169.   immediately, without the <pause>+++<pause> business first.  This is useful
  1170.   (for example) when sending lots of numeric pages, a process in which we
  1171.   never go online, and so never need to escape back.  Eliminating the
  1172.   unnecessary pauses and escape sequence allows a lot more pages to be sent
  1173.   per unit time.
  1174. Recall that C-Kermit can dial modems to which it is connected via TCP/IP
  1175. (Telnet or Rlogin) as described on page 126 of "Using C-Kermit", 2nd Ed.
  1176. In this case the MODEM HANGUP-METHOD should be MODEM-COMMAND, since RS-232
  1177. signals don't work over TCP/IP connections.  As noted in the manual, such
  1178. connections are set up by the following sequence:
  1179.   set host <host> [ <port> ]
  1180.   set modem type <name>
  1181.   dial <number>
  1182. But this can cause complications when you use Kermit to switch between serial
  1183. and TCP/IP connections.  In the following sequence:
  1184.   set host <name>
  1185.   set modem type <name>
  1186.   set port <name>
  1187. the first two commands obey the rules for dialing out over Telnet.  However,
  1188. the SET PORT command requires that Kermit close its current (Telnet)
  1189. connection before it can open the serial port (since Kermit can only have one
  1190. connection open at a time).  But since a modem type was set after the "set
  1191. host" command was given, Kermit assumes it is a Telnet dialout connection and
  1192. so sends the modem's hangup sequence is sent to the Telnet host.  To avoid
  1193. this, close the network connection explicitly before opening the serial one:
  1194.   set host <name>
  1195.   close
  1196.   set modem type <name>
  1197.   set port <name>
  1198. 2.3. TELNET and RLOGIN
  1199. For additional background, please also read the TELNET.TXT file.
  1200. Cautions:
  1201. If making a Telnet connection with C-Kermit takes a very long time, like
  1202. over a minute, whereas the system Telnet program makes the same connection
  1203. immediately, try including the /NOWAIT switch:
  1204.   C-Kermit> telnet /nowait hostname
  1205. See TELNET.TXT for details.  If it also takes a very long time to make a
  1206. Telnet connection with system Telnet, then the delay is most likely caused
  1207. by reverse DNS lookups when your host is not properly registered in DNS.
  1208. When supplying numeric IP addresses to C-Kermit or to any other application
  1209. (regular Telnet, Rlogin, etc), do not include leading 0's in any fields unless
  1210. you intend for those fields to be interpreted as octal (or hex) numbers.  The
  1211. description of the Internet address interpreter (the sockets library
  1212. inet_addr() routine) includes these words:
  1213.   All numbers supplied as "parts" in a "." notation may be decimal, octal,
  1214.   or hexadecimal, as specified in the C language (that is, a leading 0x or
  1215.   0X implies hexadecimal; otherwise, a leading 0 implies octal; otherwise,
  1216.   the number is interpreted as decimal).
  1217. To illustrate, 128.59.39.2 and 128.059.039.002 are NOT the same host!  Even
  1218. though most of the fields contain non-octal digits.  Using system Telnet (not
  1219. Kermit):
  1220.   $ telnet 128.059.039.002
  1221.   Trying 128.49.33.2 ...
  1222. Of course the same thing happens with Kermit because it uses (as it must) the
  1223. same system service for resolving network addresses that Telnet, FTP, and all
  1224. other TCP/IP applications use.
  1225. The RLOGIN section on page 123 does not make it clear that you can use the
  1226. SET TELNET TERMINAL-TYPE command to govern the terminal type that is reported
  1227. by C-Kermit to the RLOGIN server.
  1228. Note that the SET TCP commands described on pages 122-123 might be absent;
  1229. some platforms that support TCP/IP do not support these particular controls.
  1230. New commands:
  1231. TELOPT { AO, AYT, BREAK, CANCEL, EC, EL, EOF, EOR, GA, IP, DMARK, DO, DONT,
  1232.  NOP, SB, SE, SUSP, WILL, WONT }
  1233.   This command was available previously, but supported only DO, DONT, WILL,
  1234.   and WONT.  Now it lets you send all the Telnet protocol commands.  Note
  1235.   that certain commands do not require a response, and therefore can be used
  1236.   as nondestructive "probes" to see if the Telnet session is still open; e.g.:
  1237.     set host xyzcorp.com
  1238.     ...
  1239.     telopt nop
  1240.     if fail stop 1 Connection lost
  1241. SET TCP ADDRESS [ <ip-address> ]
  1242.   Specifies the IP address of the computer that C-Kermit is running on.
  1243.   Normally this is not necessary.  The exception would be if your
  1244.   machine has multiple network adapters (physical or virtual) with a
  1245.   different address for each adapter AND you want C-Kermit to use a
  1246.   specific address when making outgoing connections or accepting
  1247.   incoming connections.
  1248. SET TCP DNS-SERVICE-RECORDS {ON, OFF}
  1249.   Tells C-Kermit whether to try to use DNS SRV records to determine the
  1250.   host and port number upon which to find an advertised service.  For
  1251.   example, if a host wants regular Telnet connections redirected to some
  1252.   port other than 23, this feature allows C-Kermit to ask the host which
  1253.   port it should use.  Since not all domain servers are set up to answer
  1254.   such requests, this feature is OFF by default.
  1255. SET TCP REVERSE-DNS-LOOKUP { ON, OFF, AUTO }
  1256.   Tells Kermit whether to perform a reverse DNS lookup on TCP/IP connections.
  1257.   This allows Kermit to determine the actual hostname of the host it is
  1258.   connected to, which is useful for connections to host pools, and is required
  1259.   for Kerberos connections to host pools and for incoming connections.  If the
  1260.   other host does not have a DNS entry, the reverse lookup could take a long
  1261.   time (minutes) to fail, but the connection will still be made.  Turn this
  1262.   option OFF for speedier connections if you do not need to know exactly which
  1263.   host you are connected to and you are not using Kerberos.  AUTO, the
  1264.   default, means the lookup is done on hostnames, but not on numeric IP
  1265.   addresses.
  1266. SET TELNET WAIT-FOR-NEGOTIATIONS { ON, OFF }
  1267.   Each Telnet option must be fully negotiated either On or Off before the
  1268.   session can continue.  This is especially true with options that require
  1269.   sub-negotiations such as Authentication, Encryption, and Kermit; for
  1270.   proper support of these options Kermit must wait for the negotiations to
  1271.   complete.  Of course, Kermit has no way of knowing whether a reply is
  1272.   delayed or not coming at all, and so will wait a minute or more for
  1273.   required replies before continuing the session.  If you know that Kermit's
  1274.   Telnet partner will not be sending the required replies, you can set this
  1275.   option of OFF to avoid the long timeouts.  Or you can instruct Kermit to
  1276.   REFUSE specific options with the SET TELOPT command.
  1277. SET TELOPT [ { /CLIENT, /SERVER } ] <option> -
  1278.     { ACCEPTED, REFUSED, REQUESTED, REQUIRED } -
  1279.     [ { ACCEPTED, REFUSED, REQUESTED, REQUIRED } ]
  1280.   SET TELOPT lets you specify policy requirements for Kermit's handling of
  1281.   Telnet option negotiations.  Setting an option is REQUIRED causes Kermit
  1282.   to offer the option to the peer and disconnect if the option is refused.
  1283.   REQUESTED causes Kermit to offer an option to the peer.  ACCEPTED results
  1284.   in no offer but Kermit will attempt to negotiate the option if it is
  1285.   requested.  REFUSED instructs Kermit to refuse the option if it is
  1286.   requested by the peer.
  1287.   Some options are negotiated in two directions and accept separate policies
  1288.   for each direction; the first keyword applies to Kermit itself, the second
  1289.   applies to Kermit's Telnet partner; if the second keyword is omitted, an
  1290.   appropriate (option-specific) default is applied.  You can also include a
  1291.   /CLIENT or /SERVER switch to indicate whether the given policies apply
  1292.   when Kermit is the Telnet client or the Telnet server; if no switch is
  1293.   given, the command applies to the client.
  1294.   Note that some of Kermit's Telnet partners fail to refuse options that
  1295.   they do not recognize and instead do not respond at all.  In this case it
  1296.   is possible to use SET TELOPT to instruct Kermit to REFUSE the option
  1297.   before connecting to the problem host, thus skipping the problematic
  1298.   negotiation.
  1299.   Use SHOW TELOPT to view current Telnet Option negotiation settings.
  1300.   SHOW TELNET displays current Telnet settings.
  1301. 2.3.0. Bug Fixes
  1302. If "set host nonexistent-host" was given (and it properly failed), followed by
  1303. certain commands like SEND, the original line and modem type were not restored
  1304. and C-Kermit thought that it still had a network hostname; fixed in 7.0.
  1305. 2.3.1. Telnet Binary Mode Bug Adjustments
  1306. SET TELNET BUG BINARY-ME-MEANS-U-TOO { ON, OFF } was added to edit 192
  1307. after the book was printed.  Also SET TELNET BUG BINARY-U-MEANS-ME-TOO.
  1308. The default for both is OFF.  ON should be used when communicating with a
  1309. Telnet partner (client or server) that mistakenly believes that telling
  1310. C-Kermit to enter Telnet binary mode also means that it, too, is in binary
  1311. mode, contrary to the Telnet specification, which says that binary mode must
  1312. be negotiated in each direction separately.
  1313. 2.3.2. VMS UCX Telnet Port Bug Adjustment
  1314. A new command, SET TCP UCX-PORT-BUG, was added for VMS versions with UCX (DEC
  1315. TCP/IP), applying only to early versions of UCX, like 2.2 or earlier.  If you
  1316. try to use VMS C-Kermit to make a Telnet connection using a port name (like
  1317. "telnet", which is used by default), the underlying UCX getservbyname()
  1318. function might return the service number with its bytes swapped and the
  1319. connection will fail.  If "telnet hostname 23" works, then your version of UCX
  1320. has this bug and you can put "set tcp ucx-port-bug on" in your CKERMIT.INI
  1321. file to get around it.
  1322. 2.3.3. Telnet New Environment Option
  1323. The TELNET NEW-ENVIRONMENT option (RFC1572) is supported as 7.0.  This option
  1324. allows the C-Kermit Telnet client to send certain well-known variables to the
  1325. Telnet server, including USER, PRINTER, DISPLAY, and several others.  This
  1326. feature is enabled by default in Windows and OS/2, disabled by default
  1327. elsewhere.  The command to enable and disable it is:
  1328.   SET TELNET ENVIRONMENT { ON, OFF }
  1329. When ON, and you Telnet to another computer, you might (or might not) notice
  1330. that the "login:" or "Username:" prompt does not appear -- that's because your
  1331. username was sent ahead, in which case the remote system might prompt you only
  1332. for your password (similar to Rlogin).  Use "set telnet environment off" to
  1333. defeat this feature, particularly in scripts where the dialog must be
  1334. predictable.  You can also use this command to specify or override specific
  1335. well-known environment variable values:
  1336.  SET TELNET ENVIRONMENT { ACCT,DISPLAY,JOB,PRINTER,SYSTEMTYPE,USER } [ <text> ]
  1337. 2.3.4. Telnet Location Option
  1338. The TELNET LOCATION option (RFC779) is supported in 7.0.  This option allows
  1339. the C-Kermit Telnet client to send a location string to the server if the
  1340. server indicates its willingness to accept one.  If an environment variable
  1341. named LOCATION exists at the time C-Kermit starts, its value is used as the
  1342. location string.  If you want to change it, use:
  1343.   SET TELNET LOCATION <text>
  1344. If you omit the <text> from this command, the Telnet location feature is
  1345. disabled.
  1346. SET TELNET ENVIRONMENT DISPLAY is used to set the DISPLAY variable that is
  1347. sent to the host, as well as the the XDISPLAY location.
  1348. 2.3.5. Connecting to Raw TCP Sockets
  1349. The SET HOST and TELNET commands now accept an optional switch, /RAW-SOCKET,
  1350. at the end, only if you first give a host and a port.  Example:
  1351.   set host xyzcorp.com 23 /raw-socket
  1352.   set host 128.49.39.2:2000 /raw-socket
  1353.   telnet xyzcorp.com 3000 /raw
  1354. Without this switch, C-Kermit behaves as a Telnet client when (a) the port is
  1355. 23 or 1649, or (b) the port is not 513 and the server sent what appeared to be
  1356. Telnet negotiations -- that is, messages starting with 0xFF (IAC).  With this
  1357. switch, Kermit should treat all incoming bytes as raw data, and will not
  1358. engage in any Telnet negotiations or NVT CRLF manipulations.  This allows
  1359. transparent operation through (e.g.) raw TCP ports on Cisco terminal servers,
  1360. through the 'modemd' modem server, etc.
  1361. 2.3.6. Incoming TCP Connections
  1362. Accomplished via SET HOST * <port>, were introduced in C-Kermit 6.0, but for
  1363. UNIX only.  In Version 7.0, they are also available for VMS.
  1364. 2.4. The EIGHTBIT Command
  1365. EIGHTBIT is simply a shorthand for: SET PARITY NONE, SET TERMINAL BYTESIZE 8,
  1366. SET COMMAND BYTESIZE 8; that is, a way to set up an 8-bit clean connection
  1367. in a single command.
  1368. 2.5. The Services Directory
  1369. Chapter 7 of "Using C-Kermit" does not mention the ULOGIN macro, which is
  1370. used by our sample services directory, CKERMIT.KND.  Unlike UNIXLOGIN,
  1371. VMSLOGIN, etc, this one is for use with systems that require a user ID but
  1372. no password.  Therefore it doesn't prompt for a password or wait for a
  1373. password prompt from the remote service.
  1374. In version 7.0, the CALL macro was changed to not execute a SET MODEM TYPE
  1375. command if the given modem type was the same as the current one; otherwise the
  1376. new SET MODEM TYPE command would overwrite any customizations that the user
  1377. had made to the modem settings.  Ditto for SET LINE / SET PORT and SET SPEED.
  1378. 2.6. Closing Connections
  1379. Until version 7.0, there was never an obvious and general way to close a
  1380. connection.  If a serial connection was open, it could be closed by "set
  1381. line" or "set port" (giving no device name); if a network connection was
  1382. open, it could be closed by "set host" (no host name).
  1383. In version 7.0, a new command closes the connection in an obvious and
  1384. straightforward way, no matter what the connection type:
  1385.   CLOSE [ CONNECTION ]
  1386. The CLOSE command was already present, and required an operand such as
  1387. DEBUG-LOG, WRITE-FILE, etc, and so could never be given by itself.  The new
  1388. CONNECTION operand is now the default operand for CLOSE, so CLOSE by itself
  1389. closes the connection, if one is open, just as you would expect, especially
  1390. if you are a Telnet or Ftp user.
  1391. Also see the description of the new SET CLOSE-ON-DISCONNECT command in
  1392. Section 2.10.
  1393. 2.7. Using C-Kermit with External Communication Programs
  1394. C-Kermit 7.0 includes a new ability to create and conduct sessions through
  1395. other communications programs.  Two methods are available:
  1396.  a. Pty (pseudoterminal): The external program is run on a "pseudoterminal",
  1397.     which is controlled by Kermit.  This method works with practically any
  1398.     external program, but it is not portable.  At this writing, it works only
  1399.     on some (not all) UNIX versions, and not on any non-UNIX platforms.
  1400.  b. Pipe: The external program's standard input and output are redirected
  1401.     through a "pipe" controlled by Kermit.  This method is relatively
  1402.     portable -- it should work across all UNIX versions, and it also works
  1403.     in Windows and OS/2 -- but it is effective only when the external
  1404.     program actually uses standard i/o (and many don't).
  1405. The two methods are started differently but are used the same way thereafter.
  1406. The purpose of this feature is to let you use C-Kermit services like file
  1407. transfer, character-set translation, scripting, automatic dialing, etc, on
  1408. connections that Kermit can't otherwise make itself.
  1409. This feature is the opposite of the REDIRECT feature, in which C-Kermit makes
  1410. the connection, and redirects an external (local) command or program over this
  1411. connection.  In a pty or pipe connection, C-Kermit runs and controls a local
  1412. command or program, which makes the connection.  (The same method can be used
  1413. to simply to control a local program without making a connection; see Section
  1414. 2.8.)
  1415. To find out if your version of Kermit includes PTY support, type "show
  1416. features" and look for NETPTY in the alphabetical list of options.  For pipes,
  1417. look for NETCMD.
  1418. The commands are:
  1419.   SET NETWORK TYPE PTY  or  SET NETWORK TYPE PIPE
  1420.   SET HOST <command>
  1421. where <command> is any interactive command.  If the command does not use
  1422. standard i/o, you must use SET NETWORK TYPE PTY.
  1423. Notes:
  1424.  a. COMMAND is an invisible synonym for PIPE.
  1425.  b. The <command> and its arguments are case-sensitive in UNIX.
  1426. The SET NETWORK TYPE, SET HOST sequence sets the given network type for all
  1427. subsequent SET HOST commands until another SET NETWORK TYPE command is given
  1428. to change it.
  1429. You can also use the new /NETWORK-TYPE:PTY or /NETWORK-TYPE:PIPE (or simply
  1430. /PIPE or /PTY) switches on the SET HOST command itself:
  1431.   SET HOST /NETWORK-TYPE:PIPE <command>  ; These two are the same
  1432.   SET HOST /PIPE <command>
  1433.   SET HOST /NETWORK-TYPE:PTY <command>   ; Ditto
  1434.   SET HOST /PTY <command>
  1435. These are like SET NETWORK TYPE followed by SET HOST, except they apply only
  1436. to the connection being made and do not change the global network type setting
  1437. (see Section 1.5 about the difference between switches and SET commands).
  1438. Include any command-line options with the <command> that might be needed, as
  1439. in this example where C-Kermit uses another copy of itself as the
  1440. communications program:
  1441.   SET HOST /PIPE /CONNECT kermit -YQJ xyzcorp.com
  1442. As usual, if you include the /CONNECT switch, SET HOST enters CONNECT mode
  1443. immediately upon successful execution of the given command.  Therefore a new
  1444. command is available as a shorthand for SET HOST /CONNECT /PTY:
  1445.   PTY [ <command> ]
  1446. And for SET HOST /CONNECT /PIPE:
  1447.   PIPE [ <command> ]
  1448. Thus, the PTY and PIPE commands work like the TELNET and RLOGIN commands: they
  1449. set up the connection (in this case, using the given command) and then enter
  1450. CONNECT mode automatically (if the PIPE or PTY command is given without a
  1451. <command>, it continues the current session if one is active; otherwise it
  1452. gives an error message).
  1453. The PIPE command is named after the mechanism by which C-Kermit communicates
  1454. with the <command>: UNIX pipes.  C-Kermit's i/o is "piped" through the given
  1455. command.  Here is a typical example:
  1456.   PIPE rlogin -8 xyzcorp.com
  1457. This is equivalent to:
  1458.   SET HOST /PIPE rlogin -8 xyzcorp.com
  1459.   CONNECT
  1460. and to:
  1461.   SET HOST /PIPE /CONNECT rlogin -8 xyzcorp.com
  1462. IMPORTANT:
  1463.   If you are writing a script, do not use the PIPE, PTY, TELNET, or RLOGIN
  1464.   command unless you really want C-Kermit to enter CONNECT mode at that
  1465.   point.  Normally SET HOST is used in scripts to allow the login and
  1466.   other dialogs to be controlled by the script itself, rather than by
  1467.   an actively participating human at the keyboard.
  1468. Throughput of pty and pipe connections is limited by the performance of the
  1469. chosen command or program and by the interprocess communication (IPC) method
  1470. used and/or buffering capacity of the pipe or pty, which in turn depends on
  1471. the underlying operating system.
  1472. In one trial (on SunOS 4.1.3), we observed file transfer rates over an rlogin
  1473. connection proceeding at 200Kcps for downloads, but only 10Kcps for uploads on
  1474. the same connection with the same settings (similar disparities were noted in
  1475. HP-UX).  Examination of the logs revealed that a write to the pipe could take
  1476. as long as 5 seconds, whereas reads were practically instantaneous.  On the
  1477. other hand, using Telnet as the external program rather than rlogin, downloads
  1478. and uploads were better matched at about 177K each.
  1479. Most external communication programs, like C-Kermit itself, have escape
  1480. characters or sequences.  Normally these begin with (or consist entirely of) a
  1481. control character.  You must be sure that this control character is not
  1482. "unprefixed" when uploading files, otherwise the external program will "escape
  1483. back" to its prompt, or close the connection, or take some other unwanted
  1484. action.  When in CONNECT mode, observe the program's normal interaction rules.
  1485. Of course C-Kermit's own escape character (normally Ctrl-) is active too,
  1486. unless you have taken some action to disable it.
  1487. On PTY connections, the underlying PTY driver is not guaranteed to be
  1488. transparent to control characters -- for example, it might expand tabs,
  1489. translate carriage returns, generate signals if it sees an interrupt
  1490. character, and so on.  Similar things might happen on a PIPE connection.  For
  1491. this reason, if you plan to transfer files over a PTY or PIPE connection, tell
  1492. the file sender to:
  1493.   SET PREFIXING ALL
  1494.     This causes all control characters to be prefixed and transmitted
  1495.     as printable ASCII characters.
  1496. If the external connection program is not 8-bit clean, you should also:
  1497.   SET PARITY SPACE
  1498.     This causes 8-bit data to be encoded in 7 bits using single and/or
  1499.     locking shifts.
  1500. And if it does not make a reliable connection (such as those made by Telnet,
  1501. Rlogin, Ssh, etc), you should:
  1502.   SET STREAMING OFF
  1503.     This forces C-Kermit to treat the connection as unreliable and
  1504.     to engage in its normal ACK/NAK protocol for error detection and
  1505.     correction, rather than "streaming" its packets, as it normally
  1506.     does on a network connection (Section 4.20).
  1507. In some cases, buffer sizes might be restricted, so you might also need to
  1508. reduce the Kermit packet length to fit; this is a trial-and-error affair.  For
  1509. example, if transfers always fail with 4000-byte packets, try 2000.  If that
  1510. fails too, try 1000, and so on.  The commands are:
  1511.   SET RECEIVE PACKET-LENGTH <number>
  1512.     This tells the file receiver to tell the file sender the longest
  1513.     packet length it can accept.
  1514.   SET SEND PACKET-LENGTH <number>
  1515.     This tells the file sender not to send packets longer than the given
  1516.     length, even if the receiver says longer ones are OK.  Of course, if
  1517.     the receiver's length is shorter, the shorter length is used.
  1518. If none of this seems to help, try falling back to the bare minimum,
  1519. lowest-common-denominator protocol settings:
  1520.   ROBUST
  1521.     No sliding windows, no streaming, no control-character unprefixing,
  1522.     packet length 90.
  1523. And then work your way back up by trial and error to get greater throughput.
  1524. Note that when starting a PIPE connection, and the connection program (such as
  1525. telnet or rlogin) prints some greeting or information messages before starting
  1526. the connection, these are quite likely to be printed with a stairstep effect
  1527. (linefeed without carriage return).  This is because the program is not
  1528. connected with the UNIX terminal driver; there's not much Kermit can do about
  1529. it.  Once the connection is made, everything should go back to normal.  This
  1530. shouldn't happen on a PTY connection because a PTY is, indeed, a terminal.
  1531. On a similar note, some connection programs (like Solaris 2.5 rlogin) might
  1532. print lots of error messages like "ioctl TIOCGETP: invalid argument" when
  1533. used through a pipe.  They are annoying but usually harmless.  If you want to
  1534. avoid these messages, and your shell allows redirection of stderr, you can
  1535. redirect stderr in your pipe command, as in this example where the user's
  1536. shell is bash:
  1537.   PIPE rlogin xyzcorp.com 2> /dev/null
  1538. Or use PTY rather than PIPE, since PTY is available on Solaris.
  1539. 2.7.0. C-Kermit over tn3270 and tn5250
  1540. Now you can make a connection from C-Kermit "directly" to an IBM mainframe and
  1541. transfer files with it, assuming it has Kermit-370 installed.  Because tn3270
  1542. is neither 8-bit clean nor transparent to control characters, you must give
  1543. these commands:
  1544.   SET PREFIXING ALL   ; Prefix all control characters
  1545.   SET PARITY SPACE    ; Telnet connections are usually not 8-bit clean
  1546. and then:
  1547.   SET HOST /PTY /CONNECT tn3270 abccorp.com
  1548. or simply:
  1549.   pty tn3270 abccorp.com
  1550. SET HOST /PIPE does not work in this case, at least not for file transfer.
  1551. File transfer does work, however, with SET HOST /PTY, provided you use the
  1552. default packet length of 90 bytes; anything longer seems to kill the session.
  1553. You can also make connections to IBM AS/400 computers if you have a tn5250
  1554. program installed:
  1555.   pty tn5250 <hostname>
  1556. In this case, however, file transfer is probably not in the cards since
  1557. nobody has ever succeeded in writing a Kermit program for the AS/400.
  1558. Hint:
  1559.   define tn3270 {
  1560.       check pty
  1561.       if fail end 1 Sorry - no PTY support...
  1562.       pty tn3270 %*
  1563.   }
  1564. Similarly for tn5250.  Note that CHECK PTY and CHECK PIPE can be used in
  1565. macros and scripts to test whether PTY or PIPE support is available.
  1566. 2.7.1. C-Kermit over Telnet
  1567. Although C-Kermit includes its own Telnet implementation, you might need to
  1568. use an external Telnet program to make certain connections; perhaps because it
  1569. has access or security features not available in C-Kermit itself.  As noted
  1570. above, the only precautions necessary are usually:
  1571.   SET PREFIXING ALL   ; Prefix all control characters
  1572.   SET PARITY SPACE    ; Telnet connections might not be 8-bit clean
  1573. and then:
  1574.   SET HOST /PTY (or /PIPE) /CONNECT telnet abccorp.com
  1575. or, equivalently:
  1576.   PTY (or PIPE) telnet abccorp.com
  1577. 2.7.2. C-Kermit over Rlogin
  1578. C-Kermit includes its own Rlogin client, but this can normally be used only if
  1579. you are root, since the rlogin TCP port is privileged.  But ptys and pipes let
  1580. you make rlogin connections with C-Kermit through your computer's external
  1581. rlogin program, which is normally installed as a privileged program:
  1582.   SET PREFIXING ALL
  1583. and then:
  1584.   SET HOST /PTY (or /PIPE) /CONNECT rlogin -8 abccorp.com
  1585. or, equivalently:
  1586.   PTY (or PIPE) rlogin -8 abccorp.com
  1587. The "-8" option to rlogin enables transmission of 8-bit data.  If this is
  1588. not available, then include SET PARITY SPACE if you intend to transfer files.
  1589. Note that the normal escape sequence for rlogin is Carriage Return followed by
  1590. Tilde (~), but only when the tilde is followed by certain other characters;
  1591. the exact behavior depends on your rlogin client, so read its documentation.
  1592. 2.7.3. C-Kermit over Serial Communication Programs
  1593. Ptys and pipes also let you use programs that make serial connections, such as
  1594. cu or tip.  For example, C-Kermit can be used through cu to make connections
  1595. that otherwise might not be allowed, e.g. because C-Kermit is not installed
  1596. with the required write permissions to the dialout device and the UUCP
  1597. lockfile directory.
  1598. Suppose your UUCP Devices file contains an entry for a serial device tty04 to
  1599. be used for direct connections, but this device is protected against you (and
  1600. Kermit when you run it).  In this case you can:
  1601.   SET CONTROL PREFIX ALL
  1602.   PTY (or PIPE) cu -l tty04
  1603. (Similarly for dialout devices, except then you also need to include the phone
  1604. number in the "cu" command.)
  1605. As with other communication programs, watch out for cu's escape sequence,
  1606. which is the same as the rlogin program's: Carriage Return followed by Tilde
  1607. (followed by another character to specify an action, like "." for closing the
  1608. connection and exiting from cu).
  1609. 2.7.4. C-Kermit over Secure Network Clients
  1610.   DISCLAIMER: There are laws in the USA and other countries regarding
  1611.   use, import, and/or export of encryption and/or decryption or other
  1612.   forms of security software, algorithms, technology, and intellectual
  1613.   property.  The Kermit Project attempts to follow all known statutes,
  1614.   and neither intends nor suggests that Kermit software can or should
  1615.   be used in any way, in any location, that circumvents any regulations,
  1616.   laws, treaties, covenants, or other legitimate canons or instruments
  1617.   of law, international relations, trade, ethics, or propriety.
  1618. For secure connections or connections through firewalls, C-Kermit 7.0 can be a
  1619. Kerberos, SRP, and/or SOCKS client when built with the appropriate options and
  1620. libraries.  But other application-level security acronyms and methods -- SSH,
  1621. SSL, SRP, TLS -- pop up at an alarming rate and are (a) impossible to keep up
  1622. with, (b) usually mutually incompatible, and (c) have restrictions on export
  1623. or redistribution and so cannot be included in C-Kermit itself.
  1624. However, if you have a secure text-based Telnet (or other) client that employs
  1625. one of these security methods, you can use C-Kermit "through" it via a pty
  1626. or pipe.
  1627. 2.7.4.1. SSH
  1628. C-Kermit does not and can not incorporate SSH due to licensing, patent,
  1629. and USA export law restrictions.
  1630. The UNIX SSH client does not use standard input/output, and therefore can be
  1631. used only by Kermit's PTY interface, if one is present.  The cautions about
  1632. file transfer, etc, are the same as for Rlogin.  Example:
  1633.   SET PREFIXING ALL
  1634.   PTY ssh XYZCORP.COM
  1635. Or, for a scripted session:
  1636.   SET PREFIXING ALL
  1637.   SET HOST /PTY ssh XYZCORP.COM
  1638. Hint:
  1639.   define ssh {
  1640.       check pty
  1641.       if fail end 1 Sorry - no PTY support...
  1642.       pty ssh %*
  1643.   }
  1644. 2.7.4.2. SSL
  1645. Secure Sockets Layer (SSL) is another TCP/IP security overlay, this one
  1646. designed by and for Netscape.  An SSL Telnet client is available for UNIX
  1647. from the University of Queensland.  More info at:
  1648.   http://www.psy.uq.oz.au/~ftp/Crypto/
  1649. Interoperability with C-Kermit is unknown.  C-Kermit also includes its own
  1650. built-in SSL/TLS support, but it is not exportable; see the C-Kermit
  1651. security.txt file for details.
  1652. 2.7.4.3. SRP
  1653. SRP(TM) is Stanford University's Secure Remote Password protocol.  An SRP
  1654. Telnet client is available from Stanford:
  1655.   http://srp.stanford.edu/srp/
  1656. Stanford's SRP Telnet client for UNIX has been tested on SunOS and works fine
  1657. with C-Kermit, as described in Section 2.7.1, e.g.
  1658.   SET PREFIX ALL
  1659.   PTY (or PIPE) srp-telnet xenon.stanford.edu
  1660. C-Kermit itself can be built as an SRP Telnet client on systems that have
  1661. libsrp.a installed; the C-Kermit support code, however, may not be exported
  1662. outside the USA or Canada.
  1663. 2.7.4.4. SOCKS
  1664. C-Kermit can be built as a SOCKS-aware client on systems that have a SOCKS
  1665. library.  See section 8.1.1 of the ckccfg.txt file.
  1666. C-Kermit 7.0 can also be run over SOCKSified Telnet or rlogin clients with SET
  1667. NETWORK TYPE COMMAND.  Suppose the Telnet program on your system is SOCKS
  1668. enabled but C-Kermit is not.  Make Kermit connections like this:
  1669.   SET PREFIX ALL
  1670.   PTY (or PIPE) telnet zzz.com
  1671. 2.7.4.5. Kerberos
  1672. UNIX C-Kermit can be built with MIT Kerberos IV or V authentication and
  1673. encryption.  Instructions are available in a separate document, security.txt.
  1674. Additional modules are required that can not be exported from the USA to any
  1675. country except Canada, by US law.
  1676. If you have Kerberos installed but you don't have a Kerberized version of
  1677. C-Kermit, you can use ktelnet as C-Kermit's external communications program
  1678. to make secure connections without giving up C-Kermit's services:
  1679.   SET PREFIX ALL
  1680.   PTY (or PIPE) ktelnet cia.gov
  1681. 2.8. Scripting Local Programs
  1682. If your version of Kermit has PTY support built in, then any text-based
  1683. program can be invoked with SET HOST /PTY or equivalent command and controlled
  1684. using the normal sequence of OUTPUT, INPUT, IF SUCCESS commands (this is the
  1685. same service that is provided by the 'expect' program, but controlled by the
  1686. Kermit script language rather than Tcl).
  1687. When PTY service is not available, then any program that uses standard input
  1688. and output can be invoked with SET HOST /PIPE.
  1689. Here's an example in which we start an external Kermit program, wait for its
  1690. prompt, give it a VERSION command, and then extract the numeric version number
  1691. from its response:
  1692.   set host /pty kermit -Y
  1693.   if fail stop 1 {Can't start external command}
  1694.   input 10 C-Kermit>
  1695.   if fail stop 1 {No C-Kermit> prompt}
  1696.   output version13
  1697.   input 10 {Numeric: }
  1698.   if fail stop 1 {No match for "Numeric:"}
  1699.   clear input
  1700.   input 10 10
  1701.   echo VERSION = "fsubstr(v(input),1,6)"
  1702.   output exit13
  1703. This technique could be used to control any other interactive program, even
  1704. those that do screen formatting (like Emacs or Vi), if you can figure out the
  1705. sequence of events.  If your Kermit program doesn't have PTY support, then the
  1706. commands are restricted to those using standard i/o, including certain shells,
  1707. interactive text-mode "hardcopy" editors like ex, and so on.
  1708. If you are using the PTY interface, you should be aware that it runs the
  1709. given program or command directly on the pty, without any intervening shell
  1710. to interpret metacharacters, redirectors, etc.  If you need this sort of
  1711. thing, include the appropriate shell invocation as part of your command; for
  1712. example:
  1713.   pty echo *
  1714. just echoes "*"; whereas:
  1715.   pty ksh -c "echo *"
  1716. echoes all the filenames that ksh finds matching "*".
  1717. Similarly for redirection:
  1718.   set host /pty ksh -c "cat > foo"  ; Note: use shell quoting rules here
  1719.   set transmit eof 4
  1720.   transmit bar
  1721. And for that matter, for built-in shell commands:
  1722.   set host /pty ksh -c "for i in *; do echo $i; done"
  1723. The PIPE interface, on the other hand, invokes the shell automatically, so:
  1724.   pipe echo *
  1725. prints filenames, not "*".
  1726. 2.9. X.25 Networking
  1727. X.25 networking is documented in "Using C-Kermit", 2nd Edition.  When the book
  1728. was published, X.25 was available only in SunOS, Solaris, and Stratus VOS.
  1729. Unlike TCP/IP, X.25 APIs are not standardized; each vendor's X.25 libraries
  1730. and services (if they have them at all) are unique.
  1731. This section describes new additions.
  1732. 2.9.1. IBM AIXLink/X.25 Network Provider Interface for AIX
  1733. Support for X.25 was added via IBM's Network Provider Interface (NPI),
  1734. AIXLink/X.25 1.1, to the AIX 4.x version of C-Kermit 7.0.  Unfortunately,
  1735. AIXLink/X.25 is a rather bare-bones facility, lacking in particular any form
  1736. of PAD support (X.3, X.28, X.29).  Thus, the AIX version of C-Kermit, when
  1737. built to include X.25 networking, has neither a PAD command, nor a SET PAD
  1738. command.  The same is true for the underlying AIX system: no PAD support.
  1739. Thus it is not possible to have an interactive shell session over an X.25
  1740. connection into an AIX system (as far as we know), even from X.25-capable
  1741. Kermit versions (such as Solaris or VOS) that do include PAD support.
  1742. Thus the X.25 capabilities in AIX C-Kermit are limited to peer-to-peer
  1743. connections, e.g. from a C-Kermit client to a C-Kermit server.  Unlike the
  1744. Solaris, SunOS, and VOS versions, the AIX version can accept incoming X.25
  1745. connections:
  1746.   set network type x.25
  1747.   if fail stop 1 Sorry - no X.25 support
  1748.   ; Put any desired DISABLE or ENABLE or SET commands here.
  1749.   set host /server *
  1750.   if fail stop 1 X.25 "set host *" failed
  1751. And then access it from the client as follows:
  1752.   set network type x.25
  1753.   if fail stop 1 Sorry - no X.25 support
  1754.   set host xxxxxxx ; Specify the X.25/X.121 address
  1755.   if fail stop 1 Can't open connection
  1756. And at this point the client can use the full range of client commands:
  1757. SEND, GET, REMOTE xxx, FINISH, BYE.
  1758. The AIX version also adds two new variables:
  1759.   v(x25local_nua)   The local X.25 address.
  1760.   v(x25remote_nua)  The X.25 address of the host on the other end
  1761.                      of the connection.
  1762. C-Kermit's AIX X.25 client has not been tested against anything other than
  1763. a C-Kermit X.25 server on AIX.  It is not known if it will interoperate with
  1764. C-Kermit servers on Solaris, SunOS, or VOS.
  1765. To make an X.25 connection from AIX C-Kermit, you must:
  1766.   set x25 call-user-data xxxx
  1767. where xxxx can be any even-length string of hexadecimal digits, e.g. 123ABC.
  1768. 2.9.2. HP-UX X.25
  1769. Although C-Kermit presently does not include built-in support for HP-UX X.25,
  1770. it can still be used to make X.25 connections as follows: start Kermit and
  1771. tell it to:
  1772.   set prefixing all
  1773.   set parity space
  1774.   pty padem <address>
  1775. This should work in HP-UX 9.00 and later (see Section 2.7).  If you have an
  1776. earlier HP-UX version, or the PTY interface doesn't work or isn't available,
  1777. try:
  1778.   set prefixing all
  1779.   set parity space
  1780.   pipe padem <address>
  1781. Failing that, use Kermit to telnet to localhost and then after logging back
  1782. in, start padem as you would normally do to connect over X.25.
  1783. 2.10. Additional Serial Port Controls
  1784. C-Kermit 7.0 adds the following commands for greater control over serial
  1785. ports.  These commands are available only in C-Kermit versions whose
  1786. underlying operating systems provide the corresponding services (such as
  1787. POSIX and UNIX System V), and even then their successful operation depends
  1788. on the capabilities of the specific device and driver.
  1789. SET DISCONNECT { ON, OFF }
  1790.   On a SET LINE or SET PORT connection with SET CARRIER ON or AUTO, if
  1791.   the carrier signal drops during the connection, indicating that the
  1792.   connection has been lost, and C-Kermit notices it, this setting governs
  1793.   what happens next.  With SET DISCONNECT OFF, which is consistent with
  1794.   previous behavior, and therefore the default, C-Kermit continues to keep the
  1795.   device open and allocated.  With SET DISCONNECT ON, C-Kermit automatically
  1796.   closes and releases the device when it senses a carrier on-to-off
  1797.   transition, thus allowing others to use it.  However, it remains the default
  1798.   device for i/o (DIAL, REDIAL, INPUT, SEND, CONNECT, etc), so if a subsequent
  1799.   i/o command is given, the device is reopened if it is still available.  When
  1800.   it has been automatically closed in this manner, SHOW COMMUNICATIONS puts
  1801.   "(closed)" after its name, and in UNIX, the lockfile disappears -- both from
  1802.   SHOW COMM and from the lockfile directory itself.  Synonym:
  1803.   SET CLOSE-ON-DISCONNECT.
  1804. SET EXIT ON-DISCONNECT { ON, OFF }
  1805.   Like DISCONNECT, but makes the program exit if a connection drops.
  1806. Note that SET CLOSE-ON-DISCONNECT and SET EXIT ON-DISCONNECT apply only to
  1807. connections that drop; they do not apply to connections that can't be made
  1808. in the first place.  For example, they have no effect when a SET LINE,
  1809. SET HOST, TELNET, or DIAL command fails.
  1810. HANGUP
  1811.   If [CLOSE-ON-]DISCONNECT is ON, and the HANGUP command is given on a serial
  1812.   device, and the carrier signal is no longer present after the HANGUP
  1813.   command, the device is closed and released.
  1814. SET PARITY HARDWARE { EVEN, ODD }
  1815.   Unlike SET PARITY { EVEN, ODD, MARK, SPACE }, which selects 7 data bits
  1816.   plus the indicated kind of parity (to be done in software by Kermit itself),
  1817.   SET PARITY HARDWARE selects 8 data bits plus even or odd parity, to be done
  1818.   by the underlying hardware, operating system, or device driver.  This
  1819.   command is effective only with a SET LINE or SET PORT device.  That is, it
  1820.   has no effect in remote mode, nor on network connections.  There is
  1821.   presently no method for selecting 8 data bits plus mark or space parity.
  1822.   If hardware parity is in effect, the variable v(hwparity) is set to
  1823.   "even" or "odd".  Note: some platforms might also support settings of
  1824.   SPACE, MARK, or NONE.
  1825. SET STOP-BITS { 1, 2 }
  1826.   This tells the number of 1-bits to insert after an outbound character's
  1827.   data and parity bits, to separate it from the next character.  Normally 1.
  1828.   Choosing 2 stop bits should do no harm, but will slow down serial
  1829.   transmission by approximately 10 percent.  Historically, 2 stop bits were
  1830.   used with Teletypes (at 110 bps or below) for print-head recovery time.
  1831.   There is presently no method for choosing any number of stop bits besides
  1832.   1 and 2.
  1833. SET SERIAL [ <dps> ]
  1834.   <dps> stands for Data-bits, Parity, Stop-bits.  This is the notation
  1835.   familiar to many people for serial port configuration: 7E1, 8N1, 7O2, etc.
  1836.   The data bits number also becomes the TERMINAL BYTESIZE setting.  The second
  1837.   character is E for Even, O for Odd, M for Mark, S for Space, or N for None.
  1838.   The list of available options depends on the capabilities of the specific
  1839.   platform.  If <dps> is omitted, 8N1 is used.  Type "set serial ?"  for a
  1840.   list of available choices.  Examples:
  1841.   SET SERIAL 7E1
  1842.     Equivalent to SET PARITY EVEN, SET STOP-BITS 1, SET TERM BYTE 7.
  1843.   SET SERIAL 8N1
  1844.     Equivalent to SET PARITY NONE, SET STOP-BITS 1, SET TERM BYTE 8.
  1845.   SET SERIAL 7E2
  1846.     Equivalent to SET PARITY EVEN and SET STOP-BITS 2, SET TERM BYTE 7.
  1847.   SET SERIAL 8E2
  1848.     Same as SET PARITY HARDWARE EVEN, SET STOP-BITS 2, SET TERM BYTE 8.
  1849.   SET SERIAL
  1850.     Same as SET PARITY NONE and SET STOP-BITS 1, SET TERM BYTE 8.
  1851. Notes:
  1852.  . The SET SERIAL xx2 options are available only in Kermit versions where the
  1853.    SET PARITY HARDWARE command is also available.  (SHOW FEATURES includes
  1854.    "HWPARITY" in its options list.)
  1855.  . The SET SERIAL 7xx and 8N1 options affect the software parity setting, even
  1856.    for network connections.
  1857.  . As noted in the manual, selecting 8 data bits does not give you 8-bit
  1858.    terminal sessions in CONNECT mode unless you also SET TERMINAL BYTESIZE 8.
  1859.    The default terminal bytesize remains 7, to protect against the situation
  1860.    where the remote host is generating parity but you don't know about it.  If
  1861.    the terminal bytesize was 8 by default and you CONNECTed to such a host,
  1862.    you would see only garbage on your screen.
  1863.  . If you do not give a SET STOP-BITS or SET SET SERIAL command, C-Kermit
  1864.    does not attempt to set the device's stop bits; instead, it uses whatever
  1865.    setting the device uses when not given explicit instructions about stop
  1866.    bits.
  1867. SHOW COMMUNICATIONS displays the current settings.  Stop bits and hardware
  1868. parity are shown only for SET PORT / SET LINE (serial) devices, since they
  1869. do not apply to network connections or to remote mode.  STOP-BITS is shown
  1870. as "(default)" if you have not given an explicit SET STOP-BITS or SET SERIAL
  1871. command.
  1872. The v(serial) variable shows the SET SERIAL setting (8N1, 7E1, etc).
  1873. 2.11. Getting Access to the Dialout Device
  1874.   This section is for UNIX only; note the special words about QNX
  1875.   at the end.  Also see Section 2.0 for SET LINE switches, particularly
  1876.   the /SHARE switch for VMS only.
  1877. C-Kermit does its best to obey the UUCP lockfile conventions of each platform
  1878. (machine, operating system, OS version) where it runs, if that platform uses
  1879. UUCP.
  1880. But simply obeying the conventions is often not good enough, due to the
  1881. increasing likelihood that a particular serial device might have more than one
  1882. name (e.g. /dev/tty00 and /dev/term/00 are the same device in Unixware 7;
  1883. /dev/cua and /dev/cufa are the same device in NeXTSTEP), plus the increasingly
  1884. widespread use of symlinks for device names, such as /dev/modem.
  1885. C-Kermit 7.0 goes to greater lengths than previous versions to successfully
  1886. interlock with other communications program (and other instances of Kermit
  1887. itself); for example, by:
  1888.  . Creation of dual lockfiles whenever a symlink is used; one for the link
  1889.    name and one for the "real" name as revealed by readlink().
  1890.  . Creation of dual lockfiles in HP-UX according to HP rules.
  1891.  . Creation of dual uppercase/lowercase lockfile names in SCO UNIX/ODT/OSR5.
  1892.  . The use of ttylock() in versions of AIX where it works.
  1893.  . The use, wherever possible, of lockfile names based on inode/major/minor
  1894.    device number rather than device name.
  1895. See the ckuins.txt and ckubwr.txt files for details.
  1896. QNX is almost unique among UNIX varieties in having no UUCP programs nor
  1897. UUCP-oriented dialout-device locking conventions.  QNX does, however, allow a
  1898. program to get the device open count.  This can not be a reliable form of
  1899. locking unless all applications do it (and they don't), so by default, Kermit
  1900. uses this information only for printing a warning message such as:
  1901.   C-Kermit>set line /dev/ser1
  1902.   WARNING - "/dev/ser1" looks busy...
  1903. However, if you want to use it as a lock, you can do so with:
  1904.   SET QNX-PORT-LOCK { ON, OFF }
  1905. QNX-PORT-LOCK is OFF by default; if you set in ON, C-Kermit fails to open
  1906. any dialout device when its open count indicates that another process has it
  1907. open.  SHOW COMM (in QNX only) displays the setting, and if you have a port
  1908. open, it also shows the current open count (with C-Kermit's own access
  1909. always counting as 1).
  1910. 2.12. The Connection Log
  1911. C-Kermit 7.0 adds the ability to log connections, so you can see where you've
  1912. been and have a record of calls you've made.  A connection is defined as any
  1913. communications session that is begun by SET LINE, SET PORT, DIAL, SET HOST,
  1914. TELNET, or RLOGIN.  Connections are not logged unless you request it; the
  1915. command is:
  1916. LOG CX [ filename [ { NEW, APPEND } ] ]
  1917.   Enables logging of connections in the given file.  If the trailing
  1918.   { NEW, APPEND } keyword is omitted, the file is opened for appending;
  1919.   i.e. new records are written to the end.  If NEW is specified, a new
  1920.   file is created; if a file of the same name already existed, it is
  1921.   overwritten.  If the filename is omitted, CX.LOG in your home (login)
  1922.   directory is used (note: uppercase).  To accept all defaults, just use
  1923.   "log connections" (or "l c" for short).  Synonym: LOG CONNECTIONS.
  1924. CLOSE CX-LOG
  1925.   This closes the connection log if it was open.  (Note, the CLOSE CONNECTION
  1926.   command closes the connection itself).
  1927. SHOW CX
  1928.   This shows your current connection, if any, including the elapsed time
  1929.   (since you opened it).  Synonym: SHOW CONNECTION.
  1930. v(cx_time)
  1931.   This variable shows the elapsed time of your current connection, or if
  1932.   there is no current connection, of your most recent connection, of if there
  1933.   have been no connections, 0.
  1934. The connection contains one line per connection, of the form:
  1935.   yyyymmdd hh:mm:ss username pid p=v [ p=v [ ... ] ]
  1936. where the timestamp (in columns 1-18) shows when the connection was made;
  1937. username is the login identity of the person who made the connection; pid is
  1938. Kermit's process ID when it made the connection.  The p's are parameters that
  1939. depend on the type of connection, and the v's are their values:
  1940.   T = Connection Type (TCP, SERIAL, DIAL, DECNET, etc).
  1941.   H = The name of the Host from which the connection was made.
  1942.   N = Destination phone Number or Network host name or address.
  1943.   D = Serial connections only: Device name.
  1944.   O = Dialed calls only: Originating country code & area code if known.
  1945.   E = Elapsed time in hh:mm:ss format (or hhh:mm:ss, etc).
  1946. If you always want to keep a connection log, simply add:
  1947.   log connections
  1948. to your C-Kermit customization file.  Note, however, that if you make a lot of
  1949. connections, your CX.LOG will grow and grow.  You can handle this by adding a
  1950. "logrotate" procedure like the following to your customization file, before
  1951. the "log connections" command:
  1952.   define LOGROTATE {                    ; Define LOGROTATE macro
  1953.       local %i %m %d %n %f MAX
  1954.       def MAX 4                         ; How many months to keep
  1955.       if not def %1 -                  ; No argument given
  1956. end 1 %0: No filename given
  1957.       if not = 1 ffiles(%1) -         ; Exactly 1 file must match
  1958. end 1 %0: %1 - File not found
  1959.       .%d := fsubstr(fdate(%1),1,6) ; Arg OK - get file year & month
  1960.       if = %d -                        ; Compare file year & month
  1961.         fsubstr(v(ndate),1,6) -       ; with current year & month
  1962.   end 0                         ; Same year & month - done
  1963.       rename %1 %1.%d                ; Different - rename file
  1964.       .%n := ffiles(%1.*)            ; How many old files
  1965.       if < %n m(MAX) end 0            ; Not enough to rotate
  1966.       .%m := %1.999999                ; Initial compare string
  1967.       for %i 1 %n 1 {                 ; Loop thru old logs
  1968.  .%f := fnextfile()           ; Get next file name
  1969.  if llt %f %m .%m := %f     ; If this one older remember it
  1970.       }
  1971.       delete %m                        ; Delete the oldest one
  1972.   }
  1973.   log connections                       ; Now open the (possibly new) log
  1974.   logrotate v(home)CX.LOG              ; Run the LOGROTATE macro
  1975. As you can see, this compares the yyyymm portion of the modification date
  1976. (fdate()) of the given file (%1) with the current yyyymm.  If they differ,
  1977. the current file has the yyyymm suffix (from its most recent modification
  1978. date) appended to its name.  Then we search through all other such files, find
  1979. the oldest one, and delete it.  Thus the current log, plus the logs from the
  1980. most recent four months, are kept.  This is all done automatically every time
  1981. you start C-Kermit.
  1982. On multiuser systems, it is possible to keep a single, shared, system-wide
  1983. connection log, but this is not recommended since (a) it requires you keep a
  1984. publicly write-accessible logfile (a glaring target for mischief), and (b) it
  1985. would require each user to log to that file and not disable logging.  A better
  1986. method for logging connections, in UNIX at least, is syslogging (see
  1987. ckuins.txt Section 15 and iksd.txt Section 4.2 for details).
  1988. 2.13. Automatic Connection-Specific Flow Control Selection
  1989. Beginning in C-Kermit 7.0, the appropriate flow-control method for each
  1990. connection type is kept in a table, for example:
  1991.   Remote:           NONE
  1992.   Modem:            RTS/CTS
  1993.   Direct-Serial:    NONE
  1994.   TCPIP:            NONE
  1995. The size of the table and values for each connection type can vary from
  1996. platform to platform.  Type "set flow ?" for a list of available flow-control
  1997. types.
  1998. The table is used to automatically select the appropriate kind of flow
  1999. control whenever you make a connection.  You can display the table with:
  2000.   SHOW FLOW-CONTROL
  2001. The defaults are as follows:
  2002. Remote:
  2003.   NONE or XON/XOFF.  This is because C-Kermit is not allowed to find out what
  2004.   type of connection the incoming user has (*).  No kind of flow control will
  2005.   work on every kind of connection, including (unexpectedly) KEEP, which we
  2006.   would have liked to use, but not turning off flow control at the remote end
  2007.   during file transfer on TCP/IP connections is fatal to the transfer (except
  2008.   in VMS and HP-UX, where it must be set to Xon/Xoff!)  Therefore if you are
  2009.   dialing in to a serial port on a server (UNIX or VMS) where C-Kermit is
  2010.   running, you will need to tell C-Kermit to "set flow keep" before
  2011.   transferring files (assuming the modem and port are configured correctly by
  2012.   the system administrator; otherwise you'll need to give a specific kind of
  2013.   flow control, e.g. "set flow xon/xoff"), so in this case C-Kermit will not
  2014.   disable flow control, as it must do when you are coming via Telnet (directly
  2015.   or through a terminal server, except on VMS and HP-UX).
  2016. Modem:
  2017.   This applies when you dial out with a modem.  In this case, the MODEM
  2018.   FLOW-CONTROL setting takes affect after the SET FLOW setting, so it can pick
  2019.   the most appropriate flow control for the combination of the particular
  2020.   modem and the computer/port/driver that is dialing.
  2021. Direct-Serial:
  2022.   The default here is NONE because C-Kermit has no way of knowing what kind
  2023.   of flow control, if any, is or can be done by the device at the other end
  2024.   of the connection.  RTS/CTS would be a bad choice here, because if the CTS
  2025.   signal is not asserted, the connection will hang.  And since direct
  2026.   connections are often made with 3-wire cables, there is a good chance the
  2027.   CTS signal will not be received.
  2028. TCPIP:
  2029.   NONE, since TCP and IP provide their own flow control transparently to the
  2030.   application, except in VMS, where Xon/Xoff is the default due to the
  2031.   requirements of the VMS TCP/IP products.
  2032. Other networks:
  2033.   NONE, since networks should provide their flow control transparently to the
  2034.   application.
  2035. (*) This is possibly the worst feature of UNIX, VMS, and other platforms
  2036.     where C-Kermit runs.  If C-Kermit was able to ask the operating system
  2037.     what kind of connection it had to the user, it could set up many things
  2038.     for you automatically.
  2039. You can modify the default-flow-control table with:
  2040.   SET FLOW-CONTROL /xxx { NONE, KEEP, RTS/CTS, XON/XOFF, ... }