Annotation of coherent/e/bin/cku179/ckuus2.c, revision 1.1

1.1     ! root        1: /*  C K U U S 2  --  User interface STRINGS & help module for C-Kermit  */
        !             2:  
        !             3: /*
        !             4:  Author: Frank da Cruz ([email protected], [email protected]),
        !             5:  Columbia University Center for Computing Activities.
        !             6:  First released January 1985.
        !             7:  Copyright (C) 1985, 1992, Trustees of Columbia University in the City of New 
        !             8:  York.  Permission is granted to any individual or institution to use, copy, or
        !             9:  redistribute this software so long as it is not sold for profit, provided this
        !            10:  copyright notice is retained. 
        !            11: */
        !            12:  
        !            13: /*
        !            14:  This module separates long strings from the body of the other ckuus* modules.
        !            15: */
        !            16: 
        !            17: #include "ckcdeb.h"
        !            18: #include "ckcnet.h"
        !            19: #include "ckcasc.h"
        !            20: #include "ckcker.h"
        !            21: #include "ckuusr.h"
        !            22: #include "ckcxla.h"
        !            23:  
        !            24: #ifndef NOICP
        !            25: #ifdef DCMDBUF
        !            26: extern char *cmdbuf;
        !            27: #else
        !            28: extern char cmdbuf[];
        !            29: #endif /* DCMDBUF */
        !            30: #endif /* NOICP */
        !            31: 
        !            32: #ifdef DEBUG
        !            33: extern char debfil[];
        !            34: #endif /* DEBUG */
        !            35: #ifdef TLOG
        !            36: extern char trafil[];
        !            37: #endif
        !            38: 
        !            39: extern char *xarg0;
        !            40: extern int nrmt, nprm, dfloc, local, parity, duplex;
        !            41: extern int turn, flow;
        !            42: extern int binary, warn, quiet, keep;
        !            43: extern int success;
        !            44: 
        !            45: extern long speed;
        !            46: extern char *dftty, *versio, *ckxsys;
        !            47: extern struct keytab prmtab[];
        !            48: extern struct keytab remcmd[];
        !            49:  
        !            50: /* Command-Line help (Unix command-line arguments) */
        !            51: 
        !            52: #ifndef NOCMDL
        !            53: static
        !            54: char *hlp1[] = {
        !            55: #ifndef NOICP
        !            56: "[cmdfile] [-x arg [-x arg]...[-yyy]..] [ = text ] ]\n",
        !            57: #else
        !            58: "[-x arg [-x arg]...[-yyy]..]\n",
        !            59: #endif
        !            60: "  -x is an option requiring an argument, -y an option with no argument.\n",
        !            61: #ifndef NOICP
        !            62: #ifndef NOSPL
        !            63: "     = means ignore following words, but place in array \\&@[].\n",
        !            64: #else
        !            65: "     = means ignore following material.\n",
        !            66: #endif /* NOSPL */
        !            67: #else
        !            68: "     = means ignore following material.\n",
        !            69: #endif /* NOICP */
        !            70: "actions:\n",
        !            71: "  -s files  send files                    -r  receive files\n",
        !            72: "  -s -      send files from stdin         -k  receive files to stdout\n",
        !            73: #ifndef NOSERVER
        !            74: "  -x        enter server mode             -f  finish remote server\n\n",
        !            75: #else
        !            76: "  -f        finish remote server\n\n",
        !            77: #endif /* NOSERVER */
        !            78: "  -g files  get remote files from server (quote wildcards)\n",
        !            79: "  -a name   alternate file name, used with -s, -r, -g\n",
        !            80: "  -c        connect (before file transfer), used with -l and -b\n",
        !            81: "  -n        connect (after file transfer), used with -l and -b\n\n",
        !            82: "settings:\n",
        !            83: "  -l line   communication line device     -q   quiet during file transfer\n",
        !            84: #ifdef NETCONN
        !            85: "  -j host   network host name             -i   binary file transfer\n",
        !            86: #else
        !            87: "  -i        binary file transfer\n",
        !            88: #endif /* NETCONN */
        !            89: "  -b bps    line speed, e.g. 2400         -t   half duplex, xon handshake\n",
        !            90: #ifdef DEBUG
        !            91: "  -p x      parity, x = e,o,m,s, or n     -d   log debug info to debug.log\n",
        !            92: #else
        !            93: "  -p x      parity, x = e,o,m,s, or n\n",
        !            94: #endif /* DEBUG */
        !            95: #ifndef NOICP
        !            96: "  -y name   alternate init file name      -w   write over files\n",
        !            97: #else
        !            98: "  -w        write over files\n",
        !            99: #endif /* NOICP */
        !           100: "  -e n      receive packet length         -v n window size\n",
        !           101: #ifndef NODIAL
        !           102: "  -m name   modem type                    -z   force foreground\n",
        !           103: #else
        !           104: "  -z        force foreground\n",
        !           105: #endif /* NODIAL */
        !           106: #ifdef SUNX25
        !           107: "  -X  X.25 address              -o index  X.25 closed user group call\n",
        !           108: "  -u  X.25 reverse charge call  -U string X.25 call user data\n",
        !           109: #endif /* SUNX25 */
        !           110: #ifdef NOICP
        !           111: "Interactive command parser removed.\n",
        !           112: #else
        !           113: "If no action command is included, or -S is, enter interactive dialog.\n",
        !           114: #endif
        !           115: ""
        !           116: };
        !           117:  
        !           118: /*  U S A G E */
        !           119:  
        !           120: VOID
        !           121: usage() {
        !           122: #ifndef MINIX
        !           123: #ifdef NOICP
        !           124: #endif /* NOICP */    
        !           125:     conol("Usage: ");
        !           126:     conol(xarg0);
        !           127:     conola(hlp1);
        !           128: #else
        !           129:     conol("Usage: ");
        !           130:     conol(xarg0);
        !           131:     conol(" [-x arg [-x arg]...[-yyy]..] ]\n");
        !           132: #endif /* MINIX */
        !           133: }
        !           134: #endif /* NOCMDL */
        !           135: 
        !           136: #ifndef NOICP
        !           137: 
        !           138: /*  Interactive help strings  */
        !           139:  
        !           140: static char *tophlp[] = { 
        !           141: "Trustees of Columbia University in the City of New York.\n",
        !           142: #ifndef NOHELP
        !           143: "Type ? for a list of commands, type HELP x for any command x.",
        !           144: #else
        !           145: "Type ? for a list of commands; see documentation for detailed descriptions.",
        !           146: #endif /* NOHELP */
        !           147: "While typing commands, you may use the following special characters:\n",
        !           148: " DEL, RUBOUT, BACKSPACE, CTRL-H: Delete the most recent character typed.",
        !           149: " CTRL-W:  Delete the most recent word typed.",
        !           150: " CTRL-U:  Delete the current line.",
        !           151: " CTRL-R:  Redisplay the current line.",
        !           152: " ?        (question mark) Display a menu for the current command field.",
        !           153: " ESC      (or TAB) Attempt to complete the current field.",
        !           154: " \\        (backslash) include the following character literally",
        !           155: #ifndef NOSPL
        !           156: "          or introduce a numeric backslash code, variable, or function.\n",
        !           157: #else
        !           158: "          or introduce a numeric backslash code.\n",
        !           159: #endif /* NOSPL */
        !           160: 
        !           161: "Command words other than filenames can be abbreviated in most contexts.",
        !           162: "Commands may be continued onto subsequent lines by ending them with - (dash)",
        !           163: "and commands may have trailing comments introduced by ; (semicolon).",
        !           164: #ifndef NOFRILLS
        !           165: "The BUG command tells you how to report bugs.",
        !           166: #endif /* NOFRILLS */
        !           167: #ifndef NOCMDL
        !           168: "\nFrom system level, type 'kermit -h' for help about command line options.",
        !           169: #endif /* NOCMDL */
        !           170: "" };
        !           171:  
        !           172: #ifndef NOHELP
        !           173: 
        !           174: static char *hmxxbye = "Syntax: BYE\n\
        !           175: Shut down and log out a remote Kermit server";
        !           176:  
        !           177: static char *hmxxclo[] = {
        !           178: "Syntax:  CLOSE name",
        !           179: "Example: CLOSE SESSION\n",
        !           180: "Close one of the following logs or files:",
        !           181: "SESSION, TRANSACTION, PACKET, DEBUGGING, READ, WRITE",
        !           182: "Type HELP LOG and HELP OPEN for further info.", "" };
        !           183:  
        !           184: static char *hmxxcon = "Syntax: CONNECT (or C)\n\n\
        !           185: Connect to a remote computer via the tty device given in the most recent\n\
        !           186: SET LINE command, or the network host named in the most recent SET HOST\n\
        !           187: command.  Type the escape character (normally Ctrl-\\) followed by C to\n\
        !           188: get back, or followed by ? for help.";
        !           189:  
        !           190: static char *hmxxget = "Syntax: GET filespec\n\
        !           191: Tell the remote Kermit server to send the named file or files.\n\
        !           192: If the filespec is omitted, then you are prompted for the remote and\n\
        !           193: local filenames separately.";
        !           194:  
        !           195: static char *hmxxlg[] = { "Syntax: LOG (or L) name [ { NEW, APPEND } ]",
        !           196: "Record information in a log file:\n",
        !           197: "DEBUGGING     Debugging information, to help track down bugs in the C-Kermit",
        !           198: "              program (default log name is debug.log).\n",
        !           199: "PACKETS       Kermit packets, to help with protocol problems (packet.log)",
        !           200: "SESSION       Terminal session, during CONNECT command (session.log)",
        !           201: "TRANSACTIONS  Names and statistics about files transferred (transact.log)\n",
        !           202: "If you include the APPEND keyword after the filename, the existing log, if",
        !           203: "any, is appended to; otherwise a new file is created.",
        !           204: "" } ;
        !           205:  
        !           206: #ifndef NOSCRIPT
        !           207: static char *hmxxlogi[] = { "\
        !           208: Syntax: SCRIPT text\n",
        !           209: "Login to a remote system using the text provided.  The login script",
        !           210: "is intended to operate similarly to uucp \"L.sys\" entries.",
        !           211: "A login script is a sequence of the form:\n",
        !           212: "  expect send [expect send] . . .\n",
        !           213: "where 'expect' is a prompt or message to be issued by the remote site, and",
        !           214: "'send' is the names, numbers, etc, to return.  The send may also be the",
        !           215: "keyword EOT, to send control-d, or BREAK (or \\\\b), to send a break signal.",
        !           216: "Letters in send may be prefixed by ~ to send special characters.  These are:",
        !           217: "~b backspace, ~s space, ~q '?', ~n linefeed, ~r return, ~c don\'t",
        !           218: "append a return, and ~o[o[o]] for octal of a character.  As with some",
        !           219: "uucp systems, sent strings are followed by ~r unless they end with ~c.\n",
        !           220: "Only the last 7 characters in each expect are matched.  A null expect,",
        !           221: "e.g. ~0 or two adjacent dashes, causes a short delay.  If you expect",
        !           222: "that a sequence might not arrive, as with uucp, conditional sequences",
        !           223: "may be expressed in the form:\n",
        !           224: "  -send-expect[-send-expect[...]]\n",
        !           225: "where dashed sequences are followed as long as previous expects fail.",
        !           226: "" };
        !           227: #endif
        !           228:  
        !           229: static char *hmxxrc[] = { "Syntax: RECEIVE (or R) [filespec]\n",
        !           230: "Wait for a file to arrive from the other Kermit, which must be given a",
        !           231: "SEND command.  If the optional filespec is given, the (first) incoming",
        !           232: "file will be stored under that name, otherwise it will be stored under",
        !           233: "the name it arrives with.",
        !           234: "" } ;
        !           235:  
        !           236: static char *hmxxsen = "\
        !           237: Syntax: SEND (or S) filespec [name]\n\n\
        !           238: Send the file or files specified by filespec.\n\
        !           239: filespec may contain wildcard characters '*' or '?'.  If no wildcards,\n\
        !           240: then 'name' may be used to specify the name 'filespec' is sent under; if\n\
        !           241: 'name' is omitted, the file is sent under its own name.";
        !           242:  
        !           243: #ifndef NOMSEND
        !           244: static char *hmssmse = "\
        !           245: Syntax: MSEND filespec [ filespec [ ... ] ]\n\n\
        !           246: Send the files specified by the filespecs.  One or more filespecs may be\n\
        !           247: listed, separated by spaces.  Any or all filespecs may contain wildcards\n\
        !           248: and they may be in different directories.  An alternate name cannot be given.";
        !           249: #endif /* NOMSEND */
        !           250: 
        !           251: #ifndef NOSERVER
        !           252: static char *hmxxser = "Syntax: SERVER\n\n\
        !           253: Enter server mode on the currently selected line.  All further commands\n\
        !           254: will be taken in packet form from the other Kermit program.  Use FINISH\n\
        !           255: or BYE to get C-Kermit out of server mode.";
        !           256: #endif /* NOSERVER */
        !           257:  
        !           258: static char *hmhset[] = { "\
        !           259: The SET command is used to establish various communication or file",
        !           260: "parameters.  The SHOW command can be used to display the values of",
        !           261: "SET parameters.  Help is available for each individual parameter;",
        !           262: "type HELP SET ? to see what's available.",
        !           263: "" } ;
        !           264:  
        !           265: #ifndef NOSETKEY
        !           266: static char *hmhskey[] = { "Syntax: SET KEY k text\n",
        !           267: "Map the key k to send 'text' when pressed during CONNECT mode.",
        !           268: "K can be expressed as decimal number or backslash code, 'text'",
        !           269: "can also contain any backslash code.  If 'text' has the length 1",
        !           270: "it is treated specially.  In some environments (OS/2, for example)",
        !           271: "that single character may be wider than 8 bits, if specified in",
        !           272: "backslash notation.  In this case, a scan code mapping takes place,",
        !           273: "i.e. key k takes over the function of the key whose scan code is",
        !           274: "assigned to k.  This may even be a controlling key for the CONNECT",
        !           275: "mode.  If 'text' is empty, the default key binding is restored for",
        !           276: "the key k.  SET KEY mappings take place before terminal character-set",
        !           277: "translation.",
        !           278: ""};
        !           279: #endif /* NOSETKEY */
        !           280: 
        !           281: static char *hmxychkt[] = { "Syntax: SET BLOCK-CHECK n\n",
        !           282: "Type of packet block check to be used for error detection, 1, 2, or 3.",
        !           283: "Type 1 is standard, and catches most errors.  Types 2 and 3 specify more",
        !           284: "rigorous checking at the cost of higher overhead.",
        !           285: "" } ;
        !           286:  
        !           287: static char *hmxydial[] = {"SET DIAL DISPLAY {ON, OFF}",
        !           288: "Whether to display dialing progress on the screen.\n",
        !           289: "SET DIAL HANGUP {ON, OFF}",
        !           290: "Whether the DIAL command should hang up the phone before dialing.\n",
        !           291: "SET DIAL INIT-STRING text",
        !           292: "The 'text' is a replacement for Kermit's built-in initialization command",
        !           293: "for the modem.\n",
        !           294: "SET DIAL KERMIT-SPOOF {ON, OFF}",
        !           295: "If the selected modem type supports the Kermit protocol directly,",
        !           296: "use this command to turn its Kermit protocol function on or off.\n",
        !           297: "SET DIAL MNP-ENABLE {ON, OFF}",
        !           298: "Enable or disable MNP negotiation by the modem.  Currently works only",
        !           299: "for Telebits.\n",
        !           300: "SET DIAL SPEED-MATCHING {ON, OFF}",
        !           301: "If selected, the modem locks its interface speed, even if it connects",
        !           302: "to a slower modem.  Default is OFF (modem changes speed).\n",
        !           303: "SET DIAL TIMEOUT number",
        !           304: "How many seconds to wait for a dialed call to complete.  Use this",
        !           305: "to override the DIAL command's automatic timeout calculation.  A value",
        !           306: "of 0 turns off this feature and returns to Kermit's automatic dial",
        !           307: "timeout calculation.",
        !           308: "" } ;
        !           309: 
        !           310: static char *hmxyf[] = { "Syntax: SET FILE parameter value",
        !           311: "Parameters are:\n",
        !           312: 
        !           313: "TYPE is normally TEXT, with conversion of record format and character set.",
        !           314: "BINARY means to do no conversion.  Use BINARY for executable programs or",
        !           315: "binary data.  Example: SET FILE TYPE BINARY.\n",
        !           316: 
        !           317: #ifdef VMS
        !           318: "For VAX/VMS, you may include an optional record-format after the word",
        !           319: "BINARY.  This may be FIXED (the default) or UNDEFINED.",
        !           320: "Two additional VMS file types are also supported: IMAGE and LABELED.  IMAGE",
        !           321: "means raw block i/o, no interference from RMS, and applies to file transmis-",
        !           322: "sion only.  LABELED means to send or interpret RMS attributes with the file.",
        !           323: "\n",
        !           324: #endif /* VMS */
        !           325: 
        !           326: #ifndef NOCSETS
        !           327: "CHARACTER-SET: tells the encoding of the local file, ASCII by default.",
        !           328: "The names ITALIAN, PORTUGUESE, NORWEGIAN, etc, refer to 7-bit ISO-646",
        !           329: "national replacement character (NRC) sets.  Latin-1 is the 8-bit ISO 8859",
        !           330: "Latin Alphabet 1.  Next is the 8-bit character set of the NeXT workstation.",
        !           331: "The CPnnn sets are for IBM PCs.  Apple-Quickdraw is for the Macintosh.",
        !           332: #ifdef CYRILLIC
        !           333: "KOI-CYRILLIC, CYRILLIC-ISO, and CP866 are 8-bit Cyrillic character sets.",
        !           334: "SHORT-KOI is a 7-bit ASCII coding for Cyrillic.",
        !           335: #endif /* CYRILLIC */
        !           336: #ifdef KANJI
        !           337: "JAPANESE-EUC, JIS7-KANJI, DEC-KANJI, and SHIFT-JIS-KANJI are Japanese",
        !           338: "Kanji character sets.",
        !           339: #endif /* KANJI */
        !           340: "Type SET FILE CHAR ? for a complete list of file character sets.\n",
        !           341: #endif /* NOCSETS */
        !           342: 
        !           343: "BYTESIZE { 7, 8 }: normally 8.  If 7, truncate the 8th bit of all file \
        !           344: bytes.\n",
        !           345: 
        !           346: "NAMES are normally CONVERTED to 'common form' during transmission; LITERAL",
        !           347: "means use filenames literally (useful between like systems).\n",
        !           348: 
        !           349: "COLLISION tells what to do when a file arrives that has the same name as",
        !           350: "an existing file.  The options are:",
        !           351: "  BACKUP (default) - Rename the old file to a new, unique name and store",
        !           352: "    the incoming file under the name it was sent with.",
        !           353: "  OVERWRITE - Overwrite (replace) the existing file.",
        !           354: "  APPEND - Append the incoming file to the end of the existing file.",
        !           355: "  DISCARD - Refuse and/or discard the incoming file.",
        !           356: "  RENAME - Give the incoming file a unique name.",
        !           357: "  UPDATE - Accept the incoming file only if it is newer than the existing",
        !           358: "    file.",
        !           359: "Example: SET FILE COLLISION UPDATE\n",
        !           360: 
        !           361: #ifdef VMS
        !           362: "RECORD-LENGTH sets the record length for received files of type BINARY. Use",
        !           363: "this to receive VMS BACKUP savesets or other fixed-format files. The default",
        !           364: "of 512 is suitable for executable (.EXE) files, etc.\n",
        !           365: "Example: SET FILE REC 8192\n",
        !           366: #endif
        !           367: 
        !           368: "DISPLAY is normally ON, causing file transfer progress to be displayed",
        !           369: "on your screen when in local mode.  SET DISPLAY OFF is useful for",
        !           370: "allowing local-mode file transfers to proceed in the background.\n",
        !           371: 
        !           372: "WARNING.  SET FILE WARNING is superseded by the newer command, SET FILE",
        !           373: "COLLISION.  SET FILE WARNING ON is equivalent to SET FILE COLLISION RENAME",
        !           374: "and SET FILE WARNING OFF is equivalent to SET FILE COLLISION OVERWRITE.\n",
        !           375: 
        !           376: "" };
        !           377:  
        !           378: static char *hmxyhsh[] = { "Syntax: SET HANDSHAKE value\n",
        !           379: "Character to use for half duplex line turnaround handshake during file",
        !           380: "transfer.  C-Kermit waits for this character from the other computer before",
        !           381: "sending its next packet.  Default is NONE, others are XON, LF, BELL, ESC,",
        !           382: "etc.  SET HANDSHAKE CODE <n> lets you specify the numeric ASCII value of the",
        !           383: "handshake character.  Type SET HANDSH ? for a list.",
        !           384: "" };
        !           385: 
        !           386: #ifndef NOSERVER
        !           387: static char *hsetsrv[] = {"\
        !           388: SET SERVER DISPLAY {ON,OFF}",
        !           389: "Tell whether local-mode C-Kermit during server operation should put a",
        !           390: "file transfer display on the screen.  Default is OFF.\n",
        !           391: "SET SERVER TIMEOUT n",
        !           392: "Server command wait timeout interval, how often the C-Kermit server issues",
        !           393: "a NAK while waiting for a command packet.  Specify 0 for no NAKs at all.",
        !           394: "Default is 0.",
        !           395: "" };
        !           396: #endif /* NOSERVER */
        !           397: 
        !           398: static char *hmhrmt[] = { "\
        !           399: The REMOTE command is used to send file management instructions to a",
        !           400: "remote Kermit server.  There should already be a Kermit running in server",
        !           401: "mode on the other end of the currently selected line.  Type REMOTE ? to",
        !           402: "see a list of available remote commands.  Type HELP REMOTE x to get",
        !           403: "further information about a particular remote command 'x'.",
        !           404: "" } ;
        !           405: 
        !           406: #ifndef NOSPL
        !           407: static char *ifhlp[] = { "Syntax: IF [NOT] condition command\n",
        !           408: "If the condition is (is not) true, do the command.  Only one command may",
        !           409: "be given, and it must appear on the same line as the IF.  Conditions are:\n",
        !           410: "  SUCCESS - the previous command succeeded",
        !           411: "  FAILURE - the previous command failed",
        !           412: "  DEFINED variablename or macroname - The named variable or macro is defined",
        !           413: "  NUMERIC variable or constant      - The variable or constant is numeric",
        !           414: "  EXIST filename                    - The named file exists",
        !           415: "  COUNT   - subtract one from COUNT, execute the command if the result is",
        !           416: "            greater than zero (see SET COUNT)",
        !           417: "  EQUAL s1 s2 - s1 and s2 (character strings or variables) are equal",
        !           418: "  LLT s1 s2   - s1 is lexically (alphabetically) less than s2",
        !           419: "  LGT s1 s1   - s1 is lexically (alphabetically) greater than s2",
        !           420: "  = n1 n1 - n1 and n2 (numbers or variables containing numbers) are equal",
        !           421: "  < n1 n2 - n1 is arithmetically less than n2",
        !           422: "  > n1 n2 - n1 is arithmetically greater than n2\n",
        !           423: "The IF command may be followed on the next line by an ELSE command. Example:",
        !           424: "  IF < \\%x 10 ECHO It's less",
        !           425: "  ELSE echo It's not less",
        !           426: "See also XIF.",
        !           427: "" };
        !           428: #endif /* NOSPL */
        !           429: 
        !           430: #ifndef NOSPL
        !           431: static char *ifxhlp[] = { "\
        !           432: Syntax: XIF condition { commandlist } [ ELSE { commandlist } ]\n",
        !           433: "Extended IF command.  The conditions are the same as for IF (type HELP IF)",
        !           434: "but multiple comma-separated commands may be grouped within braces in both", 
        !           435: "the IF and ELSE parts.  The ELSE part, if any, must be on the same line as",
        !           436: "the XIF (or use dash for line continuation).  Example:\n",
        !           437: "  XIF equal \\%a YES { echo OK, goto begin } ELSE { echo Not OK, stop }",
        !           438: "" };
        !           439: #endif /* NOSPL */
        !           440: 
        !           441: #ifndef NOSPL
        !           442: static char *forhlp[] = { "\
        !           443: Syntax: FOR variablename initial-value final-value increment { commandlist }",
        !           444: "\nFOR loop.  Execute the comma-separated commands in the commandlist the",
        !           445: "number of times given by the initial value, final value and increment.",
        !           446: "Example:  FOR \\%i 10 1 -1 { pause 1, echo \\%i }", "" };
        !           447: 
        !           448: static char *whihlp[] = { "\
        !           449: Syntax: WHILE condition { commandlist }\n",
        !           450: "\nWHILE loop.  Execute the comma-separated commands in the commandlist while",
        !           451: "the condition is true.  Conditions are the same as for IF commands.\n", "" };
        !           452: #endif /* NOSPL */
        !           453: 
        !           454: #ifndef NOSPL
        !           455: static char *openhlp[] = {
        !           456: "Syntax:  OPEN mode filename\n",
        !           457: "For use with READ and WRITE commands.  Open the local file in the specified",
        !           458: "mode: READ, WRITE, or APPEND.  !READ and !WRITE mean to read from or write",
        !           459: "to a system command rather than a file.  Examples:\n",
        !           460: "  OPEN READ oofa.txt",
        !           461: "  OPEN !READ sort foo.bar",
        !           462: "" };
        !           463: #endif /* NOSPL */
        !           464: 
        !           465: #ifndef NOSPL
        !           466: static char *hxxaskq[] = {
        !           467: "Syntax:  ASKQ variablename prompt",
        !           468: "Example: ASKQ %p Password:\n",
        !           469: "Issues the prompt and defines the variable to be whatever you type in.",
        !           470: "The characters that you type do not echo on the screen.", "" };
        !           471: #endif /* NOSPL */
        !           472: 
        !           473: #ifndef NOSPL
        !           474: static char *hxxdef[] = {
        !           475: "Syntax: DEFINE name [ definition ]\n",
        !           476: "Defines a macro or variable.  Its value is the definition, taken literally.",
        !           477: "No expansion or evaluation of the definition is done.  Thus if the", 
        !           478: "definition includes any variable or function references, their names are",
        !           479: "included, rather than their values (compare with ASSIGN).  If the definition",
        !           480: "is omitted, then the named variable or macro is undefined.\n",
        !           481: "A typical macro definition looks like this:\n",
        !           482: "  DEFINE name command, command, command, ...\n",
        !           483: "for example:\n",
        !           484: "  DEFINE vax set parity even, set duplex full, set flow xon/xoff\n",
        !           485: "which defines a Kermit command macro called 'vax'.  The definition is a",
        !           486: "comma-separated list of Kermit commands.  Use the DO command to execute",
        !           487: "the macro, or just type its name, followed optionally by arguments.\n",
        !           488: "The definition of a variable can be anything at all, for example:\n",
        !           489: "  DEFINE \\%a Monday",
        !           490: "  DEFINE \\%b 3\n",
        !           491: "These variables can be used almost anywhere, for example:\n",
        !           492: "  ECHO Today is \\%a",
        !           493: "  SET BLOCK-CHECK \\%b",
        !           494: "" };
        !           495: #endif /* NOSPL */
        !           496: 
        !           497: #ifndef NOSPL
        !           498: static char *hxxass[] = {
        !           499: "Syntax:  ASSIGN variablename string.",
        !           500: "Example: ASSIGN \\%a My name is \\%b.\n",
        !           501: "Assigns the current value of the string to the variable (or macro).",
        !           502: "The definition string is fully evaluated before it is assigned, so that",
        !           503: "the values of any variables are contained are used, rather than their",
        !           504: "names.  Compare with DEFINE.  To illustrate the difference, try this:\n",
        !           505: "  DEFINE \\%a hello",
        !           506: "  DEFINE \\%x \\%a",
        !           507: "  ASSIGN \\%y \\%a",
        !           508: "  DEFINE \\%a goodbye",
        !           509: "  ECHO \\%x \\%y\n",
        !           510: "This will print 'goodbye hello'.", "" };
        !           511: #endif /* NOSPL */
        !           512: 
        !           513: #ifndef NOSPL
        !           514: static char *hxxdec[] = {
        !           515: "Syntax: DECREMENT variablename [ number ]\n",
        !           516: "Decrement (subtract one from) the value of a variable if the current value",
        !           517: "is numeric.  If the number argument is given, subtract that number instead.",
        !           518: "\nExamples: DECR \\%a, DECR \\%a 7, DECR \\%a \\%n", "" };
        !           519: #endif /* NOSPL */
        !           520: 
        !           521: #ifndef NOSPL
        !           522: static char *hxxinc[] = {
        !           523: "Syntax: INCREMENT variablename [ number ]\n",
        !           524: "Increment (add one to) the value of a variable if the current value is",
        !           525: "numeric.  If the number argument is given, add that number instead.\n",
        !           526: "Examples: INCR \\%a, INCR \\%a 7, INCR \\%a \\%n", "" };
        !           527: #endif /* NOSPL */
        !           528: 
        !           529: #ifdef SUNX25
        !           530: static char *hxxpad[] = {
        !           531: "Syntax: PAD command",
        !           532: "Execute a PAD command. Examples:\n",
        !           533: "    PAD clear - clear the virtual call",
        !           534: "    PAD status - return the status of virtual call",
        !           535: "    PAD reset - send a reset packet",
        !           536: "    PAD interrupt - send an interrupt packet", ""};
        !           537: 
        !           538: static char *hxyx25[] = {
        !           539: "Syntax: SET X.25 call-option on [index,string]/off\n",
        !           540: "Set X.25 call option.  Options are:",
        !           541: "  closed-user-group on index/off - to enable/disable closed user group call,",
        !           542: "    where index is the group index and can range from 0 to 99",
        !           543: "  reverse-charge on/off - to enable/disable reverse charge call",
        !           544: "  call-user-data on string/off - to specify call user data in X.25 call.",
        !           545: ""};
        !           546: #endif /* SUNX25 */
        !           547: 
        !           548: static char *hxxpau[] = {
        !           549: "Syntax:  PAUSE [ number ]",
        !           550: "Example: PAUSE 3\n",
        !           551: "Do nothing for the specified number of seconds; if no number given, one",
        !           552: "second.  If interrupted from the keyboard, set FAILURE, otherwise SUCCESS.",
        !           553: "" };
        !           554: 
        !           555: #ifndef NOPUSH
        !           556: static char *hxxshe[] = {
        !           557: "Syntax: ! [ command ] or RUN [ command ] or PUSH [ command ]\n",
        !           558: "Give a command to the local operating system's command processor, and",
        !           559: "display the results on the screen.\n",
        !           560: "If the command is omitted, enter interactive mode; return to Kermit",
        !           561: "by exiting from the system's command parser.  The command is usually",
        !           562: "EXIT or QUIT or LOGOUT.",  "" };
        !           563: #endif /* NOPUSH */
        !           564: 
        !           565: #ifndef NOXMIT
        !           566: static char *hxxxmit[] = {
        !           567: "Syntax: TRANSMIT file\n",
        !           568: "The TRANSMIT command is used for sending single files to other computers",
        !           569: "that don't have Kermit.  Text files are sent a line at a time; binary files",
        !           570: "are sent a character at a time.  There is no guarantee that the other",
        !           571: "computer will receive the file correctly and completely.  Before you start",
        !           572: "the TRANSMIT command, you must put the other computer in data collection",
        !           573: "mode, for example by starting a text editor.  TRANSMIT may be interrupted by",
        !           574: "Ctrl-C.  Synonym: XMIT.",
        !           575: "" };
        !           576: #endif /* NOXMIT */
        !           577: 
        !           578: #ifndef NOCSETS
        !           579: static char *hxxxla[] = {
        !           580: "Syntax: TRANSLATE file1 cs1 cs2 [ file2 ]\n",
        !           581: "Translates file1 from the character set cs1 into the character set cs2",
        !           582: "and stores the result in file2.  The character sets can be any of",
        !           583: "C-Kermit's file character sets.  If file2 is omitted, the translation",
        !           584: "is displayed on the screen.  Uses Latin-1 as intermediate character set",
        !           585: "unless LANGUAGE is set to RUSSIAN, in which case it uses Latin-Cyrillic.",
        !           586: "Synonym: XLATE.  Example:\n",
        !           587: "TRANSLATE lasagna.lat latin1 italian lasagna.nrc",
        !           588: "" };
        !           589: #endif /* NOCSETS */
        !           590: 
        !           591: #ifndef NOSPL
        !           592: static char *hxxwai[] = {
        !           593: "Syntax:  WAIT number [modem-signal(s)]",
        !           594: "Example: WAIT 5 \\cd\\cts\n",
        !           595: "Waits up to the given number of seconds for all of the specified signals.",
        !           596: "Sets FAILURE if signals do not appear in given time or if interrupted by",
        !           597: "typing anything at the keyboard during the waiting period.\n",
        !           598: "Signals: \\cd = Carrier Detect, \\dsr = Dataset Ready, \\cts = Clear To Send",
        !           599: "Warning: This command does not work yet, signals are ignored.", "" };
        !           600: #endif /* NOSPL */
        !           601: 
        !           602: static char *hxxwri[] = {
        !           603: "Syntax: WRITE name text\n",
        !           604: "Writes the given text to the named log or file.  The text text may include",
        !           605: "backslash codes, and is not terminated by a newline unless you include the",
        !           606: "appropriate code.  The name parameter can be any of the following:\n",
        !           607: "  DEBUG-LOG",
        !           608: #ifndef NOSPL
        !           609: "  FILE (the OPEN WRITE, OPEN !WRITE, or OPEN APPEND file, see HELP OPEN)",
        !           610: #endif /* NOSPL */
        !           611: "  PACKET-LOG",
        !           612: "  SCREEN (compare with ECHO)",
        !           613: "  SESSION-LOG",
        !           614: "  TRANSACTION-LOG", "" };
        !           615: 
        !           616: #ifndef NODIAL
        !           617: static char *hxxdial[] = { "Syntax:  DIAL phonenumber",
        !           618: "Example: DIAL 7654321\n",
        !           619: "Dial a number using a modem autodialer.  First you must SET MODEM, then",
        !           620: "SET LINE and SET SPEED.  Then give the DIAL command, including the phone",
        !           621: "number.  See also SET DIAL, SET MODEM, SET LINE, SET SPEED, REDIAL.", "" };
        !           622: #endif /* NODIAL */
        !           623: 
        !           624: #endif /* NOHELP */
        !           625: 
        !           626: /*  D O H L P  --  Give a help message  */
        !           627:  
        !           628: _PROTOTYP( int dohset, (int) );
        !           629: 
        !           630: int
        !           631: dohlp(xx) int xx; {
        !           632:     int x,y;
        !           633:  
        !           634:     if (xx < 0) return(xx);
        !           635:     switch (xx) {
        !           636:  
        !           637: #ifdef NOHELP
        !           638: 
        !           639: case XXHLP:
        !           640:     if ((x = cmcfm()) < 0) return(x);
        !           641:     printf("%s, Copyright (C) 1985, 1992,\n",versio);
        !           642:     for ( x = 0; *tophlp[x] ; x++ )    /* Print lines */
        !           643:       printf("%s\n",tophlp[x]);
        !           644:     printf("\n");                      /* End with blank line */
        !           645:     return(1);
        !           646:  
        !           647: #else /* help is available */
        !           648: 
        !           649: #ifndef NOSPL
        !           650: case XXASS:                            /* assign */
        !           651:     return(hmsga(hxxass));
        !           652: 
        !           653: case XXASK:                            /* ask */
        !           654:     return(hmsg("\
        !           655: Syntax:  ASK variablename prompt\n\
        !           656: Example: ASK \\%n What is your name\\63\\32\n\n\
        !           657: Issues the prompt and defines the variable to be whatever you type in."));
        !           658: 
        !           659: case XXASKQ:
        !           660:     return(hmsga(hxxaskq));
        !           661: #endif /* NOSPL */
        !           662: 
        !           663: #ifndef NOFRILLS
        !           664: case XXBUG:
        !           665:     return(hmsg("Describe how to report C-Kermit bugs."));
        !           666: #endif /* NOFRILLS */
        !           667: 
        !           668: case XXBYE:                            /* bye */
        !           669:     return(hmsg(hmxxbye));
        !           670:  
        !           671: #ifndef NOFRILLS
        !           672: case XXCLE:                            /* clear */
        !           673:     return(hmsg("\
        !           674: Syntax: CLEAR\n\
        !           675: Clear the serial port input buffer."));
        !           676: #endif /* NOFRILLS */
        !           677: 
        !           678: case XXCLO:                            /* close */
        !           679:     return(hmsga(hmxxclo));
        !           680:  
        !           681: case XXCOM:                            /* comment */
        !           682:     return(hmsg("\
        !           683: Syntax: COMMENT text\n\
        !           684: Example: COMMENT - this is a comment.\n\n\
        !           685: Introduce a comment.  Beginning of command line only.  Commands may also\n\
        !           686: have trailing comments, introduced by ; (semicolon)."));
        !           687: 
        !           688: case XXCON:                            /* connect */
        !           689:     return(hmsg(hmxxcon));
        !           690:  
        !           691: case XXCWD:                            /* cd / cwd */
        !           692: #ifdef vms
        !           693:     return(hmsg("Syntax: CD [ directory or device:directory ]\n\
        !           694: Change Working Directory, equivalent to VMS SET DEFAULT command"));
        !           695: #else
        !           696: #ifdef datageneral
        !           697:     return(hmsg("Change Working Directory, equivalent to DG 'dir' command"));
        !           698: #else
        !           699: #ifdef OS2
        !           700:   return(hmsg("Change Working Directory, equivalent to OS/2 'chdir' command"));
        !           701: #else
        !           702:     return(hmsg("Syntax: CD [ directoryname ]\n\n\
        !           703: Change Working Directory, equivalent to UNIX cd command."));
        !           704: #endif /* OS2 */
        !           705: #endif /* datageneral */
        !           706: #endif /* vms */
        !           707:  
        !           708: #ifndef NOSPL
        !           709: case XXDCL:
        !           710:     return(hmsg("Syntax:  DECLARE arrayname[size]\n\
        !           711: Example: DECLARE \\&a[20]\n\n\
        !           712: Declares an array of the given size.  Array elements can be used just like\n\
        !           713: any other variables."));
        !           714: 
        !           715: case XXDEF:                            /* define */
        !           716:     return(hmsga(hxxdef));
        !           717: #endif /* NOSPL */
        !           718: 
        !           719: #ifndef NOFRILLS
        !           720: case XXDEL:                            /* delete */
        !           721:     return(hmsg("Syntax: DELETE filespec\n\n\
        !           722: Delete a local file or files.  RM is a synonym for DELETE."));
        !           723: #endif /* NOFRILLS */
        !           724:  
        !           725: #ifndef NODIAL
        !           726: case XXDIAL:                           /* dial */
        !           727:     return(hmsga(hxxdial));
        !           728: #endif
        !           729:  
        !           730: case XXDIR:                            /* directory */
        !           731:     return(hmsg("Syntax: DIRECTORY [ filespec ]\n\
        !           732: Display a directory listing of local files."));
        !           733:  
        !           734: #ifndef NOSERVER
        !           735: #ifndef NOFRILLS
        !           736: case XXDIS:
        !           737:     return(hmsg("Syntax: DISABLE command\n\n\
        !           738: Security for the C-Kermit server.  Prevent the client Kermit program from\n\
        !           739: executing the named REMOTE command, such as CD, DELETE, RECEIVE, etc."));
        !           740: #endif /* NOFRILLS */
        !           741: #endif /* NOSERVER */
        !           742: 
        !           743: #ifndef NOSPL
        !           744: case XXDO:                             /* do */
        !           745:     return(hmsg("Syntax: [ DO ] macroname [ arguments ]\n\n\
        !           746: Execute a macro that was defined by the DEFINE command.  The word DO\n\
        !           747: can be omitted.  Trailing argument words, if any, are automatically\n\
        !           748: assigned to the macro argument variables \\%1, \\%2, etc."));
        !           749: #endif /* NOSPL */
        !           750: 
        !           751: #ifndef NOSPL
        !           752: case XXDEC:
        !           753:     return(hmsga(hxxdec));
        !           754: #endif /* NOSPL */
        !           755: 
        !           756: case XXECH:                            /* echo */
        !           757:     return(hmsg("Syntax: ECHO text\n\
        !           758: Display the text on the screen, followed by a newline.  The ECHO text may\n\
        !           759: contain backslash codes.  Example: ECHO \\7Wake up!\\7")); 
        !           760:  
        !           761: #ifndef NOSERVER
        !           762: #ifndef NOFRILLS
        !           763: case XXENA:
        !           764:     return(hmsg("Syntax: ENABLE capability\n\n\
        !           765: For use with server mode.  Allow the client Kermit program access to the\n\
        !           766: named capability, such as CD, DELETE, RECEIVE, etc.  Opposite of DISABLE."));
        !           767: #endif /* NOFRILLS */
        !           768: #endif /* NOSERVER */
        !           769: 
        !           770: #ifndef NOSPL
        !           771: case XXEND:                            /* end */
        !           772:     return(hmsg("Syntax: END\n\
        !           773: Exit from the current macro or TAKE file, back to wherever invoked from."));
        !           774: #endif /* NOSPL */
        !           775: 
        !           776: #ifndef NOFRILLS
        !           777: case XXERR:                            /* error */
        !           778:     return(hmsg("Syntax: ERROR\n\
        !           779: Send an Error packet to the other Kermit."));
        !           780: #endif /* NOFRILLS */
        !           781: 
        !           782: case XXEXI:                            /* exit */
        !           783: case XXQUI:
        !           784:     return(hmsg("Syntax: QUIT (or EXIT)\n\
        !           785: Exit from the Kermit program, closing all open files and devices."));
        !           786:  
        !           787: case XXFIN:
        !           788:     return(hmsg("Syntax: FINISH\n\
        !           789: Tell the remote Kermit server to shut down without logging out."));
        !           790:  
        !           791: #ifndef NOSPL
        !           792: case XXFOR:
        !           793:     return(hmsga(forhlp));
        !           794: #endif /* NOSPL */
        !           795: 
        !           796: case XXGET:
        !           797:     return(hmsg(hmxxget));
        !           798:  
        !           799: #ifndef NOSPL
        !           800: #ifndef NOFRILLS
        !           801:   case XXGOK:
        !           802:     return(hmsg("Syntax: GETOK prompt\n\
        !           803: Print the prompt, make user type 'yes', 'no', or 'ok', and set SUCCESS or\n\
        !           804: FAILURE accordingly."));
        !           805: #endif /* NOFRILLS */
        !           806: #endif /* NOSPL */
        !           807: 
        !           808: #ifndef NOSPL
        !           809: case XXGOTO:
        !           810:     return(hmsg("Syntax: GOTO label\n\
        !           811: In a TAKE file or macro, go to the given label.  A label is a word on the\n\
        !           812: left margin that starts with a colon (:).  Example:\n\n\
        !           813: :oofa\n\
        !           814: echo Hello!\n\
        !           815: goto oofa"));
        !           816: #endif /* NOSPL */
        !           817: 
        !           818: case XXHAN:
        !           819:     return(hmsg("Syntax: HANGUP\n\
        !           820: Hang up the phone or network connection."));    
        !           821: 
        !           822: case XXHLP:
        !           823:     printf("%s, Copyright (C) 1985, 1992,",versio);
        !           824:     return(hmsga(tophlp));
        !           825: 
        !           826: #ifndef NOSPL
        !           827: case XXIF:
        !           828:     return(hmsga(ifhlp));
        !           829: 
        !           830: case XXINC:
        !           831:     return(hmsga(hxxinc));
        !           832: 
        !           833: case XXINP:
        !           834:    return(hmsg("\
        !           835: Syntax:  INPUT n text\n\
        !           836: Example: INPUT 5 Login:\n\n\
        !           837: Wait up to n seconds for the given text to arrive on the communication line.\n\
        !           838: For use in script programs with IF FAILURE and IF SUCCESS."));
        !           839: #endif /* NOSPL */
        !           840: 
        !           841: #ifndef NODIAL
        !           842: case XXRED:
        !           843:     return(hmsg("Redial the number given in the most recent DIAL commnd."));
        !           844: #endif /* NODIAL */
        !           845: 
        !           846: #ifndef NOSPL
        !           847: case XXREI:
        !           848:     return(hmsg("Syntax: REINPUT n string\n\n\
        !           849: Look for the string in the text that has recently been INPUT, set SUCCESS\n\
        !           850: or FAILURE accordingly.  Timeout, n, must be specified but is ignored."));
        !           851: #endif /* NOSPL */
        !           852: 
        !           853: #ifndef NOFRILLS
        !           854: case XXREN:
        !           855:     return(hmsg("Syntax: RENAME oldname newname\n\n\
        !           856: Change the name of file 'oldname' to 'newname'."));
        !           857: #endif /* NOFRILLS */
        !           858: 
        !           859: #ifndef NOSPL
        !           860: case XXLBL:
        !           861:     return(hmsg("\
        !           862: Introduce a label, like :loop, for use with GOTO in TAKE files or macros.\n\
        !           863: See GOTO."));
        !           864: #endif /* NOSPL */
        !           865: 
        !           866: case XXLOG:
        !           867:     return(hmsga(hmxxlg));
        !           868:  
        !           869: #ifndef NOSCRIPT
        !           870: case XXLOGI:
        !           871:     return(hmsga(hmxxlogi));
        !           872: #endif
        !           873:  
        !           874: #ifndef NOFRILLS
        !           875: case XXMAI:
        !           876:     return(hmsg("Syntax: MAIL filename address\n\n\
        !           877: Send the file to the remote Kermit, which must be in RECEIVE or SERVER mode,\n\
        !           878: and request that the remote host deliver the file as electronic mail to the\n\
        !           879: given address.  Example: MAIL BUG.TXT KERMIT@CUVMA"));
        !           880: #endif /* NOFRILLS */
        !           881: 
        !           882: #ifndef NOMSEND
        !           883: case XXMSE:
        !           884:     return(hmsg(hmssmse));
        !           885: #endif /* NOMSEND */
        !           886: 
        !           887: #ifndef NOSPL
        !           888: case XXOPE:
        !           889:     return(hmsga(openhlp));
        !           890: #endif /* NOSPL */
        !           891: 
        !           892: #ifndef NOSPL
        !           893: case XXOUT:
        !           894:     return(hmsg("Syntax: OUTPUT text\n\n\
        !           895: Send the text out the currently selected line, as if you had typed it\n\
        !           896: during CONNECT mode.  The text may contain backslash codes.  Example:\n\n\
        !           897:   OUTPUT help\\13"));
        !           898: #endif /* NOSPL */
        !           899: 
        !           900: #ifdef SUNX25
        !           901: case XXPAD:
        !           902:     return(hmsga(hxxpad));
        !           903: #endif /* SUNX25 */
        !           904: 
        !           905: #ifndef NOSPL
        !           906: case XXPAU:
        !           907:     return(hmsga(hxxpau));
        !           908: #endif /* NOSPL */
        !           909: 
        !           910: #ifndef NOFRILLS
        !           911: case XXPRI:
        !           912:     return(hmsg("Syntax: PRINT file [ options ]\n\n\
        !           913: Print the local file on a local printer with the given options."));
        !           914: #endif /* NOFRILLS */
        !           915: 
        !           916: case XXPWD:
        !           917:     return(hmsg("Syntax: PWD\n\
        !           918: Print the name of the current working directory."));
        !           919: 
        !           920: #ifndef NOSPL
        !           921: case XXREA:
        !           922:     return(hmsg("Syntax: READ variablename\n\
        !           923: Read a line from the currently open READ or !READ file into the variable\n\
        !           924: (see OPEN)."));
        !           925: #endif /* NOSPL */
        !           926: 
        !           927: case XXREC:
        !           928:     return(hmsga(hmxxrc));
        !           929:  
        !           930: case XXREM:
        !           931:     if ((y = cmkey(remcmd,nrmt,"Remote command","",xxstring)) == -2) return(y);
        !           932:     if (y == -1) return(y);
        !           933:     if ((x = cmcfm()) < 0) return(x);
        !           934:     return(dohrmt(y));
        !           935:  
        !           936: #ifndef NOSPL
        !           937: case XXRET:
        !           938:     return(hmsg("Syntax: RETURN [ value ]\n\
        !           939: Return from a macro.  An optional return value can be given for use with\n\
        !           940: with \\fexecute(macro), which allows macros to be used like functions."));
        !           941: case XXSEN:
        !           942:     return(hmsg(hmxxsen));
        !           943: #endif /* NOSPL */
        !           944:  
        !           945: #ifndef NOSERVER
        !           946: case XXSER:
        !           947:     return(hmsg(hmxxser));
        !           948: #endif /* NOSERVER */
        !           949:  
        !           950: #ifndef NOJC
        !           951: case XXSUS:
        !           952:     return(hmsg("Syntax: SUSPEND or Z\n\
        !           953: Suspend Kermit.  Continue Kermit with the appropriate system command,\n\
        !           954: such as fg."));
        !           955: #endif /* NOJC */
        !           956: 
        !           957: case XXSET:
        !           958:     y = cmkey(prmtab,nprm,"Parameter","",xxstring);
        !           959:     if (y == -3) return(dohset(y));
        !           960:     if (y < 0) return(y);
        !           961:     if ((x = cmcfm()) < 0) return(x);
        !           962:     return(dohset(y));
        !           963:  
        !           964: #ifndef NOPUSH
        !           965: case XXSHE:
        !           966:     return(hmsga(hxxshe));
        !           967: #endif /* NOPUSH */
        !           968:  
        !           969: #ifndef NOSHOW
        !           970: case XXSHO:
        !           971:     return(hmsg("\
        !           972: Display current values of various items (SET parameters, variables, etc).\n\
        !           973: Type SHOW ? for a list of categories."));
        !           974: #endif /* NOSHOW */
        !           975:  
        !           976: case XXSPA:
        !           977: #ifdef datageneral
        !           978:     return(hmsg("\
        !           979: Display disk usage in current device, directory,\n\
        !           980: or return space for a specified device, directory."));
        !           981: #else
        !           982:     return(hmsg("Syntax: SPACE\n\
        !           983: Display disk usage in current device and/or directory"));
        !           984: #endif
        !           985:  
        !           986: case XXSTA:
        !           987:     return(hmsg("Syntax: STATISTICS\n\
        !           988: Display statistics about most recent file transfer"));
        !           989:  
        !           990: #ifndef NOSPL
        !           991: case XXSTO:
        !           992:     return(hmsg("Syntax: STOP\n\
        !           993: Stop executing the current macro or TAKE file and return immediately\n\
        !           994: to the C-Kermit prompt."));
        !           995: #endif /* NOSPL */
        !           996: 
        !           997: case XXTAK:
        !           998:     return(hmsg("Syntax: TAKE filename\n\
        !           999: Take Kermit commands from the named file.  Kermit command files may\n\
        !          1000: themselves contain TAKE commands, up to a reasonable depth of nesting."));
        !          1001:  
        !          1002: #ifdef NETCONN
        !          1003: case XXTEL:
        !          1004:     return(hmsg("Syntax: TELNET [ host ]\n\
        !          1005: Equivalent to SET HOST host, followed by CONNECT.  If hostname omitted,\n\
        !          1006: previous connection (if any) is resumed."));
        !          1007: #endif /* NETCONN */
        !          1008: 
        !          1009: 
        !          1010: #ifndef NOXMIT
        !          1011: case XXTRA:
        !          1012:     return(hmsga(hxxxmit));
        !          1013: #endif /* NOXMIT */
        !          1014: 
        !          1015: #ifndef NOFRILLS
        !          1016: case XXTYP:
        !          1017:     return(hmsg("Syntax: TYPE file\n\
        !          1018: Display a file on the screen.  Pauses if you type Ctrl-S, resumes if you\n\
        !          1019: type Ctrl-Q, returns immediately to C-Kermit prompt if you type Ctrl-C."
        !          1020: ));
        !          1021: #endif /* NOFRILLS */
        !          1022: 
        !          1023: #ifndef NOSPL
        !          1024: case XXWHI:
        !          1025:     return(hmsga(whihlp));
        !          1026: #endif /* NOSPL */
        !          1027: 
        !          1028: #ifndef NOCSETS
        !          1029: case XXXLA:
        !          1030:     return(hmsga(hxxxla));
        !          1031: #endif /* NOCSETS */
        !          1032: 
        !          1033: case XXVER:
        !          1034:     return(hmsg("Syntax: VERSION\nDisplays the program version number."));
        !          1035: 
        !          1036: #ifndef NOSPL
        !          1037: case XXWAI:
        !          1038:     return(hmsga(hxxwai));
        !          1039: #endif /* NOSPL */
        !          1040: 
        !          1041: #ifndef NOFRILLS
        !          1042: case XXWHO:
        !          1043:     return(hmsg("Syntax: WHO [ user ]\nDisplays info about the user."));
        !          1044: 
        !          1045: case XXWRI:
        !          1046:     return(hmsga(hxxwri));
        !          1047: #endif /* NOFRILLS */
        !          1048: 
        !          1049: #ifndef NOSPL
        !          1050: case XXIFX:
        !          1051:     return(hmsga(ifxhlp));
        !          1052: #endif /* NOSPL */
        !          1053: 
        !          1054: #endif /* NOHELP */
        !          1055: 
        !          1056: default:
        !          1057:     if ((x = cmcfm()) < 0) return(x);
        !          1058:     printf("Help not available - %s\n",cmdbuf);
        !          1059:     break;
        !          1060:     }
        !          1061:     return(success = 0);
        !          1062: }
        !          1063: 
        !          1064: #ifndef NOHELP 
        !          1065: 
        !          1066: /*  H M S G  --  Get confirmation, then print the given message  */
        !          1067:  
        !          1068: int
        !          1069: hmsg(s) char *s; {
        !          1070:     int x;
        !          1071:     if ((x = cmcfm()) < 0) return(x);
        !          1072:     printf("\n%s\n\n",s);
        !          1073:     return(0);
        !          1074: }
        !          1075:  
        !          1076: int
        !          1077: hmsga(s) char *s[]; {                  /* Same function, but for arrays */
        !          1078:     int x, y, i, j, k, n;
        !          1079:     if ((x = cmcfm()) < 0) return(x);
        !          1080: 
        !          1081:     printf("\n");                      /* Start off with a blank line */
        !          1082:     n = 1;                             /* Line counter */
        !          1083:     for (i = 0; *s[i]; i++) {
        !          1084:        printf("%s\n",s[i]);            /* Print a line. */
        !          1085:         y = (int)strlen(s[i]);
        !          1086:         k = 1;
        !          1087:         for (j = 0; j < y; j++)                /* See how many newlines were */
        !          1088:           if (s[i][j] == '\n') k++;    /* in the string... */
        !          1089:         n += k;
        !          1090:        if (n > 21)                     /* After a screenful, give them */
        !          1091:           if (!askmore()) return(-9);
        !          1092:           else n = 0;
        !          1093:     }
        !          1094:     printf("\n");
        !          1095:     return(0);
        !          1096: }
        !          1097: 
        !          1098: #ifndef NOXMIT
        !          1099: static char *hsetxmit[] = {
        !          1100: "Syntax: SET TRANSMIT parameter value\n",
        !          1101: "Controls the behavior of the TRANSMIT command, used for uploading files",
        !          1102: "to computers that don't have Kermit programs.  Parameters are:\n",
        !          1103: "ECHO ON/OFF:     Whether to echo text as it is being transmitted.",
        !          1104: "EOF text:        Text to send after end of file is reached.",
        !          1105: "FILL number:     ASCII value of character to insert into blank lines.",
        !          1106: "LINEFEED ON/OFF: Transmit LF as well as CR at the end of each line.",
        !          1107: "                 Normally, only CR is sent.",
        !          1108: "LOCKING-SHIFT ON/OFF: Whether to use SO/SI for transmitting 8-bit data",
        !          1109: "                 when PARITY is not NONE.",
        !          1110: "PAUSE number:    How many milliseconds to pause after transmitting each line",
        !          1111: "                 (text mode), or each character (binary mode).",
        !          1112: "PROMPT number:   ASCII value of character to look for from host before",
        !          1113: "                 sending next line, normally LF (10).",
        !          1114: "Synonym: SET XMIT.",
        !          1115: "" };
        !          1116: #endif /* NOXMIT */
        !          1117: 
        !          1118: static char *hsetbkg[] = {
        !          1119: "Syntax: SET BACKGROUND { OFF, ON }\n",
        !          1120: "SET BACKGROUND OFF forces prompts and messages to appear on your screen",
        !          1121: "even though Kermit thinks it is running in the background.", "" };
        !          1122: 
        !          1123: #ifdef DYNAMIC
        !          1124: static char *hsetbuf[] = {
        !          1125: "Syntax: SET BUFFERS n1 n2\n",
        !          1126: "Change the overall amount of memory allocated for SEND and RECEIVE packet",
        !          1127: "buffers, respectively.  Bigger numbers let you have longer packets and more",
        !          1128: "window slots", "" };
        !          1129: #endif /* DYNAMIC */
        !          1130: 
        !          1131: static char *hsetcmd[] = {
        !          1132: "Syntax: SET COMMAND BYTESIZE { 7, 8 }\n",
        !          1133: "SET COMMAND BYTE 8 allows you to use an 8-bit (international) character set",
        !          1134: "in the commands you type at the C-Kermit> prompt.  7 is the default.", "" };
        !          1135: 
        !          1136: static char *hsetcar[] = {
        !          1137: "Syntax: SET CARRIER ON, AUTO, or OFF\n",
        !          1138: "Attempts to control treatment of carrier on the communication device.",
        !          1139: "ON means that carrier is required at all times except during the DIAL",
        !          1140: "command.  OFF means that carrier is never required.  AUTO (the default)",
        !          1141: "means that carrier is required only during CONNECT.", "" };
        !          1142: 
        !          1143: static char *hsetat[] = {
        !          1144: "Syntax: SET ATTRIBUTES name ON or OFF\n",
        !          1145: "Use this command to enable (ON) or disable (OFF) the transmission of",
        !          1146: "selected file attributes along with each file, and to handle or ignore",
        !          1147: "selected incoming file attributes, including:\n",
        !          1148: "  CHARACTER-SET:  The transfer character set for text files",
        !          1149: "  DATE:           The file's creation date",
        !          1150: "  DISPOSITION:    Unusual things to do with the file, like MAIL or PRINT",
        !          1151: "  LENGTH:         The file's length",
        !          1152: "  SYSTEM-ID:      Machine/Operating system of origin",
        !          1153: "  TYPE:           The file's type (text or binary)\n",
        !          1154: "You can also specify ALL to select all of them.  Examples:\n",
        !          1155: "  SET ATTR DATE OFF\n  SET ATTR SIZE ON\n  SET ATTR ALL OFF", ""
        !          1156: };
        !          1157: 
        !          1158: #ifndef NOSPL
        !          1159: static char *hxxinp[] = {
        !          1160: "Syntax: SET INPUT parameter value\n",
        !          1161: "The SET INPUT command controls the behavior of the INPUT command:\n",
        !          1162: "SET INPUT CASE { IGNORE, OBSERVE }",
        !          1163: "Tells whether alphabetic case is to be significant in string comparisons.\n",
        !          1164: "SET INPUT DEFAULT-TIMEOUT secs",
        !          1165: "Establishes default timeout for INPUT commands.  Currently has no effect.\n",
        !          1166: "SET INPUT ECHO { ON, OFF }",
        !          1167: "Tells whether to display arriving characters read by INPUT on the screen.\n",
        !          1168: "SET INPUT TIMEOUT-ACTION { PROCEED, QUIT }",
        !          1169: "Tells whether to proceed or quit from a script program if an INPUT command",
        !          1170: "fails.  PROCEED (default) allows use of IF SUCCESS and IF FAILURE commands.",
        !          1171: "" };
        !          1172: #endif /* NOSPL */
        !          1173: 
        !          1174: static char *hxytak[] = {
        !          1175: "Syntax: SET TAKE parameter value\n",
        !          1176: "Controls behavior of TAKE command.\n",
        !          1177: "SET TAKE ECHO { ON, OFF } tells whether commands read from a TAKE file",
        !          1178: "should be displayed on the screen.\n",
        !          1179: "SET TAKE ERROR { ON, OFF } tells whether a TAKE command file should be",
        !          1180: "automatically terminated when a command fails.", "" };
        !          1181: 
        !          1182: static char *hxyterm[] = {
        !          1183: "Syntax: SET TERMINAL parameter value\n",
        !          1184: "SET TERMINAL BYTESIZE 7 or 8, to use 7- or 8-bit terminal characters",
        !          1185: "between C-Kermit and the remote host during CONNECT.\n",
        !          1186: "SET TERMINAL CHARACTER-SET <remote-cs> [ <local-cs> ] to specify the",
        !          1187: "character set used by the remote host, <remote-cs>, and the character",
        !          1188: "set used by C-Kermit locally, <local-cs>.  If you don't specify the",
        !          1189: "local character set, the current FILE CHARACTER-SET is used.  When you",
        !          1190: "specify two different character sets, C-Kermit translates between them",
        !          1191: "during CONNECT.  By default, both character sets are ASCII.\n",
        !          1192: #ifdef OS2PM
        !          1193: "SET TERMINAL VT100 or TEK4014, to set terminal emulation mode.",
        !          1194: #endif /* OS2 */
        !          1195: #ifdef OS2
        !          1196: "SET TERMINAL COLOR <screenpart> <foreground> <background>, to set",
        !          1197: "the colors of the terminal emulation screen. <screenpart> may be one",
        !          1198: "of NORMAL, REVERSE, UNDERLINED, STATUS and HELP. <foreground> and",
        !          1199: "<background> may be one of BLACK, BLUE, GREEN, CYAN, RED, MAGENTA,",
        !          1200: "BROWN, LGRAY, DGRAY, LBLUE, LGREEN, LCYAN, LRED, LMAGENTA, YELLOW",
        !          1201: "or WHITE.  The L prefix for the color names means Light.\n",
        !          1202: #endif /* OS2 */
        !          1203: "SET TERMINAL LOCKING-SHIFT { OFF, ON } tells C-Kermit whether to use",
        !          1204: "Shift-In/Shift-Out (Ctrl-O and Ctrl-N) to switch between 7-bit and 8-bit",
        !          1205: "characters during CONNECT.  OFF by default.\n",
        !          1206: "SET TERMINAL NEWLINE-MODE { OFF, ON } tells whether to send CRLF when you",
        !          1207: "type CR during CONNECT mode.\n",
        !          1208: "Type SHOW TERMINAL to see current terminal settings.",
        !          1209: "" };
        !          1210: 
        !          1211: #ifdef NETCONN
        !          1212: static char *hxyhost[] = {
        !          1213: "Syntax:  SET HOST hostname-or-number\n",
        !          1214: "Select a network host.  Use this command instead of SET LINE.",
        !          1215: "After SET HOST give the host name or number.  TCP/IP Examples:\n",
        !          1216: "  SET HOST watsun.cc.columbia.edu",
        !          1217: "  SET HOST 128.59.39.2",
        !          1218: "" };
        !          1219: 
        !          1220: static char *hxynet[] = {
        !          1221: "Syntax: SET NETWORK network-type\n",
        !          1222: #ifdef SUNX25
        !          1223: "Select TCP/IP or X.25 network communication.",
        !          1224: #else
        !          1225: "Select TCP/IP network communication.",
        !          1226: #endif /* SUNX25 */
        !          1227: "After SET NETWORK give the type of network to use. Examples:\n",
        !          1228: "  SET NETWORK tcp/ip",
        !          1229: #ifdef SUNX25
        !          1230: "  SET NETWORK x.25",
        !          1231: #endif
        !          1232: ""};
        !          1233: #endif /* NETCONN */
        !          1234:  
        !          1235: #ifndef NOSPL
        !          1236: static char *hxymacr[] = {
        !          1237: "Syntax: SET MACRO parameter value\n",
        !          1238: "Controls the behavior of macros.\n",
        !          1239: "SET MACRO ECHO { ON, OFF } tells whether commands executed from a macro",
        !          1240: "definition should be displayed on the screen.\n",
        !          1241: "SET MACRO ERROR { ON, OFF } tells whether a macro should be automatically",
        !          1242: "terminated upon a command error.", "" };
        !          1243: #endif /* NOSPL */
        !          1244: 
        !          1245: static char *hxymodm[] = {
        !          1246: "Syntax: SET MODEM-DIALER name\n",
        !          1247: "Type of modem for dialing remote connections.  Indicates that modem can",
        !          1248: "be commanded to dial without Carrier Detect signal from modem, and selects",
        !          1249: "the appropriate dialing protocol to be used by the DIAL command.  Many modem",
        !          1250: "models are supported.  Type SET MODEM ? for a list.  DIRECT or NONE means",
        !          1251: "a direct connection, with no modem at all.  Also see HELP DIAL, HELP CARRIER",
        !          1252: "" };
        !          1253: 
        !          1254: static char *hmxyprm[] = {
        !          1255: "Syntax: SET PROMPT [ text ]\n",
        !          1256: "Prompt text for this program, normally 'C-Kermit>'.  May contain backslash",
        !          1257: "codes for special effects.  Surround by { } to preserve leading or trailing",
        !          1258: "spaces.  If text omitted, prompt reverts to C-Kermit>.",
        !          1259: "" };
        !          1260: 
        !          1261: static char *hxywind[] = {
        !          1262: "Syntax: SET WINDOW-SIZE number\n",
        !          1263: "Specify number of window slots for sliding windows, the number of packets",
        !          1264: "that can be transmitted before pausing for acknowledgement.  The default",
        !          1265: "is one, the maximum is 31.  Increased window size may result in reduced",
        !          1266: "maximum packet length.  Use sliding windows for improved efficiency on",
        !          1267: "connections with long delays.  A full duplex connection is required.",
        !          1268: "" };
        !          1269: 
        !          1270: static char *hxysr[] = {
        !          1271: "END-OF-PACKET number",
        !          1272: "ASCII value of control character, normally 13 (carriage return).\n",
        !          1273: "PACKET-LENGTH number",
        !          1274: "2000 or less.\n",
        !          1275: "PADDING number",
        !          1276: "number of prepacket padding characters, 94 or less (rarely used).\n",
        !          1277: "PAD-CHARACTER number",
        !          1278: "ASCII value of control character to use for padding (typically 0).\n",
        !          1279: "START-OF-PACKET number",
        !          1280: "ASCII value of control character to mark start of packet (normally 1).\n",
        !          1281: "TIMEOUT number",
        !          1282: "Number of seconds to wait for a packet before sending NAK or retransmitting",
        !          1283: "(94 seconds or less)", "" };
        !          1284: 
        !          1285: static char *hxyxfer[] = {
        !          1286: "Syntax: SET TRANSFER LOCKING-SHIFT { OFF, ON, FORCED }\n",
        !          1287: "Tell whether locking-shift protocol should be used during file transfer",
        !          1288: "to achieve 8-bit transparency on a 7-bit connection.  ON means to request",
        !          1289: "its use if PARITY is not NONE and to use it if the other Kermit agrees,",
        !          1290: "OFF means not to use it, FORCED means to use it even if the other Kermit",
        !          1291: "does not agree.",
        !          1292: #ifndef NOCSETS
        !          1293: "\nSyntax: SET TRANSFER CHARACTER-SET name\n",
        !          1294: "Select the character set used to represent textual data in Kermit packets.",
        !          1295: "Text characters are translated to/from the FILE CHARACTER-SET.",
        !          1296: "The choices are TRANSPARENT (no translation, the default), ASCII,",
        !          1297: #ifdef CYRILLIC
        !          1298: #ifdef KANJI
        !          1299: "LATIN1 (ISO Latin Alphabet 1), CYRILLIC-ISO (ISO Latin/Cyrillic),",
        !          1300: "and JAPANESE-EUC.",
        !          1301: #else
        !          1302: "LATIN1 (ISO Latin Alphabet 1), and CYRILLIC-ISO (ISO Latin/Cyrillic).",
        !          1303: #endif /* KANJI */
        !          1304: #else /* No CYRILLIC */
        !          1305: #ifdef KANJI
        !          1306: "LATIN1 (ISO Latin Alphabet 1), and JAPANESE-EUC.",
        !          1307: #else
        !          1308: "and LATIN1 (ISO Latin Alphabet 1).",
        !          1309: #endif /* KANJI */
        !          1310: #endif /* CYRILLIC */
        !          1311: "Synonym: SET XFER CHARACTER-SET.", 
        !          1312: #endif /* NOCSETS */
        !          1313: "" };
        !          1314: 
        !          1315: /*  D O H S E T  --  Give help for SET command  */
        !          1316:  
        !          1317: int
        !          1318: dohset(xx) int xx; {
        !          1319:     
        !          1320:     if (xx == -3) return(hmsga(hmhset));
        !          1321:     if (xx < 0) return(xx);
        !          1322:     switch (xx) {
        !          1323:  
        !          1324: case XYATTR:
        !          1325:     return(hmsga(hsetat));
        !          1326: 
        !          1327: case XYBACK:
        !          1328:     return(hmsga(hsetbkg));
        !          1329: 
        !          1330: #ifdef DYNAMIC
        !          1331: case XYBUF:
        !          1332:     return(hmsga(hsetbuf));
        !          1333: #endif /* DYNAMIC */
        !          1334: 
        !          1335: case XYCARR:
        !          1336:     return(hmsga(hsetcar));
        !          1337: 
        !          1338: #ifndef NOSPL
        !          1339: case XYCASE:
        !          1340:     return(hmsg("Syntax: SET CASE { ON, OFF }\n\
        !          1341: Tells whether alphabetic case is significant in string comparisons\n\
        !          1342: done by INPUT, IF, and other commands."));
        !          1343: #endif /* NOSPL */
        !          1344: 
        !          1345: case XYCMD:
        !          1346:     return(hmsga(hsetcmd));
        !          1347: 
        !          1348: case XYIFD:
        !          1349:     return(hmsg("Syntax: SET INCOMPLETE { DISCARD, KEEP }\n\
        !          1350: Discard or Keep incompletely received files, default is DISCARD."));
        !          1351: 
        !          1352: #ifndef NOSPL
        !          1353: case XYINPU:
        !          1354:     return(hmsga(hxxinp));
        !          1355: #endif /* NOSPL */
        !          1356: 
        !          1357: case XYCHKT:
        !          1358:     return(hmsga(hmxychkt));
        !          1359:  
        !          1360: #ifndef NOSPL
        !          1361: case XYCOUN:
        !          1362:     return(hmsg("Syntax:  SET COUNT number\n\
        !          1363: Example: SET COUNT 5\n\
        !          1364: Set up a loop counter, for use with IF COUNT."));
        !          1365: #endif /* NOSPL */
        !          1366: 
        !          1367: case XYDFLT:
        !          1368:     return(hmsg("Syntax: SET DEFAULT directory\n\
        !          1369: Change directory.  Equivalent to CD command."));
        !          1370: 
        !          1371: case XYDELA: 
        !          1372:     return(hmsg("Syntax: SET DELAY number\n\
        !          1373: Number of seconds to wait before sending first packet after SEND command."));
        !          1374:  
        !          1375: #ifndef NODIAL
        !          1376: case XYDIAL:
        !          1377:     return(hmsga(hmxydial));
        !          1378: #endif /* NODIAL */
        !          1379: 
        !          1380: #ifdef UNIX
        !          1381: case XYSUSP:
        !          1382:     return(hmsg("Syntax: SET SUSPEND { OFF, ON }\n\n\
        !          1383: Disables SUSPEND command, suspend signals, and <esc-char>Z during CONNECT."));
        !          1384: #endif
        !          1385: 
        !          1386: #ifndef NOSCRIPT
        !          1387: case XYSCRI:
        !          1388:     return(hmsg("Syntax: SET SCRIPT ECHO { OFF, ON }\n\n\
        !          1389: Disables/Enables echoing of SCRIPT command operation."));
        !          1390: #endif /* NOSCRIPT */
        !          1391: 
        !          1392: case XYTAKE:
        !          1393:     return(hmsga(hxytak));
        !          1394: 
        !          1395: case XYTERM:
        !          1396:     return(hmsga(hxyterm));
        !          1397: 
        !          1398: case XYDUPL:
        !          1399:     return(hmsg("Syntax: SET DUPLEX { FULL, HALF }\n\n\
        !          1400: During CONNECT: FULL means remote host echoes, HALF means C-Kermit\n\
        !          1401: does its own echoing."));
        !          1402:  
        !          1403: case XYESC:
        !          1404:     return(hmsg("Syntax: SET ESCAPE number\n\n\
        !          1405: Decimal ASCII value for escape character during CONNECT, normally 28\n\
        !          1406: (Control-\\).  Type the escape character followed by C to get back to the\n\
        !          1407: C-Kermit prompt."));
        !          1408:  
        !          1409: case XYFILE:
        !          1410:     return(hmsga(hmxyf));
        !          1411:  
        !          1412: case XYFLOW:
        !          1413: #ifdef UTEK
        !          1414:     return(hmsg("Syntax: SET FLOW value\n\
        !          1415: Type of flow control to be used during file transfer and connect mode.\n\
        !          1416: The choices are XON/XOFF (default), IDTR/OCTS, and NONE."));
        !          1417: #else
        !          1418:     return(hmsg("Syntax: SET FLOW value\n\
        !          1419: Type of flow control to be used during file transfer.\n\
        !          1420: The choices are XON/XOFF (default) and NONE."));
        !          1421: #endif /* UTEK */
        !          1422:  
        !          1423: case XYHAND:
        !          1424:    return(hmsga(hmxyhsh));
        !          1425: 
        !          1426: #ifdef NETCONN
        !          1427: case XYHOST:
        !          1428: return(hmsga(hxyhost));
        !          1429: case XYNET:
        !          1430: return(hmsga(hxynet));
        !          1431: 
        !          1432: #ifdef SUNX25
        !          1433: case XYX25:
        !          1434:     return(hmsga(hxyx25));
        !          1435: 
        !          1436: case XYPAD:
        !          1437:     return(hmsg("Syntax: SET PAD name value\n\
        !          1438: Set a PAD X.3 parameter with a desired value."));
        !          1439: #endif /* SUNX25 */ 
        !          1440: #endif /* NETCONN */
        !          1441: 
        !          1442: #ifndef NOSETKEY
        !          1443: case XYKEY:                            /* SET KEY */
        !          1444:     return(hmsga(hmhskey));
        !          1445: #endif /* NOSETKEY */
        !          1446: 
        !          1447: #ifndef NOCSETS
        !          1448: case XYLANG:
        !          1449:     return(hmsg("Syntax: SET LANGUAGE name\n\
        !          1450: Selects language-specific translation rules for text-mode file transfers.\n\
        !          1451: Used with SET FILE CHARACTER-SET and SET TRANSFER CHARACTER-SET."));
        !          1452: #endif /* NOCSETS */
        !          1453: 
        !          1454: case XYLINE:
        !          1455:     printf("\nSyntax: SET LINE devicename\n\n\
        !          1456: Select communication device to use.  Normally %s.\n",dftty);
        !          1457:     if (!dfloc) {
        !          1458:        printf("\
        !          1459: If you SET LINE to other than %s, then Kermit\n",dftty);
        !          1460:        printf("\
        !          1461: will be in 'local' mode; SET LINE alone will reset Kermit to remote mode.\n\
        !          1462: To use the modem to dial out, first SET MODEM-DIALER (e.g., to HAYES), then");
        !          1463: puts("\nSET LINE xxx, next issue the DIAL command, and finally CONNECT.\n");
        !          1464:     }
        !          1465:     return(0);
        !          1466:  
        !          1467: #ifndef NOSPL
        !          1468: case XYMACR:
        !          1469:     return(hmsga(hxymacr));
        !          1470: #endif /* NOSPL */
        !          1471: 
        !          1472: case XYMODM:
        !          1473:     return(hmsga(hxymodm));
        !          1474:  
        !          1475: case XYPARI:
        !          1476:     return(hmsg("Syntax: SET PARITY name\n\n\
        !          1477: Parity to use during terminal connection and file transfer: EVEN, ODD, MARK,\n\
        !          1478: SPACE, or NONE.  Normally NONE."));
        !          1479:  
        !          1480: case XYPROM:
        !          1481:     return(hmsga(hmxyprm));
        !          1482:  
        !          1483: case XYQUIE:
        !          1484:     return(hmsg("Syntax: SET QUIET {ON, OFF}\n\n\
        !          1485: Normally ON.  OFF disables most information messages during interactive\n\
        !          1486: operation."));
        !          1487: 
        !          1488: case XYRETR:
        !          1489:     return(hmsg("Syntax: SET RETRY number\n\n\
        !          1490: How many times to retransmit a particular packet before giving up."));
        !          1491: 
        !          1492: #ifdef UNIX
        !          1493: case XYSESS:
        !          1494:     return(hmsg("Syntax: SET SESSION-LOG { BINARY, TEXT }\n\n\
        !          1495: If BINARY, record all CONNECT characters in session log.  If TEXT, strip\n\
        !          1496: out carriage returns."));
        !          1497: #endif /* UNIX */
        !          1498: 
        !          1499: case XYSPEE:
        !          1500:     return(hmsg("Syntax: SET SPEED number\n\n\
        !          1501: Communication line speed for external tty line specified in most recent\n\
        !          1502: SET LINE command, in bits per second.  Type SET SPEED ? for a list of\n\
        !          1503: possible speeds."));
        !          1504: 
        !          1505: case XYRECV:
        !          1506: case XYSEND:
        !          1507:     if (xx == XYRECV)
        !          1508:       puts("\nSyntax: SET RECEIVE parameter value\n\n\
        !          1509: Specify parameters for inbound packets:");
        !          1510:     else puts("\nSyntax: SET SEND parameter value\n\n\
        !          1511: Specify parameters for outbound packets.  This command should be used only\n\
        !          1512: to override the normal negotiated parameters.");
        !          1513:     return(hmsga(hxysr));
        !          1514:  
        !          1515: #ifndef NOSERVER
        !          1516: case XYSERV:
        !          1517:     return(hmsga(hsetsrv));
        !          1518: #endif /* NOSERVER */
        !          1519: 
        !          1520: #ifndef NOXMIT
        !          1521: case XYXMIT:
        !          1522:     return(hmsga(hsetxmit));
        !          1523: #endif /* NOXMIT */
        !          1524: 
        !          1525: #ifndef NOCSETS
        !          1526: case XYUNCS:
        !          1527:     return(hmsg("Syntax: SET UNKNOWN-CHAR-SET action\n\n\
        !          1528: DISCARD (default) means reject any arriving files encoded in unknown\n\
        !          1529: character sets.  KEEP means to accept them anyway."));
        !          1530: #endif /* NOCSETS */
        !          1531: 
        !          1532: #ifdef UNIX
        !          1533: case XYWILD:
        !          1534:     return(hmsg("Syntax: SET WILDCARD-EXPANSION { KERMIT, SHELL }\n\n\
        !          1535: KERMIT (the default) means C-Kermit expands filename wildcards in SEND\n\
        !          1536: and MSEND commands and incoming GET commands.  SHELL means your shell does \
        !          1537: it."));
        !          1538: #endif /* UNIX */
        !          1539: 
        !          1540: case XYWIND:
        !          1541:     return(hmsga(hxywind));
        !          1542: 
        !          1543: #ifndef NOCSETS
        !          1544: case XYXFER:
        !          1545:     return(hmsga(hxyxfer));
        !          1546: #endif
        !          1547: 
        !          1548: default:
        !          1549:     printf("Not available yet - %s\n",cmdbuf);
        !          1550:     return(0);
        !          1551:     }
        !          1552: }
        !          1553: 
        !          1554:  
        !          1555: /*  D O H R M T  --  Give help about REMOTE command  */
        !          1556:  
        !          1557: static char *hrset[] = {
        !          1558: "Syntax:  REMOTE SET parameter value",
        !          1559: "Example: REMOTE SET FILE TYPE BINARY\n",
        !          1560: "Ask the remote Kermit server to set the named parameter to the given value.",
        !          1561: "Equivalent to typing the corresponding SET command directly to the other",
        !          1562: "Kermit if it were in interactive mode.", "" };
        !          1563: 
        !          1564: int
        !          1565: dohrmt(xx) int xx; {
        !          1566:     int x;
        !          1567:     if (xx == -3) return(hmsga(hmhrmt));
        !          1568:     if (xx < 0) return(xx);
        !          1569:     switch (xx) {
        !          1570:  
        !          1571: case XZCWD:
        !          1572:     return(hmsg("Syntax: REMOTE CD [ name ]\n\n\
        !          1573: Ask remote Kermit server to change its working directory or device.\n\
        !          1574: If the device or directory name is omitted, restore the default."));
        !          1575:  
        !          1576: case XZDEL:
        !          1577:     return(hmsg("Syntax: REMOTE DELETE filespec\n\n\
        !          1578: Ask the remote Kermit server to delete the named file(s)."));
        !          1579:  
        !          1580: case XZDIR:
        !          1581:     return(hmsg("Syntax: REMOTE DIRECTORY [ filespec ]\n\n\
        !          1582: Ask the remote Kermit server to provide a directory listing of the named\n\
        !          1583: file(s) or if no file specification is given, of all files in the current\n\
        !          1584: directory."));
        !          1585:  
        !          1586: case XZHLP:
        !          1587:     return(hmsg("Syntax: REMOTE HELP\n\n\
        !          1588: Ask the remote Kermit server to list the services it provides."));
        !          1589:  
        !          1590: case XZHOS:
        !          1591:     return(hmsg("Syntax: REMOTE HOST command\n\n\
        !          1592: Send a command to the remote host computer in its own command language\n\
        !          1593: through the remote Kermit server."));
        !          1594:  
        !          1595: #ifndef NOFRILLS
        !          1596: case XZKER:
        !          1597:     return(hmsg("Syntax: REMOTE KERMIT command\n\n\
        !          1598: Send a command to the remote Kermit server in its own command language."));
        !          1599: 
        !          1600: case XZLGI:
        !          1601:     return(hmsg("Syntax: REMOTE LOGIN user password [ account ]\n\n\
        !          1602: Log in to a remote Kermit server that requires you login."));
        !          1603: 
        !          1604: case XZLGO:
        !          1605:     return(hmsg("Syntax: REMOTE LOGOUT\n\n\
        !          1606: Log out from a remote Kermit server to which you have previously logged in."));
        !          1607: 
        !          1608: case XZPRI:
        !          1609:     return(hmsg("Syntax: REMOTE PRINT filespec [ options ]\n\n\
        !          1610: Send the specified file(s) to the remote Kermit and ask it to have the\n\
        !          1611: file printed on the remote system's printer, using any specified options."));
        !          1612: #endif /* NOFRILLS */
        !          1613: 
        !          1614: case XZSET:
        !          1615:     return(hmsga(hrset));
        !          1616: 
        !          1617: case XZSPA:
        !          1618:     return(hmsg("Syntax: REMOTE SPACE [ name ]\n\n\
        !          1619: Ask the remote Kermit server to tell you about its disk space on the current\n\
        !          1620: disk or directory, or in the one that you name."));
        !          1621:  
        !          1622: #ifndef NOFRILLS
        !          1623: case XZTYP:
        !          1624:     return(hmsg("Syntax: REMOTE TYPE file\n\n\
        !          1625: Ask the remote Kermit server to type the named file(s) on your screen."));
        !          1626:  
        !          1627: case XZWHO:
        !          1628:     return(hmsg("Syntax: REMOTE WHO [ name ]\n\n\
        !          1629: Ask the remote Kermit server to list who's logged in, or to give information\n\
        !          1630: about the named user."));
        !          1631: #endif /* NOFRILLS */
        !          1632:  
        !          1633: default:
        !          1634:     if ((x = cmcfm()) < 0) return(x);
        !          1635:     printf("not working yet - %s\n",cmdbuf);
        !          1636:     return(-2);
        !          1637:     }
        !          1638: }
        !          1639: 
        !          1640: #endif /* NOHELP */
        !          1641: #endif /* NOICP */

unix.superglobalmegacorp.com

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