+#ifdef SSHTEST
+#define SSHBUILTIN
+#endif /* SSHTEST */
+
+/* C K U U S 2 -- User interface strings & help text module for C-Kermit */
+
+/*
+ Authors:
+ Frank da Cruz <fdc@columbia.edu>,
+ The Kermit Project, Columbia University, New York City
+ Jeffrey E Altman <jaltman@secure-endpoints.com>
+ Secure Endpoints Inc., New York City
+
+ Copyright (C) 1985, 2004,
+ Trustees of Columbia University in the City of New York.
+ All rights reserved. See the C-Kermit COPYING.TXT file or the
+ copyright text in the ckcmai.c module for disclaimer and permissions.
+
+ This module contains HELP command and other long text strings.
+
+ IMPORTANT: Character string constants longer than about 250 are not portable.
+ Longer strings should be broken up into arrays of strings and accessed with
+ hmsga() rather than hmsg().
+*/
+#include "ckcsym.h"
+#include "ckcdeb.h"
+#include "ckcnet.h"
+#include "ckcasc.h"
+#include "ckcker.h"
+#include "ckuusr.h"
+#include "ckcxla.h"
+#ifdef OS2
+#ifdef NT
+#include <windows.h>
+#else /* not NT */
+#define INCL_KBD
+#ifdef OS2MOUSE
+#define INCL_MOU
+#endif /* OS2MOUSE */
+#define INCL_DOSMISC
+#define INCL_DOSDEVICES
+#include <os2.h> /* This pulls in a whole load of stuff */
+#undef COMMENT
+#endif /* NT */
+#include "ckocon.h"
+#include "ckokvb.h"
+#include "ckokey.h"
+#endif /* OS2 */
+
+extern xx_strp xxstring;
+extern char * ccntab[];
+/*
+ hlptok contains the string for which the user requested help. This is
+ useful for distinguishing synonyms, in case different help text is needed
+ depending on which synonym was given.
+*/
+extern char * hlptok;
+
+#ifndef NOIKSD
+ extern int inserver;
+#endif /* IKSD */
+
+#ifndef NOICP
+extern int cmflgs;
+
+#ifdef DCMDBUF
+extern char *cmdbuf, *atmbuf;
+#else
+extern char cmdbuf[], atmbuf[];
+#endif /* DCMDBUF */
+#endif /* NOICP */
+
+extern char *xarg0;
+extern int nrmt, nprm, dfloc, local, parity, escape;
+extern int turn, flow;
+extern int binary, quiet, keep;
+extern int success, xaskmore;
+#ifdef OS2
+extern int tt_rows[], tt_cols[];
+#else /* OS2 */
+extern int tt_rows, tt_cols;
+#endif /* OS2 */
+extern int cmd_rows, cmd_cols;
+
+extern long speed;
+extern char *dftty, *versio, *ckxsys;
+#ifndef NOHELP
+extern char *helpfile;
+#endif /* NOHELP */
+extern struct keytab prmtab[];
+#ifndef NOXFER
+extern struct keytab remcmd[];
+#endif /* NOXFER */
+
+#ifndef NOICP
+
+/* Interactive help strings */
+
+/* Top-level HELP text. IMPORTANT: Also see tophlpi[] for IKSD. */
+
+static char *tophlp[] = {
+"Trustees of Columbia University in the City of New York.\n",
+
+#ifndef NOHELP
+" Type EXIT to exit.",
+#ifdef OS2
+" Type INTRO for a brief introduction to the Kermit Command screen.",
+" Type LICENSE to see the Kermit 95 license.",
+#else
+" Type INTRO for a brief introduction to C-Kermit.",
+" Type LICENSE to see the C-Kermit license.",
+#endif /* OS2 */
+" Type HELP followed by a command name for help about a specific command.",
+#ifndef NOPUSH
+#ifdef UNIX
+" Type MANUAL to access the C-Kermit manual page.",
+#else
+#ifdef VMS
+" Type MANUAL to access the C-Kermit help topic.",
+#else
+#ifdef OS2
+" Type MANUAL to access the K95 manual.",
+#else
+" Type MANUAL to access the C-Kermit manual.",
+#endif /* OS2 */
+#endif /* VMS */
+#endif /* UNIX */
+#endif /* NOPUSH */
+" Type NEWS for news about new features.",
+" Type SUPPORT to learn how to get technical support.",
+" Press ? (question mark) at the prompt, or anywhere within a command,",
+" for a menu (context-sensitive help, menu on demand).",
+#else
+"Press ? for a list of commands; see documentation for detailed descriptions.",
+#endif /* NOHELP */
+
+#ifndef NOCMDL
+#ifndef NOHELP
+" ",
+" Type HELP OPTIONS for help with command-line options.",
+#endif /* NOHELP */
+#endif /* NOCMDL */
+" ",
+#ifndef OS2
+#ifdef MAC
+"Documentation for Command Window: \"Using C-Kermit\" by Frank da Cruz and",
+"Christine M. Gianone, Digital Press, 1997, ISBN: 1-55558-164-1. To order,",
+"call +1 212 854-3703 or +1 800 366-2665.",
+#else
+"DOCUMENTATION: \"Using C-Kermit\" by Frank da Cruz and Christine M. Gianone,",
+"2nd Edition, Digital Press / Butterworth-Heinemann 1997, ISBN 1-55558-164-1,",
+"plus supplements at http://www.columbia.edu/kermit/ckermit.html.",
+#endif /* MAC */
+#endif /* OS2 */
+#ifdef MAC
+" ",
+"Also see the Mac Kermit Doc and Bwr files on the Mac Kermit diskette.\n",
+#else
+#ifdef HPUX10
+" ",
+"See the files in /usr/share/lib/kermit/ for additional information.",
+#endif /* HPUX10 */
+#endif /* MAC */
+""
+};
+
+#ifndef NOIKSD
+static char *tophlpi[] = { /* Top-level help for IKSD */
+
+"Trustees of Columbia University in the City of New York.\n",
+
+#ifndef NOHELP
+" Type INTRO for a brief introduction to Kermit commands.",
+" Type VERSION for version and copyright information.",
+" Type HELP followed by a command name for help about a specific command.",
+" Type SUPPORT to learn how to get technical support.",
+" Type LOGOUT (or EXIT) to log out.",
+" Press ? (question mark) at the prompt, or anywhere within a command,",
+" for a menu (context-sensitive help, menu on demand).",
+#else
+"Press ? for a list of commands; see documentation for detailed descriptions.",
+#endif /* NOHELP */
+" ",
+"DOCUMENTATION: \"Using C-Kermit\" by Frank da Cruz and Christine M. Gianone,",
+"2nd Edition, Digital Press / Butterworth-Heinemann 1997, ISBN 1-55558-164-1.",
+"To order: +1 212 854-3703 or +1 800 366-2665. More info at the Kermit",
+
+"Project website, http://www.columbia.edu/kermit/.",
+""
+};
+#endif /* NOIKSD */
+
+#ifndef NOHELP
+char *newstxt[] = {
+#ifdef OS2
+"Welcome to Kermit 95 2.1.3. Major new features include:",
+#else
+"Welcome to C-Kermit 8.0.206. Major new features include:",
+#endif /* OS2 */
+#ifdef NT
+#ifdef KUI
+" . Runs in GUI window",
+#else
+" . GUI version available",
+#endif /* KUI */
+#endif /* NT */
+#ifdef SSHBUILTIN
+" . New built-in SSH v1 and v2 clients",
+#endif /* SSHBUILTIN */
+#ifdef NEWFTP
+" . A new built-in FTP client",
+#endif /* NEWFTP */
+#ifndef NOHTTP
+" . A new HTTP 1.1 client",
+#endif /* NOHTTP */
+#ifdef TN_COMPORT
+" . Telnet Com Port Option for dialing from Telnet modem servers",
+#endif /* TN_COMPORT */
+" . File scanning for automatic text/binary determination",
+#ifdef CKLEARN
+#ifndef OS2
+" . Learned scripts",
+#endif /* OS2 */
+#endif /* CKLEARN */
+#ifndef NOSPL
+#ifndef NOSEXP
+" . LISP-like S-Expressions and natural floating-point arithmetic",
+#endif /* NOSEXP */
+" . Lots of script programming improvements",
+#endif /* NOSPL */
+" . Performance improvements and bug fixes",
+" ",
+"Documentation:",
+" 1. \"Using C-Kermit\", second edition (1997), current with C-Kermit 6.0.",
+" 2. http://www.columbia.edu/kermit/ckermit70.html",
+" which documents the new features of C-Kermit 7.0.",
+" 3. http://www.columbia.edu/kermit/ckermit80.html",
+" which documents the new features of C-Kermit 8.0.",
+" ",
+"If the release date shown by the VERSION command is long past, be sure to",
+"check with the Kermit Project to see if there have been updates.",
+""
+};
+#endif /* NOHELP */
+
+#ifndef NOHELP
+char *introtxt[] = {
+#ifdef OS2
+"Welcome to K-95, Kermit communications software for:",
+#else
+#ifdef UNIX
+#ifdef HPUX
+"Welcome to HP-UX C-Kermit communications software for:",
+#else
+"Welcome to UNIX C-Kermit communications software for:",
+#endif /* HPUX */
+#else
+#ifdef VMS
+"Welcome to VMS C-Kermit communications software for:",
+#else
+#ifdef VOS
+"Welcome to VOS C-Kermit communications software for:",
+#else
+#ifdef MAC
+"Welcome to Mac Kermit communications software for:",
+#else
+"Welcome to C-Kermit communications software for:",
+#endif /* MAC */
+#endif /* VOS */
+#endif /* VMS */
+#endif /* UNIX */
+#endif /* OS2 */
+#ifndef NOXFER
+" . Error-free and efficient file transfer",
+#endif /* NOXFER */
+#ifndef NOLOCAL
+#ifdef OS2
+" . VT320/220/102/100/52, ANSI, Wyse, Linux, Televideo, and other emulations",
+#else
+#ifdef MAC
+" . VT220 terminal emulation",
+#else
+" . Terminal connection",
+#endif /* MAC */
+#endif /* OS2 */
+#endif /* NOLOCAL */
+#ifndef NOSPL
+" . Script programming",
+#endif /* NOSPL */
+#ifndef NOICS
+" . International character set conversion",
+#endif /* NOICS */
+#ifndef NODIAL
+#ifndef NOSPL
+" . Numeric and alphanumeric paging",
+#endif /* NOSPL */
+#endif /* NODIAL */
+
+#ifndef NOLOCAL
+" ",
+"Supporting:",
+" . Serial connections, direct or dialed.",
+#ifndef NODIAL
+" . Automatic modem dialing",
+#endif /* NODIAL */
+#ifdef TCPSOCKET
+" . TCP/IP network connections:",
+#ifdef TNCODE
+" - Telnet sessions",
+#endif /* TNCODE */
+#ifdef SSHBUILTIN
+" - SSH v1 and v2 connections",
+#else
+#ifdef ANYSSH
+" - SSH connections via external agent",
+#endif /* ANYSSH */
+#endif /* SSHBUILTIN */
+#ifdef RLOGCODE
+" - Rlogin sessions",
+#endif /* RLOGCODE */
+#ifdef NEWFTP
+" - FTP sessions",
+#endif /* NEWFTP */
+#ifdef CKHTTP
+" - HTTP 1.1 sessions",
+#endif /* CKHTTP */
+#ifdef IKSD
+" - Internet Kermit Service",
+#endif /* IKSD */
+#endif /* TCPSOCKET */
+#ifdef ANYX25
+" . X.25 network connections",
+#endif /* ANYX25 */
+#ifdef OS2
+#ifdef DECNET
+" . DECnet/PATHWORKS LAT Ethernet connections",
+#endif /* DECNET */
+#ifdef SUPERLAT
+" . Meridian Technologies' SuperLAT connections",
+#endif /* SUPERLAT */
+#ifdef NPIPE
+" . Named-pipe connections",
+#endif /* NPIPE */
+#ifdef CK_NETBIOS
+" . NETBIOS connections",
+#endif /* CK_NETBIOS */
+#endif /* OS2 */
+#endif /* NOLOCAL */
+
+" ",
+"While typing commands, you may use the following special characters:",
+" . DEL, RUBOUT, BACKSPACE, CTRL-H: Delete the most recent character typed.",
+" . CTRL-W: Delete the most recent word typed.",
+" . CTRL-U: Delete the current line.",
+" . CTRL-R: Redisplay the current line.",
+
+#ifdef CK_RECALL
+#ifdef OS2
+" . Uparrow: Command recall - go backwards in command recall buffer.",
+" . Downarrow: Command recall - go forward in command recall buffer.",
+#ifndef NOIKSD
+" (Note: Arrow keys can be used only on the PC's physical keyboard.)",
+#endif /* NOIKSD */
+#endif /* OS2 */
+" . CTRL-P: Command recall - go backwards in command recall buffer.",
+" . CTRL-B: Command recall - same as Ctrl-P.",
+" . CTRL-N: Command recall - go forward in command recall buffer.",
+#endif /* CK_RECALL */
+
+" . ? (question mark) Display a menu for the current command field."
+,
+" . ESC (or TAB) Attempt to complete the current field.",
+" . \\ (backslash) include the following character literally",
+#ifndef NOSPL
+" or introduce a backslash code, variable, or function.",
+#else
+" or introduce a numeric backslash code.",
+#endif /* NOSPL */
+" ",
+
+"IMPORTANT: Since backslash (\\) is Kermit's command-line escape character,",
+"you must enter DOS, Windows, or OS/2 pathnames using either forward slash (/)"
+,
+"or double backslash (\\\\) as the directory separator in most contexts.",
+"Examples: C:/TMP/README.TXT, C:\\\\TMP\\\\README.TXT.",
+" ",
+
+"Command words other than filenames can be abbreviated in most contexts.",
+" ",
+
+"Basic commands:",
+" EXIT Exit from Kermit",
+" HELP Request general help",
+" HELP command Request help about the given command",
+" TAKE Execute commands from a file",
+" TYPE Display a file on your screen",
+" ORIENTATION Explains directory structure",
+" ",
+
+#ifndef NOXFER
+"Commands for file transfer:",
+" SEND Send files",
+" RECEIVE Receive files",
+" GET Get files from a Kermit server",
+#ifdef CK_RESEND
+" RESEND Recover an interrupted send",
+" REGET Recover an interrupted get from a server",
+#endif /* CK_RESEND */
+#ifndef NOSERVER
+" SERVER Be a Kermit server",
+#endif /* NOSERVER */
+" ",
+"File-transfer speed selection:",
+" FAST Use fast settings -- THIS IS THE DEFAULT",
+" CAUTIOUS Use slower, more cautious settings",
+" ROBUST Use extremely slow and cautious settings",
+" ",
+"File-transfer performance fine tuning:",
+" SET RECEIVE PACKET-LENGTH Kermit packet size",
+" SET WINDOW Number of sliding window slots",
+" SET PREFIXING Amount of control-character prefixing",
+#endif /* NOXFER */
+
+#ifndef NOLOCAL
+" ",
+"To make a direct serial connection:",
+#ifdef OS2
+#ifdef NT
+#ifdef CK_TAPI
+" SET PORT TAPI Select TAPI communication device",
+#endif /* CK_TAPI */
+" SET PORT Select serial communication device",
+#else
+" SET PORT Select serial communication port or server",
+#endif /* NT */
+#else
+" SET LINE Select serial communication device",
+#endif /* OS2 */
+" SET SPEED Select communication speed",
+" SET PARITY Communications parity (if necessary)",
+#ifdef CK_RTSCTS
+" SET FLOW Communications flow control, such as RTS/CTS",
+#else
+" SET FLOW Communications flow control, such as XON/XOFF",
+#endif /* CK_RTSCTS */
+" CONNECT Begin terminal connection",
+
+#ifndef NODIAL
+" ",
+"To dial out with a modem:",
+" SET DIAL DIRECTORY Specify dialing directory file (optional)",
+" SET DIAL COUNTRY-CODE Country you are dialing from (*)",
+" SET DIAL AREA-CODE Area-code you are dialing from (*)",
+" LOOKUP Lookup entries in your dialing directory (*)",
+" SET MODEM TYPE Select modem type",
+#ifdef OS2
+#ifdef NT
+#ifdef CK_TAPI
+" SET PORT TAPI Select TAPI communication device",
+#endif /* CK_TAPI */
+" SET PORT Select serial communication device",
+#else
+" SET PORT Select serial communication port or server",
+#endif /* NT */
+#else
+" SET LINE Select serial communication device",
+#endif /* OS2 */
+" SET SPEED Select communication speed",
+" SET PARITY Communications parity (if necessary)",
+" DIAL Dial the phone number",
+" CONNECT Begin terminal connection",
+" ",
+#ifdef OS2
+"Further info: HELP DIAL, HELP SET MODEM, HELP SET PORT, HELP SET DIAL",
+#else
+"Further info: HELP DIAL, HELP SET MODEM, HELP SET LINE, HELP SET DIAL",
+#endif /* OS2 */
+"(*) (For use with optional dialing directory)",
+#endif /* NODIAL */
+
+#ifdef NETCONN
+" ",
+"To make a network connection:",
+#ifndef NODIAL
+" SET NETWORK DIRECTORY Specify a network services directory (optional)",
+" LOOKUP Lookup entries in your network directory",
+#endif /* NODIAL */
+" SET NETWORK TYPE Select network type (if more than one available)",
+" SET HOST Make a network connection but stay in command mode",
+" CONNECT Begin terminal connection",
+#ifdef TNCODE
+" TELNET Select a Telnet host and CONNECT to it",
+#endif /* TNCODE */
+#ifdef RLOGCODE
+" RLOGIN Select an Rlogin host and CONNECT to it",
+#endif /* RLOGCODE */
+#ifdef ANYSSH
+" SSH [ OPEN ] Select an SSH host and CONNECT to it",
+#endif /* ANYSSH */
+#ifdef NEWFTP
+" FTP [ OPEN ] Make an FTP connection",
+#endif /* NEWFTP */
+#ifdef CKHTTP
+" HTTP OPEN Make an HTTP connection",
+#endif /* CKHTTP */
+#endif /* NETCONN */
+
+#ifdef NT
+" ",
+"To return from the terminal window to the K-95> prompt:",
+#else
+#ifdef OS2
+" ",
+"To return from the terminal window to the K/2> prompt:",
+#else
+" ",
+"To return from a terminal connection to the C-Kermit prompt:",
+#endif /* OS2 */
+#endif /* NT */
+#ifdef OS2
+" \
+Press the key or key-combination shown after \"Command:\" in the status line",
+" (such as Alt-x) or type your escape character followed by the letter C.",
+#else
+" Type your escape character followed by the letter C.",
+#endif /* OS2 */
+" ",
+"To display your escape character:",
+" SHOW ESCAPE",
+" ",
+"To display other settings:",
+" SHOW COMMUNICATIONS, SHOW TERMINAL, SHOW FILE, SHOW PROTOCOL, etc.",
+#else /* !NOLOCAL */
+" ",
+"To display settings:",
+" SHOW COMMUNICATIONS, SHOW FILE, SHOW PROTOCOL, etc.",
+#endif /* NOLOCAL */
+" ",
+#ifdef OS2
+"For a Kermit 95 tutorial, visit:",
+" http://www.columbia.edu/kermit/k95tutor.html",
+" ",
+#endif /* OS2 */
+"For a C-Kermit tutorial, visit:",
+" http://www.columbia.edu/kermit/ckututor.html",
+" ",
+"To learn about script programming and automation:",
+" Read the manual, \"Using C-Kermit\". For a brief tutorial, visit:",
+" http://www.columbia.edu/kermit/ckscripts.html",
+" ",
+"For further information about a particular command, type HELP xxx,",
+"where xxx is the name of the command. For documentation, news of new",
+"releases, and information about other Kermit software, contact:",
+" ",
+" The Kermit Project E-mail: kermit@columbia.edu",
+" Columbia University Web: http://www.columbia.edu/kermit/",
+" 612 West 115th Street Voice: +1 (212) 854-3703",
+" New York NY 10025-7799 Fax: +1 (212) 662-6442",
+" USA",
+""
+};
+
+static char * hmxymatch[] = {
+"SET MATCH { DOTFILE, FIFO } { ON, OFF }",
+" Tells whether wildcards should match dotfiles (files whose names begin",
+" with period) or UNIX FIFO special files. MATCH FIFO default is OFF.",
+" MATCH DOTFILE default is OFF in UNIX, ON elsewhere.",
+""
+};
+
+#ifdef OS2
+#ifdef KUI
+static char * hmxygui[] = {
+"SET GUI DIALOGS { ON, OFF }",
+" ON means that popups, alerts, use GUI dialogs; OFF means to use",
+" text-mode popups or prompts. ON by default.",
+" ",
+"SET GUI FONT name size",
+" Chooses the font and size. Type \"set gui font ?\" to see the list of",
+" choices. The size can be a whole number or can contain a decimal point",
+" and a fraction (which is rounded to the nearest half point).",
+" ",
+"SET GUI RGBCOLOR colorname redvalue greenvalue bluevalue",
+" Specifies the red-green-blue mixture to be used to render the given",
+" color name. Type \"set gui rgbcolor\" to see a list of colornames.",
+" the RGB values are whole numbers from 0 to 255.",
+" ",
+"SET GUI WINDOW POSITION x y",
+" Moves the K95 window to the given X,Y coordinates, pixels from top left.",
+" (Not yet implemented -- use command-line options to do this.)",
+" ",
+"SET GUI WINDOW RESIZE-MODE { CHANGE-DIMENSIONS, SCALE-FONT }",
+" Default is CHANGE-DIMENSIONS.",
+"",
+"SET GUI WINDOW RUN-MODE { MAXIMIZE, MINIMIZE, RESTORE }",
+" Changes the run mode state of the GUI window.",
+""
+};
+#endif /* KUI */
+#endif /* OS2 */
+
+#ifdef ANYSSH
+static char * hmxxssh[] = {
+#ifdef SSHBUILTIN
+"Syntax: SSH { ADD, AGENT, CLEAR, KEY, [ OPEN ], V2 } operands...",
+" Performs an SSH-related action, depending on the keyword that follows:",
+" ",
+"SSH ADD LOCAL-PORT-FORWARD local-port host port",
+" Adds a port forwarding triplet to the local port forwarding list.",
+" The triplet specifies a local port to be forwarded and the hostname /",
+" ip-address and port number to which the port should be forwarded from",
+" the remote host. Port forwarding is activated at connection",
+" establishment and continues until the connection is terminated.",
+" ",
+"SSH ADD REMOTE-PORT-FORWARD remote-port host port",
+" Adds a port forwarding triplet to the remote port forwarding list.",
+" The triplet specifies a remote port to be forwarded and the",
+" hostname/ip-address and port number to which the port should be",
+" forwarded from the local machine. Port forwarding is activated at",
+" connection establishment and continues until the connection is",
+" terminated.",
+" ",
+"SSH AGENT ADD [ identity-file ]",
+" Adds the contents of the identity-file (if any) to the SSH AGENT",
+" private key cache. If no identity-file is specified, all files",
+" specified with SET SSH IDENTITY-FILE are added to the cache.",
+" ",
+"SSH AGENT DELETE [ identity-file ]",
+" Deletes the contents of the identity-file (if any) from the SSH AGENT",
+" private key cache. If no identity-file is specified, all files",
+" specified with SET SSH IDENTITY-FILE are deleted from the cache.",
+" ",
+"SSH AGENT LIST [ /FINGERPRINT ]",
+" Lists the contents of the SSH AGENT private key cache. If /FINGERPRINT",
+" is specified, the fingerprint of the private keys are displayed instead",
+" of the keys.",
+" ",
+"SSH CLEAR LOCAL-PORT-FORWARD",
+" Clears the local port forwarding list.",
+" ",
+"SSH CLEAR REMOTE-PORT-FORWARD",
+" Clears the remote port forwarding list.",
+" ",
+"SSH KEY commands:",
+" The SSH KEY commands create and manage public and private key pairs",
+" (identities). There are three forms of SSH keys. Each key pair is",
+" stored in its own set of files:",
+" ",
+" Key Type Private Key File Public Key File",
+" v1 RSA keys \\v(appdata)ssh/identity \\v(appdata)ssh/identity.pub",
+" v2 RSA keys \\v(appdata)ssh/id_rsa \\v(appdata)ssh/id_rsa.pub",
+" v2 DSA keys \\v(appdata)ssh/id_dsa \\v(appdata)ssh/id_dsa.pub",
+" ",
+" Keys are stored using the OpenSSH keyfile format. The private key",
+" files can be (optionally) protected by specifying a passphrase. A",
+" passphrase is a longer version of a password. English text provides",
+" no more than 2 bits of key data per character. 56-bit keys can be",
+" broken by a brute force attack in approximately 24 hours. When used,",
+" private key files should therefore be protected by a passphrase of at",
+" least 40 characters (about 80 bits).",
+" ",
+" To install a public key file on the host, you must transfer the file",
+" to the host and append it to your \"authorized_keys\" file. The file",
+" permissions must be 600 (or equivalent).",
+" ",
+"SSH KEY CHANGE-PASSPHRASE [ /NEW-PASSPHRASE:passphrase",
+" /OLD-PASSPHRASE:passphrase ] filename",
+" This re-encrypts the specified private key file with a new passphrase.",
+" The old passphrase is required. If the passphrases (and filename) are",
+" not provided Kermit prompts your for them.",
+" ",
+"SSH KEY CREATE [ /BITS:bits /PASSPHRASE:passphrase",
+" /TYPE:{ V1-RSA, V2-DSA, V2-RSA } /V1-RSA-COMMENT:comment ] filename",
+" This command creates a new private/public key pair. The defaults are:",
+" BITS:1024 and TYPE:V2-RSA. The filename is the name of the private",
+" key file. The public key is created with the same name with .pub",
+" appended to it. If a filename is not specified Kermit prompts you for",
+" it. V1 RSA key files may have an optional comment, which is ignored",
+" for other key types.",
+" ",
+"SSH KEY DISPLAY [ /FORMAT:{FINGERPRINT,IETF,OPENSSH,SSH.COM} ] filename",
+" This command displays the contents of a public or private key file.",
+" The default format is OPENSSH.",
+" ",
+"SSH KEY V1 SET-COMMENT filename comment",
+" This command replaces the comment associated with a V1 RSA key file.",
+" ",
+"SSH [ OPEN ] host [ port ] [ /COMMAND:command /USER:username",
+" /PASSWORD:pwd /VERSION:{ 1, 2 } /X11-FORWARDING:{ ON, OFF } ]",
+" This command establishes a new connection using SSH version 1 or",
+" version 2 protocol. The connection is made to the specified host on",
+" the SSH port (you can override the port by including a port name or",
+" number after the host name). Once the connection is established the",
+" authentication negotiations begin. If the authentication is accepted,",
+" the local and remote port forwarding lists are used to establish the",
+" desired connections. If X11 Forwarding is active, this results in a",
+" remote port forwarding between the X11 clients on the remote host and",
+" X11 Server on the local machine. If a /COMMAND is provided, the",
+" command is executed on the remote host in place of your default shell.",
+" ",
+" An example of a /COMMAND to execute C-Kermit in SERVER mode is:",
+" SSH OPEN hostname /COMMAND:{kermit -x -l 0}",
+" ",
+"SSH V2 REKEY",
+" Requests that an existing SSH V2 connection generate new session keys.",
+#else /* SSHBUILTIN */
+"Syntax: SSH [ options ] <hostname> [ command ]",
+" Makes an SSH connection using the external ssh program via the SET SSH",
+" COMMAND string, which is \"ssh -e none\" by default. Options for the",
+" external ssh program may be included. If the hostname is followed by a",
+" command, the command is executed on the host instead of an interactive",
+" shell.",
+#endif /* SSHBUILTIN */
+""
+};
+
+static char *hmxyssh[] = {
+#ifdef SSHBUILTIN
+"SET SSH AGENT-FORWARDING { ON, OFF }",
+" If an authentication agent is in use, setting this value to ON",
+" results in the connection to the agent being forwarded to the remote",
+" computer. The default is OFF.",
+" ",
+"SET SSH CHECK-HOST-IP { ON, OFF }",
+" Specifies whether the remote host's ip-address should be checked",
+" against the matching host key in the known_hosts file. This can be",
+" used to determine if the host key changed as a result of DNS spoofing.",
+" The default is ON.",
+" ",
+"SET SSH COMPRESSION { ON, OFF }",
+" Specifies whether compression will be used. The default is ON.",
+" ",
+"SET SSH DYNAMIC-FORWARDING { ON, OFF }",
+" Specifies whether Kermit is to act as a SOCKS4 service on port 1080",
+" when connected to a remote host via SSH. When Kermit acts as a SOCKS4",
+" service, it accepts connection requests and forwards the connections",
+" through the remote host. The default is OFF.",
+" ",
+"SET SSH GATEWAY-PORTS { ON, OFF }",
+" Specifies whether Kermit should act as a gateway for forwarded",
+" connections received from the remote host. The default is OFF.",
+" ",
+"SET SSH GSSAPI DELEGATE-CREDENTIALS { ON, OFF }",
+" Specifies whether Kermit should delegate GSSAPI credentials to ",
+" the remote host after authentication. Delegating credentials allows",
+" the credentials to be used from the remote host. The default is OFF.",
+" ",
+"SET SSH HEARTBEAT-INTERVAL <seconds>",
+" Specifies a number of seconds of idle time after which an IGNORE",
+" message will be sent to the server. This pulse is useful for",
+" maintaining connections through HTTP Proxy servers and Network",
+" Address Translators. The default is OFF (0 seconds).",
+" ",
+"SET SSH IDENTITY-FILE filename [ filename [ ... ] ]",
+" Specifies one or more files from which the user's authorization",
+" identities (private keys) are to be read when using public key",
+" authorization. These are files used in addition to the default files:",
+" ",
+" \\v(appdata)ssh/identity V1 RSA",
+" \\v(appdata)ssh/id_rsa V2 RSA",
+" \\v(appdata)ssh/id_dsa V2 DSA",
+" ",
+"SET SSH KERBEROS4 TGT-PASSING { ON, OFF }",
+" Specifies whether Kermit should forward Kerberos 4 TGTs to the host.",
+" The default is OFF.",
+" ",
+"SET SSH KERBEROS5 TGT-PASSING { ON, OFF }",
+" Specifies whether Kermit should forward Kerberos 5 TGTs to to the",
+" host. The default is OFF.",
+" ",
+"SET SSH PRIVILEGED-PORT { ON, OFF }",
+" Specifies whether a privileged port (less than 1024) should be used",
+" when connecting to the host. Privileged ports are not required except",
+" when using SSH V1 with Rhosts or RhostsRSA authorization. The default",
+" is OFF.",
+" ",
+"SET SSH QUIET { ON, OFF }",
+" Specifies whether all messages generated in conjunction with SSH",
+" protocols should be suppressed. The default is OFF.",
+" ",
+"SET SSH STRICT-HOST-KEY-CHECK { ASK, ON, OFF }",
+" Specifies how Kermit should behave if the the host key check fails.",
+" When strict host key checking is OFF, the new host key is added to the",
+" protocol-version-specific user-known-hosts-file. When strict host key",
+" checking is ON, the new host key is refused and the connection is",
+" dropped. When set to ASK, Kermit prompt you to say whether the new",
+" host key should be accepted. The default is ASK.",
+" ",
+" Strict host key checking protects you against Trojan horse attacks.",
+" It depends on you to maintain the contents of the known-hosts-file",
+" with current and trusted host keys.",
+" ",
+"SET SSH USE-OPENSSH-CONFIG { ON, OFF }",
+" Specifies whether Kermit should parse an OpenSSH configuration file",
+" after applying Kermit's SET SSH commands. The configuration file",
+" would be located at \\v(home)ssh/ssh_config. The default is OFF.",
+" ",
+"SET SSH V1 CIPHER { 3DES, BLOWFISH, DES }",
+" Specifies which cipher should be used to protect SSH version 1",
+" connections. The default is 3DES.",
+" ",
+"SET SSH V1 GLOBAL-KNOWN-HOSTS-FILE filename",
+" Specifies the location of the system-wide known-hosts file. The",
+" default is:",
+" ",
+" \v(common)ssh_known_hosts",
+" ",
+"SET SSH V1 USER-KNOWN-HOSTS-FILE filename",
+" Specifies the location of the user-known-hosts-file. The default",
+" location is:",
+" ",
+" \\v(appdata)ssh/known_hosts",
+" ",
+"SET SSH V2 AUTHENTICATION { EXTERNAL-KEYX, GSSAPI, HOSTBASED, ",
+" KEYBOARD-INTERACTIVE, PASSWORD, PUBKEY, SRP-GEX-SHA1 } [ ... ]",
+" Specifies an ordered list of SSH version 2 authentication methods to",
+" be used when connecting to the remote host. The default list is:",
+" ",
+" external-keyx gssapi hostbased publickey srp-gex-sha1 publickey",
+" keyboard-interactive password none",
+" ",
+"SET SSH V2 AUTO-REKEY { ON, OFF }",
+" Specifies whether Kermit automatically issues rekeying requests",
+" once an hour when SSH version 2 in in use. The default is ON.",
+" ",
+"SET SSH V2 CIPHERS { 3DES-CBC, AES128-CBC AES192-CBC AES256-CBC",
+" ARCFOUR BLOWFISH-CBC CAST128-CBC RIJNDAEL128-CBC RIJNDAEL192-CBC",
+" RIJNDAEL256-CBC }",
+" Specifies an ordered list of SSH version ciphers to be used to encrypt",
+" the established connection. The default list is:",
+" ",
+" aes128-cbc 3des-cbc blowfish-cbc cast128-cbc arcfour aes192-cbc",
+" aes256-cbc",
+" ",
+" \"rijndael\" is an alias for \"aes\".",
+" ",
+"SET SSH V2 GLOBAL-KNOWN-HOSTS-FILE filename",
+" Specifies the location of the system-wide known-hosts file. The default",
+" location is:",
+" ",
+" \\v(common)ssh/known_hosts2",
+" ",
+"SET SSH V2 HOSTKEY-ALGORITHMS { SSH-DSS, SSH-RSA }",
+" Specifies an ordered list of hostkey algorithms to be used to verify",
+" the identity of the host. The default list is",
+" ",
+" ssh-rsa ssh-dss",
+" ",
+"SET SSH V2 MACS { HMAC-MD5 HMAC-MD5-96 HMAC-RIPEMD160 HMAC-SHA1",
+" HMAC-SHA1-96 }",
+" Specifies an ordered list of Message Authentication Code algorithms to",
+" be used for integrity protection of the established connection. The",
+" default list is:",
+" ",
+" hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96 hmac-md5-96",
+" ",
+"SET SSH V2 USER-KNOWN-HOSTS-FILE filename",
+" Specifies the location of the user-known-hosts file. The default",
+" location is:",
+" ",
+" \\v(appdata)ssh/known_hosts2",
+" ",
+"SET SSH VERBOSE level",
+" Specifies how many messages should be generated by the OpenSSH engine.",
+" The level can range from 0 to 7. The default value is 2.",
+" ",
+"SET SSH VERSION { 1, 2, AUTOMATIC }",
+" Specifies which SSH version should be negotiated. The default is",
+" AUTOMATIC which means use version 2 if supported; otherwise to fall",
+" back to version 1.",
+" ",
+"SET SSH X11-FORWARDING { ON, OFF }",
+" Specifies whether X Windows System Data is to be forwarded across the",
+" established SSH connection. The default is OFF. When ON, the DISPLAY",
+" value is either set using the SET TELNET ENV DISPLAY command or read",
+" from the DISPLAY environment variable.",
+" ",
+"SET SSH XAUTH-LOCATION filename",
+" Specifies the location of the xauth executable (if provided with the",
+" X11 Server software.)",
+#else /* SSHBUILTIN */
+"Syntax: SET SSH COMMAND command",
+" Specifies the external command to be used to make an SSH connection.",
+" By default it is \"ssh -e none\" (ssh with no escape character).",
+#endif /* SSHBUILTIN */
+""
+};
+#endif /* ANYSSH */
+
+#ifdef NEWFTP
+static char *hmxygpr[] = {
+"Syntax: SET GET-PUT-REMOTE { AUTO, FTP, KERMIT}",
+" Tells Kermit whether GET, PUT, and REMOTE commands should be directed",
+" at a Kermit server or an FTP server. The default is AUTO, meaning that",
+" if you have only one active connection, the appropriate action is taken",
+" when you give a GET, PUT, or REMOTE command. SET GET-PUT-REMOTE FTP forces"
+,
+" Kermit to treat GET, PUT, and REMOTE as FTP client commands; setting this",
+" to KERMIT forces these commands to be treated as Kermit client commands.",
+" NOTE: PUT includes SEND, MPUT, MSEND, and all other similar commands.",
+" Also see HELP REMOTE, HELP SET LOCUS, HELP FTP.",
+""
+};
+#endif /* NEWFTP */
+
+#ifdef LOCUS
+static char *hmxylocus[] = {
+#ifdef KUI
+"Syntax: SET LOCUS { ASK, AUTO, LOCAL, REMOTE }",
+#else
+"Syntax: SET LOCUS { AUTO, LOCAL, REMOTE }",
+#endif /* KUI */
+" Specifies whether unprefixed file management commands should operate",
+" locally or (when there is a connection to a remote FTP or Kermit",
+" server) sent to the server. The affected commands are: CD (CWD), PWD,",
+" CDUP, DIRECTORY, DELETE, RENAME, MKDIR, and RMDIR. To force any of",
+" these commands to be executed locally, give it an L-prefix: LCD, LDIR,",
+" etc. To force remote execution, use the R-prefix: RCD, RDIR, and so",
+" on. SHOW COMMAND shows the current Locus.",
+" ",
+" By default, the Locus for file management commands is switched",
+" automatically whenever you make or close a connection: if you make an",
+" FTP connection, the Locus becomes REMOTE; if you close an FTP connection",
+" or make any other kind of connection, the Locus becomes LOCAL.",
+#ifdef KUI
+" ",
+" There are two kinds of automatic switching: ASK (the default) which",
+" asks you if it's OK to switch, and AUTO, which switches without asking.",
+#endif /* KUI */
+" ",
+" If you give a SET LOCUS LOCAL or SET LOCUS REMOTE command, this sets",
+" the locus as indicated and disables automatic switching.",
+#ifdef KUI
+" SET LOCUS AUTO or SET LOCUS ASK restores automatic switching.",
+" You can also change Locus switching and behavior in the Actions menu.",
+#else
+" SET LOCUS AUTO restores automatic switching.",
+#endif /* KUI */
+"",
+};
+#endif /* LOCUS */
+
+static char *hmxxtak[] = {
+"Syntax: TAKE filename [ arguments ]",
+" Tells Kermit to execute commands from the named file. Optional argument",
+" words, are automatically assigned to the macro argument variables \\%1",
+" through \\%9. Kermit command files may themselves contain TAKE commands,",
+" up to any reasonable depth of nesting.",
+""
+};
+
+#ifdef TCPSOCKET
+static char *hmxxfirew[] = {
+#ifdef OS2
+"Firewall Traversal in Kermit 95",
+#else
+"Firewall Traversal in C-Kermit",
+#endif
+" ",
+#ifndef NEWFTP
+#ifndef CKHTTP
+#ifndef CK_SOCKS
+#define NOFIREWALL
+#endif
+#endif
+#endif
+#ifdef NOFIREWALL
+"This version of Kermit was built with no support for firewall traversal",
+"protocols. Kermit can be built with support for HTTP Proxy Servers,",
+"SOCKS authorized firewall traversal, and FTP Passive connection modes.",
+" ",
+#else /* NOFIREWALL */
+#ifdef CKHTTP
+"The simplist form of firewall traversal is the HTTP CONNECT command. The",
+"CONNECT command was implemented to allow a public web server which usually",
+"resides on the boundary between the public and private networks to forward",
+"HTTP requests from clients on the private network to public web sites. To",
+"allow secure web connections, the HTTP CONNECT command authenticates the",
+"client with a username/password and then establishes a tunnel to the",
+"desired host.",
+
+" ",
+
+"Web servers that support the CONNECT command can be configured to allow",
+"outbound connections for authenticated users to any TCP/IP hostname-port",
+"combination accessible to the Web server. HTTP CONNECT can be used only",
+"with TCP-based protocols. Protocols such as Kerberos authentication that",
+"use UDP/IP cannot be tunneled using HTTP CONNECT.",
+
+" ",
+
+"SET TCP HTTP-PROXY [switches] [<hostname or ip-address>[:<port>]]",
+" If a hostname or ip-address is specified, Kermit uses the given",
+" proxy server when attempting outgoing TCP connections. If no hostnamer",
+" or ip-address is specified, any previously specified Proxy server is",
+" removed. If no port number is specified, the \"http\" service is used.",
+" [switches] can be one or more of:",
+" /AGENT:<agent> /USER:<user> /PASSWORD:<password>",
+" Switch parameters are used when connecting to the proxy server and",
+" override any other values associated with the connection.",
+" ",
+
+#endif /* CKHTTP */
+#ifdef CK_SOCKS
+
+"In the early 1990s as firewalls were becoming prevalent, David Koblas",
+"developed the SOCKS protocol for TCP/IP firewall traversal. Two versions",
+"of SOCKS are currently in use: Version 4.2 lets TCP/IP client applications",
+"traverse firewalls, similar to HTTP CONNECT, except that the SOCKS client",
+"is aware of the public source IP address and port, which can be used within",
+"the application protocol to assist in securing the connection (e.g. FTP",
+"sessions secured with GSSAPI Kerberos 5).",
+
+" ",
+
+"In 1995 the IETF issued SOCKS Protocol Version 5 (RFC 1928), which is",
+"significantly more general than version 4. Besides supporting client-",
+"to-server TCP/IP connections, it also includes:",
+
+" ",
+" . Authenticated firewall traversal of UDP/IP packets.",
+" . Authenticated binding of incoming public ports on the firewall.",
+" ",
+
+"This lets a service on the private network offer public services. It also",
+"lets client applications like FTP establish a temporary public presence",
+"that can be used by the FTP server to create a data channel. By allowing",
+"the client to bind to a public port on the firewall and be aware of the",
+"public address, SOCKS 5 lets the application protocol communicate this",
+"information to the server.",
+
+" ",
+
+#ifdef OS2
+#ifdef NT
+"Kermit 95 supports SOCKS 4.2. The SOCKS Server is specified with:",
+" ",
+" SET TCP SOCKS-SERVER hostname/ip-address",
+" ",
+"The SOCKS.CONF file is found by examining the ETC environment variable;",
+"searching in \\WINDOWS on Windows 95/98/ME; or the",
+"\\WINDOWS\\SYSTEM\\DRIVERS\\ETC directory on NT\\2000\\XP systems.",
+
+#else /* NT */
+
+"Kermit/2 provides support for SOCKS 4.2 servers when using IBM TCP/IP 2.0,",
+"IBM OS/2 WARP, or a compatible protocol stack. SOCKS is one popular means",
+"of implementing a firewall between a private network and the Internet.",
+" ",
+"Kermit/2 shares the same SOCKS environment variables as IBM Gopher. It also",
+"supports the use of local SOCKS configuration files.",
+" ",
+"To specify the default SOCKS Server, add SET SOCKS_SERVER= to your",
+"CONFIG.SYS file.",
+" ",
+"If you must use a SOCKS Distributed Name Server, add SET SOCKS_NS= to your",
+"CONFIG.SYS file.",
+" ",
+
+"If you must use a specific with your SOCKS server, be sure to add SET USER=",
+"to your CONFIG.SYS file. Otherwise, \"os2user\" is used by default.",
+
+" ",
+
+"The SOCKS configuration file must be placed in the directory pointed to by",
+"the ETC environment variable as declared in your CONFIG.SYS file. The name",
+"should be SOCKS.CONF. On a FAT file system, use SOCKS.CNF.",
+
+" ",
+"The format of the lines in the SOCKS configuration file are as follows:",
+" ",
+" . # comments",
+" . deny [*=userlist] dst_addr dst_mask [op port]",
+" . direct [*=userlist] dst_addr dst_mask [op port]",
+" . sockd [@=serverlist] [*=userlist] dst_addr dst_mask [op port]",
+" ",
+
+"op must be one of 'eq', 'neq', 'lt', 'gt', 'le', or 'ge'. dst_addr,",
+"dst_mask, and port may be either numeric or name equivalents.",
+
+" ",
+
+"Kermit/2 ignores the [*=userlist] and [@=serverlist] fields. Matches are",
+"determined on a first match not a best match basis. Addresses for which no",
+"match is found default to \"sockd\".",
+
+" ",
+
+"For completeness: Fields in square brackets are optional. The optional",
+"@=serverlist field with a 'sockd' line specifies the list of SOCKS servers",
+"the client should try (in the given order) instead of the default SOCKS",
+"server. If the @=serverlist part is omitted, then the default SOCKS server",
+"is used. Commas are used in the userlist and serverlist as separators, no",
+"white spaces are allowed.",
+
+#endif /* NT */
+
+" ",
+
+#else /* OS2 */
+#ifdef CK_SOCKS5
+"This version of C-Kermit supports SOCKS version 5.",
+#else /* CK_SOCKS5 */
+"This version of C-Kermit supports SOCKS version 4.",
+#endif /* CK_SOCKS5 */
+
+"See the man page (or other system documentation) for information on",
+"configuring the SOCKS library via the /etc/socks.conf file.",
+
+#endif /* OS2 */
+" ",
+#endif /* CK_SOCKS */
+
+#ifdef NEWFTP
+
+"FTP is one of the few well-known Internet services that requires",
+"multiple connections. As described above, FTP originally required the",
+"server to establish the data connection to the client using a destination",
+"address and port provided by the client. This doesn't work with port",
+"filtering firewalls.",
+
+" ",
+
+"Later, FTP protocol added a \"passive\" mode, in which connections for",
+"the data channels are created in the reverse direction. Instead of the",
+"server establishing a connection to the client, the client makes a second",
+"connection with the server as the destination. This works just fine as",
+"long as the client is behind the firewall and the server is in public",
+"address space. If the server is behind a firewall then the traditional",
+"active mode must be used. If both the client and server are behind their",
+"own port filtering firewalls then data channels cannot be established.",
+
+" ",
+
+"In Kermit's FTP client, passive mode is controlled with the command:",
+
+" ",
+" SET FTP PASSIVE-MODE { ON, OFF }",
+" ",
+
+"The default is ON, meaning to use passive mode.",
+
+#endif /* NEWFTP */
+#endif /* NOFIREWALL */
+
+""
+};
+#endif /* TCPSOCKET */
+
+static char *hmxxsave[] = {
+"Syntax: SAVE item filename { NEW, APPEND }",
+" Saves the requested material in the given file. A new file is created",
+" by default; include APPEND at the end of the command to append to an",
+" existing file. Items:",
+#ifndef NOSETKEY
+" KEYMAP Saves the current key settings.",
+#endif /* NOSETKEY */
+#ifdef CK_RECALL
+" COMMAND HISTORY Saves the current command recall (history) buffer",
+#endif /* CK_RECALL */
+#ifdef OS2
+" COMMAND SCROLLBACK Saves the current command-screen scrollback buffer",
+" TERMINAL SCROLLBACK Saves the current terminal-screen scrollback buffer",
+#endif /* OS2 */
+""
+};
+
+#ifdef CKROOT
+static char *hmxxchroot[] = {
+"Syntax: SET ROOT directoryname",
+" Sets the root for file access to the given directory and disables access",
+" to system and shell commands and external programs. Once this command",
+" is given, no files or directories outside the tree rooted by the given",
+" directory can be opened, read, listed, deleted, renamed, or accessed in",
+" any other way. This command can not be undone by a subsequent SET ROOT",
+" command. Primarily for use with server mode, to restrict access of",
+" clients to a particular directory tree. Synonym: CHROOT.",
+""
+};
+#endif /* CKROOT */
+
+static char *hmxxscrn[] = {
+"Syntax: SCREEN { CLEAR, CLEOL, MOVE row column }",
+#ifdef OS2
+" Performs screen-formatting actions.",
+#else
+" Performs screen-formatting actions. Correct operation of these commands",
+" depends on proper terminal setup on both ends of the connection -- mainly",
+" that the host terminal type is set to agree with the kind of terminal or",
+" the emulation you are viewing C-Kermit through.",
+#endif /* OS2 */
+" ",
+"SCREEN CLEAR",
+" Moves the cursor to home position and clears the entire screen.",
+#ifdef OS2
+" Synonyms: CLS, CLEAR SCREEN, CLEAR COMMAND-SCREEN ALL",
+#else
+" Synonyms: CLS, CLEAR SCREEN.",
+#endif /* OS2 */
+" ",
+"SCREEN CLEOL",
+" Clears from the current cursor position to the end of the line.",
+#ifdef OS2
+" Synonym: CLEAR COMMAND-SCREEN EOL",
+#endif /* OS2 */
+" ",
+"SCREEN MOVE row column",
+" Moves the cursor to the indicated row and column. The row and column",
+" numbers are 1-based so on a 24x80 screen, the home position is 1 1 and",
+" the lower right corner is 24 80. If a row or column number is given that",
+" too large for what Kermit or the operating system thinks is your screen",
+" size, the appropriate number is substituted.",
+" ",
+"Also see:",
+#ifdef OS2
+" HELP FUNCTION SCRNCURX, HELP FUNCTION SCRNCURY, HELP FUNCTION SCRSTR,",
+#endif /* OS2 */
+" SHOW VARIABLE TERMINAL, SHOW VARIABLE COLS, SHOW VAR ROWS, SHOW COMMAND.",
+""
+};
+
+#ifndef NOSPL
+static char *hmfword[] = {
+"\\fword(s1,n1,s2,s3,n2,n3) - Extract word from string.",
+" s1 = source string",
+" n1 = word number (1-based)",
+" s2 = optional break set.",
+" s3 = optional include set.",
+" n2 = optional grouping mask.",
+" n3 = optional separator flag:",
+" 0 = collapse adjacent separators",
+" 1 = don't collapse adjacent separators.",
+" ",
+" Default break set is all characters except ASCII letters and digits.",
+" ASCII (C0) control characters are always treated as break characters.",
+" Default include set is null.",
+" ",
+" If grouping mask given and nonzero, words can be grouped by quotes or",
+" brackets selected by the sum of the following:",
+" ",
+" 1 = doublequotes: \"a b c\"",
+" 2 = braces: {a b c}",
+" 4 = apostrophes: 'a b c'",
+" 8 = parentheses: (a b c)",
+" 16 = square brackets: [a b c]",
+" 32 = angle brackets: <a b c>",
+" ",
+" Nesting is possible with {}()[]<> but not with quotes or apostrophes.",
+" ",
+"Returns string:",
+" Word number n, if there is one, otherwise an empty string.",
+""
+};
+
+static char *hmxxprompt[] = {
+"Syntax: PROMPT [ text ]",
+" Enters interactive command level from within a script in such a way that",
+" the script can be continued with an END or RETURN command. STOP, EXIT,",
+" SHOW STACK, TRACE, and Ctrl-C all have their normal effects. The PROMPT",
+" command allows variables to be examined or changed, or any other commands",
+" to be given, in any number, prior to returning to the script, allowing",
+" Kermit to serve as its own debugger; adding the PROMPT command to a script",
+" is like setting a breakpoint. If the optional text is included, it is",
+" used as the new prompt for this level, e.g. \"prompt Breakpoint_1>\".",
+""
+};
+
+static char *hxxinp[] = {
+"Syntax: INPUT [ /NOMATCH ] { number-of-seconds, time-of-day } [ text ]",
+"Example: INPUT 5 Login: or INPUT 23:59:59 RING",
+" Waits up to the given number of seconds, or until the given time of day,",
+" for the given text to arrive on the connection. If no text is given,",
+" INPUT waits for any character. If the /NOMATCH switch is included, INPUT",
+" does not attempt to match any characters, but continues reading from the",
+" communication connection until the timeout interval expires. If the",
+" timeout interval is 0, the INPUT command does not wait; i.e. the given",
+" text must already be available for reading for the INPUT command to",
+" succeed. If the interval is negative, the INPUT command waits forever.",
+" For use in script programs with IF FAILURE and IF SUCCESS. Also see",
+" MINPUT, REINPUT, SET INPUT. See HELP PAUSE for details on time-of-day",
+" format. The text, if given, can be a \\pattern() invocation, in which",
+" case it is treated as a pattern rather than a literal string (HELP",
+" PATTERNS for details).",
+""};
+
+static char *hxxout[] = {
+"Syntax: OUTPUT text",
+" Sends the text out the communications connection, as if you had typed it",
+" during CONNECT mode. The text may contain backslash codes, variables,",
+" etc, plus the following special codes:",
+" ",
+" \\N - Send a NUL (ASCII 0) character (you can't use \\0 for this).",
+" \\B - Send a BREAK signal.",
+" \\L - Send a Long BREAK signal.",
+" ",
+"Also see SET OUTPUT.",
+"" };
+#endif /* NOSPL */
+
+static char *hxypari[] = {
+"SET PARITY NONE",
+" Chooses 8 data bits and no parity.",
+" ",
+"SET PARITY { EVEN, ODD, MARK, SPACE }",
+" Chooses 7 data bits plus the indicated kind of parity.",
+" Forces 8th-bit prefixing during file transfer.",
+" ",
+#ifdef HWPARITY
+"SET PARITY HARDWARE { EVEN, ODD }",
+" Chooses 8 data bits plus the indicated kind of parity.",
+" ",
+"Also see SET TERMINAL BYTESIZE, SET SERIAL, and SET STOP-BITS.",
+#else
+"Also see SET TERMINAL BYTESIZE and SET SERIAL.",
+#endif /* HWPARITY */
+""};
+
+#ifndef NOLOCAL
+static char *hxyesc[] = {
+#ifdef OS2
+"Syntax: SET ESCAPE number",
+" Decimal ASCII value for escape character during CONNECT, normally 29",
+" (Control-]). Type the escape character followed by C to get back to the",
+" C-Kermit prompt or followed by ? to see other options, or use the \\Kexit",
+" keyboard verb, normally assigned to Alt-x.",
+#else
+#ifdef NEXT
+"Syntax: SET ESCAPE number",
+" Decimal ASCII value for escape character during CONNECT, normally 29",
+" (Control-]). Type the escape character followed by C to get back to the",
+" C-Kermit prompt or followed by ? to see other options.",
+#else
+"Syntax: SET ESCAPE number",
+" Decimal ASCII value for escape character during CONNECT, normally 28",
+" (Control-\\). Type the escape character followed by C to get back to the",
+" C-Kermit prompt or followed by ? to see other options.",
+#endif /* NEXT */
+#endif /* OS2 */
+" ",
+"You may also enter the escape character as ^X (circumflex followed by a",
+"letter or one of: @, ^, _, [, \\, or ], to indicate a control character;",
+"for example, SET ESC ^_ sets your escape character to Ctrl-Underscore.",
+" ",
+"You can also specify an 8-bit character (128-255) as your escape character,",
+"either by typing it literally or by entering its numeric code.",
+"" };
+#endif /* NOLOCAL */
+
+#ifndef NOSPL
+static char *hxyout[] = {
+"SET OUTPUT PACING <number>",
+" How many milliseconds to pause after sending each OUTPUT character,",
+" normally 0.",
+" ",
+"SET OUTPUT SPECIAL-ESCAPES { ON, OFF }",
+" Whether to process the special OUTPUT-only escapes \\B, \\L, and \\N.",
+" Normally ON (they are processed).",
+"" };
+
+static char *hxyinp[] = {
+"Syntax: SET INPUT parameter value",
+" ",
+#ifdef CK_AUTODL
+"SET INPUT AUTODOWNLOAD { ON, OFF }",
+" Controls whether autodownloads are allowed during INPUT command execution.",
+" ",
+#endif /* CK_AUTODL */
+"SET INPUT BUFFER-LENGTH number-of-bytes",
+" Removes the old INPUT buffer and creates a new one with the given length.",
+" ",
+"SET INPUT CANCELLATION { ON, OFF }",
+" Whether an INPUT in progress can be can interrupted from the keyboard.",
+" ",
+"SET INPUT CASE { IGNORE, OBSERVE }",
+" Tells whether alphabetic case is to be significant in string comparisons.",
+" This setting is local to the current macro or command file, and is",
+" inherited by subordinate macros and take files.",
+" ",
+"SET INPUT ECHO { ON, OFF }",
+" Tells whether to display arriving characters read by INPUT on the screen.",
+" ",
+#ifdef CKFLOAT
+"SET INPUT SCALE-FACTOR <number>",
+" A number to multiply all INPUT timeouts by, which may include a fractional",
+" part, e.g. 2.5. All INPUT commands that specify a timeout in seconds",
+" (as opposed to a specific time of day) have their time limit adjusted",
+" automatically by this factor, which is also available in the built-in",
+" read-only variable \\v(inscale). The default value is 1.0.",
+" ",
+
+#endif /* CKFLOAT */
+
+"SET INPUT SILENCE <number>",
+" The maximum number to seconds of silence (no input at all) before the",
+" INPUT command times out, 0 for no maximum.",
+" ",
+#ifdef OS2
+"SET INPUT TERMINAL { ON, OFF }",
+" Determines whether the data received during an INPUT command is displayed",
+" in the terminal window. Default is ON.",
+" ",
+#endif /* OS2 */
+"SET INPUT TIMEOUT-ACTION { PROCEED, QUIT }",
+" Tells whether to proceed or quit from a script program if an INPUT command",
+" fails. PROCEED (default) allows use of IF SUCCESS / IF FAILURE commands.",
+" This setting is local to the current macro or command file, and is",
+" inherited by subordinate macros and take files.",
+"" };
+
+static char *hxyfunc[] = {
+"SET FUNCTION DIAGNOSTICS { ON, OFF }",
+" Whether to issue diagnostic messages for illegal function calls and",
+" references to nonexistent built-in variables. ON by default.",
+" ",
+"SET FUNCTION ERROR { ON, OFF }",
+" Whether an illegal function call or reference to a nonexistent built-in",
+" variable should cause a command to fail. OFF by default.",
+"" };
+#endif /* NOSPL */
+
+static char *hxyxyz[] = {
+#ifdef CK_XYZ
+#ifdef XYZ_INTERNAL
+
+/* This is for built-in protocols */
+
+"Syntax: SET PROTOCOL { KERMIT, XMODEM, YMODEM, ZMODEM } [ s1 s2 [ s3 ] ]",
+" Selects protocol to use for transferring files. String s1 is a command to",
+" send to the remote host prior to SENDing files with this protocol in",
+" binary mode; string s2 is the same thing but for text mode. Use \"%\" in",
+" any of these strings to represent the filename(s). If the protocol is",
+" KERMIT, you may also specify a string s3, the command to start a Kermit",
+" server on the remote host when you give a GET, REGET, REMOTE, or other",
+" client command. Use { braces } if any command contains spaces. Examples:",
+" ",
+" set proto xmodem {rx %s} {rx -a %s}",
+" set proto kermit {kermit -YQir} {kermit -YQTr} {kermit -YQx}",
+
+#else /* This is for when non-Kermit protocols are external */
+
+"Syntax: \
+SET PROTOCOL { KERMIT, XMODEM, YMODEM, ZMODEM } [ s1 s2 s3 s4 s5 s6 ]",
+" Selects protocol to use for transferring files. s1 and s2 are commands to",
+" output prior to SENDing with this protocol, to automatically start the",
+" RECEIVE process on the other end in binary or text mode, respectively.",
+" If the protocol is KERMIT, s3 is the command to start a Kermit server on",
+" the remote computer, and there are no s4-s6 commands. Otherwise, s3 and",
+" s4 are commands used on this computer for sending files with this protocol",
+" in binary or text mode, respectively; s5 and s6 are the commands for",
+" receiving files with this protocol. Use \"%s\" in any of these strings",
+" to represent the filename(s). Use { braces } if any command contains",
+" spaces. Examples:",
+" ",
+" set proto kermit {kermit -YQir} {kermit -YQTr} {kermit -YQx}",
+" set proto ymodem rb {rb -a} {sb %s} {sb -a %s} rb rb",
+" ",
+"External protocols require REDIRECT and external file transfer programs that",
+"use redirectable standard input/output.",
+#endif /* XYZ_INTERNAL */
+#else
+"Syntax: \
+SET PROTOCOL KERMIT [ s1 [ s2 [ s3 ] ] ]",
+" Lets you specify the autoupload binary, autoupload text, and autoserver",
+" command strings to be sent to the remote system in advance of any SEND",
+" or GET commands. By default these are \"kermit -ir\", \"kermit -r\", and",
+" \"kermit -x\". Use { braces } around any command that contains spaces.",
+" Example:",
+" ",
+" set proto kermit {kermit -Yir} {kermit -YTr} {kermit -Yx}",
+#endif /* CK_XYZ */
+" ",
+" SHOW PROTOCOL displays the current settings.",
+""};
+
+static char *hmxxbye = "Syntax: BYE\n\
+ Shut down and log out a remote Kermit server";
+
+#ifdef CK_PERMS
+#ifdef UNIX
+static char *hmxxchmod[] = {
+"Syntax: CHMOD [ switches ] code filespec",
+" UNIX only. Changes permissions of the given file(s) to the given code,",
+" which must be an octal number such as 664 or 775. Optional switches:",
+" ",
+" /FILES Only change permissions of regular files.",
+" /DIRECTORIES Only change permissions of directory files.",
+" /TYPE:BINARY Only change permissions of binary files.",
+" /TYPE:TEXT Only change permissions of text files.",
+" /DOTFILES Include files whose names begin with dot (.).",
+" /RECURSIVE Change permissions in subdirectories too.",
+" /LIST List each file (synonym: /VERBOSE).",
+" /NOLIST Operate silently (synonym: /QUIET).",
+" /PAGE When listing, pause at end of each screen (implies /LIST).",
+" /NOPAGE When listing, don't pause at end of each screen.",
+" /SIMULATE Show what would be done but don't actually do it.",
+""
+};
+#endif /* UNIX */
+#endif /* CK_PERMS */
+
+#ifndef NOSPL
+#ifndef NOSEXP
+static char *hmxxsexp[] = {
+"Syntax: (operation operand [ operand [ ... ] ])",
+" ",
+" C-Kermit includes a simple LISP-like S-Expression parser operating on",
+" numbers only. An S-Expression is always enclosed in parentheses. The",
+" parentheses can contain (a) a number, (b) a variable, (c) a function that",
+" returns a number, or (d) an operator followed by one or more operands.",
+" Operands can be any of (a) through (c) or an S-Expression. Numbers can be",
+" integers or floating-point. Any operand that is not a number and does not",
+" start with backslash (\\) is treated as a Kermit macro name. Operators:",
+" ",
+" Operator Action Example Value",
+" EVAL (.) Returns the contained value (6) 6",
+" QUOTE (') Inhibits evaluation of following value (quote a) a",
+" SETQ Assigns a value to a global variable (setq a 2) 2",
+" LET Assigns a value to a local variable (let b -1.3) -1.3",
+" + Adds all operands (1 or more) (+ a b) 0.7",
+" - Subtracts all operands (1 or more) (- 9 5 2 1) 1",
+" * Multiplies all operands (1 or more) (* a (+ b 1) 3) -1.8",
+" / Divides all operands (1 or more) (/ b a 2) -0.325",
+" ^ Raise given number to given power (^ 3 2) 9",
+" ++ Increments a variable (++ a 1.2) 3.2",
+" -- Decrements a variable (-- a) 1",
+" ABS Absolute value of 1 operand (abs (* a b 3)) 7.8",
+" MAX Maximum of all operands (1 or more) (max 1 2 3 4) 4",
+" MIN Minimum of all operands (1 or more) (min 1 2 3 4) 1",
+" MOD Modulus of all operands (1 or more) (mod 7 4 2) 1",
+" TRUNCATE Integer part of floating-point operand (truncate 1.333) 1",
+" CEILING Ceiling of floating-point operand (ceiling 1.25) 2",
+" FLOOR Floor of floating-point operand (floor 1.25) 1",
+" ROUND Operand rounded to nearest integer (round 1.75) 2",
+" SQRT Square root of 1 operand (sqrt 2) 1.414..",
+" EXP e (2.71828..) to the given power (exp -1) 0.367..",
+" SIN Sine of angle expressed in radians (sin (/ pi 2)) 1.0",
+" COS Cosine of given number (cos pi) -1.0",
+" TAN Tangent of given number (tan pi) 0.0",
+" LOG Natural log (base e) of given number (log 2.7183) 1.000..",
+" LOG10 Log base 10 of given number (log10 1000) 3.0",
+" ",
+"Predicate operators return 0 if false, 1 if true, and if it is the outermost",
+"operator, sets SUCCESS or FAILURE accordingly:",
+" ",
+" < Operands in strictly descending order (< 6 5 4 3 2 1) 1",
+" <= Operands in descending order (<= 6 6 5 4 3 2) 1",
+" != Operands are not equal (!= 1 1 1.0) 0",
+" = (==) All operands are equal (= 3 3 3 3) 1",
+" > Operands in strictly ascending order (> 1 2 3 4 5 6) 1",
+" >= Operands in ascending order (> 1 1 2 3 4 5) 1",
+" AND (&&) Operands are all true (and 1 1 1 1 0) 0",
+" OR (||) At least one operand is true (or 1 1 1 1 0) 1",
+" XOR Logical Exclusive OR (xor 3 1) 0",
+" NOT (!) Reverses truth value of operand (not 3) 0",
+" ",
+"Bit-oriented operators:",
+" ",
+" & Bitwise AND (& 7 2) 2",
+" | Bitwise OR (| 1 2 3 4) 7",
+" # Bitwise Exclusive OR (# 3 1) 2",
+" ~ Reverses all bits (~ 3) -4",
+" ",
+"Operators that work on truth values:",
+" ",
+" IF Conditional evaluation (if (1) 2 3) 2",
+" ",
+"Operators can also be names of Kermit macros that return either numeric",
+"values or no value at all.",
+" ",
+"Built-in constants are:",
+" ",
+" t True (1)",
+" nil False (empty)",
+" pi The value of Pi (3.1415926...)",
+" ",
+"If SET SEXPRESSION ECHO-RESULT is AUTO (the default), the value of the",
+"S-Expression is printed if the S-Expression is given at top level; if ON,",
+"it is printed at any level; if OFF it is not printed. At all levels, the",
+"variable \\v(sexpression) is set to the most recent S-Expression, and",
+"\\v(svalue) is set to its value. You can use the \\fsexpresssion() function",
+"to evaluate an S-Expression anywhere in a Kermit command.",
+""
+};
+#endif /* NOSEXP */
+#endif /* NOSPL */
+
+static char *hmxxgrep[] = {
+#ifdef UNIXOROSK
+"Syntax: GREP [ options ] pattern filespec",
+#else
+"Syntax: FIND [ options ] pattern filespec",
+#endif /* UNIXOROSK */
+" Searches through the given file or files for the given character string",
+" or pattern. In the normal case, all lines containing any text that matches"
+,
+" the pattern are printed. Pattern syntax is as described in HELP PATTERNS",
+" except that '*' is implied at the beginning unless the pattern starts with",
+" '^' and also at the end unless the pattern ends with '$'. Therefore,",
+" \"grep something *.txt\" lists all lines in all *.txt files that contain",
+" the word \"something\", but \"grep ^something *.txt\" lists only the lines",
+" that START with \"something\". The command succeeds if any of the given",
+" files contained any lines that match the pattern, otherwise it fails.",
+#ifdef UNIXOROSK
+" Synonym: FIND.",
+#else
+" Synonym: GREP.",
+#endif /* UNIXOROSK */
+" ",
+"File selection options:",
+" /NOBACKUPFILES",
+" Excludes backup files (like oofa.txt.~3~) from the search.",
+" /DOTFILES",
+" Includes files whose names start with dot (.) in the search.",
+" /NODOTFILES",
+" Excludes files whose names start with dot (.) from the search.",
+#ifdef RECURSIVE
+" /RECURSIVE",
+" Searches through files in subdirectories too.",
+#endif /* RECURSIVE */
+" /TYPE:TEXT",
+" Search only text files (requires FILE SCAN ON).",
+" /TYPE:BINARY",
+" Search only binary files (requires FILE SCAN ON).",
+" ",
+"Pattern-matching options:",
+" /NOCASE",
+" Ignores case of letters (ASCII only) when comparing.",
+" /NOMATCH",
+" Searches for lines that do NOT match the pattern.",
+" ",
+"Display options:",
+" /COUNT:variable-name",
+" For each file, prints only the filename and a count of matching lines",
+" and assigns the total match count to the variable, if one is given.",
+" /NAMEONLY",
+" Prints the name of each file that contains at least one matching line,",
+" one name per line, rather than showing each matching line.",
+" /NOLIST",
+" Doesn't print anything (but sets SUCCESS or FAILURE appropriately).",
+" /LINENUMBERS",
+" Precedes each file line by its line number within the file.",
+" /PAGE",
+" Pauses after each screenful.",
+" /NOPAGE",
+" Doesn't pause after each screenful.",
+" /OUTPUT:name",
+" Sends results to the given file. If this switch is omitted, the",
+" results appear on your screen. This switch overrides any express or",
+" implied /PAGE switch.",
+""};
+
+static char *hmxxdir[] = {
+#ifdef DOMYDIR
+"Syntax: DIRECTORY [ switches ] [ filespec [ filespec [ ... ] ] ]",
+#ifdef LOCUS
+" If LOCUS is REMOTE or LOCUS is AUTO and you have an FTP connection,",
+" this command is equivalent to REMOTE DIRECTORY (RDIR). Otherwise:",
+" ",
+#endif /* LOCUS */
+" Lists local files. The filespec may be a filename, possibly containing",
+" wildcard characters, or a directory name. If no filespec is given, all",
+" files in the current directory are listed. If a directory name is given,",
+" all the files in it are listed. Multiple filespecs can be given.",
+" Optional switches:",
+" ",
+" /BRIEF List filenames only.",
+#ifdef CK_PERMS
+" /VERBOSE + Also list permissions, size, and date.",
+#else
+" /VERBOSE + Also list date and size.",
+#endif /* CK_PERMS */
+" /FILES Show files but not directories.",
+" /DIRECTORIES Show directories but not files.",
+" /ALL + Show both files and directories.",
+" /ARRAY:&a Store file list in specified array (e.g. \\%a[]).",
+" /PAGE Pause after each screenful.",
+" /NOPAGE Don't pause after each screenful.",
+#ifdef UNIXOROSK
+" /DOTFILES Include files whose names start with dot (period).",
+" /NODOTFILES + Don't include files whose names start with dot.",
+" /FOLLOWLINKS Follow symbolic links.",
+" /NOFOLLOWLINKS + Don't follow symbolic links.",
+" /BACKUP + Include backup files (names end with .~n~).",
+" /NOBACKUPFILES Don't include backup files.",
+#endif /* UNIXOROSK */
+" /OUTPUT:file Store directory listing in the given file.",
+" /HEADING Include heading and summary.",
+" /NOHEADING + Don't include heading or summary.",
+" /SUMMARY Print only count and total size of matching files.",
+" /XFERMODE Show pattern-based transfer mode (T=Text, B=Binary).",
+" /TYPE: Show only files of the specified type (text or binary).",
+" /MESSAGE:text Add brief message to each listing line.",
+" /NOMESSAGE + Don't add message to each listing line.",
+" /NOXFERMODE + Don't show pattern-based transfer mode",
+" /ISODATE + In verbose listings, show date in ISO 8061 format.",
+" /ENGLISHDATE In verbose listings, show date in \"English\" format.",
+#ifdef RECURSIVE
+" /RECURSIVE Descend through subdirectories.",
+" /NORECURSIVE + Don't descend through subdirectories.",
+#endif /* RECURSIVE */
+" /SORT:key Sort by key, NAME, DATE, or SIZE; default key is NAME.",
+" /NOSORT + Don't sort.",
+" /ASCENDING + If sorting, sort in ascending order.",
+" /REVERSE If sorting, sort in reverse order.",
+" ",
+"Factory defaults are marked with +. Default for paging depends on SET",
+"COMMAND MORE-PROMPTING. Use SET OPTIONS DIRECTORY [ switches ] to change",
+"defaults; use SHOW OPTIONS to display customized defaults.",
+#else
+"Syntax: DIRECTORY [ filespec ]",
+" Lists the specified file or files. If no filespec is given, all files",
+" in the current directory are listed.",
+#endif /* DOMYDIR */
+""};
+
+
+#ifndef NOSPL
+static char *hmxxkcd[] = {
+"Syntax: KCD symbolic-directory-name",
+" Kermit Change Directory: Like CD (q.v.) but (a) always acts locally, and",
+" (b) takes a symbolic directory name rather than an actual directory name.",
+" The symbolic names correspond to Kermit's directory-valued built-in",
+" variables, such as \\v(download), \\v(exedir), and so on. Here's the list:"
+,
+" ",
+#ifdef NT
+" appdata Your personal Kermit 95 application data directory",
+" common Kermit 95's application data directory for all users",
+" desktop Your Windows desktop",
+#endif /* NT */
+" download Your download directory (if any)",
+#ifdef OS2ORUNIX
+" exedir The directory where the Kermit executable resides",
+#endif /* OS2ORUNIX */
+" home Your home, login, or default directory",
+" inidir The directory where Kermit's initialization was found",
+#ifdef UNIX
+" lockdir The UNIX UUCP lockfile directory on this computer",
+#endif /* UNIX */
+#ifdef NT
+" personal Your \"My Documents\" directory",
+#endif /* NT */
+" startup Your current directory at the time Kermit started",
+" textdir The directory where Kermit text files reside, if any",
+" tmpdir Your temporary directory",
+" ",
+" Also see CD, SET FILE DOWNLOAD, SET TEMP-DIRECTORY.",
+""
+};
+#endif /* NOSPL */
+
+static char *hmxxcwd[] = {
+#ifdef LOCUS
+" If LOCUS is REMOTE or LOCUS is AUTO and you have an FTP connection,",
+" this command is equivalent to REMOTE CD (RCD). Otherwise:",
+" ",
+#endif /* LOCUS */
+#ifdef vms
+"Syntax: CD [ directory or device:directory ]",
+" Change Working Directory. Equivalent to VMS SET DEFAULT command.",
+#else
+#ifdef datageneral
+"Change Working Directory, equivalent to AOS/VS 'dir' command.",
+#else
+#ifdef OS2
+"Syntax: CD [ disk or directory name ]",
+" Change Disk or Directory. If a disk or directory name is not specified,",
+" your current directory becomes the one specified by HOME environment",
+" variable, if any. A disk letter must be followed by a colon.",
+#else
+"Syntax: CD [ directory name ]",
+" Change Directory. Changes your current, working, default directory to the",
+" one given, so that future non-absolute filename references are relative to",
+" this directory. If the directory name is omitted, your home (login)",
+" directory is supplied.",
+#endif /* OS2 */
+#endif /* datageneral */
+#endif /* vms */
+" C-Kermit's default prompt shows your current directory.",
+" Synonyms: LCD, CWD.",
+#ifdef LOCUS
+" Also see: SET LOCUS, PWD, CDUP, BACK, REMOTE CD (RCD), SET CD, SET PROMPT.",
+#else
+" Also see: PWD, CDUP, BACK, REMOTE CD (RCD), SET CD, SET PROMPT.",
+#endif /* LOCUS */
+#ifndef NOSPL
+" And see: HELP KCD.",
+#endif /* NOSPL */
+" Relevant environment variables: CDPATH, HOME.",
+""};
+
+static char *hmxxdel[] = {
+"Syntax: DELETE [ switches... ] filespec",
+#ifdef LOCUS
+" If LOCUS is REMOTE or LOCUS is AUTO and you have an FTP connection,",
+" this command is equivalent to REMOTE DELETE (RDELETE). Otherwise:",
+" ",
+#endif /* LOCUS */
+" Deletes a file or files on the computer where C-Kermit is running.",
+" The filespec may denote a single file or can include wildcard characters",
+" to match multiple files. RM is a synonym for DELETE. Switches include:",
+" ",
+"/AFTER:date-time",
+#ifdef VMS
+" Specifies that only those files created after the given date-time are",
+#else
+" Specifies that only those files modified after the given date-time are",
+#endif /* VMS */
+" to be deleted. HELP DATE for info about date-time formats.",
+" ",
+"/BEFORE:date-time",
+#ifdef VMS
+" Specifies that only those files modified before the given date-time",
+#else
+" Specifies that only those files modified before the given date-time",
+#endif /* VMS */
+" are to be deleted.",
+" ",
+"/NOT-AFTER:date-time",
+#ifdef VMS
+" Specifies that only those files modified at or before the given date-time",
+#else
+" Specifies that only those files modified at or before the given date-time",
+#endif /* VMS */
+" are to be deleted.",
+" ",
+"/NOT-BEFORE:date-time",
+#ifdef VMS
+" Specifies that only those files modified at or after the given date-time",
+#else
+" Specifies that only those files modified at or after the given date-time",
+#endif /* VMS */
+" are to be deleted.",
+" ",
+"/LARGER-THAN:number",
+" Specifies that only those files longer than the given number of bytes are",
+" to be deleted.",
+" ",
+"/SMALLER-THAN:number",
+" Specifies that only those files smaller than the given number of bytes are",
+" to be sent.",
+" ",
+"/EXCEPT:pattern",
+" Specifies that any files whose names match the pattern, which can be a",
+" regular filename or may contain wildcards, are not to be deleted. To",
+" specify multiple patterns (up to 8), use outer braces around the group",
+" and inner braces around each pattern:",
+" ",
+" /EXCEPT:{{pattern1}{pattern2}...}",
+" ",
+#ifdef UNIXOROSK
+"/DOTFILES",
+" Include (delete) files whose names begin with \".\".",
+" ",
+"/NODOTFILES",
+" Skip (don't delete) files whose names begin with \".\".",
+" ",
+#endif /* UNIXOROSK */
+"/TYPE:TEXT",
+" Delete only regular text files (requires FILE SCAN ON)",
+" ",
+"/TYPE:BINARY",
+" Delete only regular binary files (requires FILE SCAN ON)",
+" ",
+"/DIRECTORIES",
+" Include directories. If this switch is not given, only regular files",
+" are deleted. If it is given, Kermit attempts to delete any directories",
+" that match the given file specification, which succeeds only if the",
+" directory is empty.",
+" ",
+#ifdef RECURSIVE
+"/RECURSIVE",
+" The DELETE command applies to the entire directory tree rooted in the",
+" current or specified directory. When the /DIRECTORIES switch is also",
+" given, Kermit deletes all the (matching) files in each directory before",
+" attempting to delete the directory itself.",
+" ",
+#endif /* RECURSIVE */
+#ifdef UNIX
+#ifdef RECURSIVE
+"/ALL",
+" This is a shortcut for /RECURSIVE /DIRECTORIES /DOTFILES.",
+#else
+"/ALL",
+" This is a shortcut for /DIRECTORIES /DOTFILES.",
+#endif /* RECURSIVE */
+#else /* !UNIX */
+#ifdef RECURSIVE
+"/ALL",
+" This is a shortcut for /RECURSIVE /DIRECTORIES.",
+#else
+"/ALL",
+" This is a synonym for /DIRECTORIES.",
+#endif /* RECURSIVE */
+#endif /* UNIX */
+" ",
+"/LIST",
+" List each file and tell whether it was deleted. Synonyms: /LOG, /VERBOSE.",
+" ",
+"/NOLIST",
+" Don't list files while deleting. Synonyms: /NOLOG, /QUIET.",
+" ",
+"/HEADING",
+" Print heading and summary information.",
+" ",
+"/NOHEADING",
+" Don't print heading and summary information.",
+" ",
+"/SUMMARY",
+" Like /HEADING /NOLIST, but only prints the summary line.",
+" ",
+"/PAGE",
+" If listing, pause after each screenful.",
+" ",
+"/NOPAGE",
+" Don't pause after each screenful.",
+" ",
+"/ASK",
+" Interactively ask permission to delete each file. Reply Yes or OK to",
+" delete it, No not to delete it, Quit to cancel the DELETE command, and",
+" Go to go ahead and delete all the rest of the files without asking.",
+" ",
+"/NOASK",
+" Delete files without asking permission.",
+" ",
+"/SIMULATE",
+" Preview files selected for deletion without actually deleting them.",
+" Implies /LIST.",
+" ",
+"Use SET OPTIONS DELETE to make selected switches effective for every DELETE",
+"command \
+unless you override them; use SHOW OPTIONS to see selections currently",
+#ifdef LOCUS
+"in effect. Also see HELP SET LOCUS, HELP PURGE, HELP WILDCARD.",
+#else
+"in effect. Also see HELP PURGE, HELP WILDCARD.",
+#endif /* LOCUS */
+""};
+
+#ifndef NOHTTP
+static char *hmxxhttp[] = {
+"Syntax:",
+#ifdef CK_SSL
+"HTTP [ <switches> ] OPEN [{ /SSL, /TLS }] <hostname> <service/port>",
+#else
+"HTTP [ <switches> ] OPEN <hostname> <service/port>",
+#endif /*CK_SSL */
+" Instructs Kermit to open a new connection for HTTP communication with",
+" the specified host on the specified port. The default port is \"http\".",
+#ifdef CK_SSL
+" If /SSL or /TLS are specified or if the service is \"https\" or port 443,",
+" a secure connection will be established using the current authentication",
+" settings. See HELP SET AUTH for details.",
+#endif /* CK_SSL */
+" If <switches> are specified, they are applied to all subsequent HTTP",
+" actions (GET, PUT, ...) until an HTTP CLOSE command is executed.",
+" A URL can be included in place of the hostname and service or port.",
+" ",
+"HTTP CLOSE",
+" Instructs Kermit to close any open HTTP connection and clear any saved",
+" switch values.",
+" ",
+"HTTP [ <switches> ] CONNECT <host>[:<port>]",
+" Instructs the server to establish a connection with the specified host",
+" and to redirect all data transmitted between Kermit and the host for the",
+" life of the connection.",
+" ",
+"HTTP [ <switches> ] GET <remote-filename> [ <local-filename> ]",
+" Retrieves the named file on the currently open HTTP connection. The",
+" default local filename is the same as the remote filename, but with any",
+" path stripped. If you want the file to be displayed on the screen instead",
+" of stored on disk, include the /TOSCREEN switch and omit the local",
+" filename. If you give a URL instead of a remote filename, this commands",
+" opens the connection, GETs the file, and closes the connection; the same",
+" is true for the remaining HTTP commands for which you can specify a",
+" remote filename, directory name, or path.",
+" ",
+"HTTP [ <switches> ] HEAD <remote-filename> [ <local-filename> ]",
+" Like GET except without actually getting the file; instead it gets only",
+" the headers, storing them into the given file (if a local filename is",
+" specified), one line per header item as shown in the /ARRAY: switch",
+" description.",
+" ",
+"HTTP [ <switches> ] INDEX <remote-directory> [ <local-filename> ]",
+" Retrieves the file listing for the given server directory.",
+" NOTE: This command is not supported by most Web servers, and even when",
+" the server understand it, there is no stardard response format.",
+" ",
+"HTTP [ <switches> ] POST [ /MIME-TYPE:<type> ] <local-file> <remote-path>",
+" [ <dest-file> ]",
+" Used to send a response as if it were sent from a form. The data to be",
+" posted must be read from a file.",
+" ",
+"HTTP [ <switches> ] PUT [ /MIME-TYPE:<type> ] <local-file> <remote-file>",
+" [ <dest-file> ]",
+" Uploads the given local file to server file. If the remote filename is",
+" omitted, the local name is used, but with any path stripped.",
+" ",
+"HTTP [ <switches> ] DELETE <remote-filename>",
+" Instructs the server to delete the specified filename.",
+" ",
+"where <switches> are:",
+"/AGENT:<user-agent>",
+" Identifies the client to the server; \"C-Kermit\" or \"Kermit-95\"",
+" by default.",
+" ",
+"/HEADER:<header-line>",
+" Used for specifying any optional headers. A list of headers is provided",
+" using braces for grouping:",
+" ",
+" /HEADER:{{<tag>:<value>}{<tag>:<value>}...}",
+" ",
+" For a listing of valid <tag> value and <value> formats see RFC 1945:",
+" \"Hypertext Transfer Protocol -- HTTP/1.0\". A maximum of eight headers",
+" may be specified.",
+" ",
+"/TOSCREEN",
+" Display server responses on the screen.",
+" ",
+"/USER:<name>",
+" In case a page requires a username for access.",
+" ",
+"/PASSWORD:<password>",
+" In case a page requires a password for access.",
+" ",
+"/ARRAY:<arrayname>",
+" Tells Kermit to store the response headers in the given array, one line",
+" per element. The array need not be declared in advance. Example:",
+" ",
+" http /array:c get kermit/index.html",
+" show array c",
+" Dimension = 9",
+" 1. Date: Fri, 26 Nov 1999 23:12:22 GMT",
+" 2. Server: Apache/1.3.4 (Unix)",
+" 3. Last-Modified: Mon, 06 Sep 1999 22:35:58 GMT",
+" 4. ETag: \"bc049-f72-37d441ce\"",
+" 5. Accept-Ranges: bytes",
+" 6. Content-Length: 3954",
+" 7. Connection: close ",
+" 8. Content-Type: text/html",
+" ",
+"As you can see, the header lines are like MIME e-mail header lines:",
+"identifier, colon, value. The /ARRAY switch is the only method available",
+"to a script to process the server responses for a POST or PUT command.",
+" ",
+""
+};
+#endif /* NOHTTP */
+
+#ifdef CK_KERBEROS
+static char *hmxxauth[] = {
+"Syntax:",
+"AUTHENTICATE { KERBEROS4, KERBEROS5 [ switches ] } <action> [ switches ]",
+" Obtains or destroys Kerberos tickets and lists information about them.",
+" Actions are INITIALIZE, DESTROY, and LIST-CREDENTIALS. KERBEROS4 can be",
+" abbreviated K4 or KRB4; KERBEROS5 can be abbreviated K5 or KRB5. Use ? to",
+" see which keywords, switches, or other quantities are valid at each point",
+" in the command.",
+" ",
+" The actions are INITIALIZE, DESTROY, and LIST-CREDENTIALS:",
+" ",
+" AUTH { K4, K5 } { INITIALIZE [switches], DESTROY,",
+" LIST-CREDENTIALS [switches] }",
+" ",
+" The INITIALIZE action is the most complex, and its format is different",
+" for Kerberos 4 and Kerberos 5. The format for Kerberos 4 is:",
+" ",
+" AUTH K4 INITIALIZE [ /INSTANCE:<name> /LIFETIME:<minutes> -",
+" /PASSWORD:<password> /PREAUTH /REALM:<name> <principal> ]",
+" ",
+" All switches are optional. Kerberos 4 INITIALIZE switches are:",
+" ",
+" /INSTANCE:<name>",
+" Allows an Instance (such as a hostname) to be specified.",
+" ",
+" /LIFETIME:<number>",
+" Specifies the requested lifetime in minutes for the ticket. If no",
+" lifetime is specified, 600 minutes is used. If the lifetime is greater",
+" than the maximum supported by the ticket granting service, the resulting",
+" lifetime is shortened accordingly.",
+" ",
+" /NOT-PREAUTH",
+" Instructs Kermit to send a ticket getting ticket (TGT) request to the",
+" KDC without any preauthentication data.",
+" ",
+" /PASSWORD:<string>",
+" Allows a password to be included on the command line or in a script",
+" file. If no /PASSWORD switch is included, you are prompted on a separate"
+,
+" line. The password switch is provided on a use-at-your-own-risk basis",
+" for use in automated scripts. WARNING: Passwords should not be stored in"
+,
+" files.",
+" ",
+" /PREAUTH",
+" Instructs Kermit to send a preauthenticated Ticket-Getting Ticket (TGT)",
+" request to the KDC instead of a plaintext request. The default when",
+" supported by the Kerberos libraries.",
+" ",
+" /REALM:<name>",
+" Allows a realm to be specified (overriding the default realm).",
+" ",
+" <principal>",
+" Your identity in the given or default Kerberos realm, of the form:",
+" userid[.instance[.instance]]@[realm] ",
+" Can be omitted if it is the same as your username or SET LOGIN USERID",
+" value on the client system.",
+" ",
+" The format for Kerberos 5 is as follows:",
+" ",
+" AUTH K5 [ /CACHE:<filename> ] { INITIALIZE [ switches ], DESTROY,",
+" LIST-CREDENTIALS ...}",
+" ",
+"The INITIALIZE command for Kerberos 5 can include a number of switches;",
+"all are optional:",
+" ",
+"AUTH K5 [ /CACHE:<filename> ] INITITIALIZE [ /ADDRESSES:<addr-list>",
+" /FORWARDABLE /KERBEROS4 /LIFETIME:<minutes> /PASSWORD:<password>",
+" /POSTDATE:<date-time> /PROXIABLE /REALM:<name> /RENEW /RENEWABLE:<minutes>",
+" /SERVICE:<name> /VALIDATE <principal> ]",
+" ",
+" All Kerberos 5 INITIALIZE switches are optional:",
+" ",
+" /ADDRESSES:{list of ip-addresses}",
+" Specifies a list of IP addresses that should be placed in the Ticket",
+" Getting Ticket in addition to the local machine addresses.",
+" ",
+" /FORWARDABLE",
+" Requests forwardable tickets.",
+" ",
+" /INSTANCE:<name>",
+" Allows an Instance (such as a hostname) to be specified.",
+" ",
+" /KERBEROS4",
+" Instructs Kermit to get Kerberos 4 tickets in addition to Kerberos 5",
+" tickets. If Kerberos 5 tickets are not supported by the server, a",
+" mild warning is printed and Kerberos 4 tickets are requested.",
+" ",
+" /LIFETIME:<number>",
+" Specifies the requested lifetime in minutes for the ticket. If no",
+" lifetime is specified, 600 minutes is used. If the lifetime is greater",
+" than the maximum supported by the ticket granting service, the resulting",
+" lifetime is shortened.",
+" ",
+" /NO-KERBEROS4",
+" Instructs Kermit to not attempt to retrieve Kerberos 4 credentials.",
+" ",
+" /NOT-FORWARDABLE",
+" Requests non-forwardable tickets.",
+" ",
+" /NOT-PROXIABLE",
+" Requests non-proxiable tickets.",
+" ",
+" /PASSWORD:<string>",
+" Allows a password to be included on the command line or in a script",
+" file. If no /PASSWORD switch is included, you are prompted on a separate"
+,
+" line. The password switch is provided on a use-at-your-own-risk basis",
+" for use in automated scripts. WARNING: Passwords should not be stored in"
+,
+" files.",
+" ",
+" /POSTDATE:<date-time>",
+" Requests a postdated ticket, valid starting at <date-time>. Postdated",
+" tickets are issued with the invalid flag set, and need to be fed back to",
+" the KDC before use with the /VALIDATE switch. Type HELP DATE for info",
+" on date-time formats.",
+" ",
+" /PROXIABLE",
+" Requests proxiable tickets.",
+" ",
+" /REALM:<string>",
+" Allows an alternative realm to be specified.",
+" ",
+" /RENEW",
+" Requests renewal of a renewable Ticket-Granting Ticket. Note that ",
+" an expired ticket cannot be renewed even if it is within its renewable ",
+" lifetime.",
+" ",
+" /RENEWABLE:<number>",
+" Requests renewable tickets, with a total lifetime of <number> minutes.",
+" ",
+" /SERVICE:<string>",
+" Allows a service other than the ticket granting service to be specified.",
+" ",
+" /VALIDATE",
+" Requests that the Ticket Granting Ticket in the cache (with the invalid",
+" flag set) be passed to the KDC for validation. If the ticket is within",
+" its requested time range, the cache is replaced with the validated",
+" ticket.",
+" ",
+" <principal>",
+" Your identity in the given or default Kerberos realm, of the form:",
+" userid[/instance][@realm] ",
+" Can be omitted if it is the same as your username or SET LOGIN USERID",
+" value on the client system.",
+" ",
+" Note: Kerberos 5 always attempts to retrieve a Ticket-Getting Ticket (TGT)",
+" using the preauthenticated TGT request.",
+" ",
+" AUTHORIZE K5 LIST-CREDENTIALS [ /ADDRESSES /FLAGS /ENCRYPTION ]",
+" ",
+" Shows start time, expiration time, service or principal name, plus",
+" the following additional information depending the switches:",
+" ",
+" /ADDRESSES displays the hostnames and/or IP addresses embedded within",
+" the tickets.",
+" ",
+" /FLAGS provides the following information (if applicable) for each ticket:",
+" F - Ticket is Forwardable",
+" f - Ticket was Forwarded",
+" P - Ticket is Proxiable",
+" p - Ticket is a Proxy",
+" D - Ticket may be Postdated",
+" d - Ticket has been Postdated",
+" i - Ticket is Invalid",
+" R - Ticket is Renewable",
+" I - Ticket is the Initial Ticket",
+" H - Ticket has been authenticated by Hardware",
+" A - Ticket has been Pre-authenticated",
+" ",
+" /ENCRYPTION displays the encryption used by each ticket (if applicable):",
+" DES-CBC-CRC",
+" DES-CBC-MD4",
+" DES-CBC-MD5",
+" DES3-CBC-SHA",
+""
+};
+#endif /* CK_KERBEROS */
+
+#ifndef NOCSETS
+static char *hmxxassoc[] = {
+"ASSOCIATE FILE-CHARACTER-SET <file-character-set> <transfer-character-set>",
+" Tells C-Kermit that whenever the given file-character set is selected, and",
+" SEND CHARACTER-SET (q.v.) is AUTOMATIC, the given transfer character-set",
+" is selected automatically.",
+" ",
+"ASSOCIATE XFER-CHARACTER-SET <xfer-character-set> <file-character-set>",
+" Tells C-Kermit that whenever the given transfer-character set is selected,",
+" either by command or by an announcer attached to an incoming text file,",
+" and SEND CHARACTER-SET is AUTOMATIC, the specified file character-set is",
+" to be selected automatically. Synonym: ASSOCIATE TRANSFER-CHARACTER-SET.",
+" ",
+"Use SHOW ASSOCIATIONS to list the current character-set associations, and",
+"SHOW CHARACTER-SETS to list the current settings.",
+""
+};
+#endif /* NOCSETS */
+
+static char *hmxxpat[] = {
+"A \"pattern\" is notation used in a search string when searching through",
+"text. C-Kermit uses three kinds of patterns: floating patterns, anchored",
+"patterns, and wildcards. Wildcards are anchored patterns that are used to",
+"match file names; type HELP WILDCARD to learn about them.",
+" ",
+"In a pattern, certain characters are special:",
+" ",
+"* Matches any sequence of zero or more characters. For example, \"k*t\"",
+" matches all strings that start with \"k\" and end with \"t\" including",
+" \"kt\", \"kit\", \"knight\", or \"kermit\".",
+" ",
+#ifdef VMS
+"% Matches any single character. For example, \"k%%%%t\" matches all strings",
+#else
+"? Matches any single character. For example, \"k????t\" matches all strings",
+#endif /* VMS */
+" that are exactly 6 characters long and start with \"k\" and end with",
+#ifdef VMS
+" with \"t\".",
+#else
+" with \"t\". When typing commands at the prompt, you must precede any",
+" question mark to be used for matching by a backslash (\\) to override the",
+" normal function of question mark, which is providing menus and file lists.",
+#endif /* VMS */
+" ",
+#ifdef OS2ORUNIX
+#ifdef CKREGEX
+"[abc]",
+" Square brackets enclosing a list of characters matches any character in",
+" the list. Example: h[aou]t matches hat, hot, and hut.",
+" ",
+"[a-z]",
+" Square brackets enclosing a range of characters matches any character in",
+" the range; a hyphen (-) separates the low and high elements of the range.",
+" For example, [a-z] matches any character from a to z.",
+" ",
+"[acdm-z]",
+" Lists and ranges may be combined. This example matches a, c, d, or any",
+" letter from m through z.",
+" ",
+"{string1,string2,...}",
+" Braces enclose a list of strings to be matched. For example:",
+" ker{mit,nel,beros} matches kermit, kernel, and kerberos. The strings",
+" may themselves contain *, ?, [abc], [a-z], or other lists of strings.",
+#endif /* CKREGEX */
+#endif /* OS2ORUNIX */
+#ifndef NOSPL
+" ",
+"To force a special pattern character to be taken literally, precede it with",
+"a backslash, e.g. [a\\-z] matches a, hyphen, and z rather than a through z.",
+" ",
+"A floating pattern can also include the following special characters:",
+" ",
+"^ (First character of pattern) Anchors the pattern at the beginning.",
+"$ (Last character of pattern) Anchors the pattern at the end.",
+" ",
+"If a floating pattern does not start with \"^\", the pattern can match",
+"anywhere in the string instead of only at the beginning; in other words, a",
+"leading \"*\" is assumed. Similarly, if the pattern doesn't end with \"$\",",
+"a trailing \"*\" is assumed.",
+" ",
+"The following commands and functions use floating patterns:",
+" GREP [ <switches> ] <pattern> <filespec>",
+" TYPE /MATCH:<pattern> <file>",
+" \\farraylook(<pattern>,<arrayname>)",
+" \\fsearch(<pattern>,<string>[,<offset>])",
+" \\frsearch(<pattern>,<string>[,<offset>])",
+" The /EXCEPT: clause in SEND, GET, DELETE, etc.",
+" ",
+"Example:",
+" \\fsearch(abc,xxabcxxx) succeeds because xxabcxx contains abc.",
+" \\fsearch(^abc,xxabcxx) fails because xxabcxx does not start with abc.",
+" ",
+"All other commands and functions that use patterns use anchored patterns,",
+"meaning that ^ and $ are not treated specially, and * is not assumed at the",
+"beginning or end of the pattern. This is true mainly of filename patterns",
+"(wildcards), since you would not want a command like \"delete x\" to delete",
+"all files whose names contained \"x\"!",
+" ",
+"You can use anchored patterns not only in filenames, but also in SWITCH",
+"case labels, in the INPUT and MINPUT commands, and in file binary- and",
+"text-patterns for filenames. The IF MATCH pattern is also anchored.",
+#endif /* NOSPL */
+"" };
+
+static char *hmxxwild[] = {
+
+"A \"wildcard\" is a notation used in a filename to match multiple files.",
+"For example, in \"send *.txt\" the asterisk is a wildcard. Kermit commands",
+"that accept filenames also accepts wildcards, except commands that are",
+"allowed to operate on only one file, such as TRANSMIT.",
+"This version of Kermit accepts the following wildcards:",
+" ",
+"* Matches any sequence of zero or more characters. For example, \"ck*.c\"",
+" matches all files whose names start with \"ck\" and end with \".c\"",
+" including \"ck.c\".",
+" ",
+#ifdef VMS
+"% Matches any single character. For example, \"ck%.c\" matches all files",
+#else
+"? Matches any single character. For example, \"ck?.c\" matches all files",
+#endif /* VMS */
+" whose names are exactly 5 characters long and start with \"ck\" and end",
+#ifdef VMS
+" with \".c\".",
+#else
+" with \".c\". When typing commands at the prompt, you must precede any",
+" question mark to be used for matching by a backslash (\\) to override the",
+" normal function of question mark, which is providing menus and file lists.",
+#endif /* VMS */
+" ",
+#ifdef OS2ORUNIX
+#ifdef CKREGEX
+"[abc]",
+" Square brackets enclosing a list of characters matches any character in",
+" the list. Example: ckuusr.[ch] matches ckuusr.c and ckuusr.h.",
+" ",
+"[a-z]",
+" Square brackets enclosing a range of characters matches any character in",
+" the range; a hyphen (-) separates the low and high elements of the range.",
+" For example, [a-z] matches any character from a to z.",
+" ",
+"[acdm-z]",
+" Lists and ranges may be combined. This example matches a, c, d, or any",
+" letter from m through z.",
+" ",
+"{string1,string2,...}",
+" Braces enclose a list of strings to be matched. For example:",
+" ck{ufio,vcon,cmai}.c matches ckufio.c, ckvcon.c, or ckcmai.c. The strings",
+" may themselves contain *, ?, [abc], [a-z], or other lists of strings.",
+#endif /* CKREGEX */
+#endif /* OS2ORUNIX */
+" ",
+"To force a special pattern character to be taken literally, precede it with",
+"a backslash, e.g. [a\\-z] matches a, hyphen, and z rather than a through z.",
+" ",
+#ifndef NOSPL
+"Similar notation can be used in general-purpose string matching. Type HELP",
+"PATTERNS for details. Also see HELP SET MATCH.",
+#endif /* NOSPL */
+"" };
+
+#ifndef NOXFER
+static char *hmxxfast[] = {
+"FAST, CAUTIOUS, and ROBUST are predefined macros that set several",
+"file-transfer parameters at once to achieve the desired file-transfer goal.",
+"FAST chooses a large packet size, a large window size, and a fair amount of",
+"control-character unprefixing at the risk of possible failure on some",
+"connections. FAST is the default tuning in C-Kermit 7.0 and later. In case",
+"FAST file transfers fail for you on a particular connection, try CAUTIOUS.",
+"If that fails too, try ROBUST. You can also change the definitions of each",
+"macro with the DEFINE command. To see the current definitions, type",
+"\"show macro fast\", \"show macro cautious\", or \"show macro robust\".",
+""
+};
+#endif /* NOXFER */
+
+#ifdef VMS
+static char * hmxxpurge[] = {
+"Syntax: PURGE [ switches ] [ filespec ]",
+" Runs the DCL PURGE command. Switches and filespec are not parsed or",
+" verified by Kermit, but passed directly to DCL.",
+""
+};
+#else
+#ifdef CKPURGE
+static char * hmxxpurge[] = {
+"Syntax: PURGE [ switches ] [ filespec ]",
+" Deletes backup files; that is, files whose names end in \".~n~\", where",
+" n is a number. PURGE by itself deletes all backup files in the current",
+" directory. Switches:",
+
+" ",
+"/AFTER:date-time",
+#ifdef VMS
+" Specifies that only those files created after the given date-time are",
+#else
+" Specifies that only those files modified after the given date-time are",
+#endif /* VMS */
+" to be purged. HELP DATE for info about date-time formats.",
+" ",
+"/BEFORE:date-time",
+#ifdef VMS
+" Specifies that only those files modified before the given date-time",
+#else
+" Specifies that only those files modified before the given date-time",
+#endif /* VMS */
+" are to be purged.",
+" ",
+"/NOT-AFTER:date-time",
+#ifdef VMS
+" Specifies that only those files modified at or before the given date-time",
+#else
+" Specifies that only those files modified at or before the given date-time",
+#endif /* VMS */
+" are to be purged.",
+" ",
+"/NOT-BEFORE:date-time",
+#ifdef VMS
+" Specifies that only those files modified at or after the given date-time",
+#else
+" Specifies that only those files modified at or after the given date-time",
+#endif /* VMS */
+" are to be purged.",
+" ",
+"/LARGER-THAN:number",
+" Specifies that only those files longer than the given number of bytes are",
+" to be purged.",
+" ",
+"/SMALLER-THAN:number",
+" Specifies that only those files smaller than the given number of bytes are",
+" to be purged.",
+" ",
+"/EXCEPT:pattern",
+" Specifies that any files whose names match the pattern, which can be a",
+" regular filename or may contain wildcards, are not to be purged. To",
+" specify multiple patterns (up to 8), use outer braces around the group",
+" and inner braces around each pattern:",
+" ",
+" /EXCEPT:{{pattern1}{pattern2}...}",
+" ",
+#ifdef UNIXOROSK
+"/DOTFILES",
+" Include (purge) files whose names begin with \".\".",
+" ",
+"/NODOTFILES",
+" Skip (don't purge) files whose names begin with \".\".",
+" ",
+#endif /* UNIXOROSK */
+#ifdef RECURSIVE
+"/RECURSIVE",
+" Descends through the current or specified directory tree.",
+" ",
+#endif /* RECURSIVE */
+"/KEEP:n",
+" Retain the 'n' most recent (highest-numbered) backup files for each file.",
+" By default, none are kept. If /KEEP is given without a number, 1 is used.",
+" ",
+"/LIST",
+" Display each file as it is processed and say whether it is purged or kept.",
+" Synonyms: /LOG, /VERBOSE.",
+" ",
+"/NOLIST",
+" The PURGE command should operate silently (default).",
+" Synonyms: /NOLOG, /QUIET.",
+" ",
+"/HEADING",
+" Print heading and summary information.",
+" ",
+"/NOHEADING",
+" Don't print heading and summary information.",
+" ",
+"/PAGE",
+" When /LIST is in effect, pause at the end of each screenful, even if",
+" COMMAND MORE-PROMPTING is OFF.",
+" ",
+"/NOPAGE",
+" Don't pause, even if COMMAND MORE-PROMPTING is ON.",
+" ",
+"/ASK",
+" Interactively ask permission to delete each backup file.",
+" ",
+"/NOASK",
+" Purge backup files without asking permission.",
+" ",
+"/SIMULATE",
+" Inhibits the actual deletion of files; use to preview which files would",
+" actually be deleted. Implies /LIST.",
+" ",
+"Use SET OPTIONS PURGE [ switches ] to change defaults; use SHOW OPTIONS to",
+"display customized defaults. Also see HELP DELETE, HELP WILDCARD.",
+""
+};
+#endif /* CKPURGE */
+#endif /* VMS */
+
+static char *hmxxclo[] = {
+"Syntax: CLOSE [ item ]",
+" Close the indicated item. The default item is CONNECTION, which is the",
+" current SET LINE or SET HOST connection. The other items are:",
+" ",
+#ifdef CKLOGDIAL
+" CX-LOG (connection log, opened with LOG CX)",
+#endif /* CKLOGDIAL */
+#ifndef NOLOCAL
+" SESSION-LOG (opened with LOG SESSION)",
+#endif /* NOLOCAL */
+#ifdef TLOG
+" TRANSACTION-LOG (opened with LOG TRANSACTIONS)",
+#endif /* TLOG */
+" PACKET-LOG (opened with LOG PACKETS)",
+#ifdef DEBUG
+" DEBUG-LOG (opened with LOG DEBUG)",
+#endif /* DEBUG */
+#ifndef NOSPL
+" READ-FILE (opened with OPEN READ)",
+" WRITE-FILE (opened with OPEN WRITE or OPEN APPEND)",
+#endif /* NOSPL */
+" ",
+"Type HELP LOG and HELP OPEN for further info.",
+""
+};
+
+#ifdef CKLEARN
+static char * hmxxlearn[] = {
+"Syntax: LEARN [ /ON /OFF /CLOSE ] [ filename ]",
+" Records a login script. If you give a filename, the file is opened for",
+" subsequent recording. If you don't give any switches, /ON is assumed.",
+" /ON enables recording to the current file (if any); /OFF disables",
+" recording. /CLOSE closes the current file (if any). After LEARN /CLOSE",
+" or exit from Kermit, your script is available for execution by the TAKE",
+" command.",
+""
+};
+#endif /* CKLEARN */
+
+#ifdef CK_MINPUT
+static char *hmxxminp[] = {
+"Syntax: MINPUT n [ string1 [ string2 [ ... ] ] ]",
+"Example: MINPUT 5 Login: {Username: } {NO CARRIER} BUSY RING",
+" For use in script programs. Waits up to n seconds for any one of the",
+" strings to arrive on the communication device. If no strings are given,",
+" the command waits for any character at all to arrive. Strings are",
+" separated by spaces; use { braces } for grouping. If any of the strings",
+" is encountered within the timeout interval, the command succeeds and the",
+" \\v(minput) variable is set to the number of the string that was matched:",
+" 1, 2, 3, etc. If none of the strings arrives, the command times out,",
+" fails, and \\v(minput) is set to 0. If the timeout interval is 0 the",
+" MINPUT command does not wait; i.e. the given text must already be",
+" available for reading for the MINPUT command to succeed. If the interval",
+" is negative, the MINPUT command waits forever.",
+" ",
+"Also see: INPUT, REINPUT, SET INPUT.",
+"" };
+#endif /* CK_MINPUT */
+
+#ifndef NOLOCAL
+static char *hmxxcon[] = {
+"Syntax: CONNECT (or C, or CQ) [ switches ]",
+" Connect to a remote computer via the serial communications device given in",
+#ifdef OS2
+" the most recent SET PORT command, or to the network host named in the most",
+#else
+" the most recent SET LINE command, or to the network host named in the most",
+#endif /* OS2 */
+" recent SET HOST command. Type the escape character followed by C to get",
+" back to the C-Kermit prompt, or followed by ? for a list of CONNECT-mode",
+#ifdef OS2
+" escape commands. You can also assign the \\Kexit verb to the key or",
+" key-combination of your choice; by default it is assigned to Alt-x.",
+#else
+" escape commands.",
+" ",
+"Include the /QUIETLY switch to suppress the informational message that",
+"tells you how to escape back, etc. CQ is a synonym for CONNECT /QUIETLY.",
+#endif /* OS2 */
+" ",
+"Other switches include:",
+#ifdef CK_TRIGGER
+" ",
+"/TRIGGER:string",
+" One or more strings to look for that will cause automatic return to",
+" command mode. To specify one string, just put it right after the",
+" colon, e.g. \"/TRIGGER:Goodbye\". If the string contains any spaces, you",
+" must enclose it in braces, e.g. \"/TRIGGER:{READY TO SEND...}\". To",
+" specify more than one trigger, use the following format:",
+" ",
+" /TRIGGER:{{string1}{string2}...{stringn}}",
+" ",
+" Upon return from CONNECT mode, the variable \\v(trigger) is set to the",
+" trigger string, if any, that was actually encountered. This value, like",
+" all other CONNECT switches applies only to the CONNECT command with which",
+" it is given, and overrides (temporarily) any global SET TERMINAL TRIGGER",
+" string that might be in effect.",
+#endif /* CK_TRIGGER */
+#ifdef OS2
+" ",
+"/IDLE-LIMIT:number",
+" The number of seconds of idle time, after which Kermit returns",
+" automatically to command mode; default 0 (no limit).",
+" ",
+"/IDLE-INTERVAL:number",
+" The number of seconds of idle time, after which Kermit automatically",
+" transmits the idle string.",
+" ",
+"/IDLE-STRING:string",
+" The string to transmit whenever the idle interval has passed.",
+" ",
+"/TIME-LIMIT:number",
+" The maximum number of seconds for which the CONNECT session may last.",
+" The default is 0 (no limit). If a nonzero number is given, Kermit returns",
+" automatically to command mode after this many seconds.",
+#endif /* OS2 */
+"" };
+#endif /* NOLOCAL */
+
+static char *hmxxmget[] = {
+"Syntax: MGET [ switches... ] remote-filespec [ remote-filespec ... ]",
+" ",
+"Just like GET (q.v.) except allows a list of remote file specifications,",
+"separated by spaces.",
+""
+};
+
+static char *hmxxget[] = {
+"Syntax: GET [ switches... ] remote-filespec [ as-name ]",
+" Tells the other Kermit, which must be in (or support autoswitching into)",
+" server mode, to send the named file or files. If the remote-filespec or",
+" the as-name contain spaces, they must be enclosed in braces. If as-name",
+" is the name of an existing local directory, incoming files are placed in",
+" that directory; if it is the name of directory that does not exist, Kermit",
+" tries to create it. Optional switches include:",
+" ",
+"/AS-NAME:text",
+" Specifies \"text\" as the name to store the incoming file under, or",
+" directory to store it in. You can also specify the as-name as the second",
+" filename on the GET command line.",
+" ",
+"/BINARY",
+" Performs this transfer in binary mode without affecting the global",
+" transfer mode.",
+" ",
+"/COMMAND",
+" Receives the file into the standard input of a command, rather than saving",
+" it on disk. The /AS-NAME or the second \"filename\" on the GET command",
+" line is interpreted as the name of a command.",
+" ",
+"/DELETE",
+" Asks the other Kermit to delete the file (or each file in the group)",
+" after it has been transferred successfully.",
+" ",
+"/EXCEPT:pattern",
+" Specifies that any files whose names match the pattern, which can be a",
+" regular filename, or may contain \"*\" and/or \"?\" metacharacters,",
+" are to be refused. To specify multiple patterns (up to 8), use outer",
+" braces around the group, and inner braces around each pattern:",
+" ",
+" /EXCEPT:{{pattern1}{pattern2}...}",
+" ",
+"/FILENAMES:{CONVERTED,LITERAL}",
+" Overrides the global SET FILE NAMES setting for this transfer only.",
+" ",
+"/FILTER:command",
+" Causes the incoming file to passed through the given command (standard",
+" input/output filter) before being written to disk.",
+" ",
+#ifdef VMS
+"/IMAGE",
+" Transfer in image mode.",
+" ",
+#endif /* VMS */
+#ifdef CK_LABELED
+"/LABELED",
+" VMS and OS/2 only: Specifies labeled transfer mode.",
+" ",
+#endif /* CK_LABELED */
+
+"/MOVE-TO:directory-name",
+" Specifies that each file that arrives should be moved to the specified",
+" directory after, and only if, it has been received successfully.",
+" ",
+"/PATHNAMES:{OFF,ABSOLUTE,RELATIVE,AUTO}",
+" Overrides the global SET RECEIVE PATHNAMES setting for this transfer.",
+" ",
+"/PIPES:{ON,OFF}",
+" Overrides the TRANSFER PIPES setting for this command only. ON allows",
+" reception of files with names like \"!tar xf -\" to be automatically",
+" directed to a pipeline.",
+" ",
+"/QUIET",
+" When sending in local mode, this suppresses the file-transfer display.",
+" ",
+"/RECOVER",
+" Used to recover from a previously interrupted transfer; GET /RECOVER",
+" is equivalent REGET. Works only in binary mode.",
+" ",
+"/RECURSIVE",
+" Tells the server to descend through the directory tree when locating",
+" the files to be sent.",
+" ",
+"/RENAME-TO:string",
+" Specifies that each file that arrives should be renamed as specified",
+" after, and only if, it has been received successfully. The string should",
+" normally contain variables like \\v(filename) or \\v(filenum).",
+" ",
+"/TEXT",
+" Performs this transfer in text mode without affecting the global",
+" transfer mode.",
+" ",
+"/TRANSPARENT",
+" Inhibits character-set translation of incoming text files for the duration",
+" of the GET command without affecting subsequent commands.",
+" ",
+"Also see HELP MGET, HELP SEND, HELP RECEIVE, HELP SERVER, HELP REMOTE.",
+""};
+
+static char *hmxxlg[] = {
+"Syntax: LOG (or L) log-type [ filename [ { NEW, APPEND } ] ]",
+" ",
+"Record information in a log file:",
+" ",
+#ifdef CKLOGDIAL
+"CX",
+" Connections made with SET LINE, SET PORT, SET HOST, DIAL, TELNET, etc.",
+" The default filename is CX.LOG in your home directory and APPEND is the",
+" default mode for opening.",
+" ",
+#endif /* CKLOGDIAL */
+#ifdef DEBUG
+"DEBUG",
+" Debugging information, to help track down bugs in the C-Kermit program.",
+" The default log name is debug.log in current directory.",
+" ",
+#endif /* DEBUG */
+"PACKETS",
+" Kermit packets, to help with protocol problems. The default filename is",
+" packet.log in current directory.",
+" ",
+#ifndef NOLOCAL
+"SESSION",
+" Records your CONNECT session (default: session.log in current directory).",
+" ",
+#endif /* NOLOCAL */
+#ifdef TLOG
+"TRANSACTIONS",
+" Names and statistics about files transferred (default: transact.log in",
+" current directory; see HELP SET TRANSACTION-LOG for transaction-log format",
+" options.)",
+" ",
+#endif /* TLOG */
+"If you include the APPEND keyword after the filename, the existing log file,",
+"if any, is appended to; otherwise a new file is created (except APPEND is",
+"the default for the connection log). Use CLOSE <keyword> to stop logging.",
+#ifdef OS2ORUNIX
+" ",
+"Note: The filename can also be a pipe, e.g.:",
+" ",
+" log transactions |lpr",
+" log debug {| grep \"^TELNET\" > debug.log}",
+" ",
+"Braces are required if the pipeline or filename contains spaces.",
+#endif /* OS2ORUNIX */
+"" };
+
+#ifndef NOSCRIPT
+static char *hmxxlogi[] = { "\
+Syntax: SCRIPT text",
+" A limited and cryptic \"login assistant\", carried over from old C-Kermit",
+" releases for comptability, but not recommended for use. Instead, please",
+" use the full script programming language described in chapters 17-19 of",
+" \"Using C-Kermit\".",
+" ",
+" Login to a remote system using the text provided. The login script",
+" is intended to operate similarly to UNIX uucp \"L.sys\" entries.",
+" A login script is a sequence of the form:",
+" ",
+" expect send [expect send] . . .",
+" ",
+" where 'expect' is a prompt or message to be issued by the remote site, and",
+" 'send' is the names, numbers, etc, to return. The send may also be the",
+" keyword EOT to send Control-D, or BREAK (or \\\\b) to send a break signal.",
+" Letters in send may be prefixed by ~ to send special characters:",
+" ",
+" ~b backspace, ~s space, ~q '?', ~n linefeed, ~r return, ~c don\'t",
+" append a return, and ~o[o[o]] for octal of a character. As with some",
+" UUCP systems, sent strings are followed by ~r unless they end with ~c.",
+" ",
+" Only the last 7 characters in each expect are matched. A null expect,",
+" e.g. ~0 or two adjacent dashes, causes a short delay. If you expect",
+" that a sequence might not arrive, as with uucp, conditional sequences",
+" may be expressed in the form:",
+" ",
+" -send-expect[-send-expect[...]]",
+" ",
+" where dashed sequences are followed as long as previous expects fail.",
+"" };
+#endif /* NOSCRIPT */
+
+#ifndef NOFRILLS
+static char * hmxxtyp[] = {
+"Syntax: TYPE [ switches... ] file",
+" Displays a file on the screen. Pauses automatically at end of each",
+" screenful if COMMAND MORE-PROMPTING is ON. Optional switches:",
+" ",
+" /PAGE",
+" Pause at the end of each screenful even if COMMAND MORE-PROMPTING OFF.",
+" Synonym: /MORE",
+" /NOPAGE",
+" Don't pause at the end of each screen even if COMMAND MORE-PROMPTING ON."
+,
+" /HEAD:n",
+" Only type the first 'n' lines of the file.",
+" /TAIL:n",
+" Only type the last 'n' lines of the file.",
+" /MATCH:pattern",
+" Only type lines that match the given pattern. HELP WILDCARDS for info",
+" info about patterns. /HEAD and /TAIL apply after /MATCH.",
+" /PREFIX:string",
+" Print the given string at the beginning of each line.",
+" /NUMBER",
+" Add line numbers (conflicts with /PREFIX)",
+" /WIDTH:number",
+" Truncate each line at the given column number before printing.",
+#ifdef KUI
+" Or when combined with /GUI specifies the width of the dialog box.",
+" /HEIGHT:number",
+" When combined with /GUI specifies the height of the dialog box.",
+" /GUI:string",
+" Specifies the title to use for the dialog box.",
+#endif /* KUI */
+" /COUNT",
+" Count lines (and matches) and print the count(s) but not the lines.",
+#ifdef UNICODE
+" /CHARACTER-SET:name",
+" Translates from the named character set.",
+#ifndef OS2
+" /TRANSLATE-TO:name",
+" Translates to the named character set (default = current file charset).",
+#endif /* OS2 */
+" /TRANSPARENT",
+" Inhibits character-set translation.",
+#endif /* UNICODE */
+" /OUTPUT:name",
+" Sends results to the given file. If this switch is omitted, the",
+" results appear on your screen. This switch overrides any express or",
+" implied /PAGE switch.",
+" ",
+"You can use SET OPTIONS TYPE to set the defaults for /PAGE or /NOPAGE and",
+"/WIDTH. Use SHOW OPTIONS to see current TYPE options.",
+""
+};
+
+static char * hmxxcle[] = {
+"Syntax: CLEAR [ item-name ]",
+" ",
+"Clears the named item. If no item is named, DEVICE-AND-INPUT is assumed.",
+" ",
+" ALARM Clears any pending alarm (see SET ALARM).",
+#ifdef CK_APC
+" APC-STATUS Clears Application Program Command status.",
+#endif /* CK_APC */
+#ifdef PATTERNS
+" BINARY-PATTERNS Clears the file binary-patterns list.",
+#endif /* PATTERNS */
+#ifdef OS2
+" COMMAND-SCREEN Clears the current command screen.",
+#endif /* OS2 */
+" DEVICE Clears the current port or network input buffer.",
+" DEVICE-AND-INPUT Clears both the device and the INPUT buffer.",
+" DIAL-STATUS Clears the \\v(dialstatus) variable.",
+" \
+INPUT Clears the INPUT-command buffer and the \\v(input) variable.",
+" KEYBOARD-BUFFER Clears the command terminal keyboard input buffer.",
+#ifdef OS2
+" \
+SCROLLBACK empties the scrollback buffer including the current screen.",
+#endif /* OS2 */
+" SEND-LIST Clears the current SEND list (see ADD).",
+#ifdef OS2
+" \
+TERMINAL-SCREEN Clears the current screen a places it into the scrollback.",
+" buffer.",
+#endif /* OS2 */
+#ifdef PATTERNS
+" TEXT-PATTERNS Clears the file text-patterns list.",
+#endif /* PATTERNS */
+""};
+#endif /* NOFRILLS */
+
+static char * hmxxdate[] = {
+"Syntax: DATE [ date-time [ timezone ] ] [ delta-time ]",
+" Prints a date-time in standard format: yyyymmdd_hh:mm:ss.",
+" Various date-time formats are accepted:",
+" ",
+" . The date, if given, must precede the time.",
+" . The year must be four digits or else a 2-digit format dd mmm yy,",
+" in which case if (yy < 50) yyyy = yy + 2000; else yyyy = yy + 1900.",
+" . If the year comes first, the second field is the month.",
+" . The day, month, and year may be separated by spaces, /, -, or underscore."
+," . The date and time may be separated by spaces or underscore.",
+" . The month may be numeric (1 = January) or spelled out or abbreviated in",
+" English.",
+" . The time may be in 24-hour format or 12-hour format.",
+" . If the hour is 12 or less, AM is assumed unless AM or PM is included.",
+" . If the date is omitted but a time is given, the current date is supplied."
+,
+" . If the time is given but date omitted, 00:00:00 is supplied.",
+" . If both the date and time are omitted, the current date and time are",
+" supplied.",
+" ",
+" The following shortcuts can also be used in place of dates:",
+" ",
+" TODAY",
+" Today's date, optionally followed by a time; 00:00:00 if no time given.",
+" ",
+" YESTERDAY",
+" Yesterday's date, optionally followed by a time (default 00:00:00).",
+" ",
+" TOMORROW",
+" Tomorrows's date, optionally followed by a time (default 00:00:00).",
+" ",
+" Timezone specifications are similar to those used in e-mail and HTTP",
+" headers, either a USA timezone name, e.g. EST or a signed four-digit",
+" timezone offset, {+,-}hhmm, e.g., -0500; it is used to convert date-time,"
+,
+" a local time in that timezone, to GMT which is then converted to the",
+" local time at the host. If no timezone is given, the date-time is local."
+,
+" ",
+" Delta times are given as {+,-}[number date-units][hh[:mm[:ss]]]",
+" A date in the future/past relative to the date-time; date-units may be",
+" DAYS, WEEKS, MONTHS, YEARS: +3days, -7weeks, +3:00, +1month 8:00.",
+" ",
+"All the formats shown above are acceptable as arguments to date-time switches"
+,
+"such as /AFTER: or /BEFORE:, and to functions such as \\fcvtdate(),",
+"\\fdiffdate(), and \\futcdate(), that take date-time strings as arguments.",
+""
+};
+
+
+#ifndef NOXFER
+static char * hmxxsen[] = {
+"Syntax: SEND (or S) [ switches...] [ filespec [ as-name ] ]",
+" Sends the file or files specified by filespec. If the filespec is omitted",
+" the SEND-LIST is used (HELP ADD for more info). The filespec may contain",
+" wildcard characters. An 'as-name' may be given to specify the name(s)",
+" the files(s) are sent under; if the as-name is omitted, each file is",
+" sent under its own name. Also see HELP MSEND, HELP WILDCARD.",
+" Optional switches include:",
+" ",
+#ifndef NOSPL
+"/ARRAY:<arrayname>",
+" Specifies that the data to be sent comes from the given array, such as",
+" \\&a[]. A range may be specified, e.g. SEND /ARRAY:&a[100:199]. Leave",
+" the brackets empty or omit them altogether to send the whole 1-based array."
+,
+" Include /TEXT to have Kermit supply a line terminator at the end of each",
+" array element (and translate character sets if character-set translations",
+" are set up), or /BINARY to treat the array as one long string of characters"
+,
+" to be sent as-is. If an as-name is not specified, the array is sent with",
+" the name _ARRAY_X_, where \"X\" is replaced by actual array letter.",
+" ",
+#endif /* NOSPL */
+
+"/AS-NAME:<text>",
+" Specifies <text> as the name to send the file under instead of its real",
+" name. This is equivalent to giving an as-name after the filespec.",
+" ",
+"/BINARY",
+" Performs this transfer in binary mode without affecting the global",
+" transfer mode.",
+" ",
+"/TEXT",
+" Performs this transfer in text mode without affecting the global",
+" transfer mode.",
+" ",
+"/TRANSPARENT",
+" Inhibits character-set translation for text files for the duration of",
+" the SEND command without affecting subsequent commands.",
+" ",
+"/NOBACKUPFILES",
+" Skip (don't send) Kermit or EMACS backup files (files with names that",
+" end with .~n~, where n is a number).",
+" ",
+#ifdef UNIXOROSK
+"/DOTFILES",
+" Include (send) files whose names begin with \".\".",
+" ",
+"/NODOTFILES",
+" Don't send files whose names begin with \".\".",
+" ",
+"/FOLLOWLINKS",
+" Send files that are pointed to by symbolic links.",
+" ",
+"/NOFOLLOWLINKS",
+" Skip over symbolic links (default).",
+" ",
+#endif /* UNIXOROSK */
+
+#ifdef VMS
+"/IMAGE",
+" Performs this transfer in image mode without affecting the global",
+" transfer mode.",
+" ",
+#endif /* VMS */
+#ifdef CK_LABELED
+"/LABELED",
+" Performs this transfer in labeled mode without affecting the global",
+" transfer mode.",
+" ",
+#endif /* CK_LABELED */
+"/COMMAND",
+" Sends the output from a command, rather than the contents of a file.",
+" The first \"filename\" on the SEND command line is interpreted as the name",
+" of a command; the second (if any) is the as-name.",
+" ",
+"/FILENAMES:{CONVERTED,LITERAL}",
+" Overrides the global SET FILE NAMES setting for this transfer only.",
+" ",
+"/PATHNAMES:{OFF,ABSOLUTE,RELATIVE}",
+" Overrides the global SET SEND PATHNAMES setting for this transfer.",
+" ",
+"/FILTER:command",
+" Specifies a command \
+(standard input/output filter) to pass the file through",
+" before sending it.",
+" ",
+"/DELETE",
+" Deletes the file (or each file in the group) after it has been sent",
+" successfully (applies only to real files).",
+" ",
+"/QUIET",
+" When sending in local mode, this suppresses the file-transfer display.",
+" ",
+"/RECOVER",
+" Used to recover from a previously interrupted transfer; SEND /RECOVER",
+" is equivalent RESEND (use in binary mode only).",
+" ",
+"/RECURSIVE",
+" Tells C-Kermit to look not only in the given or current directory for",
+" files that match the filespec, but also in all its subdirectories, and",
+" all their subdirectories, etc.",
+" ",
+"/RENAME-TO:name",
+" Tells C-Kermit to rename each source file that is sent successfully to",
+" the given name (usually you should include \\v(filename) in the new name,",
+" which is replaced by the original filename.",
+" ",
+"/MOVE-TO:directory",
+" Tells C-Kermit to move each source file that is sent successfully to",
+" the given directory.",
+" ",
+"/STARTING:number",
+" Starts sending the file from the given byte position.",
+" SEND /STARTING:n filename is equivalent to PSEND filename n.",
+" ",
+"/SUBJECT:text",
+" Specifies the subject of an email message, to be used with /MAIL. If the",
+" text contains spaces, it must be enclosed in braces.",
+" ",
+"/MAIL:address",
+" Sends the file as e-mail to the given address; use with /SUBJECT:.",
+" ",
+"/PRINT:options",
+" Sends the file to be printed, with optional options for the printer.",
+" ",
+#ifdef CK_XYZ
+"/PROTOCOL:name",
+" Uses the given protocol to send the file (Kermit, Zmodem, etc) for this",
+" transfer without changing global protocol.",
+" ",
+#endif /* CK_XYZ */
+"/AFTER:date-time",
+#ifdef VMS
+" Specifies that only those files created after the given date-time are",
+#else
+" Specifies that only those files modified after the given date-time are",
+#endif /* VMS */
+" to be sent. HELP DATE for info about date-time formats.",
+" ",
+"/BEFORE:date-time",
+#ifdef VMS
+" Specifies that only those files modified before the given date-time",
+#else
+" Specifies that only those files modified before the given date-time",
+#endif /* VMS */
+" are to be sent.",
+" ",
+"/NOT-AFTER:date-time",
+#ifdef VMS
+" Specifies that only those files modified at or before the given date-time",
+#else
+" Specifies that only those files modified at or before the given date-time",
+#endif /* VMS */
+" are to be sent.",
+" ",
+"/NOT-BEFORE:date-time",
+#ifdef VMS
+" Specifies that only those files modified at or after the given date-time",
+#else
+" Specifies that only those files modified at or after the given date-time",
+#endif /* VMS */
+" are to be sent.",
+" ",
+"/LARGER-THAN:number",
+" Specifies that only those files longer than the given number of bytes are",
+" to be sent.",
+" ",
+"/SMALLER-THAN:number",
+" Specifies that only those files smaller than the given number of bytes are",
+" to be sent.",
+" ",
+"/EXCEPT:pattern",
+" Specifies that any files whose names match the pattern, which can be a",
+" regular filename, or may contain \"*\" and/or \"?\" metacharacters,",
+" are not to be sent. To specify multiple patterns (up to 8), use outer",
+" braces around the group, and inner braces around each pattern:",
+" ",
+" /EXCEPT:{{pattern1}{pattern2}...}",
+" ",
+"/TYPE:{ALL,TEXT,BINARY}",
+" Send only files of the given type (see SET FILE SCAN).",
+" ",
+"/LISTFILE:filename",
+" Specifies the name of a file that contains the list of names of files",
+" that are to be sent. The filenames should be listed one name per line",
+" in this file (but a name can contain wildcards).",
+" ",
+"Also see HELP RECEIVE, HELP GET, HELP SERVER, HELP REMOTE.",
+""};
+
+static char *hmxxrc[] = {
+"Syntax: RECEIVE (or R) [ switches... ] [ as-name ]",
+" Wait for a file to arrive from the other Kermit, which must be given a",
+" SEND command. If the optional as-name is given, the incoming file or",
+" files are stored under that name, otherwise it will be stored under",
+#ifndef CK_TMPDIR
+" the name it arrives with.",
+#else
+#ifdef OS2
+" the name it arrives with. If the filespec denotes a disk and/or",
+" directory, the incoming file or files will be stored there.",
+#else
+" the name it arrives with. If the filespec denotes a directory, the",
+" incoming file or files will be placed in that directory.",
+#endif /* OS2 */
+#endif /* CK_TMPDIR */
+" ",
+"Optional switches include:",
+" ",
+"/AS-NAME:text",
+" Specifies \"text\" as the name to store the incoming file under.",
+" You can also specify the as-name as a filename on the command line.",
+" ",
+"/BINARY",
+" Skips text-mode conversions unless the incoming file arrives with binary",
+" attribute",
+" ",
+"/COMMAND",
+" Receives the file into the standard input of a command, rather than saving",
+" it on disk. The /AS-NAME or the \"filename\" on the RECEIVE command line",
+" is interpreted as the name of a command.",
+" ",
+"/EXCEPT:pattern",
+" Specifies that any files whose names match the pattern, which can be a",
+" regular filename, or may contain \"*\" and/or \"?\" metacharacters,",
+" are to be refused. To specify multiple patterns (up to 8), use outer",
+" braces around the group, and inner braces around each pattern:",
+" ",
+" /EXCEPT:{{pattern1}{pattern2}...}",
+" ",
+"/FILENAMES:{CONVERTED,LITERAL}",
+" Overrides the global SET FILE NAMES setting for this transfer only.",
+" ",
+"/FILTER:command",
+" Causes the incoming file to passed through the given command (standard",
+" input/output filter) before being written to disk.",
+" ",
+#ifdef VMS
+"/IMAGE",
+" Receives the file in image mode.",
+" ",
+#endif /* VMS */
+#ifdef CK_LABELED
+"/LABELED",
+" Specifies labeled transfer mode.",
+" ",
+#endif /* CK_LABELED */
+
+"/MOVE-TO:directory-name",
+" Specifies that each file that arrives should be moved to the specified",
+" directory after, and only if, it has been received successfully.",
+" ",
+"/PATHNAMES:{OFF,ABSOLUTE,RELATIVE,AUTO}",
+" Overrides the global SET RECEIVE PATHNAMES setting for this transfer.",
+" ",
+"/PIPES:{ON,OFF}",
+" Overrides the TRANSFER PIPES setting for this command only. ON allows",
+" reception of files with names like \"!tar xf -\" to be automatically",
+" directed to a pipeline.",
+" ",
+"/PROTOCOL:name",
+" Use the given protocol to receive the incoming file(s).",
+" ",
+"/QUIET",
+" When sending in local mode, this suppresses the file-transfer display.",
+" ",
+"/RECURSIVE",
+" Equivalent to /PATHNAMES:RELATIVE.",
+" ",
+"/RENAME-TO:string",
+" Specifies that each file that arrives should be renamed as specified",
+" after, and only if, it has been received successfully. The string should",
+" normally contain variables like \\v(filename) or \\v(filenum).",
+" ",
+"/TEXT",
+" Forces text-mode conversions unless the incoming file has the binary",
+" attribute",
+" ",
+"/TRANSPARENT",
+" Inhibits character-set translation of incoming text files for the duration",
+" of the RECEIVE command without affecting subsequent commands.",
+" ",
+"Also see HELP SEND, HELP GET, HELP SERVER, HELP REMOTE.",
+"" };
+
+#ifndef NORESEND
+static char *hmxxrsen = "\
+Syntax: RESEND filespec [name]\n\n\
+ Resend the file or files, whose previous transfer was interrupted.\n\
+ Picks up from where previous transfer left off, IF the receiver was told\n\
+ to SET FILE INCOMPLETE KEEP. Only works for binary-mode transfers.\n\
+ Requires the other Kermit to have RESEND capability.";
+
+static char *hmxxrget = "\
+Syntax: REGET filespec\n\n\
+ Ask a server to RESEND a file to C-Kermit.";
+
+static char *hmxxpsen = "\
+Syntax: PSEND filespec position [name]\n\n\
+ Just like SEND, except sends the file starting at the given byte position.";
+#endif /* NORESEND */
+
+#ifndef NOMSEND
+static char *hmxxmse[] = {
+"Syntax: MSEND [ switches... ] filespec [ filespec [ ... ] ]",
+" Sends the files specified by the filespecs. One or more filespecs may be",
+" listed, separated by spaces. Any or all filespecs may contain wildcards",
+" and they may be in different directories. Alternative names cannot be",
+" given. Switches include /BINARY /DELETE /MAIL /PROTOCOL /QUIET /RECOVER",
+" /TEXT /TYPE; see HELP SEND for descriptions.",
+""
+};
+#endif /* NOMSEND */
+
+static char *hmxxadd[] = {
+#ifndef NOMSEND
+"ADD SEND-LIST filespec [ <mode> [ <as-name> ] ]",
+" Adds the specified file or files to the current SEND list. Use SHOW",
+" SEND-LIST and CLEAR SEND-LIST to display and clear the list; use SEND",
+" by itself to send the files from it.",
+" ",
+#endif /* NOMSEND */
+#ifdef PATTERNS
+"ADD BINARY-PATTERNS [ <pattern> [ <pattern> ... ] ]",
+" Adds the pattern(s), if any, to the SET FILE BINARY-PATTERNS list.",
+" ",
+"ADD TEXT-PATTERNS [ <pattern> [ <pattern> ... ] ]",
+" Adds the pattern(s), if any, to the SET FILE TEXT-PATTERNS list.",
+" Use SHOW PATTERNS to see the lists. See HELP SET FILE for further info.",
+#endif /* PATTERNS */
+""};
+
+static char *hmxxremv[] = {
+#ifdef PATTERNS
+"REMOVE BINARY-PATTERNS [ <pattern> [ <pattern> ... ] ]",
+" Removes the pattern(s), if any, from the SET FILE BINARY-PATTERNS list",
+" ",
+"REMOVE TEXT-PATTERNS [ <pattern> [ <pattern> ... ] ]",
+" Removes the given patterns from the SET FILE TEXT-PATTERNS list.",
+" Use SHOW PATTERNS to see the lists. See HELP SET FILE for further info.",
+#endif /* PATTERNS */
+""};
+#endif /* NOXFER */
+
+#ifndef NOSERVER
+static char *hmxxser = "Syntax: SERVER\n\
+ Enter server mode on the current connection. All further commands\n\
+ are taken in packet form from the other Kermit program. Use FINISH,\n\
+ BYE, or REMOTE EXIT to get C-Kermit out of server mode.";
+#endif /* NOSERVER */
+
+static char *hmhset[] = {
+" The SET command establishes communication, file, scripting, or other",
+" parameters. The SHOW command can be used to display the values of",
+" SET parameters. Help is available for each individual parameter;",
+" type HELP SET ? to see what's available.",
+"" };
+
+#ifndef NOSETKEY
+static char *hmhskey[] = {
+"Syntax: SET KEY k text",
+"Or: SET KEY CLEAR",
+" Configure the key whose \"scan code\" is k to send the given text when",
+" pressed during CONNECT mode. SET KEY CLEAR restores all the default",
+" key mappings. If there is no text, the default key binding is restored",
+#ifndef NOCSETS
+" for the key k. SET KEY mappings take place before terminal character-set",
+" translation.",
+#else
+" the key k.",
+#endif /* NOCSETS */
+#ifdef OS2
+" ",
+" The text may contain \"\\Kverbs\" to denote actions, to stand for DEC",
+" keypad, function, or editing keys, etc. For a list of available keyboard",
+" verbs, type SHOW KVERBS.",
+#endif /* OS2 */
+" ",
+" To find out the scan code and mapping for a particular key, use the",
+" SHOW KEY command.",
+""};
+#endif /* NOSETKEY */
+
+static char *hmxychkt[] = { "Syntax: SET BLOCK-CHECK type",
+" ",
+" Type of packet block check to be used for error detection, 1, 2, 3, or",
+" BLANK-FREE-2. Type 1 is standard, and catches most errors. Types 2 and 3",
+" specify more rigorous checking at the cost of higher overhead. The",
+" BLANK-FREE-2 type is the same as Type 2, but is guaranteed to contain no",
+" blanks.",
+"" };
+
+static char * hmxydeb[] = {
+"Syntax: SET DEBUG { SESSION, ON, OFF, TIMESTAMP }",
+" ",
+"SET DEBUG ON",
+#ifdef DEBUG
+" Opens a debug log file named debug.log in the current directory.",
+" Use LOG DEBUG if you want specify a different log file name or path.",
+#else
+" (Has no effect in this version of Kermit.)",
+#endif /* DEBUG */
+" ",
+"SET DEBUG OFF",
+" Stops debug logging and session debugging.",
+" ",
+"SET DEBUG SESSION",
+#ifndef NOLOCAL
+" Displays control and 8-bit characters symbolically during CONNECT mode.",
+" Equivalent to SET TERMINAL DEBUG ON.",
+#else
+" (Has no effect in this version of Kermit.)",
+#endif /* NOLOCAL */
+" ",
+"SET DEBUG TIMESTAMP { ON, OFF }",
+" Enables/Disables timestamps on debug log entries.",
+"" };
+
+#ifdef CK_SPEED
+static char *hmxyqctl[] = {
+"Syntax: SET CONTROL-CHARACTER { PREFIXED, UNPREFIXED } { <code>..., ALL }",
+" ",
+" <code> is the numeric ASCII code for a control character 1-31,127-159,255."
+,
+" The word \"ALL\" means all characters in this range.",
+" ",
+" PREFIXED <code> means the given control character must be converted to a",
+" printable character and prefixed, the default for all control characters.",
+" ",
+" UNPREFIXED <code> means you think it is safe to send the given control",
+" character as-is, without a prefix. USE THIS OPTION AT YOUR OWN RISK!",
+" ",
+" SHOW CONTROL to see current settings. SET CONTROL PREFIXED ALL is",
+" recommended for safety. You can include multiple <code> values in one",
+" command, separated by spaces.",
+"" };
+#endif /* CK_SPEED */
+
+#ifndef NODIAL
+static char *hxymodm[] = {
+"Syntax: SET MODEM <parameter> <value> ...",
+" ",
+"Note: Many of the SET MODEM parameters are configured automatically when",
+"you SET MODEM TYPE, according to the modem's capabilities. SHOW MODEM to",
+"see them. Also see HELP DIAL and HELP SET DIAL.",
+" ",
+"SET MODEM TYPE <name>",
+
+" Tells Kermit which kind of modem you have, so it can issue the",
+" appropriate modem-specific commands for configuration, dialing, and",
+" hanging up. For a list of the modem types known to Kermit, type \"set",
+" modem type ?\". The default modem type is GENERIC, which should work",
+" with any AT command-set modem that is configured for error correction,",
+" data compression, and hardware flow control. Use SET MODEM TYPE NONE",
+" for direct serial, connections. Use SET MODEM TYPE USER-DEFINED to use",
+" a type of modem that is not built in to Kermit, and then use SET MODEM",
+" CAPABILITIES, SET MODEM, DIAL-COMMAND, and SET MODEM COMMAND to tell",
+" Kermit how to configure and control it.",
+
+" ",
+
+"SET MODEM CAPABILITIES <list>",
+" Use this command for changing Kermit's idea of your modem's capabilities,",
+" for example, if your modem is supposed to have built-in error correction",
+" but in fact does not. Also use this command to define the capabilities",
+" of a USER-DEFINED modem. Capabilities are:",
+" ",
+" AT AT-commands",
+" DC data-compression",
+" EC error-correction",
+" HWFC hardware-flow",
+" ITU v25bis-commands",
+" SWFC software-flow",
+" KS kermit-spoof",
+" SB speed-buffering",
+" TB Telebit",
+" ",
+"SET MODEM CARRIER-WATCH { AUTO, ON, OFF }",
+" Synonym for SET CARRIER-WATCH (q.v.)",
+" ",
+"SET MODEM COMPRESSION { ON, OFF }",
+" Enables/disables the modem's data compression feature, if any.",
+" ",
+"SET MODEM DIAL-COMMAND <text>",
+" The text replaces Kermit's built-in modem dialing command. It must",
+" include '%s' (percent s) as a place-holder for the telephone numbers",
+" given in your DIAL commands.",
+" ",
+"SET MODEM ERROR-CORRECTION { ON, OFF }",
+" Enables/disables the modem's error-correction feature, if any.",
+" ",
+"SET MODEM ESCAPE-CHARACTER number",
+" Numeric ASCII value of modem's escape character, e.g. 43 for '+'.",
+" For Hayes-compatible modems, Kermit uses three copies, e.g. \"+++\".",
+" ",
+"SET MODEM FLOW-CONTROL {AUTO, NONE, RTS/CTS, XON/XOFF}",
+" Selects the type of local flow control to be used by the modem.",
+" ",
+"SET MODEM HANGUP-METHOD { MODEM-COMMAND, RS232-SIGNAL, DTR }",
+" How hangup operations should be done. MODEM-COMMAND means try to",
+" escape back to the modem's command processor and give a modem-specific",
+" hangup command. RS232-SIGNAL means turn off the DTR signal. DTR is a",
+" synonym for RS232-SIGNAL.",
+" ",
+"SET MODEM KERMIT-SPOOF {ON, OFF}",
+" If the selected modem type supports the Kermit protocol directly,",
+" use this command to turn its Kermit protocol function on or off.",
+" ",
+"SET MODEM MAXIMUM-SPEED <number>",
+" Specify the maximum interface speed for the modem.",
+" ",
+"SET MODEM NAME <text>",
+" Descriptive name for a USER-DEFINED modem.",
+" ",
+"SET MODEM SPEAKER {ON, OFF}",
+" Turns the modem's speaker on or off during dialing.",
+" ",
+"SET MODEM SPEED-MATCHING {ON, OFF}",
+" ON means that C-Kermit changes its serial interface speed to agree with",
+" the speed reported by the modem's CONNECT message, if any. OFF means",
+" Kermit should not change its interface speed.",
+" ",
+"SET MODEM VOLUME {LOW, MEDIUM, HIGH}",
+" Selects the desired modem speaker volume for when the speaker is ON.",
+" ",
+"SET MODEM COMMAND commands are used to override built-in modem commands for",
+"each modem type, or to fill in commands for the USER-DEFINED modem type.",
+"Omitting the optional [ text ] restores the built-in modem-specific command,",
+"if any:",
+" ",
+"SET MODEM COMMAND AUTOANSWER {ON, OFF} [ text ]",
+" Modem commands to turn autoanswer on and off.",
+" ",
+"SET MODEM COMMAND COMPRESSION {ON, OFF} [ text ]",
+" Modem commands to turn data compression on and off.",
+" ",
+"SET MODEM COMMAND ERROR-CORRECTION {ON, OFF} [ text ]",
+" Modem commands to turn error correction on and off.",
+" ",
+"SET MODEM COMMAND HANGUP [ text ]",
+" Command that tells the modem to hang up the connection.",
+" ",
+"SET MODEM COMMAND IGNORE-DIALTONE [ text ]",
+" Command that tells the modem not to wait for dialtone before dialing.",
+" ",
+"SET MODEM COMMAND INIT-STRING [ text ]",
+" The 'text' is a replacement for C-Kermit's built-in initialization command",
+" for the modem.",
+" ",
+"SET MODEM COMMAND PREDIAL-INIT [ text ]",
+" A second INIT-STRING that is to be sent to the modem just prior to \
+dialing.",
+" ",
+"SET MODEM COMMAND HARDWARE-FLOW [ text ]",
+" Modem command to enable hardware flow control (RTS/CTS) in the modem.",
+" ",
+"SET MODEM COMMAND SOFTWARE-FLOW [ text ]",
+" Modem command to enable local software flow control (Xon/Xoff) in modem.",
+" ",
+"SET MODEM COMMAND SPEAKER { ON, OFF } [ text ]",
+" Modem command to turn the modem's speaker on or off.",
+" ",
+"SET MODEM COMMAND NO-FLOW-CONTROL [ text ]",
+" Modem command to disable local flow control in the modem.",
+" ",
+"SET MODEM COMMAND PULSE [ text ]",
+" Modem command to select pulse dialing.",
+" ",
+"SET MODEM COMMAND TONE [ text ]",
+" Modem command to select tone dialing.",
+" ",
+"SET MODEM COMMAND VOLUME { LOW, MEDIUM, HIGH } [ text ]",
+" Modem command to set the modem's speaker volume.",
+""};
+
+static char *hmxydial[] = {
+"The SET DIAL command establishes or changes all parameters related to",
+"dialing the telephone. Also see HELP DIAL and HELP SET MODEM. Use SHOW",
+"DIAL to display all of the SET DIAL values.",
+" ",
+"SET DIAL COUNTRY-CODE <number>",
+" Tells Kermit the telephonic country-code of the country you are dialing",
+" from, so it can tell whether a portable-format phone number from your",
+" dialing directory will result in a national or an international call.",
+" Examples: 1 for USA, Canada, Puerto Rico, etc; 7 for Russia, 39 for Italy,",
+" 351 for Portugal, 47 for Norway, 44 for the UK, 972 for Israel, 81 for",
+" Japan, ...",
+" ",
+" If you have not already set your DIAL INTL-PREFIX and LD-PREFIX, then this",
+" command sets default values for them: 011 and 1, respectively, for country",
+" code 1; 00 and 0, respectively, for all other country codes. If these are",
+" not your true international and long-distance dialing prefixes, then you",
+" should follow this command by DIAL INTL-PREFIX and LD-PREFIX to let Kermit",
+" know what they really are.",
+" ",
+"SET DIAL AREA-CODE [ <number> ]",
+" Tells Kermit the area or city code that you are dialing from, so it can",
+" tell whether a portable-format phone number from the dialing directory is",
+" local or long distance. Be careful not to include your long-distance",
+" dialing prefix as part of your area code; for example, the area code for",
+" central London is 171, not 0171.",
+" ",
+"SET DIAL CONFIRMATION {ON, OFF}",
+" Kermit does various transformations on a telephone number retrieved from",
+" the dialing directory prior to dialing (use LOOKUP <name> to see them).",
+" In case the result might be wrong, you can use SET DIAL CONFIRM ON to have",
+" Kermit ask you if it is OK to dial the number, and if not, to let you type",
+" in a replacement.",
+" ",
+"SET DIAL CONNECT { AUTO, ON, OFF }",
+" Whether to CONNECT (enter terminal mode) automatically after successfully",
+" dialing. ON means to do this; OFF means not to. AUTO (the default) means",
+" do it if the DIAL command was given interactively, but don't do it if the",
+" DIAL command was issued from a macro or command file. If you specify ON",
+" or AUTO, you may follow this by one of the keywords VERBOSE or QUIET, to",
+" indicate whether the verbose 4-line 'Connecting...' message is to be",
+" displayed if DIAL succeeds and Kermit goes into CONNECT mode.",
+" ",
+"SET DIAL CONVERT-DIRECTORY {ASK, ON, OFF}",
+" The format of Kermit's dialing directory changed in version 5A(192). This",
+" command tells Kermit what to do when it encounters an old-style directory:",
+" ASK you whether to convert it, or convert it automatically (ON), or leave",
+" it alone (OFF). Old-style directories can still be used without",
+" conversion, but the parity and speed fields are ignored.",
+" ",
+"SET DIAL DIRECTORY [ filename [ filename [ filename [ ... ] ] ] ]",
+" The name(s) of your dialing directory file(s). If you do not supply any",
+" filenames, the dialing directory feature is disabled and all numbers are",
+" dialed literally as given in the DIAL command. If you supply more than",
+" one directory, all of them are searched.",
+" ",
+"SET DIAL SORT {ON, OFF}",
+" When multiple entries are obtained from your dialing directory, they are",
+" sorted in \"cheapest-first\" order. If this does not produce the desired",
+" effect, SET DIAL SORT OFF to disable sorting, and the numbers will be",
+" dialed in the order in which they were found.",
+" ",
+"SET DIAL DISPLAY {ON, OFF}",
+" Whether to display dialing progress on the screen; default is OFF.",
+" ",
+"SET DIAL HANGUP {ON, OFF}",
+" Whether to hang up the phone prior to dialing; default is ON.",
+" ",
+"SET DIAL IGNORE-DIALTONE {ON, OFF}",
+" Whether to ignore dialtone when dialing; default is OFF.",
+" ",
+#ifndef NOSPL
+"SET DIAL MACRO [ name ]",
+" Specify the name of a macro to execute on every phone number dialed, just",
+" prior to dialing it, in order to perform any last-minute alterations.",
+" ",
+#endif /* NOSPL */
+"SET DIAL METHOD {AUTO, DEFAULT, TONE, PULSE}",
+" Whether to use the modem's DEFAULT dialing method, or to force TONE or",
+" PULSE dialing. AUTO (the default) means to choose tone or pulse dialing",
+" based on the country code. (Also see SET DIAL TONE-COUNTRIES and SET DIAL",
+" PULSE-COUNTRIES.)",
+" ",
+"SET DIAL PACING number",
+" How many milliseconds to pause between sending each character to the modem",
+" dialer. The default is -1, meaning to use the number from the built-in",
+" modem database.",
+" ",
+"SET DIAL PULSE-COUNTRIES [ cc [ cc [ ... ] ] ]",
+" Sets the list of countries in which pulse dialing is required. Each cc",
+" is a country code.",
+" ",
+"SET DIAL TEST { ON, OFF }",
+" OFF for normal dialing. Set to ON to test dialing procedures without",
+" actually dialing.",
+" ",
+"SET DIAL TONE-COUNTRIES [ cc [ cc [ ... ] ] ]",
+" Sets the list of countries in which tone dialing is available. Each cc",
+" is a country code.",
+" ",
+"SET DIAL TIMEOUT number",
+" How many seconds to wait for a dialed call to complete. Use this command",
+" to override the DIAL command's automatic timeout calculation. A value",
+" of 0 turns off this feature and returns to Kermit's automatic dial",
+" timeout calculation.",
+" ",
+"SET DIAL RESTRICT { INTERNATIONAL, LOCAL, LONG-DISTANCE, NONE }",
+" Prevents placing calls of the type indicated, or greater. For example",
+" SET DIAL RESTRICT LONG prevents placing of long-distance and international",
+" calls. If this command is not given, there are no restrictions. Useful",
+" when dialing a list of numbers fetched from a dialing directory.",
+" ",
+"SET DIAL RETRIES <number>",
+" How many times to redial each number if the dialing result is busy or no",
+" no answer, until the call is succesfully answered. The default is 0",
+" because automatic redialing is illegal in some countries.",
+" ",
+"SET DIAL INTERVAL <number>",
+" How many seconds to pause between automatic redial attempts; default 10.",
+" ",
+"The following commands apply to all phone numbers, whether given literally",
+"or found in the dialing directory:",
+" ",
+"SET DIAL PREFIX [ text ]",
+" Establish a prefix to be applied to all phone numbers that are dialed,",
+" for example to disable call waiting.",
+" ",
+"SET DIAL SUFFIX [ text ]",
+" Establish a suffix to be added after all phone numbers that are dialed.",
+" ",
+"The following commands apply only to portable-format numbers obtained from",
+"the dialing directory; i.e. numbers that start with a \"+\" sign and",
+"country code, followed by area code in parentheses, followed by the phone",
+"number.",
+" ",
+"SET DIAL LC-AREA-CODES [ <list> ]",
+" Species a list of area codes to which dialing is local, i.e. does not",
+" require the LD-PREFIX. Up to 32 area codes may be listed, separated by",
+" spaces. Any area codes in this list will be included in the final dial",
+" string so do not include your own area code if it should not be dialed.",
+" ",
+"SET DIAL LC-PREFIX [ <text> ]",
+" Specifies a prefix to be applied to local calls made from portable dialing",
+" directory entries. Normally no prefix is used for local calls.",
+" ",
+"SET DIAL LC-SUFFIX [ <text> ]",
+" Specifies a suffix to be applied to local calls made from portable dialing",
+" directory entries. Normally no suffix is used for local calls.",
+" ",
+"SET DIAL LD-PREFIX [ <text> ]",
+" Your long-distance dialing prefix, to be used with portable dialing",
+" directory entries that result in long-distance calls.",
+" ",
+"SET DIAL LD-SUFFIX [ <text> ]",
+" Long-distance dialing suffix, if any, to be used with portable dialing",
+" directory entries that result in long-distance calls. This would normally",
+" be used for appending a calling-card number to the phone number.",
+" ",
+"SET DIAL FORCE-LONG-DISTANCE { ON, OFF }",
+" Whether to force long-distance dialing for calls that normally would be",
+" local. For use (e.g.) in France.",
+" ",
+"SET DIAL TOLL-FREE-AREA-CODE [ <number> [ <number> [ ... ] ] ]",
+" Tells Kermit the toll-free area code(s) in your country.",
+" ",
+"SET DIAL TOLL-FREE-PREFIX [ <text> ]",
+" You toll-free dialing prefix, in case it is different from your long-",
+" distance dialing prefix.",
+" ",
+"SET DIAL INTL-PREFIX <text>",
+" Your international dialing prefix, to be used with portable dialing",
+" directory entries that result in international calls.",
+" ",
+"SET DIAL INTL-SUFFIX <text>",
+" International dialing suffix, if any, to be used with portable dialing",
+" directory entries that result in international calls.",
+" ",
+"SET DIAL PBX-OUTSIDE-PREFIX <text>",
+" Use this to tell Kermit how to get an outside line when dialing from a",
+" Private Branch Exchange (PBX).",
+" ",
+"SET DIAL PBX-EXCHANGE <text> [ <text> [ ... ] ]",
+" If PBX-OUTSIDE-PREFIX is set, then you can use this command to tell Kermit",
+" the leading digits of one or more local phone numbers that identify it as",
+" being on your PBX, so it can make an internal call by deleting those digits"
+,
+" from the phone number.",
+" ",
+"SET DIAL PBX-INTERNAL-PREFIX <text>",
+" If PBX-EXCHANGE is set, and Kermit determines from it that a call is",
+" internal, then this prefix, if any, is added to the number prior to",
+" \
+dialing. Use this if internal calls from your PBX require a special prefix.",
+"" };
+#endif /* NODIAL */
+
+static char *hmxyflo[] = { "Syntax: SET FLOW [ switch ] value",
+" ",
+#ifndef NOLOCAL
+" Selects the type of flow control to use during file transfer, terminal",
+" connection, and script execution.",
+#else
+" Selects the type of flow control to use during file transfer.",
+#endif /* NOLOCAL */
+" ",
+" Switches let you associate a particular kind of flow control with each",
+" kind of connection: /REMOTE, /MODEM, /DIRECT-SERIAL, /TCPIP, etc; type",
+" \"set flow ?\" for a list of available switches. Then whenever you make",
+" a connection, the associated flow-control is chosen automatically.",
+" The flow-control values are NONE, KEEP, XON/XOFF, and possibly RTS/CTS",
+" and some others; again, type \"set flow ?\" for a list. KEEP tells Kermit",
+" not to try to change the current flow-control method for the connection.",
+" ",
+" If you omit the switch and simply supply a value, this value becomes the",
+" current flow control type, overriding any default value that might have",
+" been chosen in your most recent SET LINE, SET PORT, or SET HOST, or other",
+" connection-establishment command.",
+" ",
+" Type SHOW FLOW-CONTROL to see the current defaults for each connection type"
+,
+" as well as the current connection type and flow-control setting. SHOW",
+" COMMUNICATIONS also shows the current flow-control setting.",
+""};
+
+static char *hmxyf[] = {
+"Syntax: SET FILE parameter value",
+" ",
+"Sets file-related parameters. Use SHOW FILE to view them. Also see SET",
+"(and SHOW) TRANSFER and PROTOCOL.",
+" ",
+#ifdef VMS
+"SET FILE TYPE { TEXT, BINARY, IMAGE, LABELED }",
+#else
+#ifdef STRATUS
+"SET FILE TYPE { TEXT, BINARY, LABELED }",
+#else
+#ifdef MAC
+"SET FILE TYPE { TEXT, BINARY, MACBINARY }",
+#else
+"SET FILE TYPE { TEXT, BINARY }",
+#endif /* STRATUS */
+#endif /* MAC */
+#endif /* VMS */
+" How file contents are to be treated during file transfer in the absence",
+" of any other indication. TYPE can be TEXT for conversion of record format",
+" and character set, which is usually needed when transferring text files",
+" between unlike platforms (such as UNIX and Windows), or BINARY for no",
+" conversion if TRANSFER MODE is MANUAL, which is not the default. Use",
+" BINARY with TRANSFER MODE MANUAL for executable programs or binary data or",
+" whenever you wish to duplicate the original contents of the file, byte for"
+,
+" byte. In most modern Kermit programs, the file sender informs the receiver"
+,
+" of the file type automatically. However, when sending files from C-Kermit",
+" to an ancient or non-Columbia Kermit implementation, you might need to set",
+" the corresponding file type at the receiver as well.",
+" ",
+#ifdef VMS
+" FILE TYPE settings of TEXT and BINARY have no effect when sending files,",
+" since VMS C-Kermit determines each file's type automatically from its",
+" record format: binary for fixed, text for others. For incoming files,",
+" these settings are effective only in the absence of a file-type indication",
+" from the sender.",
+" ",
+" You may include an optional record-format after the word BINARY. This may",
+" be FIXED (the default) or UNDEFINED. UNDEFINED is used when you need to",
+" receive binary files in binary mode and have them stored with UNDEFINED",
+" record format, which is required by certain VMS applications.",
+" ",
+" Two additional VMS file types are also supported: IMAGE and LABELED.",
+" IMAGE means raw block i/o, no interference from RMS, applies to file",
+" transmission only, and overrides the normal automatica file type",
+" determination. LABELED means to send or interpret RMS attributes",
+" with the file.",
+" ",
+#else
+" When TRANSFER MODE is AUTOMATIC (as it is by default), various automatic",
+" methods (depending on the platform) are used to determine whether a file",
+" is transferred in text or binary mode; these methods (which might include",
+" content scan (see SET FILE SCAN below), filename pattern matching (SET FILE"
+,
+" PATTERNS), client/server \"kindred-spirit\" recognition, or source file",
+" record format) supersede the FILE TYPE setting but can, themselves, be",
+" superseded by including a /BINARY or /TEXT switch in the SEND, GET, or",
+" RECEIVE command.",
+" ",
+" When TRANSFER MODE is MANUAL, the automatic methods are skipped for sending"
+,
+" files; the FILE TYPE setting is used instead, which can be superseded on",
+" a per-command basis with a /TEXT or /BINARY switch.",
+#endif /* VMS */
+" ",
+
+#ifndef NOXFER
+
+"SET FILE BYTESIZE { 7, 8 }",
+" Normally 8. If 7, Kermit truncates the 8th bit of all file bytes.",
+" ",
+#ifndef NOCSETS
+"SET FILE CHARACTER-SET name",
+" Tells the encoding of the local file, ASCII by default.",
+" The names ITALIAN, PORTUGUESE, NORWEGIAN, etc, refer to 7-bit ISO-646",
+" national character sets. LATIN1 is the 8-bit ISO 8859-1 Latin Alphabet 1",
+" for Western European languages.",
+" NEXT is the 8-bit character set of the NeXT workstation.",
+" The CPnnn sets are for PCs. MACINTOSH-LATIN is for the Macintosh.",
+#ifndef NOLATIN2
+" LATIN2 is ISO 8859-2 for Eastern European languages that are written with",
+" Roman letters. Mazovia is a PC code page used in Poland.",
+#endif /* NOLATIN2 */
+#ifdef CYRILLIC
+" KOI-CYRILLIC, CYRILLIC-ISO, and CP866 are 8-bit Cyrillic character sets.",
+" SHORT-KOI is a 7-bit ASCII coding for Cyrillic. BULGARIA-PC is a PC code",
+" page used in Bulgaria",
+#endif /* CYRILLIC */
+#ifdef HEBREW
+" HEBREW-ISO is ISO 8859-8 Latin/Hebrew. CP862 is the Hebrew PC code page.",
+" HEBREW-7 is like ASCII with the lowercase letters replaced by Hebrew.",
+#endif /* HEBREW */
+#ifdef GREEK
+" GREEK-ISO is ISO 8859-7 Latin/Greek. CP869 is the Greek PC code page.",
+" ELOT-927 is like ASCII with the lowercase letters replaced by Greek.",
+#endif /* GREEK */
+#ifdef KANJI
+" JAPANESE-EUC, JIS7-KANJI, DEC-KANJI, and SHIFT-JIS-KANJI are Japanese",
+" Kanji character sets.",
+#endif /* KANJI */
+#ifdef UNICODE
+" UCS-2 is the 2-byte form of the Universal Character Set.",
+" UTF-8 is the serialized form of the Universal Character Set.",
+#endif /* UNICODE */
+" Type SET FILE CHAR ? for a complete list of file character sets.",
+" ",
+"SET FILE DEFAULT 7BIT-CHARACTER-SET",
+" When automatically switching among different kinds of files while sending",
+" this tells the character set to be used for 7-bit text files.",
+" ",
+"SET FILE DEFAULT 8BIT-CHARACTER-SET",
+" This tells the character set to be used for 8-bit text files when",
+" switching automatically among different kinds of files.",
+" ",
+#endif /* NOCSETS */
+
+"SET FILE COLLISION option",
+" Tells what to do when a file arrives that has the same name as",
+" an existing file. The options are:",
+" BACKUP (default) - Rename the old file to a new, unique name and store",
+" the incoming file under the name it was sent with.",
+" OVERWRITE - Overwrite (replace) the existing file.",
+" APPEND - Append the incoming file to the end of the existing file.",
+" DISCARD - Refuse and/or discard the incoming file.",
+" RENAME - Give the incoming file a unique name.",
+" UPDATE - Accept the incoming file only if newer than the existing file.",
+" ",
+
+"SET FILE DESTINATION { DISK, PRINTER, SCREEN, NOWHERE }",
+" DISK (default): Store incoming files on disk.",
+" PRINTER: Send incoming files to SET PRINTER device.",
+" SCREEN: Display incoming files on screen (local mode only).",
+" NOWHERE: Do not put incoming files anywhere (use for calibration).",
+" ",
+"SET FILE DISPLAY option",
+" Selects the format of the file transfer display for local-mode file",
+" transfer. The choices are:",
+" ",
+" BRIEF A line per file, showing size, mode, status, and throughput.",
+" SERIAL One dot is printed for every K bytes transferred.",
+" CRT Numbers are continuously updated on a single screen line.",
+" This format can be used on any video display terminal.",
+#ifdef CK_CURSES
+" FULLSCREEN A fully formatted 24x80 screen showing lots of information.",
+" This requires a terminal or terminal emulator.",
+#endif /* CK_CURSES */
+" NONE No file transfer display at all.",
+" ",
+
+"SET FILE DOWNLOAD-DIRECTORY [ <directory-name> ]",
+" The directory into which all received files should be placed. By default,",
+" received files go into your current directory.",
+" ",
+#endif /* NOXFER */
+
+#ifdef CK_CTRLZ
+"SET FILE EOF { CTRL-Z, LENGTH }",
+" End-Of-File detection method, normally LENGTH. Applies only to text-mode",
+" transfers. When set to CTRL-Z, this makes the file sender treat the first",
+" Ctrl-Z in the input file as the end of file (EOF), and it makes the file",
+" receiver tack a Ctrl-Z onto the end of the output file if it does not",
+" already end with Ctrl-Z.",
+" ",
+#endif /* CK_CTRLZ */
+
+"SET FILE END-OF-LINE { CR, CRLF, LF }",
+" Use this command to specify nonstandard line terminators for text files.",
+" ",
+
+#ifndef NOXFER
+"SET FILE INCOMPLETE { AUTO, KEEP, DISCARD }",
+" What to do with an incompletely received file: KEEP, DISCARD, or AUTO.",
+" AUTO (the default) means DISCARD if transfer is in text mode, KEEP if it",
+" is in binary mode.",
+" ",
+#ifdef VMS
+"SET FILE LABEL { ACL, BACKUP-DATE, NAME, OWNER, PATH } { ON, OFF }",
+" Tells which items to include (ON) or exclude (OFF) in labeled file",
+" transfers",
+" ",
+#else
+#ifdef OS2
+"SET FILE LABEL { ARCHIVE, READ-ONLY, HIDDEN, SYSTEM, EXTENDED } { ON, OFF }",
+" Tells which items to include (ON) or exclude (OFF) in labeled file",
+" transfers.",
+" ",
+#endif /* OS2 */
+#endif /* VMS */
+
+#ifdef UNIX
+#ifdef DYNAMIC
+"SET FILE LISTSIZE number",
+" Changes the size of the internal wildcard expansion list. Use SHOW FILE",
+" to see the current size. Use this command to increase the size if you get",
+" a \"?Too many files\" error. Also see SET FILE STRINGSPACE.",
+" ",
+#endif /* DYNAMIC */
+#endif /* UNIX */
+
+"SET FILE NAMES { CONVERTED, LITERAL }",
+" File names are normally CONVERTED to \"common form\" during transmission",
+" (e.g. lowercase to uppercase, extra periods changed to underscore, etc).",
+" LITERAL means use filenames literally (useful between like systems). Also",
+" see SET SEND PATHNAMES and SET RECEIVE PATHNAMES.",
+" ",
+
+#ifdef UNIX
+"SET FILE OUTPUT { { BUFFERED, UNBUFFERED } [ size ], BLOCKING, NONBLOCKING }",
+" Lets you control the disk output buffer for incoming files. Buffered",
+" blocking writes are normal. Nonblocking writes might be faster on some",
+" systems but might also be risky, depending on the underlying file service.",
+" Unbuffered writes might be useful in critical applications to ensure that",
+" cached disk writes are not lost in a crash, but will probably also be",
+" slower. The optional size parameter after BUFFERED or UNBUFFERED lets you",
+" change the disk output buffer size; this might make a difference in",
+" performance.",
+" ",
+#endif /* UNIX */
+
+#ifdef PATTERNS
+"SET FILE PATTERNS { ON, OFF, AUTO }",
+" ON means to use filename pattern lists to determine whether to send a file",
+" in text or binary mode. OFF means to send all files in the prevailing",
+" mode. AUTO (the default) is like ON if the other Kermit accepts Attribute",
+" packets and like OFF otherwise. FILE PATTERNS are used only if FILE SCAN",
+" is OFF (see SET FILE SCAN).",
+" ",
+"SET FILE BINARY-PATTERNS [ <pattern> [ <pattern> ... ] ]",
+" Zero or more filename patterns which, if matched, cause a file to be sent",
+" in binary mode when FILE PATTERNS are ON. HELP WILDCARDS for a description"
+,
+" of pattern syntax. SHOW PATTERNS to see the current file pattern lists.",
+" ",
+"SET FILE TEXT-PATTERNS [ <pattern> [ <pattern> ... ] ]",
+" Zero or more filename patterns which, if matched, cause a file to be sent",
+" in text mode when FILE PATTERNS is ON; if a file does not match a text or",
+" binary pattern, the prevailing SET FILE TYPE is used.",
+" ",
+#endif /* PATTERNS */
+
+#ifdef VMS
+"SET FILE RECORD-LENGTH number",
+" Sets the record length for received files of type BINARY. Use this to",
+" receive VMS BACKUP savesets or other fixed-format files that do not use",
+" the default record length of 512.",
+" ",
+#endif /* VMS */
+
+"SET FILE SCAN { ON [ size ], OFF }",
+" If TRANSFER MODE is AUTOMATIC and FILE SCAN is ON (as it is by default)",
+" Kermit peeks at the file's contents to see if it's text or binary. Use",
+" SET FILE SCAN OFF to disable file peeking, while still keeping TRANSFER",
+" MODE automatic to allow name patterns and other methods. The optional",
+" size is the number of file bytes to scan, 49152 by default. -1 means to",
+" scan the whole file. Also see SET FILE PATTERNS.",
+" ",
+
+#ifdef UNIX
+#ifdef DYNAMIC
+"SET FILE STRINGSPACE number",
+" Changes the size (in bytes) of the internal buffer that holds lists of",
+" filenames such as wildcard expansion lists. Use SHOW FILE to see the",
+" current size. Use this command to increase the size if you get a",
+" \"?String space exhausted\" error. Also see SET FILE LISTSIZE.",
+" ",
+#endif /* DYNAMIC */
+#endif /* UNIX */
+
+#ifdef UNICODE
+"SET FILE UCS BOM { ON, OFF }",
+" Whether to write a Byte Order Mark when creating a UCS-2 file.",
+" ",
+"SET FILE UCS BYTE-ORDER { BIG-ENDIAN, LITTLE-ENDIAN }",
+" Byte order to use when creating UCS-2 files, and to use when reading UCS-2",
+" files that do not start with a Byte Order Mark.",
+" ",
+#endif /* UNICODE */
+
+"SET FILE WARNING { ON, OFF }",
+" SET FILE WARNING is superseded by the newer command, SET FILE",
+" COLLISION. SET FILE WARNING ON is equivalent to SET FILE COLLISION RENAME",
+" and SET FILE WARNING OFF is equivalent to SET FILE COLLISION OVERWRITE.",
+#endif /* NOXFER */
+"" };
+
+static char *hmxyhsh[] = {
+"Syntax: SET HANDSHAKE { NONE, XON, LF, BELL, ESC, CODE number }",
+" Character to use for half duplex line turnaround handshake during file",
+" transfer. C-Kermit waits for this character from the other computer",
+" before sending its next packet. Default is NONE; you can give one of the",
+" other names like BELL or ESC, or use SET HANDSHAKE CODE to specify the",
+" numeric code value of the handshake character. Type SET HANDSH ? for a",
+" complete list of possibilities.",
+"" };
+
+#ifndef NOSERVER
+static char *hsetsrv[] = {
+"SET SERVER CD-MESSAGE {ON,OFF}",
+" Tells whether the server, after successfully executing a REMOTE CD",
+" command, should send the contents of the new directory's READ.ME",
+" (or similar) file to your screen.",
+" ",
+"SET SERVER CD-MESSAGE FILE name",
+" Tells the name of the file to be displayed as a CD-MESSAGE, such as",
+" READ.ME (SHOW SERVER tells the current CD-MESSAGE FILE name).",
+" To specify more than one filename to look for, use {{name1}{name2}..}.",
+" Synonym: SET CD MESSAGE FILE <list>.",
+" ",
+"SET SERVER DISPLAY {ON,OFF}",
+" Tells whether local-mode C-Kermit during server operation should put a",
+" file transfer display on the screen. Default is OFF.",
+" ",
+"SET SERVER GET-PATH [ directory [ directory [ ... ] ] ]",
+" Tells the C-Kermit server where to look for files whose names it receives",
+" from client GET commands when the names are not fully specified pathnames.",
+" Default is no GET-PATH, so C-Kermit looks only in its current directory.",
+" ",
+"SET SERVER IDLE-TIMEOUT seconds",
+" Idle time limit while in server mode, 0 for no limit.",
+#ifndef OS2
+" NOTE: SERVER IDLE-TIMEOUT and SERVER TIMEOUT are mutually exclusive.",
+#endif /* OS2 */
+" ",
+"SET SERVER KEEPALIVE {ON,OFF}",
+" Tells whether C-Kermit should send \"keepalive\" packets while executing",
+" REMOTE HOST commands, which is useful in case the command takes a long",
+" time to produce any output and therefore might cause the operation to time",
+" out. ON by default; turn it OFF if it causes trouble with the client or",
+" slows down the server too much.",
+" ",
+"SET SERVER LOGIN [ username [ password [ account ] ] ]",
+" Sets up a username and optional password which must be supplied before",
+" the server will respond to any commands other than REMOTE LOGIN. The",
+" account is ignored. If you enter SET SERVER LOGIN by itself, then login",
+" is no longer required. Only one SET SERVER LOGIN command can be in effect",
+" at a time; C-Kermit does not support multiple user/password pairs.",
+" ",
+"SET SERVER TIMEOUT n",
+" Server command wait timeout interval, how often the C-Kermit server issues",
+" a NAK while waiting for a command packet. Specify 0 for no NAKs at all.",
+" Default is 0.",
+""
+};
+#endif /* NOSERVER */
+
+static char *hmhrmt[] = {
+#ifdef NEWFTP
+"The REMOTE command sends file management instructions or other commands",
+"to a Kermit or FTP server. If you have a single connection, the command is",
+"directed to the server you are connected to; if you have multiple connections"
+,
+"the command is directed according to your GET-PUT-REMOTE setting.",
+#else
+"The REMOTE command sends file management instructions or other commands",
+"to a Kermit server. There should already be a Kermit running in server",
+"mode on the other end of the connection.",
+#endif /* NEWFTP */
+"Type REMOTE ? to see a list of available remote commands. Type HELP REMOTE",
+"xxx to get further information about a particular remote command xxx.",
+" ",
+"All REMOTE commands except LOGIN and LOGOUT have R-command shortcuts;",
+"for example, RDIR for REMOTE DIR, RCD for REMOTE CD, etc.",
+" ",
+#ifdef NEWFTP
+#ifdef LOCUS
+"Also see: HELP SET LOCUS, HELP FTP, HELP SET GET-PUT-REMOTE.",
+#else
+"Also see: HELP FTP, HELP SET GET-PUT-REMOTE.",
+#endif /* LOCUS */
+#else
+#ifdef LOCUS
+"Also see: HELP SET LOCUS.",
+#endif /* LOCUS */
+#endif /* NEWFTP */
+"" };
+
+#ifndef NOSPL
+static char *ifhlp[] = { "Syntax: IF [NOT] condition commandlist",
+" ",
+"If the condition is (is not) true, do the commandlist. The commandlist",
+"can be a single command, or a list of commands separated by commas and",
+"enclosed in braces. The condition can be a single condition or a group of",
+"conditions separated by AND (&&) or OR (||) and enclosed in parentheses.",
+"If parentheses are used they must be surrounded by spaces. Examples:",
+" ",
+" IF EXIST oofa.txt <command>",
+" IF ( EXIST oofa.txt || = \\v(nday) 3 ) <command>",
+" IF ( EXIST oofa.txt || = \\v(nday) 3 ) { <command>, <command>, ... }",
+" ",
+"The conditions are:",
+" ",
+" SUCCESS - The previous command succeeded",
+" OK - Synonym for SUCCESS",
+" FAILURE - The previous command failed",
+" ERROR - Synonym for FAILURE",
+" FLAG - Succeeds if SET FLAG ON, fails if SET FLAG OFF",
+" BACKGROUND - C-Kermit is running in the background",
+#ifdef CK_IFRO
+" FOREGROUND - C-Kermit is running in the foreground",
+" REMOTE-ONLY - C-Kermit was started with the -R command-line option",
+#else
+" FOREGROUND - C-Kermit is running in the foreground",
+#endif /* CK_IFRO */
+" KERBANG - A Kerbang script is running",
+" ALARM - SET ALARM time has passed",
+" ASKTIMEOUT - The most recent ASK, ASKQ, GETC, or GETOK timed out",
+" EMULATION - Succeeds if executed while in CONNECT mode",
+#ifdef OS2
+" TAPI - Current connection is via a Microsoft TAPI device",
+#endif /* OS2 */
+" ",
+" MS-KERMIT - Program is MS-DOS Kermit",
+" C-KERMIT - Program is C-Kermit",
+" K-95 - Program is Kermit 95",
+" GUI - Program runs in a GUI window",
+" ",
+" AVAILABLE CRYPTO - Encryption is available",
+" AVAILABLE KERBEROS4 - Kerberos 4 authentication is available",
+" AVAILABLE KERBEROS5 - Kerberos 5 authentication is available",
+" AVAILABLE NTLM - NTLM authentication is available",
+" AVAILABLE SRP - SRP authentication is available",
+" AVAILABLE SSL - SSL/TLS authentication is available",
+" MATCH string pattern - Succeeds if string matches pattern",
+#ifdef CKFLOAT
+" FLOAT number - Succeeds if floating-point number",
+#endif /* CKFLOAT */
+" COMMAND word - Succeeds if word is built-in command",
+" DEFINED variablename or macroname - The named variable or macro is defined",
+" DECLARED arrayname - The named array is declared",
+" NUMERIC variable or constant - The variable or constant is numeric",
+" EXIST filename - The named file exists",
+" ABSOLUTE filename - The filename is absolute, not relative",
+#ifdef CK_TMPDIR
+" DIRECTORY string - The string is the name of a directory",
+#endif /* CK_TMPDIR */
+" READABLE filename - Succeeds if the file is readable",
+" WRITEABLE filename - Succeeds if the file is writeable",
+#ifdef ZFCDAT
+" NEWER file1 file2 - The 1st file is newer than the 2nd one",
+#endif /* ZFCDAT */
+" OPEN { READ-FILE,SESSION-LOG,...} - The given file or log is open",
+#ifndef NOLOCAL
+" OPEN CONNECTION - A connection is open",
+#endif /* NOLOCAL */
+" KBHIT - A key has been pressed",
+" ",
+" VERSION - equivalent to \"if >= \\v(version) ...\"",
+" COUNT - subtract one from COUNT, execute the command if the result is",
+" greater than zero (see SET COUNT)",
+" ",
+" EQUAL s1 s2 - s1 and s2 (character strings or variables) are equal",
+" LLT s1 s2 - s1 is lexically (alphabetically) less than s2",
+" LGT s1 s1 - s1 is lexically (alphabetically) greater than s2",
+" ",
+" = n1 n2 - n1 and n2 (numbers or variables containing numbers) are equal",
+" < n1 n2 - n1 is arithmetically less than n2",
+" <= n1 n2 - n1 is arithmetically less than or equal to n2",
+" > n1 n2 - n1 is arithmetically greater than n2",
+" >= n1 n2 - n1 is arithmetically greater than or equal to n2",
+" ",
+" (number by itself) - fails if the number is 0, succeeds otherwise",
+" ",
+" TRUE - always succeeds",
+" FALSE - always fails",
+" ",
+"The IF command may be followed on the next line by an ELSE command. Example:",
+" ",
+" IF < \\%x 10 ECHO It's less",
+" ELSE echo It's not less",
+" ",
+"It can also include an ELSE part on the same line if braces are used:",
+" ",
+" IF < \\%x 10 { ECHO It's less } ELSE { ECHO It's not less }",
+" ",
+"Also see HELP WILDCARD (for IF MATCH pattern syntax).",
+"" };
+
+static char *hmxxeval[] = { "Syntax: EVALUATE variable expression",
+" Evaluates the expression and assigns its value to the given variable.",
+" The expression can contain numbers and/or numeric-valued variables or",
+" functions, combined with mathematical operators and parentheses in",
+" traditional notation. Operators include +-/*(), etc. Example:",
+" EVALUATE \\%n (1+1) * (\\%a / 3).",
+" ",
+" NOTE: Prior to C-Kermit 7.0, the syntax was \"EVALUATE expression\"",
+" (no variable), and the result was printed. Use SET EVAL { OLD, NEW }",
+" to choose the old or new behavior, which is NEW by default.",
+" ",
+"Alse see: HELP FUNCTION EVAL.",
+"" };
+#endif /* NOSPL */
+
+static char *hmxxexit[] = {
+"Syntax: EXIT (or QUIT) [ number [ text ] ]",
+" Exits from the Kermit program, closing all open files and devices.",
+" If a number is given it becomes Kermit's exit status code. If text is",
+" included, it is printed. Also see SET EXIT.",
+"" };
+
+#ifndef NOSPL
+static char *ifxhlp[] = { "\
+Syntax: XIF condition { commandlist } [ ELSE { commandlist } ]",
+" Obsolete. Same as IF (see HELP IF).",
+"" };
+
+static char *forhlp[] = { "\
+Syntax: FOR variablename initial-value final-value increment { commandlist }",
+" FOR loop. Execute the comma-separated commands in the commandlist the",
+" number of times given by the initial value, final value and increment.",
+" Example: FOR \\%i 10 1 -1 { pause 1, echo \\%i }", "" };
+
+static char *whihlp[] = { "\
+Syntax: WHILE condition { commandlist }",
+" WHILE loop. Execute the comma-separated commands in the bracketed",
+" commandlist while the condition is true. Conditions are the same as for",
+" IF commands.",
+"" };
+
+static char *swihlp[] = {
+"Syntax: SWITCH <variable> { case-list }",
+" Selects from a group of commands based on the value of a variable.",
+" The case-list is a series of lines like these:",
+" ",
+" :x, command, command, ..., break",
+" ",
+" where \"x\" is a possible value for the variable. At the end of the",
+" case-list, you can put a \"default\" label to catch when the variable does",
+" not match any of the labels:",
+" ",
+" :default, command, command, ...",
+" ",
+"The case label \"x\" can be a character, a string, a variable, a function",
+"invocation, a pattern, or any combination of these. See HELP WILDCARDS",
+"for information about patterns.",
+""};
+
+static char *openhlp[] = {
+"Syntax: OPEN mode filename",
+" For use with READ and WRITE commands. Open the local file in the",
+" specified mode: READ, WRITE, or APPEND. !READ and !WRITE mean to read",
+" from or write to a system command rather than a file. Examples:",
+" ",
+" OPEN READ oofa.txt",
+" OPEN !READ sort foo.bar",
+"" };
+
+static char *hxxask[] = {
+"Syntax: ASK [ switches ] variablename [ prompt ]",
+"Example: ASK \\%n { What is your name\\? }",
+" Issues the prompt and defines the variable to be whatever is typed in",
+" response, up to the terminating carriage return. Use braces to preserve",
+" leading and/or trailing spaces in the prompt.",
+" ",
+"Syntax: ASKQ [ switches ] variablename [ prompt ]",
+"Example: ASKQ \\%p { Password:}",
+" Like ASK except the response does not echo on the screen.",
+" ",
+"Switches:",
+" /DEFAULT:text",
+" Text to supply if the user enters a blank response or the /TIMEOUT",
+" limit expired with no response.",
+" ",
+#ifdef OS2
+" /POPUP",
+" The prompt and response dialog takes place in a text-mode popup.",
+" K95 only; in C-Kermit this switch is ignored.",
+" ",
+#ifdef KUI
+" /GUI",
+" The prompt and response dialog takes place in a GUI popup.",
+" K95 GUI version only; in C-Kermit and the K95 console version,",
+" this switch is ignored.",
+" ",
+#endif /* KUI */
+#endif /* OS2 */
+" /TIMEOUT:number",
+" If the response is not entered within the given number of seconds, the",
+" command fails. This is equivalent to setting ASK-TIMER to a positive",
+" number, except it applies only to this command. Also see SET ASK-TIMER.",
+" NOTE: If a /DEFAULT: value was also given, it is supplied automatically",
+" upon timeout and the command does NOT fail.",
+
+" ",
+" /QUIET",
+" Suppresses \"?Timed out\" message when /TIMEOUT is given and user doesn't",
+" respond within the time limit.",
+""};
+static char *hxxgetc[] = {
+"Syntax: GETC variablename [ prompt ]",
+"Example: GETC \\%c { Type any character to continue...}",
+" Issues the prompt and sets the variable to the first character you type.",
+" Use braces to preserve leading and/or trailing spaces in the prompt.",
+" ",
+"Also see SET ASK-TIMER.",
+""};
+
+static char *hmxytimer[] = {
+"Syntax: SET ASK-TIMER number",
+" For use with ASK, ASKQ, GETOK, and GETC. If ASK-TIMER is set to a number",
+" greater than 0, these commands will time out after the given number of",
+" seconds with no response. This command is \"sticky\", so to revert to",
+" \
+untimed ASKs after a timed one, use SET ASK-TIMER 0. Also see IF ASKTIMEOUT.",
+""};
+
+static char *hxxdot[] = {
+"Syntax: .<variable-name> <assignment-operator> <value>",
+" Assigns the value to the variable in the manner indicated by the",
+" assignment operator:",
+" = Copies without evaluation (like DEFINE).",
+" := Copies with evaluation (like ASSIGN).",
+" ::= Copies with arithmetic evaluation (like EVALUATE).",
+""};
+
+static char *hxxdef[] = {
+"Syntax: DEFINE name [ definition ]",
+" Defines a macro or variable. Its value is the definition, taken",
+" literally. No expansion or evaluation of the definition is done. Thus",
+" if the definition includes any variable or function references, their",
+" names are included, rather than their values (compare with ASSIGN). If",
+" the definition is omitted, then the named variable or macro is undefined.",
+" ",
+"A typical macro definition looks like this:",
+" ",
+" DEFINE name command, command, command, ...",
+" ",
+"for example:",
+" ",
+" DEFINE vax set parity even, set duplex full, set flow xon/xoff",
+" ",
+"which defines a Kermit command macro called 'vax'. The definition is a",
+"comma-separated list of Kermit commands. Use the DO command to execute",
+"the macro, or just type its name, followed optionally by arguments.",
+" ",
+"The definition of a variable can be anything at all, for example:",
+" ",
+" DEFINE \\%a Monday",
+" DEFINE \\%b 3",
+" ",
+"These variables can be used almost anywhere, for example:",
+" ",
+" ECHO Today is \\%a",
+" SET BLOCK-CHECK \\%b",
+"" };
+
+static char *hxxass[] = {
+"Syntax: ASSIGN variablename string.",
+"Example: ASSIGN \\%a My name is \\%b.",
+" Assigns the current value of the string to the variable (or macro).",
+" The definition string is fully evaluated before it is assigned, so that",
+" the values of any variables that are contained are used, rather than their",
+" names. Compare with DEFINE. To illustrate the difference, try this:",
+" ",
+" DEFINE \\%a hello",
+" DEFINE \\%x \\%a",
+" ASSIGN \\%y \\%a",
+" DEFINE \\%a goodbye",
+" ECHO \\%x \\%y",
+" ",
+" This prints 'goodbye hello'.", "" };
+
+static char *hxxdec[] = {
+"Syntax: DECREMENT variablename [ number ]",
+" Decrement (subtract one from) the value of a variable if the current value",
+" is numeric. If the number argument is given, subtract that number",
+" instead.",
+" ",
+"Examples: DECR \\%a, DECR \\%a 7, DECR \\%a \\%n", "" };
+
+static char *hxxinc[] = {
+"Syntax: INCREMENT variablename [ number ]",
+" Increment (add one to) the value of a variable if the current value is",
+" numeric. If the number argument is given, add that number instead.",
+" ",
+"Examples: INCR \\%a, INCR \\%a 7, INCR \\%a \\%n", "" };
+#endif /* NOSPL */
+
+#ifdef ANYX25
+#ifndef IBMX25
+static char *hxxpad[] = {
+"Syntax: PAD command",
+"X.25 PAD commands:",
+" ",
+" PAD CLEAR - Clear the virtual call",
+" PAD STATUS - Return the status of virtual call",
+" PAD RESET - Send a reset packet",
+" PAD INTERRUPT - Send an interrupt packet",
+""};
+#endif /* IBMX25 */
+
+static char *hxyx25[] = {
+"Syntax: SET X.25 option { ON [ data ], OFF }",
+" ",
+"X.25 call options:",
+" CLOSED-USER-GROUP { ON index, OFF }",
+" Enable or disable closed user group call, where index is the group",
+" index, 0 to 99.",
+" REVERSE-CHARGE { ON, OFF }",
+" Tell whether you want to reverse the charges for the call.",
+" CALL-USER-DATA { ON string, OFF }",
+" Specify call user-data for the X.25 call.",
+""};
+#endif /* ANYX25 */
+
+static char *hxyprtr[] = {
+#ifdef PRINTSWI
+"Syntax: SET PRINTER [ switches ] [ name ]",
+" ",
+" Specifies the printer to be used for transparent-print, autoprint, and",
+" screen-dump material during terminal emulation, as well as for the PRINT",
+" command, plus various options governing print behavior.",
+" ",
+"Switches for specifying the printer by type:",
+" ",
+"/NONE",
+" Include this switch to specify that all printer actions should simply be",
+" skipped. Use this, for example, if you have no printer.",
+" ",
+"/DOS-DEVICE[:name]",
+" Include this to declare a DOS printer and to specify its name, such as",
+" PRN, LPT1, etc.",
+" ",
+#ifdef NT
+"/WINDOWS-QUEUE[:[queue-name]]",
+" Include this to declare a Windows printer and specify its queue name.",
+" Type question mark (?) after the colon (:) to see a list of known queue",
+" names. If the colon is absent, the switch indicates the currently",
+" selected printer is a Windows Print Queue. If the colon is provided",
+" and the name is absent, the Windows Print Queue chosen as the Default",
+" Printer is selected.",
+" ",
+#endif /* NT */
+"/FILE[:name]",
+" Specifies that all printer material is to be appended to the named file,",
+" rather than being sent to a printer. If the file does not exist, it is",
+" created the first time any material is to be printed.",
+" ",
+"/PIPE[:name]",
+" Specifies that all printer material is to be sent as standard input to",
+" the program or command whose name is given. Example:",
+" ",
+" SET PRINTER /PIPE:{textps > lpt1}",
+" ",
+"If you give a printer name without specifying any of these switches, then it",
+"is assumed to be a DOS printer device or filename unless the name given",
+"(after removing enclosing braces, if any) starts with \"|\", \
+in which case it",
+"is a pipe. Examples:",
+" ",
+" SET PRINTER LPT1 <-- DOS device",
+" SET PRINTER {| textps > lpt1} <-- Pipe",
+" ",
+"The next group of switches tells whether the printer is one-way or",
+"bidirectional (two-way):",
+" ",
+"/OUTPUT-ONLY",
+" Include this to declare the printer capable only of receiving material to",
+" be printed, but not sending anything back. This is the normal kind of",
+" printer, Kermit's default kind, and the opposite of /BIDIRECTIONAL.",
+" ",
+"/BIDIRECTIONAL",
+" Include this to declare the printer bidirectional. This is the opposite ",
+" of /OUTPUT-ONLY. You can also use this option with serial printers, even",
+" if they aren't bidirectional, in case you need to specify speed, flow",
+" control, or parity.",
+" ",
+"The next group applies only to bidirectional and/or serial printers:",
+" ",
+"/FLOW-CONTROL:{NONE,XON/XOFF,RTS/CTS,KEEP}",
+" Flow control to use with a serial bidirectional printer, default KEEP;",
+#ifdef NT
+" i.e. use whatever the Windows driver for the port normally uses.",
+#else
+" i.e. use whatever the OS/2 driver for the port normally uses.",
+#endif /* NT */
+" ",
+"/PARITY:{NONE,EVEN,ODD,SPACE,MARK}",
+" Parity to use with a serial printer, default NONE; i.e. use 8 data bits",
+" and no parity. If you omit the colon and the keyword, NONE is selected.",
+" ",
+"/SPEED:number",
+" Interface speed, in bits per second, to use with a serial printer, such as",
+" 2400, 9600, 19200, etc. Type SET PRINTER /SPEED:? for a list of possible",
+" speeds.",
+" ",
+"The next group deals with print jobs -- how to identify them, how to start",
+"them, how to terminate them:",
+" ",
+"/TIMEOUT[:number]",
+" Used with host-directed transparent or auto printing, this is the number",
+" of seconds to wait after the host closes the printer before terminating",
+" the print job if the printer is not opened again during the specified",
+" amount of time.",
+" ",
+"/JOB-HEADER-FILE[:filename]",
+" The name of a file to be sent to the printer at the beginning of each",
+" print job, as a burst page, or to configure the printer. Normally no file",
+" is is sent.",
+" ",
+"/END-OF-JOB-STRING[:string]",
+" String of characters to be sent to the printer at the end of the print",
+" job, usually used to force the last or only page out of the printer. When",
+" such a string is needed, it usually consists of a single formfeed: \"set",
+" printer /end-of-job:{\\12}\". No end-of-job string is sent unless you",
+" specify one with this option. If the string contains any spaces or",
+" control characters (even in backslash notation, as above), enclose it in",
+" braces.",
+" ",
+"The next group is for use with printers that print only PostScript:",
+" ",
+"/POSTSCRIPT or /PS",
+" Indicates that K95 should convert all text to PostScript before sending",
+" it to the printer. The fixed-pitch Courier-11 font is used.",
+" ",
+"/WIDTH:number",
+" Specifies the width of the page in characters. If this switch is not",
+" given, 80 is used.",
+" ",
+"/HEIGHT:number",
+" Specifies the height of the page in lines. If this switch is not given",
+" 66 is used.",
+" ",
+"/NOPOSTSCRIPT or /NOPS",
+" Indicates that K95 should not convert all text to PostScript before",
+" sending it to the printer.",
+" ",
+"The final switch is for use with AutoPrint mode and Screen Dumps",
+" ",
+"/CHARACTER-SET:<character-set>",
+" Specifies the character set used by the printer which may be different",
+" from both the character set used by the host and by the local computer.",
+" The default value is CP437.",
+" ",
+"SHOW PRINTER displays your current printer settings.",
+#else
+#ifdef UNIX
+"Syntax: SET PRINTER [ { |command, filename } ]",
+" Specifies the command (such as \"|lpr\") or filename to be used by the",
+" PRINT command. If a filename is given, each PRINT command appends to the",
+" given file. If the SET PRINTER argument contains spaces, it must be",
+" enclosed in braces, e.g. \"set printer {| lpr -Plaser}\". If the argument",
+" is omitted the default value is restored. SHOW PRINTER lists the current",
+" printer. See HELP PRINT for further info.",
+#else
+"Sorry, SET PRINTER not available yet.",
+#endif /* UNIX */
+#endif /* PRINTSWI */
+""};
+
+#ifdef OS2
+#ifdef BPRINT
+static char *hxybprtr[] = {
+"Syntax: SET BPRINTER [ portname speed [ parity [ flow-control ] ] ]",
+" (Obsolete, replaced by SET PRINTER /BIDIRECTIONAL.)",
+""};
+#endif /* BPRINT */
+#endif /* OS2 */
+
+static char *hxyexit[] = {
+"Syntax: SET EXIT HANGUP { ON, OFF }",
+" When ON (which is the default), C-Kermit executes an implicit HANGUP and",
+" CLOSE command on the communications device or connection when it exits.",
+" When OFF, Kermit skips this sequence.",
+" ",
+"Syntax: SET EXIT ON-DISCONNECT { ON, OFF }",
+" When ON, C-Kermit EXITs automatically when a network connection",
+" is terminated either by the host or by issuing a HANGUP command.",
+" ",
+"Syntax: SET EXIT STATUS number",
+#ifdef NOSPL
+" Set C-Kermit's program return code to the given number.",
+#else
+" Set C-Kermit's program return code to the given number, which can be a",
+" constant, variable, function result, or arithmetic expression.",
+#endif /* NOSPL */
+" ",
+"Syntax: SET EXIT WARNING { ON, OFF, ALWAYS }",
+" When EXIT WARNING is ON, issue a warning message and ask for confirmation",
+" before EXITing if a connection to another computer might still be open.",
+" When EXIT WARNING is ALWAYS, confirmation is always requested. When OFF",
+" it is never requested. The default is ON.",
+"" };
+
+#ifndef NOSPL
+static char *hxxpau[] = {
+"Syntax: PAUSE [ { number-of-seconds, hh:mm:ss } ]",
+"Example: PAUSE 3 or PAUSE 14:52:30",
+" Do nothing for the specified number of seconds or until the given time of",
+" day in 24-hour hh:mm:ss notation. If the time of day is earlier than the",
+" current time, it is assumed to be tomorrow. If no argument given, one",
+" second is used. The pause can be interrupted by typing any character on",
+" the keyboard unless SLEEP CANCELLATION is OFF. If interrupted, PAUSE",
+" fails, otherwise it succeeds. Synonym: SLEEP.",
+"" };
+
+static char *hxxmsl[] = {
+"Syntax: MSLEEP [ number ]",
+"Example: MSLEEP 500",
+" Do nothing for the specified number of milliseconds; if no number given,",
+" 100 milliseconds.","" };
+#endif /* NOSPL */
+
+#ifndef NOPUSH
+extern int nopush;
+static char *hxxshe[] = {
+"Syntax: !, @, RUN, PUSH, or SPAWN, optionally followed by a command.",
+" Gives the command to the local operating system's command processor, and",
+" displays the results on the screen. If the command is omitted, enters the",
+" system's command line interpreter or shell; exit from it (the command for",
+" this is usually EXIT or QUIT or LOGOUT) to return to Kermit.",
+""
+};
+#endif /* NOPUSH */
+
+#ifndef NOXMIT
+static char *hxxxmit[] = {
+"Syntax: TRANSMIT [ switches ] filename",
+" Sends the contents of a file, without any error checking or correction,",
+" to the computer on the other end of your SET LINE or SET HOST connection",
+" (or if C-Kermit is in remote mode, displays it on the screen). The",
+" filename is the name of a single file (no wildcards) to be sent or, if",
+" the /PIPE switch is included, the name of a command whose output is to be",
+" sent.",
+" ",
+" The file is sent according to your current FILE TYPE setting (BINARY or",
+" TEXT), which you can override with a /BINARY or /TEXT switch without",
+" changing the global setting. In text mode, it is sent a line at a time,",
+" with carriage return at the end of each line (as if you were typing it at",
+" your keyboard), and C-Kermit waits for a linefeed to echo before sending",
+" the next line; use /NOWAIT to eliminate the feedback requirement. In",
+" binary mode, it is sent a character at a time, with no feedback required.",
+" ",
+" Normally the transmitted material is echoed to your screen. Use SET",
+" TRANSMIT ECHO OFF or the /NOECHO switch to suppress echoing. Note that",
+" TRANSMIT /NOECHO /NOWAIT /BINARY is a special case, that more or less",
+" blasts the file out at full speed.",
+" ",
+#ifndef NOCSETS
+" Character sets are translated according to your current FILE and TERMINAL",
+" CHARACTER-SET settings when TRANSMIT is in text mode. Include /TRANSPARENT"
+,
+" to disable character-set translation in text mode (/TRANSPARENT implies",
+" /TEXT).",
+" ",
+#endif /* NOCSETS */
+" There can be no guarantee that the other computer will receive the file",
+" correctly and completely. Before you start the TRANSMIT command, you",
+" must put the other computer in data collection mode, for example by",
+" starting a text editor. TRANSMIT may be interrupted by Ctrl-C. Synonym:",
+" XMIT. See HELP SET TRANSMIT for further information.",
+"" };
+#endif /* NOXMIT */
+
+#ifndef NOCSETS
+static char *hxxxla[] = {
+"Syntax: TRANSLATE file1 cs1 cs2 [ file2 ]",
+" Translates file1 from the character set cs1 into the character set cs2",
+" and stores the result in file2. The character sets can be any of",
+" C-Kermit's file character sets. If file2 is omitted, the translation",
+" is displayed on the screen. An appropriate intermediate character-set",
+" is chosen automatically, if necessary. Synonym: XLATE. Example:",
+" ",
+" TRANSLATE lasagna.lat latin1 italian lasagna.nrc",
+" ",
+" Multiple files can be translated if file2 is a directory or device name,",
+" rather than a filename, or if file2 is omitted.",
+"" };
+#endif /* NOCSETS */
+
+#ifndef NOSPL
+static char *hxxwai[] = {
+"Syntax: WAIT { number-of-seconds, hh:mm:ss } [ <what> ]",
+" ",
+"Examples:",
+" wait 5 cd cts",
+" wait 23:59:59 cd",
+" ",
+" Waits up to the given number of seconds or the given time of day for the",
+" specified item or event, which can be FILE, the name(s) of one or more",
+" modem signals, or nothing. If nothing is specified, WAIT acts like SLEEP.",
+" If one or more modem signal names are given, Kermit waits for the specified"
+,
+" modem signals to appear on the serial communication device.",
+" Sets FAILURE if the signals do not appear in the given time or interrupted",
+" from the keyboard during the waiting period.",
+" ",
+"Signals:",
+" cd = Carrier Detect;",
+" dsr = Dataset Ready;",
+" cts = Clear To Send;",
+" ri = Ring Indicate.",
+" ",
+"If you want Kermit to wait for a file event, then the syntax is:",
+" ",
+" WAIT <time> FILE { CREATION, DELETION, MODIFICATION } <filename>",
+" ",
+"where <time> is as above, and <filename> is the name of a single file.",
+"Kermit waits up to the given amount of time for the specified event to occur",
+"with the specified file, succeeds if it does, fails if it doesn't.",
+"" };
+#endif /* NOSPL */
+
+static char *hxxwri[] = {
+"Syntax: WRITE name text",
+" Writes the given text to the named log or file. The text text may include",
+" backslash codes, and is not terminated by a newline unless you include the",
+" appropriate code. The name parameter can be any of the following:",
+" ",
+" DEBUG-LOG",
+" ERROR (standard error)",
+#ifndef NOSPL
+" FILE (the OPEN WRITE, OPEN !WRITE, or OPEN APPEND file, see HELP OPEN)",
+#endif /* NOSPL */
+" PACKET-LOG",
+" SCREEN (compare with ECHO)",
+#ifndef NOLOCAL
+" SESSION-LOG",
+#endif /* NOLOCAL */
+" TRANSACTION-LOG", "" };
+
+#ifndef NODIAL
+static char *hxxlook[] = { "Syntax: LOOKUP name",
+" Looks up the given name in the dialing directory or directories, if any,",
+" specified in the most recent SET DIAL DIRECTORY command. Each matching",
+" entry is shown, along with any transformations that would be applied to",
+" portable-format entries based on your locale. HELP DIAL, HELP SET DIAL",
+" for further info.",
+""
+};
+
+static char *hxxansw[] = { "Syntax: ANSWER [ <seconds> ]",
+#ifdef OS2
+" Waits for a modem call to come in. Prior SET MODEM TYPE and SET PORT",
+#else
+" Waits for a modem call to come in. Prior SET MODEM TYPE and SET LINE",
+#endif /* OS2 */
+" required. If <seconds> is 0 or not specified, Kermit waits forever or",
+" until interrupted, otherwise Kermit waits the given number of seconds.",
+" The ANSWER command puts the modem in autoanswer mode. Subsequent DIAL",
+" commands will automatically put it (back) in originate mode. SHOW MODEM,",
+" HELP SET MODEM for more info.",
+""
+};
+
+static char *hxxdial[] = { "Syntax: DIAL phonenumber",
+"Example: DIAL 7654321",
+" \
+Dials a number using an autodial modem. First you must SET MODEM TYPE, then",
+#ifdef OS2
+" SET PORT (or in Windows only, SET PORT TAPI instead of SET MODEM TYPE and",
+" SET LINE), then SET SPEED. Then give the DIAL command, including the phone",
+#else
+" SET LINE, then SET SPEED. Then give the DIAL command, including the phone",
+#endif /* OS2 */
+" number, for example:",
+" ",
+" DIAL 7654321",
+#ifdef NETCONN
+" ",
+" If the modem is on a network modem server, SET HOST first, then SET MODEM",
+" TYPE, then DIAL.",
+#endif /* NETCONN */
+" ",
+"If you give the DIAL command interactively at the Kermit prompt, and the",
+"call is placed successfully, Kermit automatically enters CONNECT mode.",
+"If the DIAL command is given from a macro or command file, Kermit remains",
+"in command mode after the call is placed, successfully or not. You can",
+"change this behavior with the SET DIAL CONNECT command.",
+" ",
+"If the phonenumber starts with a letter, and if you have used the SET DIAL",
+"DIRECTORY command to specify one or more dialing-directory files, Kermit",
+"looks it up in the given file(s); if it is found, the name is replaced by",
+"the number or numbers associated with the name. If it is not found, the",
+"name is sent to the modem literally.",
+" ",
+"If the phonenumber starts with an equals sign (\"=\"), this forces the part",
+"after the = to be sent literally to the modem, even if it starts with a",
+"letter, without any directory lookup.",
+" ",
+"You can also give a list of phone numbers enclosed in braces, e.g:",
+" ",
+" dial {{7654321}{8765432}{+1 (212 555-1212}}",
+" ",
+"(Each number is enclosed in braces and the entire list is also enclosed in",
+"braces.) In this case, each number is tried until there is an answer. The",
+"phone numbers in this kind of list can not be names of dialing directory",
+"entries.",
+" ",
+"A dialing directory is a plain text file, one entry per line:",
+" ",
+" name phonenumber ; comments",
+" ",
+"for example:",
+" ",
+" work 9876543 ; This is a comment",
+" e-mail +1 (212) 555 4321 ; My electronic mailbox",
+" germany +49 (511) 555 1234 ; Our branch in Hanover",
+" ",
+"If a phone number starts with +, then it must include country code and",
+"area code, and C-Kermit will try to handle these appropriately based on",
+"the current locale (HELP SET DIAL for further info); these are called",
+"PORTABLE entries. If it does not start with +, it is dialed literally.",
+" ",
+"If more than one entry is found with the same name, Kermit dials all of",
+"them until the call is completed; if the entries are in portable format,",
+"Kermit dials them in cheap-to-expensive order: internal, then local, then",
+"long-distance, then international, based on its knowledge of your local",
+"country code and area code (see HELP SET DIAL).",
+" ",
+"Specify your dialing directory file(s) with the SET DIAL DIRECTORY command.",
+" ",
+#ifdef NETCONN
+"See also SET DIAL, SET MODEM, SET LINE, SET HOST, SET SPEED, REDIAL, and",
+"PDIAL.",
+#else
+"See also SET DIAL, SET MODEM, SET LINE, SET SPEED, PDIAL, and REDIAL.",
+#endif /* NETCONN */
+"" };
+
+#ifdef CK_TAPI
+static char *hxxtapi[] = {
+"TAPI CONFIGURE-LINE <tapi-line>",
+" Displays the TAPI Configure Line Dialog box and allows you to",
+" alter the default configuration for the specified <tapi-line>.",
+" ",
+"TAPI DIALING-PROPERTIES",
+" Displays the TAPI Dialing Properties (locations) Dialog box. The",
+" Dialing rules may be changed and locations created and deleted.",
+" When the dialog box is closed, K-95 imports the current Dialing",
+" Properties' Location into the Kermit DIAL command settings.",
+""};
+
+static char *hxytapi[] = {
+"SET TAPI LINE <tapi-line>",
+" Opens a TAPI device for use by Kermit.",
+" ",
+"SET TAPI MODEM-DIALING {ON, [OFF]}",
+" If TAPI MODEM-DIALING is OFF when SET TAPI LINE is issued, Kermit opens",
+" the TAPI device directly as a \"raw port\". The device is unavailable to",
+" other applications and Kermit performs dialing functions using its",
+" built-in dialing and modem databases. If TAPI MODEM-DIALING is ON, TAPI",
+" handles all dialing functions and the port may be shared with other",
+" applications when a call in not active. When TAPI MODEM-DIALING is OFF,",
+" SET MODEM TYPE TAPI Kermit uses the TAPI modem commands imported from the",
+" Windows Registry during the previous SET TAPI LINE call.",
+" ",
+"SET TAPI LOCATION <tapi-location>",
+" Specifies the TAPI location to make current for the entire system. The",
+" <tapi-location>'s dialing properties are imported into Kermit's SET DIAL",
+" command database.",
+" ",
+"SET TAPI PHONE-NUMBER-CONVERSIONS {ON, OFF, [AUTO]}",
+" Controls whether the phone number conversions are performed by TAPI (ON)",
+" or by Kermit (OFF), or according the type of port that was selected",
+" (AUTO); AUTO is the default, and is equivalent to ON if the current",
+" LINE/PORT is a TAPI device and TAPI MODEM-DIALING is ON, OFF otherwise.",
+" ",
+"SET TAPI MODEM-LIGHTS {[ON], OFF}",
+" Displays a modem lights indicator on the Windows 95 Taskbar. Does nothing",
+" in Windows NT 4.0.",
+" ",
+"SET TAPI MANUAL-DIALING {ON, [OFF]}",
+" Displays a dialog box during dialing requesting that you manually dial the",
+" phone before continuing. Applies only when TAPI MODEM-DIALING is ON.",
+" ",
+"SET TAPI WAIT-FOR-CREDIT-CARD-TONE <seconds>",
+" Some modems don't support the '$' (BONG) symbol during dialing, which",
+" means \"wait for credit card tone before continuing.\" If TAPI recognizes",
+" the modem as one that does not support BONG, it replaces the '$' with",
+" <seconds> worth of pauses. The default is 8 seconds. This command",
+" applies only when TAPI MODEM-DIALING is ON",
+" ",
+"SET TAPI PRE-DIAL-TERMINAL {ON, [OFF]}",
+"SET TAPI POST-DIAL-TERMINAL {ON, [OFF]}",
+" Displays a small terminal window that may be used to communicate with the",
+" modem or the host prior to or immediately after dialing; applies only when",
+" TAPI MODEM-DIALING is ON",
+" ",
+"SET TAPI INACTIVITY-TIMEOUT <minutes>",
+" Specifies the number of minutes of inactivity that may go by before TAPI",
+" disconnects the line. The default is 0 which means disable this function.",
+" Applies only when TAPI MODEM-DIALING is ON.",
+" ",
+"SET TAPI USE-WINDOWS-CONFIGURATION {ON, [OFF]}",
+" Specifies whether the TAPI modem values for speed, parity, stop bits, flow",
+" control, etc. are used in preference to the current values specified",
+" within Kermit-95.",
+" ",
+""};
+#endif /* CK_TAPI */
+
+#endif /* NODIAL */
+
+#ifdef TNCODE
+static char *hmxxiks[] = {
+"Syntax: IKS [ switches ] [ host [ service ] ]",
+" Establishes a new connection to an Internet Kermit Service daemon.",
+" Equivalent to SET NETWORK TYPE TCP/IP, SET HOST host KERMIT /TELNET,",
+" IF SUCCESS CONNECT. If host is omitted, the previous connection (if any)",
+" is resumed. Depending on how Kermit has been built switches may be",
+" available to require a secure authentication method and bidirectional",
+" encryption. See HELP SET TELNET for more info.",
+" ",
+#ifdef CK_AUTHENTICATION
+" /AUTH:<type> is equivalent to SET TELNET AUTH TYPE <type> and",
+" SET TELOPT AUTH REQUIRED with the following exceptions. If the type",
+" is AUTO, then SET TELOPT AUTH REQUESTED is executed and if the type",
+" is NONE, then SET TELOPT AUTH REFUSED is executed.",
+" ",
+#endif /* CK_AUTHENTICATION */
+#ifdef CK_ENCRYPTION
+" /ENCRYPT:<type> is equivalent to SET TELNET ENCRYPT TYPE <type>",
+" and SET TELOPT ENCRYPT REQUIRED REQUIRED with the following exceptions.",
+" If the type is AUTO then SET TELOPT AUTH REQUESTED REQUESTED is executed",
+" and if the type is NONE then SET TELOPT ENCRYPT REFUSED REFUSED is",
+" executed.",
+" ",
+#endif /* CK_ENCRYPTION */
+" /USERID:[<name>]",
+" This switch is equivalent to SET LOGIN USERID <name> or SET TELNET",
+" ENVIRONMENT USER <name>. If a string is given, it sent to host during",
+" Telnet negotiations; if this switch is given but the string is omitted,",
+" no user ID is sent to the host. If this switch is not given, your",
+" current USERID value, \\v(userid), is sent. When a userid is sent to the",
+" host it is a request to login as the specified user.",
+" ",
+#ifdef CK_AUTHENTICATION
+" /PASSWORD:[<string>]",
+" This switch is equivalent to SET LOGIN PASSWORD. If a string is given,",
+" it is treated as the password to be used (if required) by any Telnet",
+" Authentication protocol (Kerberos Ticket retrieval, Secure Remote",
+" Password, or X.509 certificate private key decryption.) If no password",
+" switch is specified a prompt is issued to request the password if one",
+" is required for the negotiated authentication method.",
+#endif /* CK_AUTHENTICATION */
+""};
+
+static char *hmxxtel[] = {
+"Syntax: TELNET [ switches ] [ host [ service ] ]",
+" Equivalent to SET NETWORK TYPE TCP/IP, SET HOST host [ service ] /TELNET,",
+" IF SUCCESS CONNECT. If host is omitted, the previous connection (if any)",
+" is resumed. Depending on how Kermit has been built switches may be",
+" available to require a secure authentication method and bidirectional",
+" encryption. See HELP SET TELNET for more info.",
+" ",
+#ifdef CK_AUTHENTICATION
+" /AUTH:<type> is equivalent to SET TELNET AUTH TYPE <type> and",
+" SET TELOPT AUTH REQUIRED with the following exceptions. If the type",
+" is AUTO, then SET TELOPT AUTH REQUESTED is executed and if the type",
+" is NONE, then SET TELOPT AUTH REFUSED is executed.",
+" ",
+#endif /* CK_AUTHENTICATION */
+#ifdef CK_ENCRYPTION
+" /ENCRYPT:<type> is equivalent to SET TELNET ENCRYPT TYPE <type>",
+" and SET TELOPT ENCRYPT REQUIRED REQUIRED with the following exceptions.",
+" If the type is AUTO then SET TELOPT AUTH REQUESTED REQUESTED is executed",
+" and if the type is NONE then SET TELOPT ENCRYPT REFUSED REFUSED is",
+" executed.",
+" ",
+#endif /* CK_ENCRYPTION */
+" /USERID:[<name>]",
+" This switch is equivalent to SET LOGIN USERID <name> or SET TELNET",
+" ENVIRONMENT USER <name>. If a string is given, it sent to host during",
+" Telnet negotiations; if this switch is given but the string is omitted,",
+" no user ID is sent to the host. If this switch is not given, your",
+" current USERID value, \\v(userid), is sent. When a userid is sent to the",
+" host it is a request to login as the specified user.",
+" ",
+#ifdef CK_AUTHENTICATION
+" /PASSWORD:[<string>]",
+" This switch is equivalent to SET LOGIN PASSWORD. If a string is given,",
+" it is treated as the password to be used (if required) by any Telnet",
+" Authentication protocol (Kerberos Ticket retrieval, Secure Remote",
+" Password, or X.509 certificate private key decryption.) If no password",
+" switch is specified a prompt is issued to request the password if one",
+" is required for the negotiated authentication method.",
+#endif /* CK_AUTHENTICATION */
+""};
+
+static char *hxtopt[] = {
+"TELOPT { AO, AYT, BREAK, CANCEL, EC, EL, EOF, EOR, GA, IP, DMARK, NOP, SE,",
+" SUSP, SB [ option ], DO [ option ], DONT [ option ],",
+" WILL [ option ], WONT [option] }",
+" This command lets you send all the Telnet protocol commands. Note that",
+" certain commands do not require a response, and therefore can be used as",
+" nondestructive \"probes\" to see if the Telnet session is still open;",
+" e.g.:",
+" ",
+" set host xyzcorp.com",
+" ...",
+" telopt nop",
+" telopt nop",
+" if fail stop 1 Connection lost",
+" ",
+" TELOPT NOP is sent twice because the failure of the connection will not",
+" be detected until the second send is attempted. This command is meant",
+" primarily as a debugging tool for the expert user.",
+""};
+#endif /* TNCODE */
+
+#endif /* NOHELP */
+
+/* D O H L P -- Give a help message */
+
+_PROTOTYP( int dohset, (int) );
+#ifndef NOCMDL
+_PROTOTYP( int dohopts, (void) );
+#endif /* NOCMDL */
+#ifndef NOSPL
+_PROTOTYP( int dohfunc, (int) );
+extern struct keytab fnctab[];
+extern int nfuncs;
+#endif /* NOSPL */
+#ifdef OS2
+#ifndef NOKVERBS
+_PROTOTYP( int dohkverb, (int) );
+extern struct keytab kverbs[];
+extern int nkverbs;
+#endif /* NOKVERBS */
+#endif /* OS2 */
+
+#ifndef NOSPL
+static char * hxxdcl[] = {
+"Syntax: ARRAY verb operands...",
+" ",
+"Declares arrays and performs various operations on them. Arrays have",
+"the following syntax:",
+" ",
+" \\&a[n]",
+" ",
+"where \"a\" is a letter and n is a number or a variable with a numeric value",
+"or an arithmetic expression. The value of an array element can be anything",
+"at all -- a number, a character, a string, a filename, etc.",
+" ",
+"The following ARRAY verbs are available:",
+" ",
+"[ ARRAY ] DECLARE arrayname[n] [ = initializers... ]",
+" Declares an array of the given size, n. The resulting array has n+1",
+" elements, 0 through n. Array elements can be used just like any other",
+" variables. Initial values can be given for elements 1, 2, ... by",
+" including = followed by one or more values separated by spaces. If you",
+" omit the size, the array is sized according to the number of initializers;",
+" if none are given the array is destroyed and undeclared if it already",
+" existed. The ARRAY keyword is optional. Synonym: [ ARRAY ] DCL.",
+" ",
+"[ ARRAY ] UNDECLARE arrayname",
+" Destroys and undeclares the given array. Synonym: ARRAY DESTROY.",
+" ",
+"ARRAY SHOW [ arrayname ]",
+" Displays the contents of the given array. A range specifier can be",
+" included to display a segment of the array, e.g. \"array show \\&a[1:24].\""
+,
+" If the arrayname is omitted, all declared arrays are listed, but their",
+" contents is not shown. Synonym: SHOW ARRAY.",
+" ",
+"ARRAY CLEAR arrayname",
+" Clears all elements of the array, i.e. sets them to empty values.",
+" You may include a range specifier to clear a segment of the array rather",
+" than the whole array, e.g. \"array clear \\%a[22:38]\"",
+" ",
+"ARRAY SET arrayname value",
+" Sets all elements of the array to the given value. You may specify a",
+" range to set a segment of the array, e.g. \"array set \\%a[2:9] 0\"",
+" ",
+"ARRAY RESIZE arrayname number",
+" Changes the size of the given array, which must already exist, to the",
+" number given. If the number is smaller than the current size, the extra",
+" elements are discarded; if it is larger, new empty elements are added.",
+" ",
+"ARRAY COPY array1 array2",
+" Copys array1 to array2. If array2 has not been declared, it is created",
+" automatically. Range specifiers may be given on one or both arrays.",
+" ",
+"ARRAY LINK array1 arra2",
+" Makes array1 a link to array2.",
+" ",
+"[ ARRAY ] SORT [ switches ] array-name [ array2 ]",
+" Sorts the given array lexically according to the switches. Element 0 of",
+" the array is excluded from sorting by default. The ARRAY keyword is",
+" optional. If a second array name is given, that array is sorted according",
+" to the first one. Switches:",
+" ",
+" /CASE:{ON,OFF}",
+" If ON, alphabetic case matters; if OFF it is ignored. If this switch is",
+" omitted, the current SET CASE setting applies.",
+" ",
+" /KEY:number",
+" \
+Position (1-based column number) at which comparisons begin, 1 by default.",
+" ",
+" /NUMERIC",
+" Specifies a numeric rather than lexical sort.",
+" ",
+" /RANGE:low[:high]",
+" The range of elements, low through high, to be sorted. If this switch",
+" is not given, elements 1 through the dimensioned size are sorted. If",
+" :high is omitted, the dimensioned size is used. To include element 0 in",
+" a sort, use /RANGE:0 (to sort the whole array) or /RANGE:0:n (to sort",
+" elements 0 through n). You can use a range specifier in the array name",
+" instead of the /RANGE switch.",
+" ",
+" /REVERSE",
+" Sort in reverse order. If this switch is not given, the array is sorted",
+" in ascending order.",
+" ",
+"Various functions are available for array operations; see HELP FUNCTION for",
+"details. These include \\fdimension(), \\farraylook(), \\ffiles(), \
+\\fsplit(),",
+"and many more.",
+""};
+#endif /* NOSPL */
+
+#ifdef ZCOPY
+static char * hmxxcpy[] = {
+"Syntax: COPY [ switches ] file1 file2",
+" Copies the source file (file1) to the destination file (file2). If file2",
+" is a directory, file1 can contain wildcards to denote a group of files to",
+" be copied to the given directory. Switches:",
+" ",
+" /LIST",
+" Print the filenames and status while copying. Synonyms: /LOG, /VERBOSE",
+" ",
+" /NOLIST",
+" Copy silently (default). Synonyms: /NOLOG, /QUIET",
+" ",
+" /SWAP-BYTES",
+" Swap bytes while copying.",
+#ifndef NOSPL
+" ",
+" /FROMB64",
+" Convert from Base64 encoding while copying.",
+" ",
+" /TOB64",
+" Convert to Base64 encoding while copying.",
+#endif /* NOSPL */
+""
+};
+#endif /* ZCOPY */
+
+#ifndef NOFRILLS
+static char * hmxxren[] = {
+#ifdef LOCUS
+" If LOCUS is REMOTE or LOCUS is AUTO and you have an FTP connection,",
+" this command is equivalent to REMOTE RENAME (RREN). Otherwise:",
+" ",
+#endif /* LOCUS */
+"Syntax: RENAME [ switches ] name1 name2",
+" Renames the source file (name1) to the target name2. If name2 is a",
+" directory, name1 is allowed to contain wildcards, and the file(s) matching",
+" name1 are moved to directory name2, subject to rules of the underlying",
+" operating system regarding renaming across disk boundaries, etc. If name2",
+" is not a directory, name1 may not include wildcards, and the file whose",
+" name is name1 is renamed to name2. Switches:",
+" ",
+" /LIST",
+" Print the filenames and status while renaming. Synonyms: /LOG, /VERBOSE",
+" ",
+" /NOLIST",
+" Rename silently (default). Synonyms: /NOLOG, /QUIET",
+""
+};
+#endif /* NOFRILLS */
+
+static char *
+cmdlhlp[] = {
+"Command-line options are given after the program name in the system",
+"command that you use to start Kermit. Example:",
+" ",
+" kermit -i -s oofa.exe",
+" ",
+"tells Kermit to send (-s) the file oofa.exe in binary (-i) mode.",
+" ",
+"Command-line options are case-sensitive; \"-s\" is different from \"-S\".",
+#ifdef VMS
+"In VMS, uppercase options must be enclosed in doublequotes: ",
+" ",
+" $ kermit \"-Y\" \"-S\" -s oofa.txt ",
+#endif /* VMS */
+" ",
+"If any \"action options\" are included on the command line, Kermit exits",
+"after executing its command-line options. If -S is included, or no action",
+"options were given, Kermit enters its interactive command parser and",
+"issues its prompt.",
+" ",
+"Command-line options are single characters preceded by dash (-). Some",
+"require an \"argument,\" others do not. If an argument contains spaces, it",
+"must be enclosed in doublequotes:",
+" ",
+" kermit -s \"filename with spaces\"",
+" ",
+"\
+An option that does not require an argument can be bundled with other options:"
+,
+" ",
+" kermit -Qis oofa.exe",
+" ",
+"Exceptions to the rules:",
+" ",
+" . If the first command-line option is a filename, Kermit executes commands",
+" from the file. Additional command-line options can follow the filename.",
+" ",
+" . The special option \"=\" (equal sign) or \"--\" (double hyphen) means to",
+" treat the rest of the command line as data, rather than commands; this",
+" data is placed in the argument vector array, \\&@[], along with the other",
+" items on the command line, and also in the top-level \\%1..\\%9 variables."
+,
+" ",
+#ifdef KERBANG
+" . A similar option \"+\" (plus sign) means: the name of a Kermit script",
+" file follows. This file is to be executed, and its name assigned to \\%0",
+" and \\&_[0]. All subsequent command-line arguments are to be ignored by",
+" Kermit but made available to the script as \\%1, \\%2, ..., as well as",
+" in the argument-vector arrays. The initialization file is not executed",
+" automatically in this case.",
+" ",
+#endif /* KERBANG */
+" . The -s option can accept multiple filenames, separated by spaces.",
+" ",
+" . the -j and -J options allow an optional second argument, the TCP port",
+" name or number.",
+" ",
+"Type \"help options all\" to list all the command-line options.",
+"Type \"help option x\" to see the help message for option x.",
+" ",
+"Kermit also offers a selection of \"extended command-line\" options.",
+"These begin with two dashes, followed by a keyword, and then, if the option",
+"has arguments, a colon (:) or equal sign (=) followed by the argument.",
+"Unlike single-letter options, extended option keywords aren't case sensitive",
+"and they can be abbreviated to any length that still distinguishes them from",
+"other extended-option keywords. Example:",
+" ",
+" kermit --banner:oofa.txt",
+" ",
+"which designates the file oofa.txt to be printed upon startup, rather than",
+"the built-in banner (greeting) text. To obtain a list of available",
+"extended options, type \"help extended-options ?\". To get help about all",
+"extended options, type \"help extended-options\". To get help about a",
+"particular extended option, type \"help extended-option xxx\", where \"xxx\"",
+"is the option keyword.",
+#ifdef COMMENT
+#ifndef NOIKSD
+" ",
+"At present, most of the extended options apply only to the Internet Kermit",
+"Service Daemon (IKSD). Type \"help iksd\" for details.",
+#endif /* NOIKSD */
+#endif /* COMMENT */
+""
+};
+
+#ifndef NOHELP
+#ifndef NOCMDL
+int
+doxopts() {
+ extern char * xopthlp[], * xarghlp[];
+ extern struct keytab xargtab[];
+ extern int nxargs;
+ int i, x, y, n = 0;
+#ifdef CK_TTGWSIZ
+#ifdef OS2
+ ttgcwsz();
+#else /* OS2 */
+ /* Check whether window size changed */
+ if (ttgwsiz() > 0) {
+ if (tt_rows > 0 && tt_cols > 0) {
+ cmd_rows = tt_rows;
+ cmd_cols = tt_cols;
+ }
+ }
+#endif /* OS2 */
+#endif /* CK_TTGWSIZ */
+ y = cmkey(xargtab,
+ nxargs,
+ "Extended argument without the \"--\" prefix",
+ "",
+ xxstring
+ );
+ if (y == -3) {
+ printf("\n");
+ if ((x = cmcfm()) < 0)
+ return(x);
+ for (i = 0; i <= XA_MAX; i++) {
+ if (xopthlp[i]) {
+ printf("%s\n",xopthlp[i]);
+ printf(" %s\n",xarghlp[i]);
+ printf("\n");
+ n += 3;
+ if (n > (cmd_rows - 6)) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ }
+ }
+ return(1);
+ } else if (y < 0)
+ return(y);
+ if ((x = cmcfm()) < 0)
+ return(x);
+ printf("\n%s\n",xopthlp[y]);
+ printf(" %s\n\n",xarghlp[y]);
+ return(1);
+}
+
+int
+dohopts() {
+ int i, n, x, y, z, all = 0, msg = 0;
+ char *s;
+ extern char *opthlp[], *arghlp[];
+ extern char * xopthlp[], * xarghlp[];
+ extern int optact[];
+ if ((x = cmtxt("A command-line option character,\n\
+or the word ALL, or carriage return for an overview",
+ "", &s, xxstring)) < 0)
+ return(x);
+ if (!*s)
+ msg = 1;
+ else if (!strcmp(s,"all") || (!strcmp(s,"ALL")))
+ all = 1;
+ else if (*s == '-') /* Be tolerant of leading hyphen */
+ s++;
+ if (!all && (int)strlen(s) > 1) {
+ printf("?A single character, please, or carriage to list them all.\n");
+ return(-9);
+ }
+ if (all) {
+ y = 33;
+ z = 127;
+ } else {
+ y = *s;
+ z = (y == 0) ? 127 : y;
+ if (y == 0) y = 33;
+ }
+#ifdef CK_TTGWSIZ
+#ifdef OS2
+ ttgcwsz();
+#else /* OS2 */
+ /* Check whether window size changed */
+ if (ttgwsiz() > 0) {
+ if (tt_rows > 0 && tt_cols > 0) {
+ cmd_rows = tt_rows;
+ cmd_cols = tt_cols;
+ }
+ }
+#endif /* OS2 */
+#endif /* CK_TTGWSIZ */
+ printf("\n");
+ for (i = 0, n = 1; msg != 0 && *cmdlhlp[i]; i++) {
+ printf("%s\n",cmdlhlp[i]);
+ if (++n > (cmd_rows - 3)) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ }
+ if (all) {
+ printf("The following command-line options are available:\n\n");
+ n += 2;
+ }
+ for (i = y; msg == 0 && i <= z; i++) {
+ if (!opthlp[i])
+ continue;
+ if (arghlp[i]) { /* Option with arg */
+ printf(" -%c <arg>%s\n",(char)i,(optact[i]?" (action option)":""));
+
+ printf(" %s\n",opthlp[i]);
+ printf(" Argument: %s\n\n",arghlp[i]);
+ x = 4;
+ } else { /* Option without arg */
+ printf(" -%c %s%s\n",
+ (char)i, opthlp[i],
+ (optact[i]?" (action option)":"")
+ );
+ printf(" Argument: (none)\n\n");
+ x = 3;
+ }
+ n += x;
+ if (n > (cmd_rows - x - 1)) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ }
+ if (all) { /* Jeff, Jan 2003 */
+ printf("\n");
+ if (++n >= cmd_rows) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ printf("The following extended options are available:\n");
+ if (++n >= cmd_rows) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ printf("\n");
+ if (++n >= cmd_rows) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ for (i = 0; i <= XA_MAX; i++) {
+ if (xopthlp[i]) {
+ printf("%s\n",xopthlp[i]);
+ printf(" %s\n",xarghlp[i]);
+ printf("\n");
+ n += 3;
+ if (n > (cmd_rows - 4)) {
+ if (!askmore())
+ return(0);
+ else
+ n = 0;
+ }
+ }
+ }
+ }
+ return(1);
+}
+#endif /* NOCMDL */
+#endif /* NOHELP */
+
+#ifdef CKCHANNELIO
+static char * hxxfile[] = {
+"Syntax: FILE <subcommand> [ switches ] <channel> [ <data> ]",
+" Opens, closes, reads, writes, and manages local files.",
+" ",
+"The FILE commands are:",
+" ",
+" FILE OPEN (or FOPEN) -- Open a local file.",
+" FILE CLOSE (or FCLOSE) -- Close an open file.",
+" FILE READ (or FREAD) -- Read data from an open file.",
+" FILE WRITE (or FWRITE) -- Write data to an open file.",
+" FILE LIST (or FLIST) -- List open files.",
+" FILE STATUS (or FSTATUS) -- Show status of a channel.",
+" FILE REWIND (or FREWIND) -- Rewind an open file",
+" FILE COUNT (or FCOUNT) -- Count lines or bytes in an open file",
+" FILE SEEK (or FSEEK) -- Seek to specified spot in an open file.",
+" FILE FLUSH (or FFLUSH) -- Flush output buffers for an open file.",
+" ",
+"Type HELP FILE OPEN or HELP FOPEN for details about FILE OPEN;",
+"type HELP FILE CLOSE or HELP FCLOSE for details about FILE CLOSE, and so on.",
+" ",
+"The following variables are related to the FILE command:",
+" ",
+" \\v(f_max) -- Maximum number of files that can be open at once",
+" \\v(f_error) -- Completion code of most recent FILE command or function",
+" \\v(f_count) -- Result of most recent FILE COUNT command",
+" ",
+"The following functions are related to the FILE command:",
+" ",
+" \\F_eof() -- Check if channel is at EOF",
+" \\F_pos() -- Get channel read/write position (byte number)",
+" \\F_line() -- Get channel read/write position (line number)",
+" \\F_handle() -- Get file handle",
+" \\F_status() -- Get channel status",
+" \\F_getchar() -- Read character",
+" \\F_getline() -- Read line",
+" \\F_getblock() -- Read block",
+" \\F_putchar() -- Write character",
+" \\F_putline() -- Write line",
+" \\F_putblock() -- Write block",
+" \\F_errmsg() -- Error message from most recent FILE command or function",
+" ",
+"Type HELP <function-name> for information about each one.",
+""
+};
+
+static char * hxxf_op[] = {
+"Syntax: FILE OPEN [ switches ] <variable> <filename>",
+" Opens the file indicated by <filename> in the mode indicated by the",
+" switches, if any, or if no switches are included, in read-only mode, and",
+" assigns a channel number for the file to the given variable.",
+" Synonym: FOPEN. Switches:",
+" ",
+"/READ",
+" Open the file for reading.",
+" ",
+"/WRITE",
+" Open the file for writing. If /READ was not also specified, this creates",
+" a new file. If /READ was specifed, the existing file is preserved, but",
+" writing is allowed. In both cases, the read/write pointer is initially",
+" at the beginning of the file.",
+" ",
+"/APPEND",
+" If the file does not exist, create a new file and open it for writing.",
+" If the file exists, open it for writing, but with the write pointer",
+" positioned at the end.",
+" ",
+"/BINARY",
+#ifdef VMS
+" Opens the file in binary mode to inhibit end-of-line conversions.",
+#else
+#ifdef OS2
+" Opens the file in binary mode to inhibit end-of-line conversions.",
+#else
+#ifdef UNIX
+" This option is ignored in UNIX.",
+#else
+" This option is ignored on this platform.",
+#endif /* UNIX */
+#endif /* OS2 */
+#endif /* VMS */
+" ",
+"Switches can be combined in an way that makes sense and is supported by the",
+"underlying operating system.",
+""
+};
+
+static char * hxxf_cl[] = {
+"Syntax: FILE CLOSE <channel>",
+" Closes the file on the given channel if it was open.",
+" Also see HELP FILE OPEN. Synonym: FCLOSE.",
+""
+};
+
+static char * hxxf_fl[] = {
+"Syntax: FILE FLUSH <channel>",
+" Flushes output buffers on the given channel if it was open, forcing",
+" all material previously written to be committed to disk. Synonym: FFLUSH.",
+" Also available as \\F_flush().",
+""
+};
+
+static char * hxxf_li[] = {
+"Syntax: FILE LIST",
+" Lists the channel number, name, modes, and position of each file opened",
+" with FILE OPEN. Synonym: FLIST.",
+""
+};
+
+static char * hxxf_re[] = {
+"Syntax: FILE READ [ switches ] <channel> [ <variable> ]",
+" Reads data from the file on the given channel number into the <variable>,",
+" if one was given; if no variable was given, the result is printed on",
+" the screen. The variable should be a macro name rather than a \\%x",
+" variable or array element if you want backslash characters in the file to",
+" be taken literally. Synonym: FREAD. Switches:",
+" ",
+"/LINE",
+" Specifies that a line of text is to be read. A line is defined according",
+" to the underlying operating system's text-file format. For example, in",
+" UNIX a line is a sequence of characters up to and including a linefeed.",
+" The line terminator (if any) is removed before assigning the text to the",
+" variable. If no switches are included with the FILE READ command, /LINE",
+" is assumed.",
+" ",
+"/SIZE:number",
+" Specifies that the given number of bytes (characters) is to be read.",
+" This gives a semblance of \"record i/o\" for files that do not necessarily",
+" contain lines. The resulting block of characters is assigned to the",
+" variable without any editing.",
+" ",
+"/CHARACTER",
+" Equivalent to /SIZE:1. If FILE READ /CHAR succeeds but the <variable> is",
+" empty, this indicates a NUL byte was read.",
+" ",
+"/TRIM",
+" Tells Kermit to trim trailing whitespace when used with /LINE. Ignored",
+" if used with /CHAR or /SIZE.",
+" ",
+"/UNTABIFY",
+" Tells Kermit to convert tabs to spaces (assuming tabs set every 8 spaces)",
+" when used with /LINE. Ignored if used with /CHAR or /SIZE.",
+" ",
+"Synonym: FREAD.",
+"Also available as \\F_getchar(), \\F_getline(), \\F_getblock().",
+""
+};
+
+static char * hxxf_rw[] = {
+"Syntax: FILE REWIND <channel>",
+" If the channel is open, moves the read/write pointer to the beginning of",
+" the file. Equivalent to FILE SEEK <channel> 0. Synonym: FREWIND.",
+" Also available as \\F_rewind().",
+""
+};
+
+static char * hxxf_se[] = {
+"Syntax: FILE SEEK [ switches ] <channel> { [{+,-}]<number>, EOF }",
+" Switches are /BYTE, /LINE, /RELATIVE, ABSOLUTE.",
+" Moves the file pointer for this file to the given position in the",
+" file. Subsequent FILE READs or WRITEs will take place at that position.",
+" If neither the /RELATIVE nor /ABSOLUTE switch is given, an unsigned",
+" <number> is absolute; a signed number is relative. EOF means to move to",
+" the end of the file. Synonym: FSEEK. Also available as \\F_seek().",
+""
+};
+
+static char * hxxf_st[] = {
+"Syntax: FILE STATUS <channel>",
+" If the channel is open, this command shows the name of the file, the",
+" switches it was opened with, and the current read/write position.",
+" Synonym: FSTATUS",
+""
+};
+
+static char * hxxf_co[] = {
+"Syntax: FILE COUNT [ { /BYTES, /LINES, /LIST, /NOLIST } ] <channel>",
+" If the channel is open, this command prints the nubmer of bytes (default)",
+" or lines in the file if at top level or if /LIST is included; if /NOLIST",
+" is given, the result is not printed. In all cases the result is assigned",
+" to \\v(f_count). Synonym: FCOUNT",
+""
+};
+
+static char * hxxf_wr[] = {
+"FILE WRITE [ switches ] <channel> <text>",
+" Writes the given text to the file on the given channel number. The <text>",
+" can be literal text or a variable, or any combination. If the text might",
+" contain leading or trailing spaces, it must be enclosed in braces if you",
+" want to preserve them. Synonym: FWRITE. Switches:",
+" ",
+"/LINE",
+" Specifies that an appropriate line terminator is to be added to the",
+" end of the <text>. If no switches are included, /LINE is assumed.",
+" ",
+"/SIZE:number",
+" Specifies that the given number of bytes (characters) is to be written.",
+" If the given <text> is longer than the requested size, it is truncated;",
+" if is shorter, it is padded according /LPAD and /RPAD switches. Synonym:",
+" /BLOCK.",
+" ",
+"/LPAD[:value]",
+" If /SIZE was given, but the <text> is shorter than the requested size,",
+" the text is padded on the left with sufficient copies of the character",
+" whose ASCII value is given to write the given length. If no value is",
+" specified, 32 (the code for Space) is used. The value can also be 0 to",
+" write the indicated number of NUL bytes. If /SIZE was not given, this",
+" switch is ignored.",
+" ",
+"/RPAD[:value]",
+" Like LPAD, but pads on the right.",
+" ",
+"/STRING",
+" Specifies that the <text> is to be written as-is, with no terminator added."
+,
+" ",
+"/CHARACTER",
+" Specifies that one character should be written. If the <text> is empty or",
+" not given, a NUL character is written; otherwise the first character of",
+" <text> is given.",
+" ",
+"Synonym FWRITE.",
+"Also available as \\F_putchar(), \\F_putline(), \\F_putblock().",
+""
+};
+
+static int
+dohfile(cx) int cx; {
+ extern struct keytab fctab[];
+ extern int nfctab;
+ int x;
+ if (cx == XXFILE) { /* FILE command was given */
+ /* Get subcommand */
+ if ((cx = cmkey(fctab,nfctab,"Operation","",xxstring)) < 0) {
+ if (cx == -3) {
+ if ((x = cmcfm()) < 0)
+ return(x);
+ cx = XXFILE;
+ } else
+ return(cx);
+ }
+ if ((x = cmcfm()) < 0)
+ return(x);
+ switch (cx) {
+ case FIL_CLS: cx = XXF_CL; break;
+ case FIL_FLU: cx = XXF_FL; break;
+ case FIL_LIS: cx = XXF_LI; break;
+ case FIL_OPN: cx = XXF_OP; break;
+ case FIL_REA: cx = XXF_RE; break;
+ case FIL_REW: cx = XXF_RW; break;
+ case FIL_SEE: cx = XXF_SE; break;
+ case FIL_STA: cx = XXF_ST; break;
+ case FIL_WRI: cx = XXF_WR; break;
+ case FIL_COU: cx = XXF_CO; break;
+ }
+ }
+ switch (cx) {
+ case XXFILE: return(hmsga(hxxfile));
+ case XXF_CL: return(hmsga(hxxf_cl));
+ case XXF_FL: return(hmsga(hxxf_fl));
+ case XXF_LI: return(hmsga(hxxf_li));
+ case XXF_OP: return(hmsga(hxxf_op));
+ case XXF_RE: return(hmsga(hxxf_re));
+ case XXF_RW: return(hmsga(hxxf_rw));
+ case XXF_SE: return(hmsga(hxxf_se));
+ case XXF_ST: return(hmsga(hxxf_st));
+ case XXF_WR: return(hmsga(hxxf_wr));
+ case XXF_CO: return(hmsga(hxxf_co));
+ default:
+ return(-2);
+ }
+}
+#endif /* CKCHANNELIO */
+
+int
+dohlp(xx) int xx; {
+ int x,y;
+
+ debug(F101,"DOHELP xx","",xx);
+ if (xx < 0) return(xx);
+
+#ifdef NOHELP
+ if ((x = cmcfm()) < 0)
+ return(x);
+ printf("\n%s, Copyright (C) 1985, 2004,",versio);
+#ifndef NOIKSD
+ if (inserver)
+ return(hmsga(tophlpi));
+ else
+#endif /* IKSD */
+ return(hmsga(tophlp));
+
+#else /* help is available */
+
+ if (helpfile)
+ return(dotype(helpfile,xaskmore,0,0,NULL,0,NULL,0,0,NULL,0));
+
+#ifdef CKCHANNELIO
+ if (xx == XXFILE)
+ return(dohfile(xx));
+ else if (xx == XXF_RE || xx == XXF_WR || xx == XXF_OP ||
+ xx == XXF_CL || xx == XXF_SE || xx == XXF_RW ||
+ xx == XXF_FL || xx == XXF_LI || xx == XXF_ST || xx == XXF_CO)
+ return(dohfile(xx));
+#endif /* CKCHANNELIO */
+
+ switch (xx) {
+
+#ifndef NOSPL
+case XXASS: /* ASSIGN */
+ return(hmsga(hxxass));
+
+case XXASK: /* ASK */
+case XXASKQ: /* ASKQ */
+ return(hmsga(hxxask));
+
+case XXAPC:
+ return(hmsg("Syntax: APC text\n\
+ Echoes the text within a VT220/320/420 Application Program Command."));
+#endif /* NOSPL */
+
+#ifndef NOFRILLS
+case XXBUG:
+ return(hmsg("Describes how to get technical support."));
+#endif /* NOFRILLS */
+
+#ifndef NOSPL
+case XXBEEP:
+#ifdef OS2
+ return(hmsg("Syntax: BEEP [ { ERROR, INFORMATION, WARNING } ]\n\
+ Generates a bell according to the current settings. If SET BELL is set to\n\
+ \"system-sounds\" then the appropriate System Sound will be generated.\n\
+ Default is INFORMATION."));
+#else /* OS2 */
+ return(hmsg("Syntax: BEEP\n\
+Sends a BEL character to your terminal."));
+#endif /* OS2 */
+#endif /* NOSPL */
+
+case XXBYE: /* BYE */
+ return(hmsg(hmxxbye));
+
+case XXCHK: /* check */
+ return(hmsg("\
+Syntax: CHECK name\n\
+ Checks\
+ to see if the named feature is included in this version of Kermit.\n\
+ To list the features you can check, type \"check ?\"."));
+
+#ifndef NOFRILLS
+case XXCLE: /* clear */
+ return(hmsga(hmxxcle));
+#endif /* NOFRILLS */
+
+case XXCLO: /* close */
+ return(hmsga(hmxxclo));
+
+case XXCOM: /* comment */
+#ifndef STRATUS /* Can't use # for comments in Stratus VOS */
+ return(hmsg("\
+Syntax: COMMENT text\n\
+Example: COMMENT - this is a comment.\n\
+ Introduces a comment. Beginning of command line only. Commands may also\n\
+ have trailing comments, introduced by ; or #."));
+#else
+ return(hmsg("\
+Syntax: COMMENT text\n\
+Example: COMMENT - this is a comment.\n\
+ Introduces a comment. Beginning of command line only. Commands may also\n\
+ have trailing comments, introduced by ; (semicolon)."));
+#endif /* STRATUS */
+
+#ifndef NOLOCAL
+case XXCON: /* CONNECT */
+case XXCQ: /* CQ == CONNECT /QUIETLY */
+ hmsga(hmxxcon);
+ printf("Your escape character is Ctrl-%c (ASCII %d, %s)\r\n",
+ ctl(escape), escape, (escape == 127 ? "DEL" : ccntab[escape]));
+ return(0);
+#endif /* NOLOCAL */
+
+#ifdef ZCOPY
+case XXCPY:
+ return(hmsga(hmxxcpy));
+#endif /* ZCOPY */
+
+#ifdef NT
+case XXLINK:
+return(hmsg(
+" LINK source destination\n\
+ creates a hard link to the file specified by source to the filename\n\
+ specified by destination. Hard links are only supported on NTFS.\n\
+ destination can either be a filename or a directory. source may\n\
+ contain wildcards if destination is a directory."));
+#endif /* NT */
+
+#ifndef NOFRILLS
+case XXLREN: /* LRENAME */
+ return(hmsg(
+" LRENAME is an alias for the RENAME command forcing it to execute\n\
+ on the local computer. Also see: RENAME, RRENAME, SET LOCUS."));
+
+case XXREN:
+ return(hmsga(hmxxren));
+#endif /* NOFRILLS */
+
+case XXCDUP: /* CDUP */
+case XXLCDU:
+ return(hmsg(
+"Change working directory to the one just above the current one."));
+
+case XXLCWD:
+ return(hmsg(
+" LCD (LCWD) is an alias for the CD (CWD) command forcing it to execute\n\
+ on the local computer. Also see: CD, CDUP, RCD, SET LOCUS."));
+
+case XXCWD: /* CD / CWD */
+ return(hmsga(hmxxcwd));
+
+#ifndef NOSPL
+case XXKCD:
+ return(hmsga(hmxxkcd));
+
+case XXARRAY:
+case XXDCL: /* DECLARE */
+case XXSORT:
+ return(hmsga(hxxdcl));
+
+case XXDEF: /* DEFINE */
+#ifndef NOSPL
+ if (hlptok) /* What they actually typed... */
+ if (hlptok[0] == '.')
+ return(hmsga(hxxdot));
+#endif /* NOSPL */
+ return(hmsga(hxxdef));
+
+case XXUNDEF: /* UNDEFINE */
+ return(hmsg("Syntax: UNDEFINE variable-name\n\
+ Undefines a macro or variable."));
+#endif /* NOSPL */
+
+#ifndef NOFRILLS
+case XXLDEL:
+ return(hmsg(
+" LDELETE is an alias for the DELETE command forcing it to execute\n\
+ on the local computer. Also see: DELETE, RDELETE, SET LOCUS."));
+
+case XXDEL: /* delete */
+ return(hmsga(hmxxdel));
+#endif /* NOFRILLS */
+
+#ifndef NODIAL
+case XXDIAL: /* DIAL, etc... */
+ return(hmsga(hxxdial));
+
+case XXPDIA: /* PDIAL */
+ return(hmsg("Syntax: PDIAL phonenumber\n\
+ Partially dials a phone number. Like DIAL but does not wait for carrier\n\
+ or CONNECT message."));
+
+case XXRED:
+ return(hmsg("Redial the number given in the most recent DIAL commnd."));
+
+case XXANSW: /* ANSWER */
+ return(hmsga(hxxansw));
+
+case XXLOOK: /* LOOKUP number in directory */
+ return(hmsga(hxxlook));
+#endif /* NODIAL */
+
+case XXLDIR: /* LDIRECTORY */
+ return(hmsg(
+" LDIRIRECTORY is an alias for the DIRECTORY command forcing it to execute\n\
+ on the local computer. Also see: DIRECTORY, SET LOCUS, RDIRECTORY."));
+
+case XXDIR: /* DIRECTORY */
+ return(hmsga(hmxxdir));
+
+case XXLMKD: /* LMKDIR */
+ return(hmsg(
+" LMKDIR is an alias for the MKDIR command forcing it to execute\n\
+ on the local computer. Also see: MKDIR, RMKDIR, SET LOCUS."));
+
+case XXMKDIR: /* MKDIR */
+ return(hmsg("Creates a directory. Also see LRMDIR, RRMDIR, SET LOCUS."));
+
+case XXLRMD: /* LRMDIR */
+ return(hmsg(
+" LRMDIR is an alias for the RMDIR command forcing it to execute\n\
+ on the local computer. Also see: RMDIR, RRMDIR, SET LOCUS."));
+
+case XXRMDIR: /* RMDIR */
+ return(hmsg("Removes a directory. Also see LRMDIR, RRMDIR, SET LOCUS."));
+
+case XXLS:
+#ifdef UNIXOROSK
+ return(hmsg("Syntax: LS [ args ]\n\
+ Runs \"ls\" with the given arguments."));
+#else
+ return(hmsga(hmxxdir));
+#endif /* UNIXOROSK */
+
+#ifndef NOSERVER
+#ifndef NOFRILLS
+case XXDIS:
+ return(hmsg("Syntax: DISABLE command\n\
+ Security for the Kermit server. Prevents the client Kermit program from\n\
+ executing the named REMOTE command, such as CD, DELETE, RECEIVE, etc."));
+#endif /* NOFRILLS */
+#endif /* NOSERVER */
+
+#ifndef NOSPL
+case XXDO: /* do */
+ return(hmsg("Syntax: [ DO ] macroname [ arguments ]\n\
+ Executes a macro that was defined with the DEFINE command. The word DO\n\
+ can be omitted. Trailing argument words, if any, are automatically\n\
+ assigned to the macro argument variables \\%1 through \\%9."));
+#endif /* NOSPL */
+
+#ifndef NOSPL
+case XXDEC:
+ return(hmsga(hxxdec));
+#endif /* NOSPL */
+
+case XXECH: /* echo */
+ return(hmsg("Syntax: ECHO text\n\
+ Displays the text on the screen, followed by a line terminator. The ECHO\n\
+ text may contain backslash codes. Example: ECHO \\7Wake up!\\7. Also see\n\
+ XECHO and WRITE SCREEN."));
+
+case XXXECH: /* xecho */
+ return(hmsg("Syntax: XECHO text\n\
+ Just like ECHO but does not add a line terminator to the text. See ECHO."));
+
+case XXVOID:
+ return(hmsg("Syntax: VOID text\n\
+ Like ECHO but doesn't print anything; can be used to invoke functions\n\
+ when you don't need to display or use their results."));
+
+#ifndef NOSERVER
+#ifndef NOFRILLS
+case XXENA:
+ return(hmsg("Syntax: ENABLE capability\n\
+ For use with server mode. Allows the client Kermit program access to the\n\
+ named capability, such as CD, DELETE, RECEIVE, etc. Opposite of DISABLE."));
+#endif /* NOFRILLS */
+#endif /* NOSERVER */
+
+#ifndef NOSPL
+case XXEND: /* end */
+ return(hmsg("Syntax: END [ number [ message ] ]\n\
+ Exits from the current macro or TAKE file, back to wherever invoked from.\n\
+ Number is return code. Message, if given, is printed."));
+
+case XXEVAL: /* evaluate */
+ return(hmsga(hmxxeval));
+#endif /* NOSPL */
+
+#ifndef NOFRILLS
+case XXERR: /* e-packet */
+ return(hmsg("Syntax: E-PACKET\n\
+ Sends an Error packet to the other Kermit."));
+#endif /* NOFRILLS */
+
+case XXEXI: /* exit */
+case XXQUI:
+ return(hmsga(hmxxexit));
+
+case XXFIN:
+ return(hmsg("Syntax: FINISH\n\
+ Tells the remote Kermit server to shut down without logging out."));
+
+#ifndef NOSPL
+ case XXFOR:
+ return(hmsga(forhlp));
+#endif /* NOSPL */
+
+ case XXGET:
+ return(hmsga(hmxxget));
+ case XXMGET:
+ return(hmsga(hmxxmget));
+
+#ifndef NOSPL
+#ifndef NOFRILLS
+ case XXGOK:
+ return(hmsg("Syntax: GETOK [ switches ] prompt\n\
+ Prints the prompt, makes user type 'yes', 'no', or 'ok', and sets SUCCESS\n\
+ or FAILURE accordingly. The optional switches are the same as for ASK."));
+#endif /* NOFRILLS */
+#endif /* NOSPL */
+
+#ifndef NOSPL
+ case XXGOTO:
+ return(hmsg("Syntax: GOTO label\n\
+ In a TAKE file or macro, go to the given label. A label is a word on the\n\
+ left margin that starts with a colon (:). Example:\n\n\
+ :oofa\n\
+ echo Hello!\n\
+ goto oofa"));
+#endif /* NOSPL */
+
+ case XXHAN:
+ return(hmsg("Syntax: HANGUP\n\
+Hang up the phone or network connection."));
+
+ case XXHLP:
+/*
+ We get confirmation here, even though we do it again in hmsga(), to prevent
+ the Copyright message from being printed prematurely. This doesn't do any
+ harm, because the first call to cmcfm() sets cmflgs to 1, making the second
+ call return immediately.
+*/
+ if ((x = cmcfm()) < 0)
+ return(x);
+
+ if (helpfile) {
+ printf("\n%s, Copyright (C) 1985, 2004,\n\
+Trustees of Columbia University in the City of New York.\n\n",versio);
+ return(dotype(helpfile,xaskmore,3,0,NULL,0,NULL,0,0,NULL,0));
+ } else {
+ printf("\n%s, Copyright (C) 1985, 2004,",versio);
+ return(hmsga(tophlp));
+ }
+
+case XXINT:
+#ifdef OS2
+ return(hmsg("Give a brief introduction to C-Kermit."));
+#else
+ return(hmsg("Give a brief introduction to Kermit 95."));
+#endif /* OS2 */
+
+#ifndef NOSPL
+case XXIF:
+ return(hmsga(ifhlp));
+
+case XXINC:
+ return(hmsga(hxxinc));
+
+case XXINP:
+ return(hmsga(hxxinp));
+#endif /* NOSPL */
+
+#ifdef CK_MINPUT
+case XXMINP:
+ return(hmsga(hmxxminp));
+#endif /* CK_MINPUT */
+
+#ifndef NOSPL
+case XXREI:
+ return(hmsg("Syntax: REINPUT n string\n\
+ Looks for the string in the text that has recently been INPUT, set SUCCESS\n\
+ or FAILURE accordingly. Timeout, n, must be specified but is ignored."));
+#endif /* NOSPL */
+
+#ifndef NOSPL
+case XXLBL:
+ return(hmsg("\
+ Introduces a label, like :loop, for use with GOTO in TAKE files or macros.\n\
+See GOTO."));
+#endif /* NOSPL */
+
+case XXLOG:
+ return(hmsga(hmxxlg));
+
+#ifndef NOSCRIPT
+case XXLOGI:
+ return(hmsga(hmxxlogi));
+#endif
+
+#ifndef NOFRILLS
+case XXMAI:
+ return(hmsg("Syntax: MAIL filename address\n\
+ Equivalent to SEND /MAIL:address filename."));
+#endif /* NOFRILLS */
+
+#ifndef NOMSEND
+case XXMSE:
+ return(hmsga(hmxxmse));
+
+case XXADD:
+ return(hmsga(hmxxadd));
+
+case XXMMOVE:
+ return(hmsg("MMOVE is exactly like MSEND, except each file that is\n\
+sent successfully is deleted after it is sent."));
+#endif /* NOMSEND */
+
+#ifndef NOSPL
+case XXOPE:
+ return(hmsga(openhlp));
+#endif /* NOSPL */
+
+case XXNEW:
+ return(hmsg(
+" Prints news of new features since publication of \"Using C-Kermit\"."));
+
+case XXUPD:
+ return(hmsg(
+" New features are described in the online Kermit 95 manual,\n\
+ accessible via the MANUAL command."));
+
+#ifndef NOSPL
+case XXOUT:
+ return(hmsga(hxxout));
+#endif /* NOSPL */
+
+#ifdef ANYX25
+#ifndef IBMX25
+case XXPAD:
+ return(hmsga(hxxpad));
+#endif /* IBMX25 */
+#endif /* ANYX25 */
+
+#ifndef NOSPL
+case XXPAU:
+ return(hmsga(hxxpau));
+
+case XXMSL:
+ return(hmsga(hxxmsl));
+#endif /* NOSPL */
+
+#ifdef TCPSOCKET
+case XXPNG:
+ return(hmsg("Syntax: PING [ IP-hostname-or-number ]\n\
+ Checks if the given IP network host is reachable. Default host is from\n\
+ most recent SET HOST or TELNET command. Runs system PING program, if any.")
+ );
+
+case XXFTP:
+#ifdef SYSFTP
+ return(hmsg("Syntax: FTP [ IP-hostname-or-number ]\n\
+ Makes an FTP connection to the given IP host or, if no host specified, to\n\
+ the current host. Uses the system's FTP program, if any."));
+#else
+#ifndef NOFTP
+ return(doftphlp());
+#endif /* NOFTP */
+#endif /* SYSFTP */
+#endif /* TCPSOCKET */
+
+#ifndef NOFRILLS
+case XXPRI:
+#ifdef UNIX
+ return(hmsg("Syntax: PRINT file [ options ]\n\
+ Prints the local file on a local printer with the given options. Also see\n\
+ HELP SET PRINTER."));
+#else
+#ifdef VMS
+ return(hmsg("Syntax: PRINT file [ options ]\n\
+ Prints the local file on a local printer with the given options. Also see\n\
+ HELP SET PRINTER."));
+#else
+ return(hmsg("Syntax: PRINT file\n\
+ Prints the local file on a local printer. Also see HELP SET PRINTER."));
+#endif /* UNIX */
+#endif /* VMS */
+#endif /* NOFRILLS */
+
+case XXPWD:
+case XXLPWD:
+ return(hmsg("Syntax: PWD\n\
+Print the name of the current working directory."));
+
+#ifndef NOSPL
+case XXREA:
+ return(hmsg("Syntax: READ variablename\n\
+ Reads a line from the currently open READ or !READ file into the variable\n\
+ (see OPEN)."));
+#endif /* NOSPL */
+
+#ifndef NOXFER
+case XXREC:
+ return(hmsga(hmxxrc));
+
+case XXREM:
+ y = cmkey(remcmd,nrmt,"Remote command","",xxstring);
+ return(dohrmt(y));
+#endif /* NOXFER */
+
+#ifndef NOSPL
+case XXRET:
+ return(hmsg("Syntax: RETURN [ value ]\n\
+ Return from a macro. An optional return value can be given for use with\n\
+ \\fexecute(macro), which allows macros to be used like functions."));
+#endif /* NOSPL */
+
+#ifndef NOXFER
+case XXSEN:
+ return(hmsga(hmxxsen));
+case XXMOVE:
+ return(hmsg("MOVE is exactly like SEND, except each file that is\n\
+sent successfully is deleted after it is sent."));
+#ifndef NORESEND
+case XXRSEN:
+ return(hmsg(hmxxrsen));
+case XXREGET:
+ return(hmsg(hmxxrget));
+case XXPSEN:
+ return(hmsg(hmxxpsen));
+#endif /* NORESEND */
+
+#ifndef NOSERVER
+case XXSER:
+ return(hmsg(hmxxser));
+#endif /* NOSERVER */
+#endif /* NOXFER */
+
+#ifndef NOJC
+case XXSUS:
+ return(hmsg("Syntax: SUSPEND or Z\n\
+ Suspends Kermit. Continue Kermit with the appropriate system command,\n\
+ such as fg."));
+#endif /* NOJC */
+
+case XXSET:
+ y = cmkey(prmtab,nprm,"Parameter","",xxstring);
+ debug(F101,"HELP SET y","",y);
+ return(dohset(y));
+
+#ifndef NOPUSH
+case XXSHE:
+ if (nopush) {
+ if ((x = cmcfm()) < 0) return(x);
+ printf("Sorry, help not available for \"%s\"\n",cmdbuf);
+ break;
+ } else
+ return(hmsga(hxxshe));
+#ifdef CK_REDIR
+case XXFUN:
+ return(hmsg("Syntax: REDIRECT command\n\
+ Runs the given local command with its standard input and output redirected\n\
+ to the current SET LINE or SET HOST communications path.\n\
+ Synonym: < (Left angle bracket)."));
+#endif /* CK_REDIR */
+
+#ifdef CK_REXX
+case XXREXX:
+ return(hmsg("Syntax: REXX text\n\
+ The text is a Rexx command to be executed. The \\v(rexx) variable is set\n\
+ to the Rexx command's return value.\n\
+ To execute a rexx program file, use: REXX call <filename>\n\
+ Rexx programs may call Kermit functions by placing the Kermit command\n\
+ in single quotes. For instance: 'set parity none'."));
+#endif /* CK_REXX */
+#endif /* NOPUSH */
+
+#ifndef NOSHOW
+case XXSHO:
+ return(hmsg("\
+ Display current values of various items (SET parameters, variables, etc).\n\
+ Type SHOW ? for a list of categories."));
+#endif /* NOSHOW */
+
+case XXSPA:
+#ifdef datageneral
+ return(hmsg("\
+ Display disk usage in current device, directory,\n\
+ or return space for a specified device, directory."));
+#else
+ return(hmsg("Syntax: SPACE\n\
+ Display disk usage in current device and/or directory"));
+#endif
+
+case XXSTA:
+ return(hmsg("Syntax: STATISTICS [/BRIEF]\n\
+ Display statistics about most recent file transfer"));
+
+#ifndef NOSPL
+case XXSTO:
+ return(hmsg("Syntax: STOP [ number [ message ] ]\n\
+ Stop executing the current macro or TAKE file and return immediately to\n\
+ the Kermit prompt. Number is a return code. Message printed if given."));
+#endif /* NOSPL */
+
+case XXTAK:
+ return(hmsga(hmxxtak));
+
+#ifdef TCPSOCKET
+#ifdef TNCODE
+case XXIKSD:
+ return(hmsga(hmxxiks));
+
+case XXTEL:
+ return(hmsga(hmxxtel));
+
+case XXTELOP:
+ return(hmsga(hxtopt));
+#endif /* TNCODE */
+
+#ifdef RLOGCODE
+case XXRLOG:
+ return(hmsg("Syntax: RLOGIN [ switches ] [ host [ username ] ]\n\
+ Equivalent to SET NETWORK TYPE TCP/IP, SET HOST host [ service ] /RLOGIN,\n\
+ IF SUCCESS CONNECT. If host is omitted, the previous connection (if any)\n\
+ is resumed. Depending on how Kermit has been built switches may be\n\
+ available to require Kerberos authentication and DES encryption."));
+#endif /* RLOGCODE */
+#endif /* TCPSOCKET */
+
+#ifndef NOXMIT
+case XXTRA:
+ return(hmsga(hxxxmit));
+#endif /* NOXMIT */
+
+#ifndef NOFRILLS
+case XXTYP:
+ return(hmsga(hmxxtyp));
+case XXMORE:
+ return(hmsg("Syntax: MORE [ switches ] filename\n\
+ Equivalent to TYPE /PAGE filename; see HELP TYPE."));
+case XXCAT:
+ return(hmsg("Syntax: MORE [ switches ] filename\n\
+ Equivalent to TYPE /NOPAGE filename; see HELP TYPE."));
+case XXHEAD:
+ return(hmsg("Syntax: HEAD [ switches ] filename\n\
+ Equivalent to TYPE /HEAD filename; see HELP TYPE."));
+case XXTAIL:
+ return(hmsg("Syntax: TAIL [ switches ] filename\n\
+ Equivalent to TYPE /TAIL filename; see HELP TYPE."));
+#endif /* NOFRILLS */
+
+#ifndef NOSPL
+case XXWHI:
+ return(hmsga(whihlp));
+
+case XXSWIT:
+ return(hmsga(swihlp));
+#endif /* NOSPL */
+
+#ifndef NOCSETS
+case XXXLA:
+ return(hmsga(hxxxla));
+#endif /* NOCSETS */
+
+case XXVER:
+ return(hmsg("Syntax: VERSION\nDisplays the program version number."));
+
+#ifndef NOSPL
+case XXWAI:
+ return(hmsga(hxxwai));
+#endif /* NOSPL */
+
+#ifndef NOFRILLS
+case XXWHO:
+ return(hmsg("Syntax: WHO [ user ]\nDisplays info about the user."));
+
+case XXWRI:
+ return(hmsga(hxxwri));
+
+case XXWRL:
+ return(hmsg(
+"WRITE-LINE (WRITELN) is just like WRITE, but includes a line terminator\n\
+at the end of text. See WRITE."));
+#endif /* NOFRILLS */
+
+#ifndef NOSPL
+case XXIFX:
+ return(hmsga(ifxhlp));
+
+case XXGETC: /* GETC */
+ return(hmsga(hxxgetc));
+
+case XXFWD: /* FORWARD */
+ return(hmsg(
+"Like GOTO, but searches only forward for the label. See GOTO."));
+
+case XXLOCAL: /* LOCAL */
+ return(hmsg(
+"Declares a variable to be local to the current macro or command file."));
+#endif /* NOSPL */
+
+case XXVIEW:
+ return(hmsg(
+"View the terminal emulation screen even when there is no connection."));
+
+case XXASC:
+ return(hmsg("Synonym for SET FILE TYPE TEXT."));
+
+case XXBIN:
+ return(hmsg("Synonym for SET FILE TYPE BINARY."));
+
+case XXDATE:
+ return(hmsga(hmxxdate));
+
+case XXRETR:
+ return(hmsg(
+"Just like GET but asks the server to delete each file that has been\n\
+sent successfully."));
+
+case XXEIGHT:
+ return(hmsg(
+"Equivalent to SET PARITY NONE, SET COMMAND BYTE 8, SET TERMINAL BYTE 8."));
+
+case XXSAVE:
+ return(hmsga(hmxxsave));
+
+#ifndef NOFRILLS
+#ifndef NOPUSH
+case XXEDIT:
+ return(hmsg("Syntax: EDIT [ <file> ]\n\
+Starts your preferred editor on the given file, or if none given, the most\n\
+recently edited file, if any. Also see SET EDITOR."));
+#endif /* NOPUSH */
+#endif /* NOFRILLS */
+
+#ifdef BROWSER
+case XXBROWS:
+ return(hmsg("Syntax: BROWSE [ <url> ]\n\
+Starts your preferred Web browser on the given URL, or if none given, the\n\
+most recently visited URL, if any. Also see SET BROWSER."));
+#endif /* BROWSER */
+
+#ifdef CK_TAPI
+case XXTAPI:
+ return(hmsga(hxxtapi));
+#endif /* CK_TAPI */
+
+#ifdef PIPESEND
+case XXCSEN:
+ return(hmsg("Syntax: CSEND [ switches ] <command> [ <as-name> ]\n\
+Sends from the given <command> rather than from a file. Equivalent to\n\
+SEND /COMMAND; see HELP SEND for details."));
+
+case XXCREC:
+ return(hmsg("Syntax: CRECEIVE [ switches ] <command>\n\
+Receives to the given <command> rather than to a file. Equivalent to\n\
+RECEIVE /COMMAND; see HELP RECEIVE for details."));
+
+case XXCGET:
+ return(hmsg("Syntax: CGET <remote-file-or-command> <local-command>\n\
+Equivalent to GET /COMMAND; see HELP GET for details."));
+#endif /* PIPESEND */
+
+#ifndef NOSPL
+case XXFUNC:
+/*
+ Tricky parsing. We want to let them type the function name in any format
+ at all: \fblah(), \fblah, \\fblah(), fblah, blah, blah(), etc, but of course
+ only one of these is recognized by cmkey(). So we call cmkeyx() (the "no
+ complaints" version of cmkey()), and if it fails, we try the other formats
+ silently, and still allow for <no-name-given>, editing and reparse, etc.
+*/
+ y = cmkeyx(fnctab,nfuncs,"Name of function","",NULL);
+ if (y == -1) { /* Reparse needed */
+ return(y);
+ } else if (y == -3) {
+ if ((x = cmcfm()) < 0) /* For recall buffer... */
+ return(x);
+ return(dohfunc(y)); /* -3 gives general message */
+ }
+ if (y < 0) { /* Something given but didn't match */
+ int dummy;
+ char * p;
+ for (p = atmbuf; *p; p++) { /* Chop off trailing parens if any */
+ if (*p == '(') {
+ *p = NUL;
+ break;
+ }
+ }
+ /* Chop off leading "\\f" or "\f" or "f" */
+ p = atmbuf;
+ if (*p == CMDQ) /* Allow for \\f... */
+ p++;
+ if (*p == CMDQ && (*(p+1) == 'f' || *(p+1) == 'F')) { /* or \f */
+ p += 2;
+ } else if (*p == 'f' || *p == 'F') { /* or just f */
+ p++;
+ }
+ y = lookup(fnctab,p,nfuncs,&dummy); /* Look up the result */
+ }
+ if (y < 0) {
+ printf("?No such function - \"%s\"\n",atmbuf);
+ return(-9);
+ }
+ x = cmgbrk(); /* Find out how user terminated */
+ if (x == LF || x == CR) /* if with CR or LF */
+ cmflgs = 1; /* restore cmflgs to say so */
+ if ((x = cmcfm()) < 0) /* And THEN confirm so command will */
+ return(x); /* get into recall buffer. */
+ return(dohfunc(y));
+#endif /* NOSPL */
+
+#ifndef NOCMDL
+case XXOPTS: /* Command-line options */
+ return(dohopts());
+
+case XXXOPTS: /* Extended command-line options */
+ return(doxopts());
+#endif /* NOCMDL */
+
+#ifdef OS2
+#ifndef NOKVERBS
+case XXKVRB: {
+ y = cmkeyx(kverbs,nkverbs,"Name of keyboard verb without \\k","",NULL);
+ if (y == -1) { /* Reparse needed */
+ return(y);
+ } else if (y == -3) {
+ if ((x = cmcfm()) < 0) /* For recall buffer... */
+ return(x);
+ return(dohkverb(y)); /* -3 gives general message */
+ }
+ if (y < 0) { /* Something given but didn't match */
+ int dummy;
+ char * p;
+ for (p = atmbuf; *p; p++) { /* Chop off trailing parens if any */
+ if (*p == '(') {
+ *p = NUL;
+ break;
+ }
+ }
+ /* Chop off leading "\\k" or "\k" or "k" */
+ p = atmbuf;
+ if (*p == CMDQ) /* Allow for \\k... */
+ p++;
+ if (*p == CMDQ && (*(p+1) == 'k' || *(p+1) == 'K')) { /* or \k */
+ p += 2;
+ } else if (*p == 'k' || *p == 'K') { /* or just k */
+ p++;
+ }
+ y = lookup(kverbs,p,nkverbs,&dummy); /* Look up the result */
+ }
+ if (y < 0) {
+ printf("?No such function - \"%s\"\n",atmbuf);
+ return(-9);
+ }
+ x = cmgbrk(); /* Find out how user terminated */
+ if (x == LF || x == CR) /* if with CR or LF */
+ cmflgs = 1; /* restore cmflgs to say so */
+ if ((x = cmcfm()) < 0) /* And THEN confirm so command will */
+ return(x); /* get into recall buffer. */
+ return(dohkverb(y));
+}
+#endif /* NOKVERBS */
+#endif /* OS2 */
+
+case XXKERMI:
+ return(hmsg("Syntax: KERMIT [command-line-options]\n\
+ Lets you give command-line options at the prompt or in a script.\n\
+ HELP OPTIONS for more info."));
+
+case XXBACK:
+ return(hmsg("Syntax: BACK\n Returns to your previous directory."));
+
+case XXWHERE:
+ return(hmsg("Syntax: WHERE\n Tells where your transferred files went."));
+
+#ifndef NOXFER
+case XXREMV:
+ return(hmsga(hmxxremv));
+#endif /* NOXFER */
+
+#ifdef CK_KERBEROS
+case XXAUTH:
+ return(hmsga(hmxxauth));
+#endif /* CK_KERBEROS */
+
+#ifndef NOHTTP
+case XXHTTP:
+ return(hmsga(hmxxhttp));
+#endif /* NOHTTP */
+
+#ifdef NETCMD
+case XXPIPE:
+ return(hmsg("Syntax: PIPE [ command ]\n\
+Makes a connection through the program whose command line is given. Example:\n\
+\n pipe rlogin xyzcorp.com"));
+#endif /* NETCMD */
+
+case XXSTATUS:
+ return(hmsg(
+"STATUS is the same as SHOW STATUS; prints SUCCESS or FAILURE for the\n\
+previous command."));
+
+#ifndef NOSPL
+case XXASSER:
+ return(hmsg("Syntax: ASSERT <condition>\n\
+Succeeds or fails depending on <condition>; see HELP IF for <condition>s."));
+
+case XXFAIL:
+ return(hmsg("Always fails."));
+
+case XXSUCC:
+ return(hmsg("Always succeeds."));
+#endif /* NOSPL */
+
+#ifdef CK_LOGIN
+case XXLOGOUT:
+ return(hmsg(
+"If you haved logged in to Kermit as an Internet Kermit server, the LOGOUT\n\
+command, given at the prompt, logs you out and closes your session."));
+#endif /* CK_LOGIN */
+
+case XXRESET:
+ return(hmsg("Closes all open files and logs."));
+
+#ifndef NOCSETS
+case XXASSOC:
+ return(hmsga(hmxxassoc));
+#endif /* NOCSETS */
+
+#ifndef NOSPL
+case XXSHIFT:
+ return(hmsg("Syntax: SHIFT [ n ]\n\
+ Shifts \\%1..9 variables n places to the left; default n = 1."));
+#endif /* NOSPL */
+
+#ifndef NOPUSH
+case XXMAN:
+#ifdef UNIX
+ return(hmsg("Syntax: MANUAL [ topic ]\n\
+ Runs the \"man\" command on the given topic (default \"kermit\")."));
+#else
+#ifdef OS2
+ return(hmsg("Syntax: MANUAL\n\
+ Accesses the Kermit 95 HTML manual using the current browser."));
+#else
+ return(hmsg("Syntax: MANUAL [ topic ]\n\
+ Runs the \"help\" command on the given topic (default \"kermit\")."));
+#endif /* OS2 */
+#endif /* UNIX */
+#endif /* NOPUSH */
+
+case XXWILD:
+ return(hmsga(hmxxwild));
+
+case XXPAT:
+ return(hmsga(hmxxpat));
+
+#ifndef NOXFER
+case XXFAST:
+case XXCAU:
+case XXROB:
+ return(hmsga(hmxxfast));
+#endif /* NOXFER */
+
+#ifdef CKPURGE
+case XXPURGE:
+ return(hmsga(hmxxpurge));
+#else
+#ifdef VMS
+case XXPURGE:
+ return(hmsga(hmxxpurge));
+#endif /* VMS */
+#endif /* CKPURGE */
+
+#ifndef NOXFER
+ case XXRASG:
+ return(hmsg(" RASG and RASSIGN are short forms of REMOTE ASSIGN."));
+ case XXRCWD:
+ return(hmsg(" RCD and RCWD are short forms of REMOTE CD."));
+ case XXRCPY:
+ return(hmsg(" RCOPY is a short form of REMOTE COPY."));
+ case XXRDEL:
+ return(hmsg(" RDELETE is a short form of REMOTE RELETE."));
+ case XXRDIR:
+ return(hmsg(" RDIRECTORY is a short form of REMOTE DIRECTORY."));
+ case XXRXIT:
+ return(hmsg(" REXIT is a short form of REMOTE EXIT."));
+ case XXRHLP:
+ return(hmsg(" RHELP is a short form of REMOTE HELP."));
+ case XXRHOS:
+ return(hmsg(" RHOST is a short form of REMOTE HOST."));
+ case XXRKER:
+ return(hmsg(" RKERMIT is a short form of REMOTE KERMIT."));
+ case XXRMKD:
+ return(hmsg(" RMKDIR is a short form of REMOTE MKDIR."));
+ case XXRPRI:
+ return(hmsg(" RPRINT is a short form of REMOTE PRINT."));
+ case XXRPWD:
+ return(hmsg(" RPWD is a short form of REMOTE PWD."));
+ case XXRQUE:
+ return(hmsg(" QUERY and RQUERY are short forms of REMOTE QUERY."));
+ case XXRREN:
+ return(hmsg(" RRENAME is a short form of REMOTE RENAME."));
+ case XXRRMD:
+ return(hmsg(" RRMDIR is a short form of REMOTE RMDIR."));
+ case XXRSET:
+ return(hmsg(" RSET is a short form of REMOTE SET."));
+ case XXRSPA:
+ return(hmsg(" RSPACE is a short form of REMOTE SPACE."));
+ case XXRTYP:
+ return(hmsg(" RTYPE is a short form of REMOTE TYPE."));
+ case XXRWHO:
+ return(hmsg(" RWHO is a short form of REMOTE WHO."));
+#endif /* NOXFER */
+
+ case XXSCRN:
+ return(hmsga(hmxxscrn));
+
+#ifdef CKEXEC
+ case XXEXEC:
+ return(hmsg("Syntax: EXEC <command> [ <arg1> [ <arg2> [ ... ] ]\n\
+ C-Kermit overlays itself with the given system command and starts it with\n\
+ the given arguments. Upon any error, control returns to C-Kermit."));
+#endif /* CKEXEC */
+
+#ifndef NOSPL
+ case XXTRACE:
+ return(hmsg(
+"Syntax: TRACE { /ON, /OFF } { ASSIGNMENTS, COMMAND-LEVEL, ALL }\n\
+ Turns tracing of the given object on or off."));
+#endif /* NOSPL */
+
+#ifdef CK_PERMS
+#ifdef UNIX
+ case XXCHMOD:
+ return(hmsga(hmxxchmod));
+#endif /* UNIX */
+#endif /* CK_PERMS */
+
+#ifdef CKROOT
+ case XXCHRT:
+ return(hmsga(hmxxchroot));
+#endif /* CKROOT */
+
+#ifndef NOSPL
+ case XXPROMP:
+ return(hmsga(hmxxprompt));
+#endif /* NOSPL */
+
+ case XXGREP:
+ return(hmsga(hmxxgrep));
+
+#ifndef NOSEXP
+#ifndef NOSPL
+ case XXSEXP:
+ return(hmsga(hmxxsexp));
+#endif /* NOSPL */
+#endif /* NOSEXP */
+
+#ifdef CKLEARN
+ case XXLEARN:
+ return(hmsga(hmxxlearn));
+#endif /* CKLEARN */
+
+#ifdef ANYSSH
+ case XXSSH:
+ return(hmsga(hmxxssh));
+#endif /* ANYSSH */
+
+#ifdef TCPSOCKET
+ case XXFIREW:
+ return(hmsga(hmxxfirew));
+#endif /* TCPSOCKET */
+
+#ifdef NEWFTP
+ case XXUSER:
+ return(hmsg(" Equivalent to FTP USER."));
+ case XXACCT:
+ return(hmsg(" Equivalent to FTP ACCOUNT."));
+#endif /* NEWFTP */
+
+ case XXORIE:
+ return(hmsg(" Shows the directories important to Kermit."));
+
+ case XXCONT:
+ return(hmsg(" In a FOR or WHILE loop: continue the loop.\n\
+ At the prompt: continue a script that has \"shelled out\" to the prompt."));
+
+ case XXNOTAV:
+ return(hmsg(" This command is not configured in this version of Kermit."));
+
+default: {
+ char *s;
+ if ((x = cmcfm()) < 0) return(x);
+ s = cmdbuf + (int)strlen(cmdbuf) -1;
+ while (s >= cmdbuf && *s == SP)
+ *s-- = NUL;
+ while (s >= cmdbuf && *s != SP)
+ s--;
+ while (*s == SP) s++;
+ printf("Sorry, help not available for \"%s\"\n",s);
+ break;
+ }
+ } /* switch */
+#endif /* NOHELP */
+
+ return(success = 0);
+}
+
+/* H M S G -- Get confirmation, then print the given message */
+
+int
+hmsg(s) char *s; {
+ int x;
+ if ((x = cmcfm()) < 0) return(x);
+ printf("\n%s\n\n",s);
+ return(0);
+}
+
+#ifdef NOHELP
+
+int /* Print an array of lines, */
+hmsga(s) char *s[]; { /* cheap version. */
+ int i;
+ if ((i = cmcfm()) < 0) return(i);
+ printf("\n"); /* Start off with a blank line */
+ for (i = 0; *s[i]; i++) { /* Print each line. */
+ printf("%s\n",s[i]);
+ }
+ printf("\n");
+ return(0);
+}
+
+#else /* NOHELP not defined... */
+
+int /* Print an array of lines, */
+hmsga(s) char *s[]; { /* pausing at end of each screen. */
+ extern int hmtopline; /* (This should be a parameter...) */
+ int x, y, i, j, k, n;
+ if ((x = cmcfm()) < 0) return(x);
+
+#ifdef CK_TTGWSIZ
+#ifdef OS2
+ ttgcwsz();
+#else /* OS2 */
+ /* Check whether window size changed */
+ if (ttgwsiz() > 0) {
+ if (tt_rows > 0 && tt_cols > 0) {
+ cmd_rows = tt_rows;
+ cmd_cols = tt_cols;
+ }
+ }
+#endif /* OS2 */
+#endif /* CK_TTGWSIZ */
+
+ printf("\n"); /* Start off with a blank line */
+ n = (hmtopline > 0) ? hmtopline : 1; /* Line counter */
+ for (i = 0; *s[i]; i++) {
+ printf("%s\n",s[i]); /* Print a line. */
+ y = (int)strlen(s[i]);
+ k = 1;
+ for (j = 0; j < y; j++) /* See how many newlines were */
+ if (s[i][j] == '\n') k++; /* in the string... */
+ n += k;
+ if (n > (cmd_rows - 3) && *s[i+1]) /* After a screenful, give them */
+ if (!askmore()) return(0); /* a "more?" prompt. */
+ else n = 0;
+ }
+ printf("\n");
+ return(0);
+}
+
+#ifndef NOXMIT
+static char *hsetxmit[] = {
+"Syntax: SET TRANSMIT parameter value",
+" ",
+"Controls the behavior of the TRANSMIT command (see HELP TRANSMIT):",
+" ",
+"SET TRANSMIT ECHO { ON, OFF }",
+" Whether to echo text to your screen as it is being transmitted.",
+" ",
+"SET TRANSMIT EOF text",
+" Text to send after end of file is reached, e.g. \\4 for Ctrl-D",
+" ",
+"SET TRANSMIT FILL number",
+" ASCII value of a character to insert into blank lines, 0 for none.",
+" Applies only to text mode. 0 by default.",
+" ",
+"SET TRANSMIT LINEFEED { ON, OFF }",
+" Transmit Linefeed as well as Carriage Return (CR) at the end of each line.",
+" Normally, only CR is sent.",
+" ",
+"SET TRANSMIT LOCKING-SHIFT { ON, OFF }",
+" Whether to use SO/SI for transmitting 8-bit data when PARITY is not NONE.",
+" ",
+"SET TRANSMIT PAUSE number",
+" How many milliseconds to pause after transmitting each line (text mode),",
+" or each character (binary mode).",
+" ",
+"SET TRANSMIT PROMPT number",
+" ASCII value of character to look for from host before sending next line",
+" when TRANSMITting in text mode; normally 10 (Linefeed). 0 means none;",
+" don't wait for a prompt.",
+" ",
+"SET TRANSMIT TIMEOUT number",
+" Number of seconds to wait for each character to echo when TRANSMIT ECHO",
+" is ON or TRANSMIT PROMPT is not 0. If 0 is specified, this means wait",
+" indefinitely for each echo.",
+" ",
+"Synonym: SET XMIT. SHOW TRANSMIT displays current settings.",
+"" };
+#endif /* NOXMIT */
+
+static char *hsetbkg[] = {
+"Syntax: SET BACKGROUND { OFF, ON }",
+" ",
+" SET BACKGROUND OFF forces prompts and messages to appear on your screen",
+" even though Kermit thinks it is running in the background.",
+"" };
+
+#ifdef DYNAMIC
+static char *hsetbuf[] = {
+"Syntax: SET BUFFERS n1 [ n2 ]",
+" ",
+" Changes the overall amount of memory allocated for SEND and RECEIVE packet",
+" buffers, respectively. Bigger numbers let you have longer packets and",
+" more window slots. If n2 is omitted, the same value as n1 is used.",
+#ifdef BIGBUFOK
+" ",
+" NOTE: This command is not needed in this version of Kermit, which is",
+" already configured for maximum-size packet buffers.",
+#endif /* BIGBUFOK */
+"" };
+#endif /* DYNAMIC */
+
+static char *hsetcmd[] = {
+"Syntax: SET COMMAND parameter value",
+" ",
+
+#ifdef CK_AUTODL
+"SET COMMAND AUTODOWNLOAD { ON, OFF }",
+" Enables/Disables automatic recognition of Kermit packets while in",
+" command mode. ON by default.",
+" ",
+#endif /* CK_AUTODL */
+
+"SET COMMAND BYTESIZE { 7, 8 }",
+" Informs Kermit of the bytesize of the communication path between itself",
+" and your keyboard and screen. 8 is assumed. SET COMMAND BYTE 7 only if",
+" 8-bit characters cannot pass.",
+" ",
+
+#ifdef OS2
+"SET COMMAND COLOR <foreground-color> <background-color>",
+" Lets you choose colors for Command screen. Use ? in the color fields to",
+" to get lists of available colors.",
+" ",
+"SET COMMAND CURSOR-POSITION <row> <column>",
+" Moves the command-screen cursor to the given position (1-based). This",
+" command should be used in scripts instead of relying on ANSI.SYS escape",
+" sequences.",
+" ",
+#endif /* OS2 */
+
+#ifdef OS2
+#ifdef NT
+"SET COMMAND HEIGHT <number>",
+" Changes the number of rows (lines) in your command screen, not",
+" counting the status line. Recommended values are 24, 42, and 49 (or 25,",
+" 43, and 50 if SET COMMAND STATUSLINE is OFF.)",
+#else
+"SET COMMAND HEIGHT <number>"
+" Changes the number of rows (lines) in your command screen, not",
+" counting the status line. Windowed sessions can use any value from 8 to",
+" 101. Fullscreen sessions are limited to 24, 42, 49, or 59. Not all"
+" heights are supported by all video adapters.",
+#endif /* NT */
+#else /* OS2 */
+"SET COMMAND HEIGHT <number>",
+" Informs Kermit of the number of rows in your command screen for the",
+" purposes of More?-prompting.",
+#endif /* OS2 */
+" ",
+"SET COMMAND WIDTH <number>",
+" Informs Kermit of the number of characters across your screen for",
+" purposes of screen formatting.",
+" ",
+"SET COMMAND MORE-PROMPTING { ON, OFF }",
+" ON (the default) enables More?-prompting when Kermit needs to display",
+" text that does not fit vertically on your screen. OFF allows the text to",
+" scroll by without intervention. If your command window has scroll bars,",
+" you might prefer OFF.",
+" ",
+
+#ifdef CK_RECALL
+"SET COMMAND RECALL-BUFFER-SIZE number",
+" How big you want Kermit's command recall buffer to be. By default, it",
+" holds 10 commands. You can make it any size you like, subject to memory",
+" constraints of the computer. A size of 0 disables command recall.",
+" Whenever you give this command, previous command history is lost.",
+" ",
+#endif /* CK_RECALL */
+
+"SET COMMAND QUOTING { ON, OFF }",
+" Whether to treat backslash and question mark as special characters (ON),",
+" or as ordinary data characters (OFF) in commands. ON by default.",
+" ",
+#ifdef DOUBLEQUOTING
+"SET COMMAND DOUBLEQUOTING { ON, OFF }",
+" Whether to allow doublequotes (\") to be used to enclose fields,",
+" filenames, directory names, and macro arguments that might contain",
+" spaces. ON by default; use OFF to force compatibility with older",
+" versions.",
+" ",
+#endif /* DOUBLEQUOTING */
+
+#ifdef CK_RECALL
+"SET COMMAND RETRY { ON, OFF }",
+" Whether to reprompt you with the correct but incomplete portion of a",
+" syntactically incorrect command. ON by default.",
+" ",
+#endif /* CK_RECALL */
+
+#ifdef OS2
+"SET COMMAND SCROLLBACK <lines>",
+" Sets size of virtual Command screen buffer to the given number of lines,",
+" which includes the active Command screen. The minimum is 256. The max",
+" is 2 million. The default is 512.",
+" ",
+"SET COMMAND STATUSLINE { ON, OFF }",
+" ON (default) enables the Kermit status line in the command screen.",
+" OFF removes it, making the line available for use by the host.",
+" ",
+#endif /* OS2 */
+
+"Use SHOW COMMAND to display these settings.",
+"" };
+
+#ifndef NOLOCAL
+static char *hsetcar[] = {
+"Syntax: SET CARRIER-WATCH { AUTO, OFF, ON }",
+" ",
+" Attempts to control treatment of carrier (the Data Carrier Detect signal)",
+" on serial communication (SET LINE or SET PORT) devices. ON means that",
+" carrier is required at all times. OFF means carrier is never required.",
+" AUTO (the default) means carrier is required at all times except during",
+" the DIAL command. Correct operation of carrier-watch depends on the",
+" capabilities of the underlying OS, drivers, devices, and cables. If you",
+" need to CONNECT to a serial device that is not asserting carrier, and",
+" Kermit won't let you, use SET CARRIER-WATCH OFF. Use SHOW COMMUNICATIONS",
+" to display the CARRIER-WATCH setting.",
+"" };
+#endif /* NOLOCAL */
+
+static char *hsetat[] = {
+"Syntax: SET ATTRIBUTES name ON or OFF",
+" ",
+" Use this command to enable (ON) or disable (OFF) the transmission of",
+" selected file attributes along with each file, and to handle or ignore",
+" selected incoming file attributes, including:",
+" ",
+#ifndef NOCSETS
+" CHARACTER-SET: The transfer character set for text files",
+#endif /* NOCSETS */
+" DATE: The file's creation date",
+" DISPOSITION: Unusual things to do with the file, like MAIL or PRINT",
+" LENGTH: The file's length",
+" PROTECTION: The file's protection (permissions)",
+" SYSTEM-ID: Machine/Operating system of origin",
+" TYPE: The file's type (text or binary)",
+" ",
+"You can also specify ALL to select all of them. Examples:",
+" ",
+" SET ATTR DATE OFF",
+" SET ATTR LENGTH ON",
+" SET ATTR ALL OFF",
+" ",
+"Also see HELP SET SEND and HELP SET RECEIVE.",
+""
+};
+
+static char *hxytak[] = {
+"Syntax: SET TAKE parameter value",
+" ",
+" Controls behavior of TAKE command:",
+" ",
+"SET TAKE ECHO { ON, OFF }",
+" Tells whether commands read from a TAKE file should be displayed on the",
+" screen (if so, each command is shown at the time it is read, and labeled",
+" with a line number).",
+" ",
+"SET TAKE ERROR { ON, OFF }",
+" Tells whether a TAKE command file should be automatically terminated when",
+" a command fails. This setting is local to the current command file, and",
+" inherited by subordinate command files.",
+"" };
+
+#ifndef NOLOCAL
+#ifdef OS2MOUSE
+static char *hxymouse[] = {
+"Syntax: SET MOUSE ACTIVATE { ON, OFF }",
+" Enables or disables the mouse in Connect mode. Default is ON",
+" ",
+"Syntax: SET MOUSE BUTTON <number> <key-modifier> <action> [ <text> ]",
+" where:",
+" <number> is the mouse button number, 1, 2, or 3;",
+" <key-modifier> denotes modifier keys held down during the mouse event:",
+" ALT, ALT-SHIFT, CTRL, CTRL-ALT CTRL-ALT-SHIFT, CTRL-SHIFT, SHIFT, NONE;",
+" <action> is the mouse action, CLICK, DRAG, or DOUBLE-CLICK.",
+" ",
+" The <text> has exactly the same properties as the <text> from the SET KEY",
+" command -- it can be a character, a string, one or more Kverbs, a macro",
+" invoked as a Kverb, or any combination of these. Thus, anything that can",
+" be assigned to a key can also be assigned to the mouse -- and vice versa.",
+" If the <text> is omitted, the action will be ignored. Examples:",
+" ",
+" SET MOUSE BUTTON 1 NONE DOUBLE \\KmouseCurPos",
+" SET MOU B 2 SHIFT CLICK help\\13",
+" ",
+" DRAG operations perform a \"mark mode\" selection of Text. You should",
+" assign only the following actions to drag operations:",
+" ",
+" \\Kdump - copy marked text to printer (or file)",
+" \\Kmarkcopyclip - copy marked text to PM Clipboard",
+" \\Kmarkcopyhost - copy marked text direct to Host",
+" \\Kmousemark - mark text, no copy operation performed",
+" ",
+" The following Kverb is only for use with the mouse:",
+" ",
+" \\KmouseCurPos",
+" ",
+" which represents the mouse-directed terminal cursor feature.",
+" ",
+"Syntax: SET MOUSE CLEAR",
+" Restores all mouse events to their default definitions",
+" Button 1 Ctrl-Click = Kverb: \\Kmouseurl",
+" Button 1 Double-Click = Kverb: \\Kmousecurpos",
+" Button 1 Drag = Kverb: \\Kmarkcopyclip",
+" Button 1 Alt-Drag = Kverb: \\Kmarkcopyclip_noeol",
+" Button 1 Ctrl-Drag = Kverb: \\Kmarkcopyhost",
+" Button 1 Ctrl-Alt-Drag = Kverb: \\Kmarkcopyhost_noeol",
+" Button 1 Ctrl-Shift-Drag = Kverb: \\Kdump",
+" Button 2 Double-Click = Kverb: \\Kpaste",
+" Button 2 Drag = Kverb: \\Kmarkcopyhost",
+" Button 2 Alt-Drag = Kverb: \\Kmarkcopyhost_noeol ",
+" Button 3 Double-Click = Kverb: \\Kpaste",
+""};
+#endif /* OS2MOUSE */
+
+static char *hxyterm[] = {
+"Syntax: SET TERMINAL parameter value",
+" ",
+#ifdef OS2
+"SET TERMINAL TYPE { ANSI, VT52, VT100, VT102, VT220, VT320, ... }",
+" Selects type type of terminal to emulate. Type SET TERMINAL TYPE ? to",
+" see a complete list.",
+" ",
+"SET TERMINAL ANSWERBACK { OFF, ON }",
+" Disables/enables the ENQ/Answerback sequence (\"K-95 version term-type\").",
+" ",
+"SET TERMINAL ANSWERBACK MESSAGE <extension>",
+" Allows you to specify an extension to the default answerback message.",
+" ",
+#else
+"SET TERMINAL TYPE ...",
+" This command is not available because this version of Kermit does not",
+" include a terminal emulator. Instead, it is a \"semitransparent pipe\"",
+" (or a totally transparent one, if you configure it that way) to the",
+" computer or service you have made a connection to. Your console,",
+" workstation window, or the terminal emulator or terminal from which you",
+" are running Kermit provides the emulation.",
+" ",
+#endif /* OS2 */
+
+#ifdef CK_APC
+"SET TERMINAL APC { ON, OFF, NO-INPUT, NO-INPUT-UNCHECKED, UNCHECKED }",
+#ifdef OS2
+" Controls execution of Application Program Commands sent by the host while",
+" K-95 is either in CONNECT mode or processing INPUT commands. ON allows",
+" execution of \"safe\" commands and disallows potentially dangerous ones",
+" such as DELETE, RENAME, OUTPUT, and RUN. OFF prevents execution of APCs.",
+" UNCHECKED allows execution of all APCs. OFF is the default.",
+#else /* OS2 */
+" Controls execution of Application Program Commands sent by the host while",
+" C-Kermit is in CONNECT mode. ON allows execution of \"safe\" commands and",
+" disallows potentially dangerous commands such as DELETE, RENAME, OUTPUT,",
+" and RUN. OFF prevents execution of APCs. UNCHECKED allows execution of",
+" all APCs. OFF is the default.",
+#endif /* OS2 */
+" ",
+#endif /* CK_APC */
+
+#ifdef OS2
+"SET TERMINAL ARROW-KEYS { APPLICATION, CURSOR }",
+" Sets the mode for the arrow keys during VT terminal emulation.",
+" ",
+"SET TERMINAL ATTRIBUTE { BLINK, DIM, PROTECTED, REVERSE, UNDERLINE }",
+" Determines how attributes are displayed by Kermit-95.",
+" ",
+"SET TERMINAL ATTRIBUTE { BLINK, DIM, REVERSE, UNDERLINE } { ON, OFF }",
+" Determines whether real Blinking, Dim, Reverse, and Underline are used in",
+" the terminal display. When BLINK is turned OFF, reverse background",
+" intensity is used. When DIM is turned OFF, dim characters appear BOLD.",
+" When REVERSE and UNDERLINE are OFF, the colors selected with SET",
+" TERMINAL COLOR { REVERSE,UNDERLINE } are used instead. This command",
+" affects the entire current screen and terminal scrollback buffer.",
+" ",
+"SET TERMINAL ATTRIBUTE PROTECTED [ -",
+" { BOLD, DIM, INVISIBLE, NORMAL, REVERSE, UNDERLINED } ]",
+" Sets the attributes used to represent Protected text in Wyse and Televideo",
+" terminal emulations. Any combination of attributes may be used. The",
+" default is DIM.)",
+" ",
+#endif /* OS2 */
+
+#ifdef OS2
+#ifdef CK_XYZ
+"SET TERMINAL AUTODOWNLOAD { ON, OFF, ERROR { STOP, CONTINUE } }",
+" enables/disables automatic switching into file-transfer mode when a Kermit",
+" or ZMODEM file transfer has been detected during CONNECT mode or while",
+" an INPUT command is active. Default is OFF.",
+#else
+"SET TERMINAL AUTODOWNLOAD { ON, OFF, ERROR { STOP, CONTINUE } }",
+" enables/disables automatic switching into file-transfer mode when a Kermit",
+" file transfer has been detected during CONNECT mode or while an INPUT",
+" command is active. Default is OFF.",
+#endif /* CK_XYZ */
+
+" ",
+" When TERMINAL AUTODOWNLOAD is ON, the TERMINAL AUTODOWNLOAD ERROR setting",
+" tells what to do if an error occurs during a file transfer or other",
+" protocol operation initiated by the terminal emulator: STOP (the default)",
+" means to remain in command mode so you can see what happened; CONTINUE",
+" means to resume the CONNECT session (e.g. so a far-end script can continue",
+" its work).",
+" ",
+
+#ifdef CK_XYZ
+"SET TERM... AUTO... { KERMIT, ZMODEM } C0-CONFLICTS { IGNORED, PROCESSED }",
+" Determines whether the active terminal emulator should process or ignore",
+" C0 control characters which are also used for the specified file transfer",
+" protocol. Kermit by default uses ^A (SOH) and Zmodem uses ^X (CAN).",
+" Default is PROCESSED.",
+" ",
+"SET TERM... AUTO... { KERMIT, ZMODEM } DETECTION-METHOD { PACKET, STRING }",
+" Determines whether the specified file transfer protocol should be detected",
+" by looking for valid packets or by identifying a specified text string.",
+" Default is PACKET.",
+" ",
+"SET TERM... AUTO... { KERMIT, ZMODEM } STRING <text>",
+" Lets you assign an autodownload detection string for use with the",
+" specified file transfer protocol.",
+" Default for Kermit is \"READY TO SEND...\", for Zmodem is \"rz\\{13}\".",
+" ",
+#else /* CK_XYZ */
+"SET TERM... AUTO... KERMIT C0-CONFLICTS { IGNORED, PROCESSED }",
+" Determines whether the active terminal emulator should process or ignore",
+" C0 control characters which are also used for the specified file transfer",
+" protocol. Kermit by default uses ^A <SOH>. Default is PROCESSED.",
+" ",
+"SET TERM... AUTO... KERMIT DETECTION-METHOD { PACKET, STRING }",
+" Determines whether the specified file transfer protocol should be detected",
+" by looking for valid packets or by identifying a specified text string.",
+" Default is PACKET.",
+" ",
+"SET TERM... AUTO... KERMIT STRING <text>",
+" Lets you assign an autodownload detection string for use with the",
+" specified file transfer protocol. Default is \"READY TO SEND...\".",
+" ",
+#endif /* CK_XYZ */
+"SET TERMINAL AUTOPAGE { ON, OFF }",
+" ",
+"SET TERMINAL AUTOSCROLL { ON, OFF }",
+" ",
+#else /* OS2 */
+"SET TERMINAL AUTODOWNLOAD { ON, OFF, ERROR { STOP, CONTINUE } }",
+" Enables/disables automatic switching into file-transfer mode when a valid",
+#ifdef CK_XYZ
+" Kermit or ZMODEM packet of the appropriate type is received during CONNECT",
+" mode. Default is OFF.",
+#else
+" Kermit packet of the appropriate type is received during CONNECT mode.",
+" Default is OFF.",
+#endif /* CK_XYZ */
+
+" ",
+" When TERMINAL AUTODOWNLOAD is ON, the TERMINAL AUTODOWNLOAD ERROR setting",
+" tells what to do if an error occurs during a file transfer or other",
+" protocol operation initiated by the terminal emulator: STOP (the default)",
+" means to remain in command mode so you can see what happened; CONTINUE",
+" means to resume the CONNECT session (e.g. so a far-end script can continue",
+" its work).",
+" ",
+
+#endif /* OS2 */
+
+#ifdef OS2
+"SET TERMINAL BELL { AUDIBLE, VISIBLE, NONE }",
+" Specifies how Control-G (bell) characters are handled. AUDIBLE means",
+" a beep is sounded; VISIBLE means the screen is flashed momentarily.",
+" ",
+" (This command has been superseded by SET BELL.)",
+" ",
+#endif /* OS2 */
+
+"SET TERMINAL BYTESIZE { 7, 8 }",
+" Use 7- or 8-bit characters between Kermit and the remote computer during",
+" terminal sessions. The default is 8.",
+" ",
+
+#ifndef NOCSETS
+#ifdef OS2
+"SET TERMINAL CHARACTER-SET <remote-cs>",
+" Specifies the character set used by the remote host, <remote-cs>.",
+" Equivalent to SET TERM REMOTE-CHARACTER-SET <remote-cs> ALL. For more",
+" control over the details, use SET TERM REMOTE-CHARACTER-SET and (in",
+" non-GUI K95 versions) SET TERM LOCAL-CHARACTER-SET; these are explained",
+" below. The default TERMINAL CHARACTER-SET is LATIN1 (ISO 8859-1).",
+#else /* not OS2 */
+"SET TERMINAL CHARACTER-SET <remote-cs> [ <local-cs> ]",
+" Specifies the character set used by the remote host, <remote-cs>, and the",
+" character set used by C-Kermit locally, <local-cs>. If you don't specify",
+" the local character set, the current FILE CHARACTER-SET is used. When",
+" you specify two different character sets, C-Kermit translates between them",
+" during CONNECT. By default, both character sets are TRANSPARENT, and",
+" no translation is done.",
+#endif /* OS2 */
+" ",
+#endif /* NOCSETS */
+
+#ifdef OS2
+
+"SET TERMINAL CODE-PAGE <number>",
+" Lets you change the PC code page. Only works for code pages that are",
+" successfully prepared in CONFIG.SYS. Use SHOW TERMINAL to list the",
+" current code page and the available code pages.",
+#ifdef OS2ONLY
+" ",
+" Also see SET TERMINAL FONT if the desired code page in not available in",
+" your version of OS/2.",
+#endif /* OS2ONLY */
+" ",
+
+#ifndef NT
+"SET TERMINAL COLOR BORDER <foreground>",
+#endif /* NT */
+"SET TERMINAL COLOR <screenpart> <foreground> <background>",
+" Sets the colors of the terminal emulation screen.",
+" <screenpart> may be any of the following:",
+" DEBUG, HELP-TEXT, REVERSE, SELECTION, STATUS-LINE, TERMINAL-SCREEN, or",
+" UNDERLINED-TEXT.",
+" <foreground> and <background> may be any of:",
+" BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LGRAY, DGRAY, LBLUE,",
+" LGREEN, LCYAN, LRED, LMAGENTA, YELLOW or WHITE.",
+" The L prefix for the color names means Light.",
+" ",
+
+"SET TERMINAL COLOR ERASE { CURRENT-COLOR, DEFAULT-COLOR }",
+" Determines whether the current color as set by the host or the default",
+" color as set by the user (SET TERMINAL COLOR TERMINAL) is used to clear",
+" the screen when erase commands are received from the host.",
+" ",
+
+"SET TERMINAL COLOR RESET-ON-ESC[0m { CURRENT-COLOR, DEFAULT-COLOR }",
+" Determines whether the current color or the default color is used after",
+" <ESC>[0m (\"reset attributes\") command sequence is received from the",
+" host.",
+" ",
+
+"SET TERMINAL CONTROLS { 7, 8 }",
+" Determines whether VT220/320 or Wyse 370 function keys, arrow keys, etc,",
+" that generate ANSI-format escape sequences should send 8-bit control",
+" characters or 7-bit escape sequences.",
+" ",
+#endif /* OS2 */
+
+"SET TERMINAL CR-DISPLAY { CRLF, NORMAL }",
+" Specifies how incoming carriage return characters are to be displayed",
+" on your screen.",
+" ",
+
+#ifdef OS2
+#ifdef KUI
+"SET TERMINAL CURSOR { FULL, HALF, UNDERLINE } {ON, OFF, NOBLINK}",
+" Selects the cursor style and visibility for the terminal screen.",
+#else
+"SET TERMINAL CURSOR { FULL, HALF, UNDERLINE } {ON, OFF}",
+" Selects the cursor style and visibility for the terminal screen.",
+#endif /* KUI */
+" ",
+"SET TERMINAL DG-UNIX-MODE { ON, OFF }",
+" Specifies whether the Data General emulations should accept control",
+" sequences in Unix compatible format or in native DG format. The",
+" default is OFF, DG format.",
+" ",
+#endif /* OS2 */
+
+"SET TERMINAL DEBUG { ON, OFF }",
+" Turns terminal session debugging on and off. When ON, incoming control",
+" characters are displayed symbolically, rather than be taken as formatting",
+" commands. SET TERMINAL DEBUG ON implies SET TELNET DEBUG ON.",
+" ",
+#ifdef OS2
+"SET TERMINAL DG-UNIX-MODE { ON, OFF }",
+" ",
+#endif /* OS2 */
+
+"SET TERMINAL ECHO { LOCAL, REMOTE }",
+" Specifies which side does the echoing during terminal connection.",
+" ",
+
+"SET TERMINAL ESCAPE-CHARACTER { ENABLED, DISABLED }",
+" Turns on/off the ability to escape back from CONNECT mode using the SET",
+#ifdef OS2
+" ESCAPE character. If you disable it you can still get back using Alt-key",
+" combinations as shown in the status line. Also see HELP SET ESCAPE.",
+#else
+" ESCAPE character. If you disable it, Kermit returns to its prompt only",
+" when the connection is closed by the other end. USE WITH EXTREME CAUTION.",
+" Also see HELP SET ESCAPE.",
+#endif /* OS2 */
+" ",
+
+#ifdef OS2
+#ifdef KUI
+"SET TERMINAL FONT <facename> <height>",
+" Specifies the font to be used in the Kermit 95 window. The font is",
+" determined by the choice of a facename and a height measured in Points.",
+" The available facenames are those installed in the Font Control Panel.",
+" ",
+#else /* KUI */
+#ifdef OS2ONLY
+"SET TERMINAL FONT { CP437, CP850, CP852, CP862, CP866, DEFAULT }",
+" CP437 - Original PC code page",
+" CP850 - \"Multilingual\" (West Europe) code page",
+" CP852 - East Europe Roman Alphabet code page (for Czech, Polish, etc)",
+" CP862 - Hebrew code page",
+" CP866 - Cyrillic (Russian, Belorussian, and Ukrainian) code page",
+" ",
+" Loads a soft into the video adapter for use during terminal emulation.",
+" Use this command when your OS/2 system does not have the desired code.",
+" page. Can be used only in full-screen sessions. Also see SET TERMINAL",
+" CODE-PAGE and SET TERMINAL REMOTE-CHARACTER-SET.",
+" ",
+#endif /* OS2ONLY */
+#endif /* KUI */
+
+#ifdef NT
+"SET TERMINAL HEIGHT <number>",
+" Changes the number of rows (lines) to use during terminal emulation, not",
+" counting the status line. Recommended values are 24, 42, and 49 (or 25,",
+" 43, and 50 if SET TERMINAL STATUSLINE is OFF.)",
+#else
+"SET TERMINAL HEIGHT <number>"
+" Changes the number of rows (lines) to use during terminal emulation, not",
+" counting the status line. Windowed sessions can use any value from 8 to",
+" 101. Fullscreen sessions are limited to 24, 42, 49, or 59. Not all"
+" heights are supported by all video adapters.",
+#endif /* NT */
+#else /* OS2 */
+"SET TERMINAL HEIGHT <number>",
+" Tells C-Kermit how many rows (lines) are on your CONNECT-mode screen.",
+#endif /* OS2 */
+" ",
+
+#ifdef CKTIDLE
+"SET TERMINAL IDLE-TIMEOUT <number>",
+" Sets the limit on idle time in CONNECT mode to the given number of",
+" seconds. 0 (the default) means no limit.",
+" ",
+"SET TERMINAL IDLE-ACTION { EXIT, HANGUP, OUTPUT [ text ], RETURN }",
+" Specifies the action to be taken when a CONNECT session is idle for the",
+" number of seconds given by SET TERMINAL IDLE-TIMEOUT. The default action",
+" is to RETURN to command mode. EXIT exits from Kermit; HANGUP hangs up the",
+" connection, and OUTPUT sends the given text to the host without leaving",
+" CONNECT mode; if no text is given a NUL (0) character is sent.",
+#ifdef TNCODE
+" ",
+"And for Telnet connections:",
+" ",
+"SET TERMINAL IDLE-ACTION { TELNET-NOP, TELNET-AYT }",
+" Sends the indicated Telnet protocol message: No Operation (NOP) or",
+" \"Are You There?\" (AYT).",
+#endif /* TNCODE */
+" ",
+#endif /* CKTIDLE */
+
+#ifdef OS2
+
+"SET TERMINAL KDB-FOLLOWS-GL/GR { ON, OFF }",
+" Specifies whether or not the keyboard character set should follow the",
+" active GL and GR character sets. This feature is OFF by default and",
+" should not be used unless it is specificly required by the host",
+" application.",
+" ",
+
+"SET TERMINAL KEY <mode> /LITERAL <keycode> <text>",
+"SET TERMINAL KEY <mode> DEFAULT",
+"SET TERMINAL KEY <mode> CLEAR",
+" Configures the key whose <keycode> is given to send the given text when",
+" pressed while <mode> is active. <mode> may be any of the valid terminal",
+" types or the special modes \"EMACS\", \"HEBREW\" or \"RUSSIAN\". DEFAULT",
+" restores all default key mappings for the specified mode. CLEAR erases",
+" all the key mappings. If there is no text, the default key binding is",
+#ifndef NOCSETS
+" restored for the key k. SET TERMINAL KEY mappings take place before",
+" terminal character-set translation. SET KEY mappings take precedence over",
+" SET TERMINAL KEY <terminal type> settings.",
+#else
+" restored for the key. SET KEY mappings take precedence over SET TERMINAL",
+" KEY <terminal type> settings.",
+#endif /* NOCSETS */
+" The /LITERAL switch may be used to instruct Kermit to ignore character-set",
+" translations when sending this definition to the host.",
+" ",
+" The text may contain \"\\Kverbs\" to denote actions, to stand for DEC",
+" keypad, function, or editing keys, etc. For a list of available keyboard",
+" verbs, type SHOW KVERBS.",
+" ",
+" To find out the keycode and mapping for a particular key, use the SHOW",
+" KEY command. Use the SAVE KEYS command to save all settings to a file.",
+" ",
+"SET TERMINAL KEYBOARD-MODE { NORMAL, EMACS, RUSSIAN, HEBREW }",
+" Select a special keyboard mode for use in the terminal screen.",
+" ",
+
+"SET TERMINAL KEYPAD-MODE { APPLICATION, NUMERIC }",
+" Specifies the \"mode\" of the numeric keypad for VT terminal emulation.",
+" Use this command in case the host or application wants the keypad to be",
+" in a different mode than it's in, but did not send the escape sequence",
+" to put it in the needed mode.",
+" ",
+#ifdef KUI
+"SET TERMINAL LINE-SPACING <float>",
+" Specifies the line spacing used when displaying text. The default is 1.0.",
+" Valid values range from 1.0 to 3.0 inclusive.",
+" ",
+#endif /* KUI */
+#endif /* OS2 */
+
+#ifndef NOCSETS
+#ifdef OS2
+"SET TERMINAL LOCAL-CHARACTER-SET <local-cs>",
+" Specifies the character set used by K-95 locally. If you don't specify",
+#ifdef OS2ONLY
+" the local character-set, the current TERMINAL FONT is used if you have",
+" given a SET TERMINAL FONT command; otherwise the current codepage is used.",
+#else
+" the local character-set, the current code page is used.",
+#endif /* OS2ONLY */
+" ",
+" When the local and remote character sets differ, Kermit translates between",
+" them during CONNECT. By default, the remote character set is Latin1 and",
+" the local one is your current code page.",
+#ifdef NT
+" ",
+" In Windows NT, Unicode is used as the local character-set regardless of",
+" this setting.",
+#endif /* NT */
+" ",
+"See also SET TERMINAL REMOTE-CHARACTER-SET",
+" ",
+#endif /* OS2 */
+#endif /* NOCSETS */
+
+#ifdef OS2
+"SET TERMINAL LOCKING-SHIFT { OFF, ON }",
+" Tells whether to send Shift-In/Shift-Out (Ctrl-O and Ctrl-N) to switch",
+" between 7-bit and 8-bit characters sent during terminal emulation over",
+" 7-bit connections. OFF by default.",
+#else
+"SET TERMINAL LOCKING-SHIFT { OFF, ON }",
+" Tells Kermit whether to use Shift-In/Shift-Out (Ctrl-O and Ctrl-N) to",
+" switch between 7-bit and 8-bit characters during CONNECT. OFF by default.",
+#endif /* OS2 */
+" ",
+
+#ifdef OS2
+"SET TERMINAL MARGIN-BELL { ON [column], OFF }",
+" Determines whether the margin-bell is activated and what column it should",
+" ring at. OFF by default.",
+" ",
+#endif /* OS2 */
+
+"SET TERMINAL NEWLINE-MODE { OFF, ON }",
+" Tells whether to send CRLF (Carriage Return and Line Feed) when you type",
+" CR (press the Return or Enter key) in CONNECT mode.",
+" ",
+
+#ifdef OS2
+"SET TERMINAL OUTPUT-PACING <milliseconds>",
+" Tells how long to pause between sending each character to the host during",
+" CONNECT mode. Normally not needed but sometimes required to work around",
+" TRANSMISSION BLOCKED conditions when pasting into the terminal window.",
+" ",
+
+#ifdef PCTERM
+"SET TERMINAL PCTERM { ON, OFF }",
+" Activates or deactivates the PCTERM terminal emulation keyboard mode.",
+" When PCTERM is ON all keystrokes in the terminal screen are sent to the",
+" host as make/break (down/up) codes instead of as characters from the",
+" REMOTE-CHARACTER-SET, and all keyboard mappings, including Kverbs and the",
+" escape character are disabled. To turn off PCTERM keyboard mode while in",
+" CONNECT mode press Control-CapsLock. PCTERM is OFF by default.",
+" ",
+#endif /* PCTERM */
+#endif /* OS2 */
+
+#ifdef OS2
+"SET TERMINAL PRINT { AUTO, COPY, OFF, USER }",
+" Allows selective control of various types of printing from the Terminal",
+" session. AUTO prints a line of text from the terminal screen whenever",
+" the cursor is moved off the line. COPY prints every byte received as",
+" it is received without interpretation. USER prints every byte after",
+" interpretation by the terminal emulator translates character-sets and",
+" construct escape sequences, ... The default is OFF.",
+" ",
+#else
+#ifdef XPRINT
+"SET TERMINAL PRINT { ON, OFF }",
+" Enables and disables host-initiated transparent printing in CONNECT mode.",
+" ",
+#endif /* XPRINT */
+#endif /* OS2 */
+
+#ifdef OS2
+#ifndef NOCSETS
+"SET TERMINAL REMOTE-CHARACTER-SET <remote-cs> [ { G0,G1,G2,G3 }... ]",
+" Specifies the character set used by the remote host, <remote-cs>.",
+" When the local and remote character sets differ, Kermit translates",
+" between them during CONNECT. By default, the remote character set is",
+" Latin1 and the local one is your current code page. Optionally, you can",
+" also designate the character set to the G0..G3 graphic tables.",
+" ",
+#endif /* NOCSETS */
+#endif /* OS2 */
+
+#ifdef OS2
+"SET TERMINAL ROLL-MODE { INSERT, OVERWRITE, KEYSTROKES [ option ] }",
+" Tells whether new data when received from the host is entered into the",
+" scrollback buffer at the current rollback position (OVERWRITE) or at the",
+" end of the buffer (INSERT). The default is INSERT. Typing is allowed",
+" during rollbacks in either mode, according to SET TERM ROLL KEYSTROKES:",
+" SEND (the default) means to process keystrokes normally; IGNORE means to",
+" ignore them when the screen is scrolled back; RESTORE-AND-SEND is like",
+" SEND but restores the screen to its active position first.",
+" ",
+
+"SET TERMINAL SCREEN-MODE { NORMAL, REVERSE }",
+" When set to REVERSE the foreground and background colors are swapped as",
+" well as the application of the foreground and background intensity bits.",
+" The default is NORMAL.",
+" ",
+
+"SET TERMINAL SCREEN-OPTIMIZE { ON, OFF }",
+" When set to ON, the default, Kermit only paints the screen with characters",
+" that have changed since the last screen paint. When OFF, the screen is",
+" completely repainted each time there is a change.",
+" ",
+
+"SET TERMINAL SCREEN-UPDATE { FAST, SMOOTH } [ <milliseconds> ]",
+" Chooses the mechanism used for screen updating and the update frequency.",
+" Defaults are FAST scrolling with updates every 100 milliseconds.",
+" ",
+
+"SET TERMINAL SCROLLBACK <lines>",
+" Sets size of CONNECT virtual screen buffer. <lines> includes the active",
+" terminal screen. The minimum is 256. The maximum is 2 million. The",
+" default is 2000.",
+" ",
+
+"SET TERMINAL SEND-DATA { ON, OFF }",
+" Determines whether ASCII emulations such as WYSE 30,50,60 or TVI 910+,925,",
+" 950 may send their screen contents to the host upon request. Allowing the",
+" screen to be read by the host is a significant security risk. The default",
+" is OFF and should only be changed after a security evaluation of host",
+" environment.",
+" ",
+
+"SET TERMINAL SEND-END-OF-BLOCK { CRLF_ETX, US_CR }",
+" Determines which set of characters should be used as end of line and end",
+" of transmission indicators when sending screen data to the host",
+" ",
+
+"SET TERMINAL SGR-COLORS { ON, OFF }",
+" ON (default) means allow host control of colors; OFF means ignore host",
+" escape sequences to set color.",
+" ",
+
+"SET TERMINAL SNI-CH.CODE { ON, OFF }",
+" This command controls the state of the CH.CODE key. It is the equivalent",
+" to the SNI_CH_CODE Keyboard verb. The SNI terminal uses CH.CODE to",
+" easily switch between the National Language character set and U.S. ASCII.",
+" The default is ON which means to display characters as U.S. ASCII. When",
+" OFF the lanuage specified by SET TERMINAL SNI-LANUAGE is used to display",
+" characters when 7-bit character sets are in use."
+" ",
+"SET TERMINAL SNI-FIRMWARE-VERSIONS <kbd-version> <terminal-version>",
+" Specifies the Firmware Version number that should be reported to the host",
+" when the terminal is queried. The default is 920031 for the keyboard",
+" and 830851 for the terminal.",
+" ",
+"SET TERMINAL SNI-LANGUAGE <national-language>",
+" An alias for SET TERMINAL VT-LANUAGE, this command specifies the national",
+" language character-set that should be used when the NRC mode is activated",
+" for VT emulations or when CH.CODE is OFF for SNI emulations. The default",
+" language for SET TERMINAL TYPE SNI-97801 is \"German\".",
+" ",
+"SET TERMINAL SNI-PAGEMODE { ON, OFF }",
+" Determines whether or not page mode is active. OFF by default.",
+" ",
+"SET TERMINAL SNI-SCROLLMODE { ON, OFF }",
+" Determines whether or not scroll mode is active. OFF by default.",
+" ",
+"SET TERMINAL STATUSLINE { ON, OFF }",
+" ON (default) enables the Kermit status line in the terminal screen.",
+" OFF removes it, making the line available for use by the host.",
+" ",
+
+"SET TERMINAL TRANSMIT-TIMEOUT <seconds>",
+" Specifies the maximum amount of time K-95 waits before returning to the",
+" prompt if your keystrokes can't be transmitted for some reason, such as a",
+" flow-control deadlock.",
+" ",
+#endif /* OS2 */
+
+#ifdef CK_TRIGGER
+"SET TERMINAL TRIGGER <string>",
+" Specifies a string that, when detected during any subsequent CONNECT",
+" session, is to cause automatic return to command mode. Give this command",
+" without a string to cancel the current trigger. See HELP CONNECT for",
+" additional information.",
+" ",
+#endif /* CK_TRIGGER */
+
+#ifdef OS2
+"SET TERMINAL URL-HIGHLIGHT { ON <attribute>, OFF }",
+" Specifies whether K-95 should highlight URLs and which screen attribute",
+" should be used. The screen attributes can be one of NORMAL, BLINK, BOLD,",
+" DIM, INVISIBLE, REVERSE, or UNDERLINE. The default is ON using the",
+" BOLD screen attribute.",
+" ",
+"SET TERMINAL VIDEO-CHANGE { DISABLED, ENABLED }",
+" Specifies whether K-95 should change video modes automatically in response",
+#ifdef NT
+" to escape sequences from the other computer. ENABLED by default (except",
+" on Windows 95).",
+#else /* NT */
+" to escape sequences from the other computer. ENABLED by default.",
+#endif /* NT */
+" ",
+
+"SET TERMINAL VT-LANGUAGE <language>",
+" Specifies the National Replacement Character Set (NRC) to be used when",
+" NRC mode is activated. The default is \"North American\".",
+" ",
+"SET TERMINAL VT-NRC-MODE { ON, OFF }",
+" OFF (default) chooses VT multinational Character Set mode. OFF chooses",
+" VT National Replacement Character-set mode. The NRC is selected with",
+" SET TERMINAL VT-LANGUAGE",
+" ",
+
+#ifdef NT
+"SET TERMINAL WIDTH <cols>",
+" Tells the number of columns in the terminal screen.",
+" ",
+" The default is 80. You can also use 132. Other widths can be chosen but",
+" are usually not supported by host software.",
+" ",
+#else
+"SET TERMINAL WIDTH <cols>",
+" Tells how many columns define the terminal size.",
+" ",
+"Default is 80. In Windowed OS/2 2.x sessions, this value may not be changed",
+"In Windowed OS/2 WARP 3.x sessions, this value may range from 20 to 255.",
+"In Full screen sessions, values of 40, 80, and 132 are valid. Not all",
+"combinations of height and width are supported on all adapters.",
+" ",
+#endif /* NT */
+"SET TERMINAL WRAP { OFF, ON }",
+" Tells whether the terminal emulator should automatically wrap long lines",
+" on your screen.",
+" ",
+#else
+
+"SET TERMINAL WIDTH <number>",
+" \
+Tells Kermit how many columns (characters) are on your CONNECT-mode screen.",
+" ",
+#endif /* OS2 */
+"Type SHOW TERMINAL to see current terminal settings.",
+"" };
+#endif /* NOLOCAL */
+
+#ifdef NETCONN
+static char *hxyhost[] = {
+"SET HOST [ switches ] hostname-or-address [ service ] [ protocol-switch ]",
+" Establishes a connection to the specified network host on the currently",
+" selected network type. For TCP/IP connections, the default service is",
+" TELNET; specify a different TCP port number or service name to choose a",
+" different service. The first set of switches can be:",
+" ",
+" /NETWORK-TYPE:name",
+" Makes the connection on the given type of network. Equivalent to SET",
+" NETWORK TYPE name prior to SET HOST, except that the selected network",
+" type is used only for this connection. Type \"set host /net:?\" to see",
+#ifdef NETCMD
+" a list. /NETWORK-TYPE:COMMAND means to make the connection through the",
+" given system command, such as \"rlogin\" or \"cu\".",
+#else
+" a list.",
+#endif /* NETCMD */
+" ",
+" /CONNECT",
+" \
+Enter CONNECT (terminal) mode automatically if the connection is successful.",
+" ",
+" /SERVER",
+" Enter server mode automatically if the connection is successful.",
+" ",
+" /USERID:[<name>]",
+" This switch is equivalent to SET LOGIN USERID <name> or SET TELNET",
+" ENVIRONMENT USER <name>. If a string is given, it sent to host during",
+" Telnet negotiations; if this switch is given but the string is omitted,",
+" no user ID is sent to the host. If this switch is not given, your",
+" current USERID value, \\v(userid), is sent. When a userid is sent to the",
+" host it is a request to login as the specified user.",
+" ",
+#ifdef CK_AUTHENTICATION
+" /PASSWORD:[<string>]",
+" This switch is equivalent to SET LOGIN PASSWORD. If a string is given,",
+" it is treated as the password to be used (if required) by any Telnet",
+" Authentication protocol (Kerberos Ticket retrieval, Secure Remote",
+" Password, or X.509 certificate private key decryption.) If no password",
+" switch is specified a prompt is issued to request the password if one",
+" is required for the negotiated authentication method.",
+" ",
+#endif /* CK_AUTHENTICATION */
+"The protocol-switches can be:",
+" ",
+" /NO-TELNET-INIT",
+" Do not send initial Telnet negotiations even if this is a Telnet port.",
+" ",
+" /RAW-SOCKET",
+" This is a connection to a raw TCP socket.",
+" ",
+#ifdef RLOGCODE
+" /RLOGIN",
+" Use Rlogin protocol even if this is not an Rlogin port.",
+" ",
+#endif /* RLOGCODE */
+" /TELNET",
+" Send initial Telnet negotiations even if this is not a Telnet port.",
+" ",
+#ifdef CK_KERBEROS
+#ifdef RLOGCODE
+#ifdef KRB4
+" /K4LOGIN",
+" Use Kerberos IV klogin protocol even if this is not a klogin port.",
+" ",
+#ifdef CK_ENCRYPTION
+" /EK4LOGIN",
+" Use Kerberos IV Encrypted login protocol even if this is not an eklogin",
+" port.",
+" ",
+#endif /* CK_ENCRYPTION */
+#endif /* KRB4 */
+#ifdef KRB5
+" /K5LOGIN",
+" Use Kerberos V klogin protocol even if this is not a klogin port.",
+" ",
+#ifdef CK_ENCRYPTION
+" /EK5LOGIN",
+" Use Kerberos V Encrypted login protocol even if this is not an eklogin",
+" port.",
+" ",
+#endif /* CK_ENCRYPTION */
+#endif /* KRB5 */
+#endif /* RLOGCODE */
+#endif /* CK_KERBEROS */
+#ifdef CK_SSL
+" /SSL",
+" Perform SSL negotiations.",
+" ",
+" /SSL-TELNET",
+" Perform SSL negotiations and if successful start Telnet negotiations.",
+" ",
+" /TLS",
+" Perform TLS negotiations.",
+" ",
+" /TLS-TELNET",
+" Perform TLS negotiations and if successful start Telnet negotiations.",
+" ",
+#endif /* CK_SSL */
+"Examples:",
+" SET HOST kermit.columbia.edu",
+" SET HOST /CONNECT kermit.columbia.edu",
+" SET HOST * 1649",
+" SET HOST /SERVER * 1649",
+" SET HOST 128.59.39.2",
+" SET HOST madlab.sprl.umich.edu 3000",
+" SET HOST xyzcorp.com 2000 /RAW-SOCKET",
+#ifdef SSHBUILTIN
+" SET HOST /NET:SSH kermit.columbia.edu /x11-forwarding:on",
+#endif /* SSHBUILTIN */
+#ifdef NETCMD
+" SET HOST /CONNECT /COMMAND rlogin xyzcorp.com",
+#endif /* NETCMD */
+" ",
+#ifdef SUPERLAT
+"Notes:",
+" ",
+" . The TELNET command is equivalent to SET NETWORK TYPE TCP/IP,",
+" SET HOST name [ port ] /TELNET, IF SUCCESS CONNECT",
+" ",
+" . For SUPERLAT connections, the hostname-or-address may be either a service",
+" name, or a node/port combination, as required by your LAT host.",
+#else
+"The TELNET command is equivalent to SET NETWORK TYPE TCP/IP,",
+"SET HOST name [ port ] /TELNET, IF SUCCESS CONNECT",
+#endif /* SUPERLAT */
+" ",
+"Also see SET NETWORK, TELNET, SET TELNET.",
+"" };
+
+static char *hmxyauth[] = {
+"Synatx: SET AUTHENTICATION <auth_type> <parameter> <value>",
+" Sets defaults for the AUTHENTICATE command:",
+" ",
+#ifdef CK_KERBEROS
+"SET AUTHENTICATION KERBEROS5 ADDRESSES {list of ip-addresses}",
+" Specifies a list of IP addresses that should be placed in the Ticket",
+" Getting Ticket in addition to the local machine addresses.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } AUTODESTROY",
+" { ON-CLOSE, ON-EXIT, NEVER }",
+" When ON, Kermit will destroy all credentials in the default",
+" credentials cache upon Kermit termination. Default is NEVER.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } AUTOGET { ON, OFF }",
+" When ON, if the host offers Kerberos 4 or Kerberos 5 authentication",
+" and Kermit is configured to use that authentication method and there",
+" is no TGT, Kermit will automatically attempt to retrieve one by",
+" prompting for the password (and principal if needed.) Default is ON.",
+" ",
+"SET AUTHENTICATION KERBEROS5 CREDENTIALS-CACHE <filename>",
+" Allows an alternative credentials cache to be specified. This is useful",
+" when you need to maintain two or more sets of credentials for different",
+" realms or roles. The default is specified by the environment variable",
+" KRB5CCNAME or as reported by the Kerberos 5 library.",
+" ",
+"SET AUTHENTICATION KERBEROS5 FORWARDABLE { ON, OFF }",
+" When ON, specifies that Kerberos 5 credentials should be forwardable to",
+" the host. If SET TELNET AUTHENTICATION FORWARDING is ON, forwardable",
+" credentials are sent to the host. The default is OFF.",
+" ",
+"SET AUTHENTICATION KERBEROS5 GET-K4-TGT { ON, OFF }",
+" When ON, specifies that Kerberos 4 credentials should be requested each",
+" time Kerberos 5 credentials are requested with AUTH KERBEROS5 INIT.",
+" Default is OFF.",
+" ",
+"SET AUTHENTICATION KERBEROS4 INSTANCE <instance>",
+" Allows a Kerberos 4 instance to be specified as a default (if needed).",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } KEYTAB <filename>",
+" Specifies the location of the keytab file used to authenticate incoming",
+" connections. The default is none, which means to use the default value",
+" configured in the Kerberos installation.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } LIFETIME <minutes>",
+" Specifies the lifetime of the TGTs requested from the KDC. The default",
+" is 600 minutes (10 hours).",
+" ",
+"SET AUTHENTICATION KERBEROS5 NO-ADDRESSES { ON, OFF }",
+" Specifies whether or not IP addresses will be inserted into the TGT."
+" Default is OFF.",
+" ",
+"SET AUTHENTICATION KERBEROS4 PREAUTH { ON, OFF }",
+" Allows Kerberos 4 preauthenticated TGT requests to be turned off. The",
+" default is ON. Only use if absolutely necessary. We recommend that",
+" preauthenticated requests be required for all tickets returned by a KDC",
+" to a requestor.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PRINCIPAL <name>",
+" When Kermit starts, it attempts to set the principal name to that stored",
+" in the current credentials cache. If no credential cache exists, the",
+" current SET LOGIN USERID value is used. SET LOGIN USERID is set to the",
+" operating system's current username when Kermit is started. To force",
+" Kermit to prompt the user for the principal name when requesting TGTs,",
+" place:",
+" ",
+" SET AUTH K4 PRINCIPAL {}",
+" SET AUTH K5 PRINCIPAL {}",
+" ",
+" in the Kermit initialization file or connection script.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PROMPT PASSWORD <prompt>",
+" Specifies a custom prompt to be used when prompting for a password.",
+" The Kerberos prompt strings may contain two %s replacement fields.",
+" The first %s is replaced by the principal name; the second by the realm.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PROMPT PRINCIPAL <prompt>",
+" Specifies a custom prompt to be used when prompting for the Kerberos",
+" principal name. No %s replacement fields may be used. Kermit prompts",
+" for a principal name when retrieving a TGT if the command:",
+" ",
+" SET AUTHENTICATION { KERBEROS4, KERBEROS5 } PRINCIPAL {}",
+" ",
+" has been issued.",
+" ",
+"SET AUTHENTICATION KERBEROS5 PROXIABLE { ON, OFF }",
+" When ON, specifies that Kerberos 5 credentials should be proxiable.",
+" Default is OFF.",
+" ",
+"SET AUTHENTICATION KERBEROS5 RENEWABLE <minutes>",
+" When <minutes> is greater than the ticket lifetime a TGT may be renewed",
+" with AUTH K5 INIT /RENEW instead of getting a new ticket as long as the",
+" ticket is not expired and its within the renewable lifetime. Default is",
+" 0 (zero) minutes.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } REALM <name>",
+" If no default is set, the default realm configured for the Kerberos",
+" libraries is used. Abbreviations accepted.",
+" ",
+"SET AUTHENTICATION { KERBEROS4, KERBEROS5 } SERVICE-NAME <name>",
+" This command specifies the service ticket name used to authenticate",
+" to the host when Kermit is used as a client; or the service ticket",
+" name accepted by Kermit when it is acting as the host.",
+" If no default is set, the default service name for Kerberos 4 is",
+" \"rcmd\" and for Kerberos 5 is \"host\".",
+" ",
+#endif /* CK_KERBEROS */
+#ifdef CK_SRP
+"SET AUTHENTICATION SRP PROMPT PASSWORD <prompt>",
+" Specifies a custom prompt to be used when prompting for a password.",
+" The SRP prompt string may contain one %s replacement fields which is",
+" replaced by the login userid.",
+" ",
+#endif /* CK_SRP */
+#ifdef CK_SSL
+"In all of the following commands \"SSL\" and \"TLS\" are aliases.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } CIPHER-LIST <list of ciphers>",
+"Applies to both SSL and TLS. A colon separated list of any of the following",
+"(case sensitive) options depending on the options chosen when OpenSSL was ",
+"compiled: ",
+" ",
+" Key Exchange Algorithms:",
+" \"kRSA\" RSA key exchange",
+" \"kDHr\" Diffie-Hellman key exchange (key from RSA cert)",
+" \"kDHd\" Diffie-Hellman key exchange (key from DSA cert)",
+" \"kEDH\" Ephemeral Diffie-Hellman key exchange (temporary key)",
+" \"kKRB5\" Kerberos 5",
+" ",
+" Authentication Algorithm:",
+" \"aNULL\" No authentication",
+" \"aRSA\" RSA authentication",
+" \"aDSS\" DSS authentication",
+" \"aDH\" Diffie-Hellman authentication",
+" \"aKRB5\" Kerberos 5",
+" ",
+" Cipher Encoding Algorithm:",
+" \"eNULL\" No encodiing",
+" \"DES\" DES encoding",
+" \"3DES\" Triple DES encoding",
+" \"RC4\" RC4 encoding",
+" \"RC2\" RC2 encoding",
+" \"IDEA\" IDEA encoding",
+" ",
+" MAC Digest Algorithm:",
+" \"MD5\" MD5 hash function",
+" \"SHA1\" SHA1 hash function",
+" \"SHA\" SHA hash function (should not be used)",
+" ",
+" Aliases:",
+" \"SSLv2\" all SSL version 2.0 ciphers (should not be used)",
+" \"SSLv3\" all SSL version 3.0 ciphers",
+" \"EXP\" all export ciphers (40-bit)",
+" \"EXPORT56\" all export ciphers (56-bit)",
+" \"LOW\" all low strength ciphers (no export)",
+" \"MEDIUM\" all ciphers with 128-bit encryption",
+" \"HIGH\" all ciphers using greater than 128-bit encryption",
+" \"RSA\" all ciphers using RSA key exchange",
+" \"DH\" all ciphers using Diffie-Hellman key exchange",
+" \"EDH\" all ciphers using Ephemeral Diffie-Hellman key exchange",
+" \"ADH\" all ciphers using Anonymous Diffie-Hellman key exchange",
+" \"DSS\" all ciphers using DSS authentication",
+" \"KRB5\" all ciphers using Kerberos 5 authentication",
+" \"NULL\" all ciphers using no encryption",
+" ",
+"Each item in the list may include a prefix modifier:",
+" ",
+" \"+\" move cipher(s) to the current location in the list",
+" \"-\" remove cipher(s) from the list (may be added again by",
+" a subsequent list entry)",
+" \"!\" kill cipher from the list (it may not be added again",
+" by a subsequent list entry)",
+" ",
+"If no modifier is specified the entry is added to the list at the current ",
+"position. \"+\" may also be used to combine tags to specify entries such as "
+,
+"\"RSA+RC4\" describes all ciphers that use both RSA and RC4.",
+" ",
+"For example, all available ciphers not including ADH key exchange:",
+" ",
+" ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP",
+" ",
+"All algorithms including ADH and export but excluding patented algorithms: ",
+" ",
+" HIGH:MEDIUM:LOW:EXPORT56:EXP:ADH:!kRSA:!aRSA:!RC4:!RC2:!IDEA",
+" ",
+"The OpenSSL command ",
+" ",
+" openssl.exe ciphers -v <list of ciphers> ",
+" ",
+"may be used to list all of the ciphers and the order described by a specific",
+"<list of ciphers>.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } CRL-DIR <directory>",
+"specifies a directory that contains certificate revocation files where each",
+"file is named by the hash of the certificate that has been revoked.",
+" ",
+" OpenSSL expects the hash symlinks to be made like this:",
+" ",
+" ln -s crl.pem `openssl crl -hash -noout -in crl.pem`.r0",
+" ",
+" Since not all file systems have symlinks you can use the following command",
+" in Kermit to copy the crl.pem file to the hash file name.",
+" ",
+" copy crl.pem {\\fcommand(openssl.exe crl -hash -noout -in crl.pem).r0}",
+" ",
+" This produces a hash based on the issuer field in the CRL such ",
+" that the issuer field of a Cert may be quickly mapped to the ",
+" correct CRL.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } CRL-FILE <filename>",
+"specifies a file that contains a list of certificate revocations.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } DEBUG { ON, OFF }",
+"specifies whether debug information should be displayed about the SSL/TLS",
+"connection. When DEBUG is ON, the VERIFY command does not terminate",
+"connections when set to FAIL-IF-NO-PEER-CERT when a certificate is",
+"presented that cannot be successfully verified. Instead each error",
+"is displayed but the connection automatically continues.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } DH-PARAM-FILE <filename>",
+" Specifies a file containing DH parameters which are used to generate",
+" temporary DH keys. If a DH parameter file is not provided Kermit uses a",
+" fixed set of parameters depending on the negotiated key length. Kermit",
+" provides DH parameters for key lengths of 512, 768, 1024, 1536, and 2048",
+" bits.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } DSA-CERT-CHAIN-FILE <filename>",
+" Specifies a file containing a DSA certificate chain to be sent along with",
+" the DSA-CERT to the peer. This file must only be specified if Kermit is",
+" being used as a server and the DSA certificate was signed by an",
+" intermediary certificate authority.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } DSA-CERT-FILE <filename>",
+" Specifies a file containing a DSA certificate to be sent to the peer to ",
+" authenticate the host or end user. The file may contain the matching DH ",
+" private key instead of using the DSA-KEY-FILE command.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } DSA-KEY-FILE <filename>",
+"Specifies a file containing the private DH key that matches the DSA ",
+"certificate specified with DSA-CERT-FILE. This command is only necessary if",
+"the private key is not appended to the certificate in the file specified by",
+"DSA-CERT-FILE.",
+" ",
+" Note: When executing a script in the background or when it is",
+" running as an Internet Kermit Service Daemon, Kermit cannot support ",
+" encrypted private keys. When attempting to load a private key that is",
+" encrypted, a prompt will be generated requesting the passphrase necessary",
+" to decrypt the keyfile. To automate access to the private key you must",
+" decrypt the encrypted keyfile and create an unencrypted keyfile for use",
+" by Kermit. This can be accomplished by using the following command and",
+" the passphrase:",
+" ",
+" openssl dsa -in <encrypted-key-file> -out <unencrypted-key-file>",
+" ",
+"SET AUTHENTICATION { SSL, TLS } RANDOM-FILE <filename>",
+" Specifies a file containing random data to be used as seed for the",
+" Pseudo Random Number Generator. The contents of the file are",
+" overwritten with new random data on each use.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } RSA-CERT-CHAIN-FILE <filename>",
+" Specifies a file containing a RSA certificate chain to be sent along with",
+" the RSA-CERT to the peer. This file must only be specified if Kermit is",
+" being used as a server and the RSA certificate was signed by an",
+" intermediary certificate authority.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } RSA-CERT-FILE <filename>",
+" Specifies a file containing a RSA certificate to be sent to the peer to ",
+" authenticate the host or end user. The file may contain the matching RSA ",
+" private key instead of using the RSA-KEY-FILE command.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } RSA-KEY-FILE <filename>",
+" Specifies a file containing the private RSA key that matches the RSA",
+" certificate specified with RSA-CERT-FILE. This command is only necessary",
+" if the private key is not appended to the certificate in the file specified"
+,
+" by RSA-CERT-FILE. ",
+" ",
+" Note: When executing a script in the background or when it is",
+" running as an Internet Kermit Service Daemon, Kermit cannot support ",
+" encrypted private keys. When attempting to load a private key that is",
+" encrypted, a prompt will be generated requesting the passphrase necessary",
+" to decrypt the keyfile. To automate access to the private key you must",
+" decrypt the encrypted keyfile and create an unencrypted keyfile for use",
+" by Kermit. This can be accomplished by using the following command and",
+" the passphrase:",
+" ",
+" openssl rsa -in <encrypted-key-file> -out <unencrypted-key-file>",
+" ",
+"SET AUTHENTICATION { SSL, TLS } VERBOSE { ON, OFF }",
+" Specifies whether information about the authentication (ie, the",
+" certificate chain) should be displayed upon making a connection.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } VERIFY { NO,PEER-CERT,FAIL-IF-NO-PEER-CERT }",
+" Specifies whether certificates should be requested from the peer verified;",
+" whether they should be verified when they are presented; and whether they",
+" should be required. When set to NO (the default for IKSD), Kermit does",
+" not request that the peer send a certificate; if one is presented it is",
+" ignored. When set to PEER-CERT (the default when not IKSD), Kermit",
+" requests a certificate be sent by the peer. If presented, the certificate",
+" is verified. Any errors during the verification process result in",
+" queries to the end user. When set to FAIL-IF-NO-PEER-CERT, Kermit",
+" requests a certificate be sent by the peer. If the certificate is not",
+" presented or fails to verify, the connection is terminated without",
+" querying the user.",
+" ",
+" If an anonymous cipher (i.e., ADH) is desired, the NO setting must be",
+" used. Otherwise, the receipt of the peer certificate request is",
+" interpreted as a protocol error and the negotiation fails.",
+" ",
+" If you wish to allow the peer to authenticate using either an X509",
+" certificate to userid mapping function or via use of a ~/.tlslogin file",
+" you must use either PEER-CERT or FAIL-IF-NO-PEER-CERT. Otherwise, any",
+" certificates that are presented is ignored. In other words, use NO if you",
+" want to disable the ability to use certificates to authenticate a peer.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } VERIFY-DIR <directory>",
+" Specifies a directory that contains root CA certificate files used to",
+" verify the certificate chains presented by the peer. Each file is named",
+" by a hash of the certificate.",
+" ",
+" OpenSSL expects the hash symlinks to be made like this:",
+" ",
+" ln -s cert.pem `openssl x509 -hash -noout -in cert.pem`.0",
+" ",
+" Since not all file systems have symlinks you can use the following command",
+" in Kermit to copy the cert.pem file to the hash file name.",
+" ",
+" copy cert.pem {\\fcommand(openssl.exe x509 -hash -noout -in cert.pem).0}",
+" ",
+" This produces a hash based on the subject field in the cert such that the",
+" certificate may be quickly found.",
+" ",
+"SET AUTHENTICATION { SSL, TLS } VERIFY-FILE <file>",
+" Specifies a file that contains root CA certificates to be used for",
+" verifying certificate chains.",
+" ",
+#endif /* CK_SSL */
+""
+};
+
+static char *hxynet[] = {
+"Syntax: SET NETWORK { TYPE network-type, DIRECTORY [ file(s)... ] }",
+" ",
+"Select the type of network to be used with SET HOST connections:",
+" ",
+#ifdef NETCMD
+" SET NETWORK TYPE COMMAND ; Make a connection through an external command",
+#endif /* NETCMD */
+#ifdef TCPSOCKET
+" SET NETWORK TYPE TCP/IP ; Internet: Telnet, Rlogin, etc.",
+#endif /* TCPSOCKET */
+#ifdef ANYX25
+" SET NETWORK TYPE X.25 ; X.25 peer-to-peer connections.",
+#endif /* ANYX25 */
+#ifdef DECNET
+" SET NETWORK TYPE PATHWORKS { LAT, CTERM } ; DEC LAT or CTERM connections.",
+#endif /* DECNET */
+#ifdef NPIPE
+" SET NETWORK TYPE NAMED-PIPE <pipename> ; OS/2 Named Pipe connections.",
+#endif /* NPIPE */
+#ifdef CK_NETBIOS
+" SET NETWORK TYPE NETBIOS ; NETBIOS peer-to-peer connections",
+#endif /* CK_NETBIOS */
+#ifdef SUPERLAT
+" SET NETWORK TYPE SUPERLAT ; LAT connections (Meridian Technology SuperLAT)",
+#endif /* SUPERLAT */
+" ",
+"If only one network type is listed above, that is the default network for",
+#ifdef RLOGCODE
+"SET HOST commands. Also see SET HOST, TELNET, RLOGIN.",
+#else
+#ifdef TNCODE
+"SET HOST commands. Also see SET HOST, TELNET.",
+#else
+"SET HOST commands. Also see SET HOST.",
+#endif /* TNCODE */
+#endif /* RLOGCODE */
+" ",
+"SET NETWORK DIRECTORY [ file [ file [ ... ] ] ]",
+" Specifies the name(s) of zero or more network directory files, similar to",
+" dialing directories (HELP DIAL for details). The general format of a",
+" network directory entry is:",
+" ",
+" name network-type address [ network-specific-info ] [ ; comment ]",
+" ",
+" For TCP/IP, the format is:",
+" ",
+" name tcp/ip ip-hostname-or-address [ socket ] [ ; comment ]",
+" ",
+"You can have multiple network directories and you can have multiple entries",
+"with the same name. SET HOST <name> and TELNET <name> commands look up the",
+"given <name> in the directory and, if found, fill in the additional items",
+"from the entry, and then try all matching entries until one succeeds.",
+""};
+
+#ifndef NOTCPOPTS
+static char *hxytcp[] = {
+#ifdef SOL_SOCKET
+"SET TCP ADDRESS <ip-address>",
+" This allows a specific IP Address on a multihomed host to be used",
+" instead of allowing the TCP/IP stack to choose. This may be necessary",
+" when using authentication or listening for an incoming connection.",
+" Specify no <ip-address> to remove the preference.",
+" ",
+"SET TCP KEEPALIVE { ON, OFF }",
+" Setting this ON might help to detect broken connections more quickly.",
+" (default is ON.)",
+" ",
+"SET TCP LINGER { ON [timeout], OFF }",
+" Setting this ON ensures that a connection doesn't close before all",
+" outstanding data has been transferred and acknowledged. The timeout is",
+" measured in 10ths of milliseconds. The default is ON with a timeout of 0.",
+" ",
+"SET TCP NODELAY { ON, OFF }",
+" ON means send short TCP packets immediately rather than waiting",
+" to accumulate a bunch of them before transmitting (Nagle Algorithm).",
+" (default is OFF.)",
+" ",
+"SET TCP RECVBUF <number>",
+"SET TCP SENDBUF <number>",
+" TCP receive and send buffer sizes. (default is -1, use system defaults.)",
+" ",
+"These items let you tune TCP networking performance on a per-connection",
+"basis by adjusting parameters you normally would not have access to. You",
+"should use these commands only if you feel that the TCP/IP protocol stack",
+"that Kermit is using is giving you inadequate performance, and then only if",
+"you understand the concepts (see, for example, the Comer TCP/IP books), and",
+"then at your own risk. These settings are displayed by SHOW NETWORK. Not",
+"all options are necessarily available in all Kermit versions; it depends on",
+"the underlying TCP/IP services.",
+" ",
+"The following TCP and/or IP parameter(s) may also be changed:",
+" ",
+#endif /* SOL_SOCKET */
+"SET TCP REVERSE-DNS-LOOKUP { AUTO, ON, OFF }",
+" Tells Kermit whether to perform reverse DNS lookup on TCP/IP connections",
+" so Kermit can determine the actual hostname of the host it is connected",
+" to, which is useful for connections to host pools, and is required for",
+" Kerberos connections to host pools and for incoming connections. If the",
+" other host does not have a DNS entry, the reverse lookup could take a long",
+" time (minutes) to fail, but the connection will still be made. Turn this",
+" option OFF for speedier connections if you do not need to know exactly",
+" which host you are connected to and you are not using Kerberos. AUTO, the",
+" default, means the lookup is done on hostnames, but not on numeric IP",
+" addresses unless Kerberos support is installed.",
+#ifdef CK_DNS_SRV
+" ",
+"SET TCP DNS-SERVICE-RECORDS {ON, OFF}",
+" Tells Kermit whether to try to use DNS SRV records to determine the",
+" host and port number upon which to find an advertised service. For",
+" example, if a host wants regular Telnet connections redirected to some",
+" port other than 23, this feature allows Kermit to ask the host which",
+" port it should use. Since not all domain servers are set up to answer",
+" such requests, this feature is OFF by default.",
+#endif /* CK_DNS_SRV */
+#ifdef NT
+#ifdef CK_SOCKS
+" ",
+"SET TCP SOCKS-SERVER [<hostname or ip-address>]",
+" If a hostname or ip-address is specified, Kermit will use the SOCKS",
+" server when attempting outgoing connections. If no hostname or",
+" ip-address is specified, any previously specified SOCKS server will",
+" be removed.",
+#endif /* CK_SOCKS */
+#endif /* NT */
+#ifndef NOHTTP
+" ",
+"SET TCP HTTP-PROXY [<hostname or ip-address>[:<port>]]",
+" If a hostname or ip-address is specified, Kermit will use the Proxy",
+" server when attempting outgoing connections. If no hostname or",
+" ip-address is specified, any previously specified Proxy server will",
+" be removed. If no port number is specified, the \"http\" service",
+" will be used.",
+#endif /* NOHTTP */
+""};
+#endif /* NOTCPOPTS */
+#endif /* NETCONN */
+
+#ifdef TNCODE
+static char *hxytopt[] = {
+"SET TELOPT [ { /CLIENT, /SERVER } ] <option> -",
+" { ACCEPTED, REFUSED, REQUESTED, REQUIRED } -",
+" [ { ACCEPTED, REFUSED, REQUESTED, REQUIRED } ]",
+" SET TELOPT lets you specify policy requirements for Kermit's handling of",
+" Telnet option negotiations. Setting an option REQUIRED causes Kermit",
+" to offer the option to the peer and disconnect if the option is refused.",
+" REQUESTED causes Kermit to offer an option to the peer. ACCEPTED results",
+" in no offer but Kermit will attempt to negotiate the option if it is",
+" requested. REFUSED instructs Kermit to refuse the option if it is",
+" requested by the peer.",
+" ",
+" Some options are negotiated in two directions and accept separate policies",
+" for each direction; the first keyword applies to Kermit itself, the second",
+" applies to Kermit's Telnet partner; if the second keyword is omitted, an",
+" appropriate (option-specific) default is applied. You can also include a",
+" /CLIENT or /SERVER switch to indicate whether the given policies apply",
+" when Kermit is the Telnet client or the Telnet server; if no switch is",
+" given, the command applies to the client.",
+" ",
+" Note that some of Kermit's Telnet partners fail to refuse options that",
+" they do not recognize and instead do not respond at all. In this case it",
+" is possible to use SET TELOPT to instruct Kermit to REFUSE the option",
+" before connecting to the problem host, thus skipping the problematic",
+" negotiation.",
+" ",
+" Use SHOW TELOPT to view current Telnet Option negotiation settings.",
+" SHOW TELNET displays current Telnet settings.",
+""};
+
+static char *hxytel[] = {
+"Syntax: SET TELNET parameter value",
+" ",
+"For TCP/IP TELNET connections, which are in NVT (ASCII) mode by default:",
+" ",
+#ifdef CK_AUTHENTICATION
+#ifdef COMMENT
+"SET TELNET AUTHENICATION { ACCEPTED, REFUSED, REQUESTED, REQUIRED }",
+" ACCEPT or REFUSE authentication bids, or actively REQUEST authentication.",
+" REQUIRED refuses the connection if authentication is not successfully",
+" negotiated. ACCEPTED by default.",
+" ",
+#endif /* COMMENT */
+"SET TELNET AUTHENTICATION TYPE { AUTOMATIC, KERBEROS_IV, KERBEROS_V, ...",
+#ifdef NT
+" ..., NTLM, SSL, SRP, NONE } [...]",
+#else /* NT */
+" ..., SSL, SRP, NONE } [...]",
+#endif /* NT */
+" AUTOMATIC is the default. Available options can vary depending on the",
+" features Kermit was built to support and the operating system",
+" configuration; type SET TELNET AUTHENTICATION TYPE ? for a list.",
+" ",
+" When Kermit is the Telnet client:",
+" AUTOMATIC allows the host to choose the preferred type of authentication."
+,
+" NONE instructs Kermit to refuse all authentication methods when the",
+" authentication option is negotiated. A list of one or more other values",
+" allow a specific subset of the supported authentication methods to be",
+" used.",
+" ",
+" When Kermit is the Telnet server:",
+" AUTOMATIC results in available authentication methods being offered",
+" to the telnet client in the following order:",
+" ",
+#ifdef NT
+" KERBEROS_V, KERBEROS_IV, SRP, SSL, NTLM",
+#else /* NT */
+" KERBEROS_V, KERBEROS_IV, SRP, SSL, NTLM",
+#endif /* NT */
+" ",
+" NONE results in no authentication methods being offered to the Telnet",
+" server when the authentication option is negotiated. The preferred",
+" method of disabling authentication is:",
+" ",
+" SET TELOPT /SERVER AUTHENTICATION REFUSE",
+" ",
+" A list of one or more authentication methods specifies the order those",
+" methods are to be offered to the telnet client.",
+#ifdef NT
+" ",
+" If you wish to allow NTLM authentication to be used with the Microsoft",
+" Windows 2000 or Services for Unix Telnet client you must specify a list",
+" with NTLM as the first item in the list. By default, NTLM is the last",
+" item in the list because it does not provide any form of data encryption.",
+#endif /* NT */
+" ",
+#ifdef CK_KERBEROS
+"SET TELNET AUTHENTICATION FORWARDING { ON, OFF }",
+" Set this to ON to forward Kerberos V ticket-granting-tickets to the host",
+" after authentication is complete. OFF by default.",
+" ",
+#endif /* CK_KERBEROS */
+"SET TELNET AUTHENTICATION ENCRYPT-FLAG { ANY, NONE, TELOPT }",
+" Use this command to specify which AUTH telopt encryption flags may be",
+" accepted in client mode or offered in server mode. The default is ANY.",
+" ",
+"SET TELNET AUTHENTICATION HOW-FLAG { ANY, ONE-WAY, MUTUAL }",
+" Use this command to specify which AUTH telopt how flags may be",
+" accepted in client mode or offered in server mode. The default is ANY.",
+" ",
+#endif /* CK_AUTHENTICATION */
+#ifdef COMMENT
+"SET TELNET BINARY-MODE { ACCEPTED, REFUSED, REQUESTED, REQUIRED }",
+" ACCEPT or REFUSE binary-mode bids, or actively REQUEST binary mode.",
+" REQUIRED refuses the connection if binary mode is not successfully",
+" negotiated in both directions. ACCEPTED by default.",
+" ",
+#endif /* COMMENT */
+"SET TELNET BINARY-TRANSFER-MODE { ON, OFF }",
+" When ON (OFF by default) and BINARY negotiations are not REFUSED Kermit",
+" will attempt to negotiate BINARY mode in each direction before the start",
+" of each file transfer. After the transfer is complete BINARY mode will",
+" be restored to the pre-transfer state.",
+" ",
+"SET TELNET BINARY-TRANSFER-MODE { ON, OFF }",
+" Set this command to ON if you want to force Kermit to negotiate",
+" Telnet Binary in both directions when performing file transfers.",
+" Default is OFF. Alias SET TELNET BINARY-XFER-MODE.",
+" ",
+"SET TELNET BUG AUTH-KRB5-DES { ON, OFF }",
+" Default is ON. Disable this bug to enable the use of encryption types",
+" other than DES such as 3DES or CAST-128 when the Kerberos 5 session key",
+" is longer than 8 bytes.",
+" ",
+"SET TELNET BUG BINARY-ME-MEANS-U-TOO { ON, OFF }",
+" Set this to ON to try to overcome TELNET binary-mode misnegotiations by",
+" Kermit's TELNET partner.",
+" ",
+"SET TELNET BUG BINARY-U-MEANS-ME-TOO { ON, OFF }",
+" Set this to ON to try to overcome TELNET binary-mode misnegotiations by",
+" Kermit's TELNET partner.",
+" ",
+"SET TELNET BUG INFINITE-LOOP-CHECK { ON, OFF }",
+" Set this to ON to prevent Kermit from responding to a telnet negotiation",
+" sequence that enters an infinite loop. The default is OFF because this",
+" should never occur.",
+" ",
+"SET TELNET BUG SB-IMPLIES-WILL-DO { ON, OFF }",
+" Set this to ON to allow Kermit to respond to telnet sub-negotiations if",
+" the peer forgets to respond to WILL with DO or to DO with WILL.",
+" ",
+"SET TELNET DEBUG { ON, OFF }",
+" Set this to ON to display telnet negotiations as they are sent and",
+" received.",
+" ",
+"SET TELNET DELAY-SB { ON, OFF }",
+" When ON, telnet subnegotiation responses are delayed until after all",
+" authentication and encryption options are either successfully negotiated",
+" or refused. This ensures that private data is protected. When OFF, telnet",
+" subnegotiation responses are sent immediately. The default is ON.",
+" ",
+"SET TELNET ECHO { LOCAL, REMOTE }",
+" Kermit's initial echoing state for TELNET connections, LOCAL by default.",
+" After the connection is made, TELNET negotiations determine the echoing.",
+" ",
+#ifdef CK_ENCRYPTION
+#ifdef COMMENT
+"SET TELNET ENCRYPTION { ACCEPTED, REFUSED, REQUESTED, REQUIRED }",
+" ACCEPT or REFUSE encryption bids, or actively REQUEST encryption in both.",
+" directions. REQUIRED refuses the connection if encryption is not",
+" successfully negotiated in both directions. ACCEPTED by default.",
+" ",
+#endif /* COMMENT */
+"SET TELNET ENCRYPTION TYPE { AUTOMATIC, CAST128_CFB64, CAST128_OFB64, ",
+" CAST5_40_CFB64, CAST5_40_OFB64, DES_CFB64, DES_OFB64, NONE }",
+" AUTOMATIC allows the host to choose the preferred type of encryption.",
+" Other values allow a specific encryption method to be specified.",
+" AUTOMATIC is the default. The list of options will vary depending",
+" on the encryption types selected at compilation time.",
+" ",
+#endif /* CK_ENCRYPTION */
+#ifdef CK_ENVIRONMENT
+#ifdef COMMENT
+"SET TELNET ENVIRONMENT { ON, OFF, variable-name [ value ] }",
+" This feature lets Kermit send the values of certain environment variables",
+" to the other computer if it asks for them. The variable-name can be any",
+" of the \"well-known\" variables \"USER\", \"JOB\", \"ACCT\", \"PRINTER\",",
+" \"SYSTEMTYPE\", or \"DISPLAY\". Some Telnet servers, if given a USER",
+" value in this way, will accept it and therefore not prompt you for user",
+" name when you log in. The default values are taken from your environment;",
+" use this command to change or remove them. See RFC1572 for details. You",
+" may also specify OFF to disable this feature, and ON to re-enable it.",
+" ",
+#else
+"SET TELNET ENVIRONMENT { variable-name [ value ] }",
+" This feature lets Kermit send the values of certain environment variables",
+" to the other computer if it asks for them. The variable-name can be any",
+" of the \"well-known\" variables \"USER\", \"JOB\", \"ACCT\", \"PRINTER\",",
+" \"SYSTEMTYPE\", or \"DISPLAY\". Some Telnet servers, if given a USER",
+" value in this way, will accept it and therefore not prompt you for user",
+" name when you log in. The default values are taken from your environment;",
+" use this command to change or remove them. See RFC1572 for details.",
+" ",
+#endif /* COMMENT */
+#endif /* CK_ENVIRONMENT */
+#ifdef CK_FORWARD_X
+"SET TELNET FORWARD-X XAUTHORITY-FILE <file>",
+" If your X Server requires X authentication and the location of the",
+" .Xauthority file is not defined by the XAUTHORITY environment variable,",
+" use this command to specify the location of the .Xauthority file."
+" ",
+#endif /* CK_FORWARD_X */
+#ifdef CK_SNDLOC
+"SET TELNET LOCATION [ text ]",
+" Location string to send to the Telnet server if it asks. By default this",
+" is picked up from the LOCATION environment variable. Give this command",
+" with no text to disable this feature.",
+" ",
+#endif /* CK_SNDLOC */
+"SET TELNET NEWLINE-MODE { NVT, BINARY-MODE } { OFF, ON, RAW }",
+
+" Determines how carriage returns are handled on TELNET connections. There",
+" are separate settings for NVT (ASCII) mode and binary mode. ON (default",
+" for NVT mode) means CRLF represents CR. OFF means CR followed by NUL",
+" represents CR. RAW (default for BINARY mode) means CR stands for itself.",
+" ",
+#ifdef TCPSOCKET
+"SET TELNET PROMPT-FOR-USERID <prompt>",
+" Specifies a custom prompt to be used when prompting for a userid. Kermit",
+" prompts for a userid if the command:",
+" ",
+" SET LOGIN USERID {}",
+" ",
+" has been issued prior to a Telnet authentication negotiation for an",
+" authentication type that requires the transmission of a name, such as",
+" Secure Remote Password.",
+" ",
+#endif /* TCPSOCKET */
+"SET TELNET REMOTE-ECHO { ON, OFF }",
+" Applies only to incoming connections created with:",
+" SET HOST * <port> /TELNET",
+" This command determines whether Kermit will actually echo characters",
+" received from the remote when it has negotiated to do so. The default",
+" is ON. Remote echoing may be turned off when it is necessary to read",
+" a password with the INPUT command.",
+" ",
+"SET TELNET TERMINAL-TYPE name",
+" The terminal type to send to the remote TELNET host. If none is given,",
+#ifdef OS2
+" your current SET TERMINAL TYPE value is sent, e.g. VT220.",
+" ",
+#else
+" your local terminal type is sent.",
+" ",
+#endif /* OS2 */
+"SET TELNET WAIT-FOR-NEGOTIATIONS { ON, OFF }",
+" Each Telnet option must be fully negotiated either On or Off before the",
+" session can continue. This is especially true with options that require",
+" subnegotiations such as Authentication, Encryption, and Kermit; for",
+" proper support of these options Kermit must wait for the negotiations to",
+" complete. Of course, Kermit has no way of knowing whether a reply is",
+" delayed or not coming at all, and so will wait a minute or more for",
+" required replies before continuing the session. If you know that Kermit's",
+" Telnet partner will not be sending the required replies, you can set this",
+" option of OFF to avoid the long timeouts. Or you can instruct Kermit to",
+" REFUSE specific options with the SET TELOPT command.",
+"",
+"Type SHOW TELNET to see the current values of these parameters.",
+"" };
+#endif /* TNCODE */
+
+#ifndef NOSPL
+static char *hxymacr[] = {
+"Syntax: SET MACRO parameter value",
+" Controls the behavior of macros.",
+" ",
+"SET MACRO ECHO { ON, OFF }",
+" Tells whether commands executed from a macro definition should be",
+" displayed on the screen. OFF by default; use ON for debugging.",
+" ",
+"SET MACRO ERROR { ON, OFF }",
+" Tells whether a macro should be automatically terminated upon a command",
+" error. This setting is local to the current macro, and inherited by",
+" subordinate macros.",
+"" };
+#endif /* NOSPL */
+
+static char *hmxyprm[] = {
+"Syntax: SET PROMPT [ text ]",
+" ",
+#ifdef OS2
+"Prompt text for this program, normally 'K-95>'. May contain backslash",
+#else
+#ifdef MAC
+"Prompt text for this program, normally 'Mac-Kermit>'. May contain backslash",
+#else
+"Prompt text for this program, normally 'C-Kermit>'. May contain backslash",
+#endif /* MAC */
+#endif /* OS2 */
+"codes for special effects. Surround by { } to preserve leading or trailing",
+#ifdef OS2
+"spaces. If text omitted, prompt reverts to K-95>. Prompt can include",
+#else
+#ifdef MAC
+"spaces. If text omitted, prompt reverts to Mac-Kermit>. Prompt can include",
+#else
+"spaces. If text omitted, prompt reverts to C-Kermit>. Prompt can include",
+#endif /* OS2 */
+#endif /* MAC */
+"variables like \\v(dir) or \\v(time) to show current directory or time.",
+"" };
+
+#ifdef UNIX
+static char *hxywild[] = {
+"Syntax: SET WILDCARD-EXPANSION { KERMIT [ switch ], SHELL }",
+" KERMIT (the default) means C-Kermit expands filename wildcards in SEND and",
+" similar commands itself, and in incoming GET commands. Optional switches",
+" are /NO-MATCH-DOT-FILES (\"*\" and \"?\" should not match in initial",
+" period in a filename; this is the default) and /MATCH-DOT-FILES if you",
+" want files whose names begin with \".\" included. SET WILDCARD SHELL",
+" means that Kermit asks your preferred shell to expand wildcards (this",
+" should not be necessary in C-Kermit 7.0 and later). HELP WILDCARD for",
+" further information.",
+"" };
+#endif /* UNIX */
+
+#ifndef NOXFER
+static char *hxywind[] = {
+"Syntax: SET WINDOW-SIZE number",
+" Specifies number of slots for sliding windows, i.e. the number of packets",
+" that can be transmitted before waiting for acknowledgement. The default",
+#ifdef XYZ_INTERNAL
+" for Kermit protocol is one, the maximum is 32; for ZMODEM, the default",
+" is no windowing (0). For ZMODEM, the window size is really the packet",
+" length, and is used only when non-windowed (streaming) transfers fail; the",
+" ZMODEM window size should be a largish number, like 1024, and it should be",
+" a multiple of 64.",
+#else
+" is one, the maximum is 32. Increased window size might result in reduced",
+" maximum packet length. Use sliding windows for improved efficiency on",
+" connections with long delays. A full duplex connection is required, as",
+" well as a cooperating Kermit on the other end.",
+#endif /* XYZ_INTERNAL */
+"" };
+
+static char *hxyrpt[] = {
+"Syntax: SET REPEAT { COUNTS { ON, OFF }, PREFIX <code> }",
+" SET REPEAT COUNTS turns the repeat-count compression mechanism ON and OFF.",
+" The default is ON. SET REPEAT PREFIX <code> sets the repeat-count prefix",
+" character to the given code. The default is 126 (tilde).",
+"" };
+
+static char *hxyrcv[] = {
+"Syntax: SET RECEIVE parameter value",
+" Specifies parameters for inbound packets:",
+" ",
+#ifndef NOCSETS
+"SET RECEIVE CHARACTER-SET { AUTOMATIC, MANUAL }",
+" Whether to automatically switch to an appropriate file-character set based",
+" on the transfer character-set announcer, if any, of an incoming text file.",
+" AUTOMATIC by default. Also see HELP ASSOCIATE.",
+" ",
+#endif /* NOCSETS */
+"SET RECEIVE CONTROL-PREFIX number",
+" ASCII value of prefix character used for quoting control characters in",
+" packets that Kermit receives, normally 35 (number sign). Don't change",
+" this unless something is wrong with the other Kermit program.",
+" ",
+"SET RECEIVE END-OF-PACKET number",
+" ASCII value of control character that terminates incoming packets,",
+" normally 13 (carriage return).",
+" ",
+#ifdef CKXXCHAR
+"SET RECEIVE IGNORE-CHARACTER number",
+" ASCII value of character to be discarded when receiving packets, such as",
+" line folding characters.",
+" ",
+#endif /* CKXXCHAR */
+"SET RECEIVE MOVE-TO [ directory ]",
+" If a directory name is specified, then every file that is received",
+" successfully is moved to the given directory immediately after reception",
+" is complete. Omit the directory name to remove any previously set move-to",
+" directory.",
+" ",
+"SET RECEIVE PACKET-LENGTH number",
+" Maximum length packet the other Kermit should send.",
+" ",
+"SET RECEIVE PADDING number",
+" Number of prepacket padding characters to ask for (normally 0).",
+" ",
+"SET RECEIVE PAD-CHARACTER number",
+" ASCII value of control character to use for padding (normally 0).",
+" ",
+"SET RECEIVE PATHNAMES {OFF, ABSOLUTE, RELATIVE, AUTO}",
+" If a recognizable path (directory, device) specification appears in an",
+" incoming filename, strip it OFF before trying to create the output file.",
+#ifdef CK_MKDIR
+" Otherwise, then if any of the directories in the path don't exist, Kermit",
+" tries to create them, relative to your current or download directory, or",
+" absolutely, as specified. RELATIVE means force all incoming names, even",
+" if they are absolute, to be relative to your current or download directory."
+,
+" AUTO, which is the default, means RELATIVE if the file sender indicates in",
+" advance that this is a recursive transfer, otherwise OFF.",
+#endif /* CK_MKDIR */
+" ",
+"SET RECEIVE PAUSE number",
+" Milliseconds to pause between packets, normally 0.",
+" ",
+
+#ifdef CK_PERMS
+"SET RECEIVE PERMISSIONS { ON, OFF }",
+" Whether to copy file permissions from inbound Attribute packets.",
+" ",
+#endif /* CK_PERMS */
+
+"SET RECEIVE RENAME-TO [ template ]",
+" If a template is specified, then every file that is received successfully",
+" \
+is renamed according to the given template immediately after it is received.",
+" \
+The template should include variables like \\v(filename) or \\v(filenumber).",
+" Omit the template to remove any template previously set.",
+" ",
+"SET RECEIVE START-OF-PACKET number",
+" ASCII value of character that marks start of inbound packet.",
+" ",
+"SET RECEIVE TIMEOUT number",
+" Number of seconds the other Kermit should wait for a packet before sending",
+" a NAK or retransmitting.",
+#ifdef VMS
+" ",
+"SET RECEIVE VERSION-NUMBERS { ON, OFF }",
+" If ON, and in incoming filename includes a VMS version number, use it when",
+" creating the file. If OFF (which is the default), strip any VMS version",
+" number from incoming filenames before attempting to create the file, \
+causing",
+" the new file to receive the next highest version number.",
+#endif /* VMS */
+"" };
+
+static char *hxysnd[] = {
+"Syntax: SET SEND parameter value",
+" Specifies parameters for outbound files or packets.",
+" ",
+"SET SEND BACKUP { ON, OFF }",
+" Tells whether to include backup files when sending file groups. Backup",
+" files are those created by Kermit, EMACS, etc, when creating a new file",
+" that has the same name as an existing file. A backup file has a version",
+" appended to its name, e.g. oofa.txt.~23~. ON is the default, meaning",
+" don't exclude backup files. Use OFF to exclude backup files from group",
+" transfers.",
+" ",
+#ifndef NOCSETS
+"SET SEND CHARACTER-SET { AUTOMATIC, MANUAL }",
+" Whether to automatically switch to an appropriate file-character when a",
+" SET TRANSFER CHARACTER-SET command is given, or vice versa. AUTOMATIC by",
+" default. Also see HELP ASSOCIATE.",
+" ",
+#endif /* NOCSETS */
+
+"SET SEND CONTROL-PREFIX number",
+" ASCII value of prefix character used for quoting control characters in",
+" packets that Kermit sends, normally 35 (number sign).",
+" ",
+#ifdef CKXXCHAR
+"SET SEND DOUBLE-CHARACTER number",
+" ASCII value of character to be doubled when sending packets, such as an",
+" X.25 PAD escape character.",
+" ",
+#endif /* CKXXCHAR */
+"SET SEND END-OF-PACKET number",
+" ASCII value of control character to terminate an outbound packet,",
+" normally 13 (carriage return).",
+" ",
+"SET SEND MOVE-TO [ directory ]",
+" \
+If a directory name is specified, then every file that is sent successfully",
+" is moved to the given directory immediately after it is sent.",
+" Omit the directory name to remove any previously set move-to directory.",
+" ",
+"SET SEND PACKET-LENGTH number",
+" Maximum length packet to send, even if other Kermit asks for longer ones.",
+" This command can not be used to force packets to be sent that are longer",
+" than the length requested by the receiver. Use this command only to",
+" force shorter ones.",
+" ",
+"SET SEND PADDING number",
+" Number of prepacket padding characters to send.",
+" ",
+"SET SEND PAD-CHARACTER number",
+" ASCII value of control character to use for padding.",
+" ",
+"SET SEND PATHNAMES {OFF, ABSOLUTE, RELATIVE}",
+" Include the path (device, directory) portion with the file name when",
+" sending it as specified; ABSOLUTE means to send the whole pathname,",
+" RELATIVE means to include the pathname relative to the current directory.",
+" Applies to the actual filename, not to the \"as-name\". The default is",
+" OFF.",
+" ",
+"SET SEND PAUSE number",
+" Milliseconds to pause between packets, normally 0.",
+" ",
+
+#ifdef CK_PERMS
+"SET SEND PERMISSIONS { ON, OFF }",
+" Whether to include file permissions in outbound Attribute packets.",
+" ",
+#endif /* CK_PERMS */
+
+"SET SEND RENAME-TO [ template ]",
+" If a template is specified, then every file that is sent successfully",
+" is renamed according to the given template immediately after it is sent.",
+" \
+The template should include variables like \\v(filename) or \\v(filenumber).",
+" Omit the template to remove any template previously set.",
+" ",
+"SET SEND START-OF-PACKET number",
+" ASCII value of character to mark start of outbound packet.",
+" ",
+#ifdef CK_TIMERS
+"SET SEND TIMEOUT number [ { DYNAMIC [ min max ] ], FIXED } ]",
+#else
+"SET SEND TIMEOUT number",
+#endif /* CK_TIMERS */
+
+" Number of seconds to wait for a packet before sending NAK or",
+#ifdef CK_TIMERS
+" retransmitting. Include the word DYNAMIC after the number in the",
+" SET SEND TIMEOUT command to have Kermit compute the timeouts dynamically",
+" throughout the transfer based on the packet rate. Include the word FIXED",
+" to use the \"number\" given throughout the transfer. DYNAMIC is the",
+" default. After DYNAMIC you may include minimum and maximum values.",
+#else
+" retransmitting.",
+#endif /* CK_TIMERS */
+#ifdef VMS
+" ",
+"SET SEND VERSION-NUMBERS { ON, OFF }",
+" If ON, include VMS version numbers in outbound filenames. If OFF (which",
+" is the default), strip version numbers.",
+#endif /* VMS */
+"" };
+
+static char *hxyxfer[] = {
+"Syntax: SET TRANSFER (or XFER) paramater value",
+" ",
+"Choices:",
+" ",
+"SET TRANSFER BELL { OFF, ON }",
+" Whether to ring the terminal bell at the end of a file transfer.",
+" ",
+#ifdef XFRCAN
+"SET TRANSFER CANCELLATION { OFF, ON [ <code> [ <number> ] ] }",
+" OFF disables remote-mode packet-mode cancellation from the keyboard.",
+" ON enables it. The optional <code> is the control character to use for",
+" cancellation; the optional <number> is how many consecutive occurrences",
+" of the given control character are required for cancellation.",
+" ",
+#endif /* XFRCAN */
+"SET TRANSFER INTERRUPTION { ON, OFF }",
+" TRANSFER INTERRUPTION is normally ON, allowing for interruption of a file",
+" transfer in progress by typing certain characters while the file-transfer",
+" display is active. SET TRANSFER INTERRUPTION OFF disables interruption",
+" of file transfer from the keyboard in local mode.",
+" ",
+#ifndef NOSPL
+"SET TRANSFER CRC-CALCULATION { OFF, ON }",
+" Tells whether Kermit should accumulate a Cyclic Redundancy Check for ",
+" each file transfer. Normally ON, in which case the CRC value is available",
+" in the \\v(crc16) variable after the transfer. Adds some overhead. Use",
+" SET TRANSFER CRC OFF to disable.",
+" ",
+#endif /* NOSPL */
+#ifndef NOCSETS
+"SET TRANSFER CHARACTER-SET name",
+" Selects the character set used to represent textual data in Kermit",
+" packets. Text characters are translated to/from the FILE CHARACTER-SET.",
+" Choices:",
+" ",
+" TRANSPARENT (no translation, the default)",
+" ASCII",
+" LATIN1 (ISO 8859-1 Latin Alphabet 1)",
+#ifndef NOLATIN2
+" LATIN2 (ISO 8859-2 Latin Alphabet 2)",
+#endif /* NOLATIN2 */
+" LATIN9 (ISO 8859-15 Latin Alphabet 9)",
+#ifdef CYRILLIC
+" CYRILLIC-ISO (ISO 8859-5 Latin/Cyrillic)",
+#endif /* CYRILLIC */
+#ifdef GREEK
+" GREEK-ISO (ISO 8859-7 Latin/Greek)",
+#endif /* GREEK */
+#ifdef HEBREW
+" HEBREW-ISO (ISO 8859-8 Latin/Hebrew)",
+#endif /* HEBREW */
+#ifdef KANJI
+" JAPANESE-EUC (JIS X 0208 Kanji + Roman and Katakana)",
+#endif /* KANJI */
+#ifdef UNICODE
+" UCS-2 (ISO 10646 / Unicode 2-byte form)",
+" UTF-8 (ISO 10646 / Unicode 8-bit serialized transformation format)",
+#endif /* UNICODE */
+" ",
+"SET TRANSFER TRANSLATION { ON, OFF }",
+" Enables and disables file-transfer character-set translation. It's",
+" enabled by default.",
+#endif /* NOCSETS */
+" ",
+#ifdef CK_CURSES
+"SET TRANSFER DISPLAY { BRIEF, CRT, FULLSCREEN, NONE, SERIAL }",
+#else
+"SET TRANSFER DISPLAY { BRIEF, CRT, NONE, SERIAL }",
+#endif /* CK_CURSES */
+" Choose the desired format for the progress report to be displayed on",
+" your screen during file transfers when Kermit is in local mode.",
+#ifdef CK_CURSES
+" FULLSCREEN requires your terminal type be set correctly; the others",
+" are independent of terminal type.",
+#else
+" file transfer.",
+#endif /* CK_CURSES */
+" ",
+"SET TRANSFER LOCKING-SHIFT { OFF, ON, FORCED }",
+" Tell whether locking-shift protocol should be used during file transfer",
+" to achieve 8-bit transparency on a 7-bit connection. ON means to request",
+" its use if PARITY is not NONE and to use it if the other Kermit agrees,",
+" OFF means not to use it, FORCED means to use it even if the other Kermit",
+" does not agree.",
+" ",
+"SET TRANSFER MODE { AUTOMATIC, MANUAL }",
+" Automatic (the default) means Kermit should automatically go into binary",
+" file-transfer mode and use literal filenames if the other Kermit says it",
+" has a compatible file system, e.g. UNIX-to-UNIX, but not UNIX-to-DOS.",
+#ifdef PATTERNS
+" Also, when sending files, Kermit should switch between binary and text",
+" mode automatically per file based on the SET FILE BINARY-PATTERNS and SET",
+" FILE TEXT-PATTERNS.",
+#endif /* PATTERNS */
+" ",
+#ifdef PIPESEND
+"SET TRANSFER PIPES { ON, OFF }",
+" Enables/Disables automatic sending from / reception to command pipes when",
+" the incoming filename starts with '!'. Also see CSEND, CRECEIVE.",
+" ",
+#endif /* PIPESEND */
+#ifdef CK_XYZ
+"SET TRANSFER PROTOCOL { KERMIT, XMODEM, ... }",
+" Synonym for SET PROTOCOL (q.v.).",
+" ",
+#endif /* CK_XYZ */
+"SET TRANSFER REPORT { ON, OFF }",
+" Enables/Disables the automatic post-transfer message telling what files",
+" went where from C-Kermit when it is in remote mode. ON by default.",
+" ",
+"SET TRANSFER SLOW-START { OFF, ON }",
+" ON (the default) tells Kermit, when sending files, to gradually build up",
+" the packet length to the maximum negotiated length. OFF means start",
+" sending the maximum length right away.",
+" ",
+"Synonym: SET XFER. Use SHOW TRANSFER (XFER) to see SET TRANSFER values.",
+"" };
+#endif /* NOXFER */
+
+#ifdef NT
+static char *hxywin95[] = {
+"SET WIN95 8.3-FILENAMES { ON, OFF }",
+" Instructs K-95 to report all filenames using 8.3 notation instead of the",
+" normal long filenames. Default is OFF",
+" ",
+"SET WIN95 ALT-GR { ON, OFF }",
+" Instructs K-95, when used on MS Windows 95, to interpret the Right Alt key",
+" as the Alt-Gr key. This is necessary to work around the failure of",
+" Windows 95 to properly translate non-US keyboards. Default is OFF.",
+" ",
+"SET WIN95 KEYBOARD-TRANSLATION <character-set>",
+" Specifies the character-set that Windows 95 is using to send keystrokes",
+" to Kermit-95 via the keyboard input functions. Default is Latin1-ISO.",
+" ",
+"SET WIN95 OVERLAPPED-IO { ON <requests>, OFF }",
+" Determines whether or not K-95 uses Overlapped-I/O methods for reading",
+" from and writing to serial and TAPI communication devices. <requests>",
+" specifies the maximum number of simultaneous write requests that may be",
+" overlapped, from 1 to 30. Default is ON.",
+" ",
+"SET WIN95 POPUPS { ON, OFF }",
+" Determines whether or not Kermit 95 uses Popups to query the user for",
+" necessary information such as user IDs or passwords. Default is ON.",
+" ",
+"SET WIN95 SELECT-BUG { ON, OFF }"
+" Some TCP/IP (Winsock) implementations for Windows have a defective",
+" select() function. Use this command to avoid the use of select() if",
+" K95 appears to be unable to send data over TCP/IP. Default is OFF.",
+""};
+#endif /* NT */
+
+static char *hmxybel[] = {
+#ifdef OS2
+"Syntax: SET BELL { AUDIBLE [ { BEEP, SYSTEM-SOUNDS } ], VISIBLE, NONE }",
+" Specifies how incoming Ctrl-G (bell) characters are handled in CONNECT",
+" mode and how command warnings are presented in command mode. AUDIBLE",
+" means either a beep or a system-sound is generated; VISIBLE means the",
+" screen is flashed momentarily.",
+#else
+"Syntax: SET BELL { OFF, ON }",
+" ON (the default) enables ringing of the terminal bell (beep) except where",
+" it is disabled in certain circumstances, e.g. by SET TRANSFER BELL. OFF",
+" disables ringing of the bell in all circumstances, overriding any specific",
+" SET xxx BELL selections.",
+#endif /* OS2 */
+""};
+
+static char *hmxycd[] = {
+"Syntax: SET CD { HOME <path>, PATH <path>, MESSAGE { ON, OFF, FILE <list> } }"
+,
+" ",
+"SET CD HOME <path>",
+" Specified which directory to change to if CD or KCD is given without a",
+" pathname. If this command is not given, your login or HOME directory is",
+" used.",
+" ",
+"SET CD PATH <path>",
+" Overrides normal CDPATH environment variable, which tells the CD command",
+" where to look for directories to CD to if you don't specify them fully.",
+" The format is:",
+" ",
+#ifdef UNIXOROSK
+" set cd path :directory:directory:...",
+" ",
+" in other words, a list of directories separated by colons, with a colon",
+" at the beginning, e.g.:",
+" ",
+" set cd path :/usr/olga:/usr/ivan/public:/tmp",
+#else
+#ifdef OS2
+" set cd path disk:directory;disk:directory;...",
+" ",
+" just like the DOS PATH; in other words, a list of disk:directory names",
+" separated by semicolons, e.g.:",
+" ",
+" SET CD PATH C:\\K95;C:\\HOME;C:\\LOCAL;C:\\",
+#else
+#ifdef VMS
+" set cd path directory,directory,...",
+" ",
+" in other words, a list of directory specifications or logical names that",
+" represent them, e.g.:",
+" ",
+" SET CD PATH SYS$LOGIN:,$DISK1:[OLGA],$DISK2[SCRATCH.IVAN].",
+#else
+" (unknown for this platform)",
+#endif /* VMS */
+#endif /* OS2 */
+#endif /* UNIXOROSK */
+" ",
+"SET CD MESSAGE { ON, OFF }",
+" Default is OFF. When ON, this tells Kermit to look for a file with a",
+" certain name in any directory that you CD to, and if it finds one, to",
+" display it on your screen when you give the CD command. The filename,",
+" or list of names, is given in the SET CD MESSAGE FILE command.",
+" ",
+"SET CD MESSAGE FILE name",
+" or:",
+"SET CD MESSAGE FILE {{name1}{name2}...{name8}}",
+" Specify up to 8 filenames to look for when when CDing to a new directory",
+" and CD MESSAGE is ON. The first one found, if any, in the new directory",
+#ifndef DFCDMSG
+" is displayed.",
+#else
+" is displayed. The default list is:",
+" ",
+#ifdef UNIXOROSK
+" {{./.readme}{README.TXT}{READ.ME}}",
+#else
+" {{README.TXT}{READ.ME}}",
+#endif /* UNIXOROSK */
+" ",
+#endif /* DFCDMSG */
+#ifndef NOSERVER
+"Synonym: SET SERVER CD-MESSAGE FILE.",
+#endif /* NOSERVER */
+" ",
+"Type SHOW CD to view current CD settings. Also see HELP SET SERVER.",
+""
+};
+
+#ifndef NOIKSD
+static char * hsetiks[] = {
+#ifdef OS2
+"SET IKS ANONYMOUS ACCOUNT <username>",
+" On Windows NT/2000 this is the account that will be used to allow",
+" anonymous access to the system. This account MUST have no password",
+" and its privileges should be restricted to only allow those operations",
+" which should be permitted to unknown users. In practice this means",
+" List Directories and Read-Execute privileges only. If a directory",
+" is configured for Write privileges then Read privileges should be",
+" denied for that directory. Otherwise, your system will become used",
+" by software pirates. If this command is not specified in the IKSD.KSC",
+" file the username \"GUEST\" is used by default. This command has no",
+" effect on Windows 95/98.",
+" ",
+#endif /* OS2 */
+"SET IKS ANONYMOUS INITFILE filename",
+#ifdef OS2
+" The initialization file to be executed for anonymous logins. By default",
+" it is K95.INI in the home directory associated with the ANNONYMOUS account."
+,
+" Any filename that you specify here must be readable by the ANONYMOUS",
+" account and if a SET IKS ANONYMOUS ROOT command was given, exist within",
+" the restricted directory tree. This option is independent of the SET IKS",
+" INITFILE command which applies only to real users.",
+#else
+" The initialization file to be executed for anonymous logins. By default",
+" it is .kermrc in the anonymous root directory. This option is independent",
+" of the SET IKS INITFILE command which applies only to real users.",
+#endif /* OS2 */
+" ",
+"SET IKS ANONYMOUS LOGIN { ON, OFF }",
+#ifdef OS2
+" Whether anonymous logins are allowed. By default they are NOT allowed,",
+" so this option need be included only to allow them (or for clarity, to",
+" emphasize that they are not allowed). Anonymous login occurs when the",
+" username \"anonymous\" is specified with any password (as with ftpd).",
+" In order for anonymous logins to succeed on Windows NT/2000, the",
+" ANONYMOUS account must be enabled.",
+" ",
+" On Windows NT and 2000, anonymous users have the same access rights as",
+" the ANONYMOUS account. In Windows 95/98, anonymous users, just like any",
+" other users, have full access rights to your entire PC, since Windows 95",
+" and 98 include no security features. For this reason, if you are allowing",
+" anonymous logins, be sure to also SET an IKS ANONYMOUS ROOT directory to",
+" restrict anonymous users' file access.",
+" ",
+" Anonymous user permissions may be restricted via the specification of ",
+" DISABLE commands in the ANONYMOUS initfile. Anonymous users are not ",
+" permitted to execute an ENABLE command. Anonymous users are also prevented"
+,
+" from SHOWing sensitive data about the operating system or the IKS",
+" configuration.",
+#else
+" Whether anonymous logins are allowed. By default they are allowed, so this",
+" option need be included only to disallow them (or for clarity, to emphasize"
+,
+" they are allowed). Anonymous login occurs when the username \"anonymous\"",
+" or \"ftp\" is given, with any password (as with ftpd).",
+#endif /* OS2 */
+" ",
+"SET IKS ANONYMOUS ROOT <directory>",
+" Specifies a directory tree to which anonymous users are restricted after",
+" login.",
+" ",
+"SET IKS BANNERFILE <filename>",
+" The name of a file containing a message to be printed after the user logs",
+" in, in place of the normal message (copyright notice, \"Type HELP or ? for",
+" help\", etc).",
+" ",
+"SET IKS CDFILE <filelist>",
+" When cdmessage is on, this is the name of the \"read me\" file to be shown."
+,
+" Normally you would specify a relative (not absolute) name, since the file",
+" is opened using the literal name you specified, after changing to the new",
+" directory. Example:",
+" ",
+" SET IKS CDFILE READ.ME",
+" ",
+" You can also give a list of up to 8 filenames by (a) enclosing each",
+" filename in braces, and (b) enclosing the entire list in braces. Example:",
+" ",
+" SET IKS CDFILE {{READ.ME}{aareadme.txt}{README}{read-this-first}}",
+" ",
+" When a list is given, it is searched from left to right and the first",
+" file found is displayed.",
+" ",
+"SET IKS CDMESSAGE {ON, OFF, 0, 1, 2}",
+" For use in the Server-Side Server configuration; whenever the client",
+" tells the server to change directory, the server sends the contents of a",
+" \"read me\" file to the client's screen. This feature is ON by default,",
+" and operates in client/server mode only when ON or 1. If set to 2 or",
+" higher, it also operates when the CD command is given at the IKSD> prompt.",
+" Synonym: SET IKS CDMSG.",
+" ",
+"SET IKS DATABASE { ON, OFF }",
+" This command determines whether entries are inserted into the SET IKS",
+" DBFILE (IKSD active sessions database).",
+" ",
+"SET IKS DBFILE <filename>",
+" Specifies the file which should be used for storing runtime status",
+#ifdef OS2
+" information about active connections. The default is a file called",
+" \"iksd.db\" in the WINDOWS directory.",
+#else
+#ifdef UNIX
+" information about active connections. The default is a file called",
+" \"iksd.db\" in the /var/log directory.",
+#else
+" information about active connections.",
+#endif /* UNIX */
+#endif /* OS2 */
+" ",
+#ifdef OS2
+"SET IKS DEFAULT-DOMAIN <domain-name>",
+" A userid on Windows is of the form DOMAIN\\\\userid. This command",
+" determines which domain will be searched for the userid if a domain",
+" is not specified by the user. On Windows 95/98 when User-level",
+" access is activated in the Network Control Panel, the default ",
+" domain will be automatically set. If the default domain is not",
+" specified, accounts on the local machine will take precedence over",
+" accounts in Domains to which the local machine belongs.",
+#endif /* OS2 */
+" ",
+"SET IKS HELPFILE <filename>",
+" Specifies the name of a file to be displayed if the user types HELP",
+" (not followed by a specific command or topic), in place of the built-in",
+" top-level help text. The file need not fit on one screen; more-prompting",
+" is used if the file is more than one screen long if COMMAND MORE-PROMPTING",
+" is ON, as it is by default.",
+" ",
+"SET IKS INITFILE <filename>",
+" Execute <filename> rather than the normal initialization file for real",
+" users; this option does not apply to anonymous users.",
+" ",
+"SET IKS NO-INITFILE { ON, OFF }",
+" Do not execute an initialization file, even if a real user is logging in.",
+" ",
+"SET IKS SERVER-ONLY { ON, OFF }",
+" If this option is included on the IKSD command line, the Client Side Server"
+,
+" configuration is disabled, and the user will not get a Username: or",
+" Password: prompt, and will not be able to access the IKSD command prompt.",
+" A FINISH command sent to the IKSD will log it out and close the",
+" connection, rather than returning it to its prompt.",
+" ",
+"SET IKS TIMEOUT <number>",
+" This sets a limit (in seconds) on the amount of time the client has to log",
+" in once the connection is made. If successful login does not occur within",
+" the given number of seconds, the connection is closed. The default timeout"
+,
+" is 300 seconds (5 minutes). A value of 0 or less indicates there is to be",
+" no limit.",
+" ",
+"SET IKS USERFILE <filename>",
+#ifdef UNIX
+" This file contains a list of local usernames that are to be denied access",
+" to Internet Kermit Service. The default is /etc/ftpusers. This can be the"
+,
+" same file that is used by wuftpd, and the syntax is the same: one username",
+" per line; lines starting with \"#\" are ignored. Use this option to",
+" specify the name of a different forbidden-user file, or use",
+" \"set iks userfile /dev/null\" to disable this feature in case there is a",
+" /etc/ftpusers file but you don't want to use it.",
+#else
+" This file contains a list of local usernames that are to be denied access",
+" to Internet Kermit Service. The syntax is: one username per line; lines",
+" starting with \"#\" are ignored.",
+#endif /* UNIX */
+" ",
+"SET IKS XFERLOG { ON, OFF }",
+#ifdef UNIX
+" Whether a file-transfer log should be kept. Off by default. If \"on\",",
+" but no SET IKSD XFERFILE command is given, /var/log/iksd.log is used.",
+#else
+" Whether a file-transfer log should be kept. Off by default.",
+#endif /* UNIX */
+" ",
+"SET IKS XFERFILE <filename>",
+" Use this option to specify an iksd log file name. If you include this",
+" option, it implies SET IKS XFERFILE ON.",
+""
+};
+#endif /* NOIKSD */
+
+/* D O H S E T -- Give help for SET command */
+
+int
+dohset(xx) int xx; {
+ int x;
+
+ if (xx == -3) return(hmsga(hmhset));
+ if (xx < 0) return(xx);
+
+#ifdef NEWFTP
+ if (xx == XYFTPX)
+ return(dosetftphlp());
+ if (xx == XYGPR)
+ return(hmsga(hmxygpr));
+#endif /* NEWFTP */
+
+ if ((x = cmcfm()) < 0) return(x);
+ switch (xx) {
+#ifndef NOIKSD
+ case XYIKS:
+ return(hmsga(hsetiks));
+#endif /* NOIKSD */
+
+case XYATTR:
+ return(hmsga(hsetat));
+
+case XYBACK:
+ return(hmsga(hsetbkg));
+
+case XYBELL:
+ return(hmsga(hmxybel));
+
+#ifdef OS2
+case XYPRTY:
+ return(hmsg("SET PRIORITY { REGULAR, FOREGROUND-SERVER, TIME-CRITICAL }\n\
+ Specifies at which priority level the communication and screen update\n\
+ threads should operate. The default value is FOREGROUND-SERVER."));
+#endif /* OS2 */
+
+#ifdef DYNAMIC
+case XYBUF:
+ return(hmsga(hsetbuf));
+#endif /* DYNAMIC */
+
+#ifndef NOLOCAL
+case XYCARR:
+ return(hmsga(hsetcar));
+#endif /* NOLOCAL */
+
+#ifndef NOSPL
+case XYCASE:
+ return(hmsg("Syntax: SET CASE { ON, OFF }\n\
+ Tells whether alphabetic case is significant in string comparisons\n\
+ done by INPUT, IF, and other commands. This setting is local to the\n\
+ current macro or command file, and inherited by subordinates."));
+
+#endif /* NOSPL */
+
+case XYCMD:
+ return(hmsga(hsetcmd));
+
+case XYIFD:
+ return(hmsg("Syntax: SET INCOMPLETE { DISCARD, KEEP }\n\
+ Whether to discard or keep incompletely received files, default is KEEP."));
+
+#ifndef NOSPL
+case XYINPU:
+ return(hmsga(hxyinp));
+#endif /* NOSPL */
+
+case XYCHKT:
+ return(hmsga(hmxychkt));
+
+#ifndef NOSPL
+case XYCOUN:
+ return(hmsg("Syntax: SET COUNT number\n\
+ Example: SET COUNT 5\n\
+ Set up a loop counter, for use with IF COUNT. Local to current macro\n\
+ or command file, inherited by subordinate macros and command files."));
+#endif /* NOSPL */
+
+case XYDEBU:
+ return(hmsga(hmxydeb));
+
+case XYDFLT:
+ return(hmsg("Syntax: SET DEFAULT directory\n\
+ Change directory. Equivalent to CD command."));
+
+case XYDELA:
+ return(hmsg("Syntax: SET DELAY number\n\
+ Number of seconds to wait before sending first packet after SEND command."));
+
+#ifndef NODIAL
+case XYDIAL:
+ return(hmsga(hmxydial));
+#endif /* NODIAL */
+
+#ifdef UNIX
+case XYSUSP:
+ return(hmsg("Syntax: SET SUSPEND { OFF, ON }\n\
+ Disables SUSPEND command, suspend signals, and <esc-char>Z during CONNECT.")
+ );
+#endif
+
+#ifndef NOSCRIPT
+case XYSCRI:
+ return(hmsg("Syntax: SET SCRIPT ECHO { OFF, ON }\n\
+ Disables/Enables echoing of SCRIPT command operation."));
+#endif /* NOSCRIPT */
+
+case XYTAKE:
+ return(hmsga(hxytak));
+
+#ifndef NOLOCAL
+case XYTERM:
+ return(hmsga(hxyterm));
+
+case XYDUPL:
+ return(hmsg("Syntax: SET DUPLEX { FULL, HALF }\n\
+ During CONNECT: FULL means remote host echoes, HALF means Kermit\n\
+ does its own echoing."));
+
+case XYLCLE:
+ return(hmsg("Syntax: SET LOCAL-ECHO { OFF, ON }\n\
+ During CONNECT: OFF means remote host echoes, ON means Kermit\n\
+ does its own echoing. Synonym for SET DUPLEX { FULL, HALF }."));
+
+case XYESC:
+ return(hmsga(hxyesc)); /* SET ESCAPE */
+#endif /* NOLOCAL */
+
+case XYPRTR: /* SET PRINTER */
+ return(hmsga(hxyprtr));
+
+#ifdef OS2
+#ifdef BPRINT
+case XYBDCP: /* SET BPRINTER */
+ return(hmsga(hxybprtr));
+#endif /* BPRINT */
+#endif /* OS2 */
+
+case XYEXIT:
+ return(hmsga(hxyexit));
+
+case XYFILE:
+ return(hmsga(hmxyf));
+
+case XYFLOW:
+ return(hmsga(hmxyflo));
+
+case XYHAND:
+ return(hmsga(hmxyhsh));
+
+#ifdef NETCONN
+
+case XYHOST:
+ return(hmsga(hxyhost));
+
+case XYNET:
+ return(hmsga(hxynet));
+
+#ifndef NOTCPOPTS
+#ifdef SOL_SOCKET
+case XYTCP:
+ return(hmsga(hxytcp));
+#endif /* SOL_SOCKET */
+#endif /* NOTCPOPTS */
+
+#ifdef ANYX25
+case XYX25:
+ return(hmsga(hxyx25));
+
+#ifndef IBMX25
+case XYPAD:
+ return(hmsg("Syntax: SET PAD name value\n\
+Set a PAD X.3 parameter with a desired value."));
+#endif /* IBMX25 */
+#endif /* ANYX25 */
+#endif /* NETCONN */
+
+#ifndef NOSPL
+case XYOUTP:
+ return(hmsga(hxyout));
+#endif /* NOSPL */
+
+#ifndef NOSETKEY
+case XYKEY: /* SET KEY */
+ return(hmsga(hmhskey));
+#endif /* NOSETKEY */
+
+#ifndef NOCSETS
+case XYLANG:
+ return(hmsg("Syntax: SET LANGUAGE name\n\
+ Selects language-specific translation rules for text-mode file transfers.\n\
+ Used with SET FILE CHARACTER-SET and SET TRANSFER CHARACTER-SET when one\n\
+ of these is ASCII."));
+#endif /* NOCSETS */
+
+case XYLINE:
+ printf("\nSyntax: SET LINE (or SET PORT) [ switches ] [ devicename ]\n\
+ Selects a serial-port device to use for making connections.\n");
+#ifdef OS2
+#ifdef NT
+ printf("\n");
+ printf(
+" You may access communication ports by the traditional \"DOS\" port name\n");
+ printf(
+" (e.g. SET PORT COM1) or by the Microsoft Telephony modem name from the\n");
+ printf(
+" Modems folder of the Control Panel (e.g. SET PORT TAPI). If one method\n");
+ printf(" doesn't work, try the other.\n\n");
+#endif /* NT */
+#else /* OS2 */
+ printf(" Typical device name for this platform: %s.\n",ttgtpn());
+ printf(" The default device name is %s (i.e. none).\n",dftty);
+ if (!dfloc) {
+ printf(
+" If you do not give a SET LINE command or if you give a SET LINE command\n");
+ printf(
+" with no device name, or if you specify %s as the device name,\n",dftty);
+ printf(
+" Kermit will be in \"remote mode\", suitable for use on the far end of a\n");
+ printf(
+" connection, e.g. as the file-transfer partner of your desktop communication\
+\n");
+ printf(
+" software. If you SET LINE to a specific device other than %s,\n", dftty);
+ printf(
+" Kermit is in \"local mode\", suitable for making a connection to another\n"
+ );
+ printf(
+" computer. SET LINE alone resets Kermit to remote mode.\n");
+ }
+#endif /* OS2 */
+ printf(
+" To use a modem to dial out, first SET MODEM TYPE (e.g., to USR), then\n");
+ printf(
+#ifdef OS2
+" SET PORT COMx (or SET PORT TAPI), SET SPEED, then give a DIAL command.\n");
+#else
+" SET LINE xxx, then SET SPEED, then give a DIAL command.\n");
+#endif /* OS2 */
+ printf(
+#ifdef OS2
+" For direct null-modem connections use SET MODEM TYPE NONE, SET PORT COMx,\n"
+#else
+" For direct null-modem connections, use SET MODEM TYPE NONE, SET LINE xxx,\n"
+#endif /* OS2 */
+ );
+ printf(
+" then SET FLOW, SET SPEED, and CONNECT.\n");
+ printf(
+"\nOptional switches:\n\
+ /CONNECT - Enter CONNECT mode automatically if SET LINE succeeds.\n");
+ printf(
+" /SERVER - Enter server mode automatically if SET LINE succeeds.\n");
+#ifdef VMS
+ printf(
+" /SHARE - Open the device in shared mode.\n");
+ printf(
+" /NOSHARE - Open the device in exclusive mode.\n");
+#endif /* VMS */
+ printf("\n");
+ printf(
+"Also see HELP SET MODEM, HELP SET DIAL, HELP SET SPEED, HELP SET FLOW.\n");
+ return(0);
+
+#ifndef NOSPL
+case XYMACR:
+ return(hmsga(hxymacr));
+#endif /* NOSPL */
+
+#ifndef NODIAL
+case XYMODM:
+ return(hmsga(hxymodm));
+#endif /* NODIAL */
+
+case XYPARI:
+ return(hmsga(hxypari));
+
+case XYPROM:
+ return(hmsga(hmxyprm));
+
+case XYQUIE:
+ return(hmsg("Syntax: SET QUIET {ON, OFF}\n\
+ Normally OFF. ON disables most information messages during interactive\n\
+ operation."));
+
+#ifdef CK_SPEED
+case XYQCTL:
+ return(hmsga(hmxyqctl));
+#endif /* CK_SPEED */
+
+case XYRETR:
+ return(hmsg("Syntax: SET RETRY number\n\
+ In Kermit protocol file transfers: How many times to retransmit a\n\
+ particular packet before giving up; 0 = no limit."));
+
+#ifndef NOLOCAL
+case XYSESS:
+#ifdef UNIX
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out CR, NUL, and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef datageneral
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out CR, NUL, and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef STRATUS
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out CR, NUL, and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef AMIGA
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out CR, NUL, and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef GEMDOS
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out CR, NUL, and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef OS2
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out NUL and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef VMS
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out CR, NUL, and XON/XOFF characters. DEBUG is the same as BINARY but\n\
+ also includes Telnet negotiations on TCP/IP connections."));
+#else
+#ifdef OSK
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out LF, NUL and XON/XOFF characters."));
+#else
+#ifdef MAC
+ return(hmsg(
+"Syntax: SET SESSION-LOG { BINARY, DEBUG, TEXT, TIMESTAMPED-TEXT }\n\
+ If BINARY, record all CONNECT characters in session log. If TEXT, strip\n\
+ out LF, NUL and XON/XOFF characters."));
+#endif /* MAC */
+#endif /* OSK */
+#endif /* OS2 */
+#endif /* VMS */
+#endif /* GEMDOS */
+#endif /* AMIGA */
+#endif /* STRATUS */
+#endif /* datageneral */
+#endif /* OS2ORUNIX */
+
+case XYSPEE:
+#ifdef OS2
+
+ return(hmsg("Syntax: SET SPEED number\n\
+ Speed for serial-port communication device specified in most recent\n\
+ SET PORT command, in bits per second. Type SET SPEED ? for a list of\n\
+ possible speeds."));
+#else
+ return(hmsg("Syntax: SET SPEED number\n\
+ Speed for serial-port communication device specified in most recent\n\
+ SET LINE command, in bits per second. Type SET SPEED ? for a list of\n\
+ possible speeds. Has no effect on job's controlling terminal."));
+#endif /* OS2 */
+#endif /* NOLOCAL */
+
+#ifndef NOXFER
+case XYRECV:
+ return(hmsga(hxyrcv));
+case XYSEND:
+ return(hmsga(hxysnd));
+case XYREPT:
+ return(hmsga(hxyrpt));
+#endif /* NOXFER */
+
+#ifndef NOSERVER
+case XYSERV:
+ return(hmsga(hsetsrv));
+#endif /* NOSERVER */
+
+#ifdef TNCODE
+case XYTEL:
+ return(hmsga(hxytel));
+
+case XYTELOP:
+ return(hmsga(hxytopt));
+#endif /* TNCODE */
+
+#ifndef NOXMIT
+case XYXMIT:
+ return(hmsga(hsetxmit));
+#endif /* NOXMIT */
+
+#ifndef NOCSETS
+case XYUNCS:
+ return(hmsg("Syntax: SET UNKNOWN-CHAR-SET action\n\
+ DISCARD (default) means reject any arriving files encoded in unknown\n\
+ character sets. KEEP means to accept them anyway."));
+#endif /* NOCSETS */
+
+#ifdef UNIX
+case XYWILD:
+ return(hmsga(hxywild));
+#endif /* UNIX */
+
+#ifndef NOXFER
+case XYWIND:
+ return(hmsga(hxywind));
+case XYXFER:
+ return(hmsga(hxyxfer));
+#endif /* NOXFER */
+
+#ifndef NOLOCAL
+#ifdef OS2MOUSE
+case XYMOUSE:
+ return(hmsga(hxymouse));
+#endif /* OS2MOUSE */
+#endif /* NOLOCAL */
+
+case XYALRM:
+ return(hmsg("Syntax: SET ALARM [ { seconds, hh:mm:ss } ]\n\
+ Number of seconds from now, or time of day, after which IF ALARM\n\
+ will succeed. 0, or no time at all, means no alarm."));
+
+case XYPROTO:
+ return(hmsga(hxyxyz));
+
+#ifdef CK_SPEED
+case XYPREFIX:
+ return(hmsg("Syntax: SET PREFIXING { ALL, CAUTIOUS, MINIMAL }\n\
+ \
+Selects the degree of control-character prefixing. Also see HELP SET CONTROL."
+));
+#endif /* CK_SPEED */
+
+#ifdef OS2
+case XYLOGIN:
+ return(hmsg("Syntax: SET LOGIN { USERID, PASSWORD, PROMPT } <text>\n\
+ Provides access information for use by login scripts."));
+#endif /* OS2 */
+
+#ifndef NOSPL
+case XYTMPDIR:
+ return(hmsg("Syntax: SET TEMP-DIRECTORY [ <directory-name> ]\n\
+ Overrides automatic assignment of \\v(tmpdir) variable."));
+#endif /* NOSPL */
+
+#ifdef OS2
+case XYTITLE:
+ return(hmsg("Syntax: SET TITLE <text>\n\
+ Sets window title to text instead of using current host/port name."));
+#endif /* OS2 */
+
+#ifndef NOPUSH
+#ifndef NOFRILLS
+case XYEDIT:
+ return(hmsg("Syntax: SET EDITOR pathname [ options ]\n\
+ Specifies the name of your preferred editor, plus any command-line\n\
+ options. SHOW EDITOR displays it."));
+#endif /* NOFRILLS */
+#endif /* NOPUSH */
+
+#ifdef BROWSER
+case XYBROWSE:
+#ifdef NT
+ return(hmsg("Syntax: SET BROWSER [ pathname [ options ] ]\n\
+ Specifies the name of your preferred browser plus any command-line\n\
+ options. SHOW BROWSER displays it. Omit pathname and options to use\n\
+ ShellExecute."));
+#else
+ return(hmsg("Syntax: SET BROWSER [ pathname [ options ] ]\n\
+ Specifies the name of your preferred browser plus any command-line\n\
+ options. SHOW BROWSER displays it."));
+#endif /* NT */
+#endif /* BROWSER */
+
+#ifdef CK_TAPI
+case XYTAPI:
+ return(hmsga(hxytapi));
+#endif /* CK_TAPI */
+
+#ifdef NT
+case XYWIN95:
+ return(hmsga(hxywin95));
+#endif /* NT */
+
+#ifndef NOSPL
+case XYFUNC:
+ return(hmsga(hxyfunc));
+#endif /* NOSPL */
+
+#ifdef CK_AUTHENTICATION
+case XYAUTH:
+ return(hmsga(hmxyauth));
+#else /* CK_AUTHENTICATION */
+#ifdef CK_SSL
+case XYAUTH:
+ return(hmsga(hmxyauth));
+#endif /* CK_SSL */
+#endif /* CK_AUTHENTICATION */
+
+#ifdef BROWSER
+case XYFTP:
+ return(hmsg("Syntax: SET FTP [ pathname [ options ] ]\n\
+ Specifies the name of your ftp client, plus any command-line options.\n\
+ SHOW FTP displays it."));
+#endif /* BROWSER */
+
+case XYSLEEP:
+ return(hmsg("Syntax: SET SLEEP CANCELLATION { ON, OFF }\n\
+ Tells whether SLEEP (PAUSE) or WAIT commands can be interrupted from the\n\
+ keyboard; ON by default."));
+
+case XYCD:
+ return(hmsga(hmxycd));
+
+case XYSERIAL:
+ return(hmsg("Syntax: SET SERIAL dps\n\
+ d is data length in bits, 7 or 8; p is first letter of parity; s is stop\n\
+ bits, 1 or 2. Examples: \"set serial 7e1\", \"set serial 8n1\"."));
+
+#ifdef HWPARITY
+case XYSTOP:
+ return(hmsg("Syntax: SET STOP-BITS { 1, 2 }\n\
+ Number of stop bits to use on SET LINE connections, normally 1."));
+#endif /* HWPARITY */
+
+#ifndef NOLOCAL
+case XYDISC:
+ return(hmsg("Syntax: SET DISCONNECT { ON, OFF }\n\
+ Whether to close and release a SET LINE device automatically upon\n\
+ disconnection; OFF = keep device open (default); ON = close and release."));
+#endif /* NOLOCAL */
+
+#ifdef STREAMING
+case XYSTREAM:
+ return(hmsg("Syntax: SET STREAMING { ON, OFF, AUTO }\n\
+ Tells Kermit whether streaming protocol can be used during Kermit file\n\
+ transfers. Default is AUTO, meaning use it if connection is reliable."));
+#endif /* STREAMING */
+
+case XYRELY:
+ return(hmsg("Syntax: SET RELIABLE { ON, OFF, AUTO }\n\
+ Tells Kermit whether its connection is reliable. Default is AUTO,\n\
+ meaning Kermit should figure it out for itself."));
+
+case XYCLEAR:
+ return(hmsg("Syntax: SET CLEAR-CHANNEL { ON, OFF, AUTO }\n\
+ Tells Kermit whether its connection is transparent to all 8-bit bytes.\n\
+ Default is AUTO, meaning Kermit figures it out from the connection type.\n\
+ When both sender and receiver agree channel is clear, SET PREFIXING NONE\n\
+ is used automatically."));
+
+#ifdef TLOG
+case XYTLOG:
+ return(hmsg("Syntax: SET TRANSACTION-LOG { BRIEF, FTP, VERBOSE }\n\
+ Selects the transaction-log format; BRIEF and FTP have one line per file;\n\
+ FTP is compatible with FTP log. VERBOSE (the default) has more info."));
+#endif /* TLOG */
+
+case XYOPTS:
+ return(hmsg("Syntax: SET OPTIONS command [ switches... ]\n\
+ For use with commands that have switches; sets the default switches for\n\
+ the given command. Type SET OPTIONS ? for a list of amenable commands."));
+
+#ifndef NOSPL
+case XYTIMER:
+ return(hmsga(hmxytimer));
+#endif /* NOSPL */
+
+#ifdef CKROOT
+ case XYROOT:
+ return(hmsga(hmxxchroot));
+#endif /* XYROOT */
+
+#ifdef ANYSSH
+ case XYSSH:
+ return(hmsga(hmxyssh));
+#endif /* ANYCMD */
+
+#ifdef LOCUS
+ case XYLOCUS:
+ return(hmsga(hmxylocus));
+#endif /* LOCUS */
+
+#ifdef OS2
+#ifdef KUI
+ case XYGUI:
+ return(hmsga(hmxygui));
+#endif /* KUI */
+#endif /* OS2 */
+
+ case XYMATCH:
+ return(hmsga(hmxymatch));
+
+default:
+ printf("Not available - \"%s\"\n",cmdbuf);
+ return(0);
+ }
+}
+
+#ifndef NOSPL
+/* D O H F U N C -- Give help for a function */
+
+int
+dohfunc(xx) int xx; {
+ /* int x; */
+ if (xx == -3) {
+ printf("\n Type SHOW FUNCTIONS to see a list of available functions.\n"
+ );
+ printf(
+ " Type HELP FUNCTION <name> for help on a particular function.\n");
+ printf(
+ " For function settings use HELP SET FUNCTION and SHOW SCRIPTS.\n\n");
+ return(0);
+ }
+ if (xx == FN_WORD) /* Long help message */
+ return(hmsga(hmfword));
+
+ printf("\n");
+ switch (xx) {
+ case FN_IND: /* Index (of string 1 in string 2) */
+ case FN_RIX: /* Rindex (index from right) */
+ printf("\\f%sindex(s1,s2,n1)\n\
+ s1 = string to look for.\n\
+ s2 = string to look in.\n\
+ n1 = optional 1-based starting position, default = 1.\n",
+ xx == FN_RIX ? "r" : ""
+ );
+ printf("Returns integer:\n\
+ 1-based position of %smost occurrence of s1 in s2, ignoring the %smost\n\
+ (n1-1) characters in s2; returns 0 if s1 not found in s2.\n",
+ xx == FN_IND ? "left" : "right",
+ xx == FN_IND ? "left" : "right"
+ );
+ break;
+ case FN_SEARCH: /* Search for pattern */
+ case FN_RSEARCH: /* Search for pattern from right */
+ printf("\\f%ssearch(s1,s2,n1)\n\
+ s1 = pattern to look for.\n\
+ s2 = string to look in.\n\
+ n1 = optional 1-based offset, default = 1.\n",
+ xx == FN_RSEARCH ? "r" : ""
+ );
+ printf("Returns integer:\n\
+ 1-based position of %smost match for s1 in s2, ignoring the %smost\n\
+ (n1-1) characters in s2; returns 0 if no match.\n",
+ xx == FN_SEARCH ? "left" : "right",
+ xx == FN_SEARCH ? "left" : "right"
+ );
+ printf(" See HELP WILDCARDS for info about patterns.\n");
+ break;
+ case FN_LEN: /* Length (of string) */
+ printf("\\flength(s1)\n\
+ s1 = string.\n");
+ printf("Returns integer:\n\
+ Length of string s1.\n");
+ break;
+ case FN_LIT: /* Literal (don't expand the string) */
+ printf("\\fliteral(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ s1 literally without evaluation.\n");
+ break;
+ case FN_LOW: /* Lower (convert to lowercase) */
+ printf("\\flower(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ s1 with uppercase letters converted to lowercase.\n");
+ break;
+ case FN_MAX: /* Max (maximum) */
+ printf("\\fmaximum(n1,n2)\n\
+ n1 = integer.\n\
+ n2 = integer.\n");
+ printf("Returns integer:\n\
+ The greater of n1 and n2.\n");
+ break;
+ case FN_MIN: /* Min (minimum) */
+ printf("\\fminimum(n1,n2)\n\
+ n1 = integer.\n\
+ n2 = integer.\n");
+ printf("Returns integer:\n\
+ The lesser of n1 and n2.\n");
+ break;
+ case FN_MOD: /* Mod (modulus) */
+ printf("\\fmodulus(n1,n2)\n\
+ n1 = integer.\n\
+ n2 = integer.\n");
+ printf("Returns integer:\n\
+ The remainder after dividing n1 by n2.\n");
+ break;
+ case FN_EVA: /* Eval (evaluate arith expression) */
+ printf("\\fevaluate(e)\n\
+ e = arithmetic expression.\n");
+ printf("Returns integer:\n\
+ The result of evaluating the expression.\n");
+ break;
+ case FN_SUB: /* Substr (substring) */
+ printf("\\fsubstring(s1,n1,n2)\n\
+ s1 = string.\n\
+ n1 = integer, 1-based starting position, default = 1.\n\
+ n2 = integer, length, default = length(s1) - n1 + 1.\n");
+ printf("Returns string:\n\
+ Substring of s1 starting at n1, length n2.\n");
+ break;
+ case FN_UPP: /* Upper (convert to uppercase) */
+ printf("\\fupper(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ s1 with lowercase letters converted to uppercase.\n");
+ break;
+ case FN_REV: /* Reverse (a string) */
+ printf("\\freverse(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ s1 with its characters in reverse order.\n");
+ break;
+ case FN_REP: /* Repeat (a string) */
+ printf("\\frepeat(s1,n1)\n\
+ s1 = string.\n\
+ n1 = integer.\n");
+ printf("Returns string:\n\
+ s1 repeated n1 times.\n");
+ break;
+ case FN_EXE: /* Execute (a macro) */
+ printf("\\fexecute(m1,a1,a2,a3,...)\n\
+ m1 = macro name.\n\
+ a1 = argument 1.\n\
+ a2 = argument 2, etc\n");
+ printf("Returns string:\n\
+ The return value of the macro (HELP RETURN for further info).\n");
+ break;
+ case FN_LPA: /* LPAD (left pad) */
+ case FN_RPA: /* RPAD (right pad) */
+ printf("\\f%cpad(s1,n1,c1)\n\
+ s1 = string.\n\
+ n1 = integer.\n\
+ c1 = character, default = space.\n",
+ xx == FN_LPA ? 'l' : 'r');
+ printf("Returns string:\n\
+ s1 %s-padded with character c1 to length n1.\n",
+ xx == FN_LPA ? "left" : "right");
+ break;
+ case FN_DEF: /* Definition of a macro, unexpanded */
+ printf("\\fdefinition(m1)\n\
+ m1 = macro name.\n");
+ printf("Returns string:\n\
+ Literal definition of macro m1.\n");
+ break;
+ case FN_CON: /* Contents of a variable, ditto */
+ printf("\\fcontents(v1)\n\
+ v1 = variable name such as \\%%a.\n");
+ printf("Returns string:\n\
+ Literal definition of variable v1, evaluated one level only.\n");
+ break;
+ case FN_FIL: /* Next file */
+ printf("\\fnextfile()\n");
+ printf("Returns string:\n\
+ Name of next file from list created by most recent \\f[r]files() or\n\
+ \\f[r]dir()invocation, or an empty string if there are no more files in\n\
+ the list.\n");
+ break;
+ case FN_FC: /* File count */
+ printf("\\ffiles(f1[,&a]) - File list.\n\
+ f1 = file specification, possibly containing wildcards.\n\
+ &a = optional name of array to assign file list to.\n");
+ printf("Returns integer:\n\
+ The number of regular files that match f1. Use with \\fnextfile().\n");
+ break;
+ case FN_CHR: /* Character (like BASIC CHR$()) */
+ printf("\\fcharacter(n1)\n\
+ n1 = integer.\n");
+ printf("Returns character:\n\
+ The character whose numeric code is n1.\n");
+ break;
+ case FN_RIG: /* Right (like BASIC RIGHT$()) */
+ printf("\\fright(s1,n1)\n\
+ s1 = string.\n\
+ n1 = integer, default = length(s1).\n");
+ printf("Returns string:\n\
+ The rightmost n1 characters of string s1.\n");
+ break;
+ case FN_LEF: /* Left (like BASIC LEFT$()) */
+ printf("\\fleft(s1,n1)\n\
+ s1 = string.\n\
+ n1 = integer, default = length(s1).\n");
+ printf("Returns string:\n\
+ The leftmost n1 characters of string s1.\n");
+ break;
+ case FN_COD: /* Code value of character */
+ printf("\\fcode(s1)\n\
+ c1 = character.\n");
+ printf("Returns integer:\n\
+ The numeric code of the first character in string s1, or 0 if s1 empty.\n");
+ break;
+ case FN_RPL: /* Replace */
+ printf("\\freplace(s1,s2,s3[,n1])\n\
+ s1 = original string.\n\
+ s2 = match string.\n\
+ s3 = replacement string.\n\
+ n1 = occurrence.\n");
+ printf("Returns string:\n\
+ s1 with occurrence number n1 of s2 replaced by s3.\n\
+ If n1 = 0 or omitted, all occurrences are replaced.\n\
+ If n1 < 0, occurrences are counted from the right.\n");
+ break;
+
+ case FN_FD: /* File date */
+ printf("\\fdate(f1)\n\
+ f1 = filename.\n");
+#ifdef VMS
+ printf("Returns string:\n\
+ Creation date of file f1, format: yyyymmdd hh:mm:ss.\n");
+#else
+ printf("Returns string:\n\
+ Modification date of file f1, format: yyyymmdd hh:mm:ss.\n");
+#endif /* VMS */
+ break;
+ case FN_FS: /* File size */
+ printf("\\fsize(f1)\n\
+ f1 = filename.\n");
+ printf("Returns integer:\n\
+ Size of file f1.\n");
+ break;
+ case FN_VER: /* Verify */
+ printf("\\fverify(s1,s2,n1)\n\
+ s1 = string of characters to look for.\n\
+ s2 = string to look in.\n\
+ n1 = starting position in s2.\n");
+ printf("Returns integer:\n\
+ 1-based position of first character in s2 that is not also in s1,\n\
+ or -1 if s1 is empty, or 0 if all characters in s2 are also in s1.\n");
+ break;
+ case FN_IPA: /* Find and return IP address */
+ printf("\\fipaddress(s1,n1)\n\
+ s1 = string.\n\
+ n1 = 1-based integer starting position, default = 1.\n");
+ printf("Returns string:\n\
+ First IP address in s1, scanning from left starting at position n1.\n");
+ break;
+ case FN_HEX: /* Hexify */
+ printf("\\fhexify(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ The hexadecimal representation of s1. Also see \\fn2hex().\n");
+ break;
+ case FN_UNH: /* Unhexify */
+ printf("\\funhexify(h1)\n\
+ h1 = Hexadecimal string.\n");
+ printf("Returns string:\n\
+ The result of unhexifying s1, or nothing if s1 is not a hex string.\n");
+ break;
+ case FN_UNTAB: /* Untabify */
+ printf("\\funtabify(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ The result of converting tabs in s1 to spaces assuming tab stops every\n\
+ 8 spaces.\n");
+ break;
+ case FN_BRK: /* Break */
+ case FN_SPN: /* Span */
+ printf("\\f%s(s1,s2,n1)\n\
+ s1 = string to look in.\n\
+ s2 = string of characters to look for.\n\
+ n1 = 1-based integer starting position, default = 1.\n",
+ xx == FN_BRK ? "break" : "span"
+ );
+ printf("Returns string:\n\
+ s1 up to the first occurrence of any character%salso in s2,\n\
+ scanning from the left starting at position n1.\n",
+ xx == FN_SPN ? " not " : " ");
+ break;
+ case FN_TRM: /* Trim */
+ case FN_LTR: /* Left-Trim */
+ printf("\\f%s(s1,s2)\n\
+ s1 = string to look in.\n\
+ s2 = string of characters to look for, default = blanks and tabs.\n",
+ xx == FN_TRM ? "trim" : "ltrim");
+ printf("Returns string:\n\
+ s1 with all characters that are also in s2 trimmed from the %s.\n.",
+ xx == FN_TRM ? "right" : "left");
+ break;
+ case FN_CAP: /* Capitalize */
+ printf("\\fcapitalize(s1)\n\
+ s1 = string.\n");
+ printf("Returns string:\n\
+ s1 with its first letter converted to uppercase and the remaining\n\
+ letters to lowercase.\n");
+ printf("Synonym: \\fcaps(s1)\n");
+ break;
+ case FN_TOD: /* Time-of-day-to-secs-since-midnite */
+ printf("\\ftod2secs(s1)\n\
+ s1 = time-of-day string, hh:mm:ss, 24-hour format.\n");
+ printf("Returns number:\n\
+ Seconds since midnight.\n");
+ break;
+ case FN_FFN: /* Full file name */
+ printf("\\fpathname(f1)\n\
+ f1 = filename, possibly wild.\n");
+ printf("Returns string:\n\
+ Full pathname of f1.\n");
+ break;
+ case FN_CHK: /* Checksum of text */
+ printf("\\fchecksum(s1)\n\
+ s1 = string.\n");
+ printf("Returns integer:\n\
+ 16-bit checksum of string s1.\n");
+ break;
+ case FN_CRC: /* CRC-16 of text */
+ printf("\\fcrc16(s1)\n\
+ s1 = string.\n");
+ printf("Returns integer:\n\
+ 16-bit cyclic redundancy check of string s1.\n");
+ break;
+ case FN_BSN: /* Basename of file */
+ printf("\\fbasename(f1)\n\
+ f1 = filename, possibly wild.\n");
+ printf("Returns string:\n\
+ Filename f1 stripped of all device and directory information.\n");
+ break;
+ case FN_CMD: /* Output of a command (cooked) */
+ printf("\\fcommand(s1)\n\
+ s1 = string\n");
+ printf("Returns string:\n\
+ Output of system command s1, if any, with final line terminator stripped.\n"
+ );
+ break;
+ case FN_RAW: /* Output of a command (raw) */
+ printf("\\frawcommand(s1)\n\
+ s1 = string\n");
+ printf("Returns string:\n\
+ Output of system command s1, if any.\n");
+ break;
+ case FN_STX: /* Strip from right */
+ printf("\\fstripx(s1,c1)\n\
+ s1 = string to look in.\n\
+ c1 = character to look for, default = \".\".\n");
+ printf("Returns string:\n\
+ s1 up to the rightmost occurrence of character c1.\n"
+ );
+ break;
+
+ case FN_STL: /* Strip from left */
+ printf("\\flop(s1,c1)\n\
+ s1 = string to look in.\n\
+ c1 = character to look for, default = \".\".\n");
+ printf("Returns string:\n\
+ The part of s1 after the leftmost occurrence of character c1.\n"
+ );
+ break;
+
+ case FN_STN: /* Strip n chars */
+ printf("\\fstripn(s1,n1)\n\
+ s1 = string to look in.\n\
+ n1 = integer, default = 0.\n");
+ printf("Returns string:\n\
+ s1 with n1 characters removed from the right.\n"
+ );
+ break;
+
+ case FN_STB: /* Strip enclosing brackets */
+ printf("\\fstripb(s1[,c1[,c2]])\n\
+ s1 = original string.\n\
+ c1 = optional first character\n");
+ printf("\
+ c2 = optional final character.\n");
+ printf("Returns string:\n\
+ s1 with the indicated enclosing characters removed. If c1 and c2 not\n\
+ specified, any matching brackets, braces, parentheses, or quotes are\n");
+ printf("\
+ assumed. If c1 is given but not c2, the appropriate c2 is assumed.\n\
+ if both c1 and c2 are given, they are used as-is.\n"
+ );
+ printf(
+"Alternative format:\n\
+ Include a grouping mask number in place of c1 and omit c2 to specify more\n\
+ than one possibility at once; see \\fword() for details.\n"
+ );
+ break;
+
+#ifdef OS2
+ case FN_SCRN_CX: /* Screen Cursor X Pos */
+ printf("\\fscrncurx()\n");
+ printf("Returns integer:\n\
+ The 0-based X coordinate (column) of the Terminal screen cursor.\n");
+ break;
+ case FN_SCRN_CY: /* Screen Cursor Y Pos */
+ printf("\\fscrncury()\n");
+ printf("Returns integer:\n\
+ The 0-based Y coordinate (row) of the Terminal screen cursor.\n");
+ break;
+ case FN_SCRN_STR: /* Screen String */
+ printf("\\fscrnstr(ny,nx,n1)\n\
+ ny = integer.\n\
+ nx = integer.\n\
+ n1 = integer.\n");
+ printf("Returns string:\n\
+ The string at Terminal-screen coordinates (nx,ny), length n1,\n\
+ blanks included. Coordinates start at 0. Default values are\n\
+ 0 for ny and nx, and line width for n1.\n");
+ break;
+#endif /* OS2 */
+
+ case FN_2HEX: /* Num to hex */
+ printf("\\fn2hex(n1) - Number to hex\n n1 = integer.\n");
+ printf("Returns string:\n The hexadecimal representation of n1.\n");
+ break;
+
+ case FN_2OCT: /* Num to hex */
+ printf("\\fn2octal(n1) - Number to octal\n n1 = integer.\n");
+ printf("Returns string:\n The octal representation of n1.\n");
+ break;
+
+#ifdef RECURSIVE
+ case FN_DIR: /* Recursive directory count */
+ printf("\\fdirectories(f1) - Directory list.\n\
+ f1 = directory specification, possibly containing wildcards.\n\
+ &a = optional name of array to assign directory list to.\n");
+ printf("Returns integer:\n\
+ The number of directories that match f1; use with \\fnextfile().\n");
+ break;
+
+ case FN_RFIL: /* Recursive file count */
+ printf("\\frfiles(f1[,&a]) - Recursive file list.\n\
+ f1 = file specification, possibly containing wildcards.\n\
+ &a = optional name of array to assign file list to.\n");
+ printf("Returns integer:\n\
+ The number of files whose names match f1 in the current or given\n\
+ directory tree; use with \\fnextfile().\n");
+ break;
+
+ case FN_RDIR: /* Recursive directory count */
+ printf("\\frdirectories(f1) - Recursive directory list.\n\
+ f1 = directory specification, possibly containing wildcards.\n\
+ &a = optional name of array to assign directory list to.\n");
+ printf("Returns integer:\n\
+ The number of directories that match f1 in the current or given directory\n\
+ tree. Use with \\fnextfile().\n");
+ break;
+#endif /* RECURSIVE */
+
+ case FN_DNAM: /* Directory part of a filename */
+ printf("\\fdirname(f) - Directory part of a filename.\n\
+ f = a file specification.\n");
+ printf("Returns directory name:\n\
+ The full name of the directory that the file is in, or if the file is a\n\
+ directory, its full name.\n");
+ break;
+
+#ifndef NORANDOM
+ case FN_RAND: /* Random number */
+ printf("\\frandom(n) - Random number.\n\
+ n = a positive integer.\n");
+ printf("Returns integer:\n\
+ A random number between 0 and n-1.\n");
+ break;
+#endif /* NORANDOM */
+
+ case FN_SPLIT: /* Split */
+ printf("\\fsplit(s1,&a,s2,s3,n2,n3) - \
+Assign string words to an array.\n\
+ s1 = source string\n &a = array designator\n s2 = optional break set.\n");
+ printf(" s3 = optional include set.\n");
+ printf(" n2 = optional grouping mask.\n");
+ printf(" n3 = optional separator flag.\n");
+ printf(" s2, s3, n2, n3 are as in \\fword().\n");
+ printf(
+" All arguments are optional; if \\&a[] already exists, it is recycled;\n\
+ if array not specified, the count is returned but no array is created.\n");
+ printf("Returns integer:\n\
+ Number of words in source string.\n");
+ break;
+
+ case FN_DTIM: /* CVTDATE */
+ printf("\\fcvtdate([date-time][,n1]) - Date/time conversion.\n");
+ printf(" Converts date and/or time to standard format.\n");
+ printf(" If no date/time given, returns current date/time.\n");
+ printf(" [date-time], if given, is free-format date and/or time.\n");
+ printf(" HELP DATE for info about date-time formats.\n");
+ printf("Returns string:\n\
+ Standard-format date and time: yyyymmdd hh:mm:ss (numeric)\n");
+ printf(" If n1 is given:\n\
+ n1 = 1: yyyy-mmm-dd hh:mm:ss (mmm = English 3-letter month abbreviation)\n\
+ n1 = 2: dd-mmm-yyyy hh:mm:ss (ditto)\n\
+ n1 = 3: yyyymmddhhmmss (all numeric)\n");
+ break;
+
+ case FN_JDATE: /* DOY */
+ printf("\\fdoy([date-time]) - Day of Year.\n");
+ printf(" Converts date and/or time to day-of-year (DOY) format.\n");
+ printf(" If no date/time given, returns current date.\n");
+ printf(" [date-time], if given, is free-format date and/or time.\n");
+ printf(" HELP DATE for info about date-time formats.\n");
+ printf("Returns numeric string:\n\
+ DOY: yyyyddd, where ddd is 1-based day number in year.\n");
+ break;
+
+ case FN_PNCVT:
+ printf("\\fdialconvert(phone-number) - Convert phone number.\n");
+ printf(" Converts the given phone number for dialing according\n");
+ printf(
+" to the prevailing dialing rules -- country code, area code, etc.\n");
+ printf("Returns string:\n\
+ The dial string that would be used if the same phone number had been\n\
+ given to the DIAL command.\n"
+ );
+ break;
+
+ case FN_DATEJ: /* DOY2DATE */
+ printf("\\fdoy2date([doy[ time]]) - Day of Year to Date.\n");
+ printf(" Converts yyyymmm to yyyymmdd\n");
+ printf(" If time included, it is converted to 24-hour format.");
+ printf(
+ "Returns standard date or date-time string yyyymmdd hh:mm:ss\n");
+ break;
+
+ case FN_MJD:
+ printf("\\fmjd([[date][ time]]) - Modified Julian Date (MJD).\n");
+ printf(
+" Converts date and/or time to MJD, the number of days since 17 Nov 1858.\n");
+ printf(" HELP DATE for info about date-time formats.\n");
+ printf("Returns: integer.\n");
+ break;
+
+ case FN_MJD2:
+ printf("\\fmjd2date(mjd) - Modified Julian Date (MJD) to Date.\n");
+ printf(" Converts MJD to standard-format date.\n");
+ printf("Returns: yyyymmdd.\n");
+ break;
+
+ case FN_DAY:
+ printf("\\fday([[date][ time]]) - Day of Week.\n");
+ printf("Returns day of week of given date as Mon, Tue, etc.\n");
+ printf("HELP DATE for info about date-time formats.\n");
+ break;
+
+ case FN_NDAY:
+ printf("\\fnday([[date][ time]]) - Numeric Day of Week.\n");
+ printf(
+ "Returns numeric day of week of given date, 0=Sun, 1=Mon, ..., 6=Sat.\n");
+ printf("HELP DATE for info about date-time formats.\n");
+ break;
+
+ case FN_TIME:
+ printf("\\ftime([[date][ time]]) - Time.\n");
+ printf(
+"Returns time portion of given date and/or time in hh:mm:ss format.\n");
+ printf("If no argument given, returns current time.\n");
+ printf("HELP DATE for info about date-time formats.\n");
+ break;
+
+ case FN_NTIM:
+ printf("\\fntime([[date][ time]]) - Numeric Time.\n");
+ printf(
+"Returns time portion of given date and/or time as seconds since midnight.\n");
+ printf("If no argument given, returns current time.\n");
+ printf("HELP DATE for info about date-time formats.\n");
+ break;
+
+ case FN_N2TIM:
+ printf("\\fn2time(seconds) - Numeric Time to Time.\n");
+ printf(
+"Returns the given number of seconds in hh:mm:ss format.\n");
+ break;
+
+ case FN_PERM:
+ printf("\\fpermissions(file) - Permissions of File.\n");
+ printf(
+#ifdef UNIX
+"Returns permissions of given file as they would be shown by \"ls -l\".\n"
+#else
+#ifdef VMS
+"Returns permissions of given file as they would be shown by \"dir /prot\".\n"
+#else
+"Returns the permissions of the given file.\n"
+#endif /* VMS */
+#endif /* UNIX */
+ );
+ break;
+
+ case FN_ALOOK:
+ printf("\\farraylook(pattern,&a) - Lookup pattern in array.\n\
+ pattern = String or pattern\n");
+ printf(" &a = array designator, can include range specifier.\n");
+ printf(
+"Returns number:\n\
+ The index of the first matching array element or -1 if none.\n");
+ printf("More info:\n\
+ HELP PATTERN for pattern syntax.\n HELP ARRAY for arrays.\n");
+ break;
+
+ case FN_TLOOK:
+ printf(
+"\\ftablelook(keyword,&a,[c]) - Lookup keyword in keyword table.\n\
+ pattern = String\n");
+ printf(" keyword = keyword to look up (can be abbreviated).\n");
+ printf(" &a = array designator, can include range specifier.\n");
+ printf(" This array must be in alphabetical order.\n");
+ printf(" c = Optional field delimiter, colon(:) by default.\n");
+ printf(
+"Returns number:\n\
+ 1 or greater, index of array element that uniquely matches given keyword;\n"
+ );
+ printf(
+"or -2 if keyword was ambiguous, or -1 if keyword empty or not found.\n"
+ );
+ printf("Also see:\n\
+ HELP FUNC ARRAYLOOK for a similar function.\n HELP ARRAY for arrays.\n");
+ break;
+
+ case FN_ABS: /* Absolute */
+ printf("\\fabsolute(n1)\n\
+ n1 = integer.\n");
+ printf("Returns integer:\n\
+ The absolute (unsigned) value of n1.\n");
+ break;
+
+#ifdef FNFLOAT
+ case FN_FPABS:
+ printf("\\ffpabsolute(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The absolute (unsigned) value of f1 to d decimal places.\n");
+ break;
+
+ case FN_FPADD:
+ printf("\\ffpadd(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The sum of f1 and f2 to d decimal places.\n");
+ break;
+
+ case FN_FPSUB:
+ printf("\\ffpsubtract(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ f1 minus f2 to d decimal places.\n");
+ break;
+
+ case FN_FPMUL:
+ printf("\\ffpmultiply(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The product of f1 and f2 to d decimal places.\n");
+ break;
+
+ case FN_FPDIV:
+ printf("\\ffpdivide(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ f1 divided by f2 to d decimal places.\n");
+ break;
+
+ case FN_FPMAX:
+ printf("\\ffpmaximum(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The maximum of f1 and f2 to d decimal places.\n");
+ break;
+
+ case FN_FPMIN:
+ printf("\\ffpminimum(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The minimum of f1 and f2 to d decimal places.\n");
+ break;
+
+ case FN_FPMOD:
+ printf("\\ffpmodulus(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The modulus of f1 and f2 to d decimal places.\n");
+ break;
+
+ case FN_FPPOW:
+ printf("\\ffpraise(f1,f2,d)\n\
+ f1,f2 = floating-point numbers or integers.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ f1 raised to the power f2, to d decimal places.\n");
+ break;
+
+ case FN_FPCOS:
+ printf("\\ffpcosine(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The cosine of angle f1 (in radians) to d decimal places.\n");
+ break;
+
+ case FN_FPSIN:
+ printf("\\ffpsine(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The sine of angle f1 (in radians) to d decimal places.\n");
+ break;
+
+ case FN_FPTAN:
+ printf("\\ffptangent(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The tangent of angle f1 (in radians) to d decimal places.\n");
+ break;
+
+ case FN_FPEXP:
+ printf("\\ffpexp(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ e (the base of natural logarithms) raised to the f1 power,\n\
+ to d decimal places.\n");
+ break;
+
+ case FN_FPINT:
+ printf("\\ffpint(f1)\n\
+ f1 = floating-point number or integer.\n");
+ printf("Returns integer:\n\
+ The integer part of f1.\n");
+ break;
+
+ case FN_FPLOG:
+ printf("\\ffplog10(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The logarithm, base 10, of f1 to d decimal places.\n");
+ break;
+
+ case FN_FPLN:
+ printf("\\ffplogn(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The natural logarithm of f1 to d decimal places.\n");
+ break;
+
+ case FN_FPROU:
+ printf("\\ffpround(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ f1 rounded to d decimal places.\n");
+ break;
+
+ case FN_FPSQR:
+ printf("\\ffpsqrt(f1,d)\n\
+ f1 = floating-point number or integer.\n\
+ d = integer.\n");
+ printf("Returns floating-point number:\n\
+ The square root of f1 to d decimal places.\n");
+ break;
+#endif /* FNFLOAT */
+
+#ifdef CKCHANNELIO
+ case FN_FEOF:
+ printf("\\f_eof(n1)\n\
+ n1 = channel number.\n");
+ printf("Returns number:\n\
+ 1 if channel n1 at end of file, 0 otherwise.\n");
+ break;
+ case FN_FPOS:
+ printf("\\f_pos(n1)\n\
+ n1 = channel number.\n");
+ printf("Returns number:\n\
+ Read/write pointer of channel n1 as byte number.\n");
+ break;
+ case FN_NLINE:
+ printf("\\f_line(n1)\n\
+ n1 = channel number.\n");
+ printf("Returns number:\n\
+ Read/write pointer of channel n1 as line number.\n");
+ break;
+ case FN_FILNO:
+ printf("\\f_handle(n1)\n\
+ n1 = channel number.\n");
+ printf("Returns number:\n\
+ File %s of open file on channel n1.\n",
+#ifdef OS2
+ "handle"
+#else
+ "descriptor"
+#endif /* OS2 */
+ );
+ break;
+ case FN_FSTAT:
+ printf("\\f_status(n1)\n\
+ n1 = channel number.\n");
+ printf("Returns number:\n\
+ Sum of open modes of channel n1: 1 = read; 2 = write; 4 = append, or:\n\
+ 0 if not open.\n");
+ break;
+ case FN_FGCHAR:
+ printf("\\f_getchar(n1)\n\
+ n1 = channel number.\n");
+ printf(" Reads a character from channel n1 and returns it.\n");
+ break;
+ case FN_FGLINE:
+ printf("\\f_getline(n1)\n\
+ n1 = channel number.\n");
+ printf(" Reads a line from channel n1 and returns it.\n");
+ break;
+ case FN_FGBLK:
+ printf("\\f_getblock(n1,n2)\n\
+ n1 = channel number, n2 = size\n");
+ printf(
+" Reads a block of n2 characters from channel n1 and returns it.\n");
+ break;
+ case FN_FPCHAR:
+ printf("\\f_putchar(n1,c)\n\
+ n1 = channel number, c = character\n");
+ printf(" Writes a character to channel n1.\n\
+Returns number:\n\
+ 1 if successful, otherwise a negative error code.\n");
+ break;
+ case FN_FPLINE:
+ printf("\\f_putline(n1,s1)\n\
+ n1 = channel number, s1 = string\n");
+ printf(
+" Writes the string s1 to channel n1 and adds a line terminator.\n\
+Returns number:\n");
+ printf(" How many characters written if successful;\n\
+ Otherwise a negative error code.\n"
+ );
+ break;
+ case FN_FPBLK:
+ printf("\\f_putblock(n1,s1)\n\
+ n1 = channel number, s1 = string\n");
+ printf(
+" Writes the string s1 to channel n1.\n\
+ Returns number:\n");
+ printf(" How many characters written if successful;\n\
+ Otherwise a negative error code.\n"
+ );
+ break;
+ case FN_FERMSG:
+ printf("\\f_errmsg([n1])\n\
+ n1 = numeric error code, \\v(f_error) by default.\n");
+ printf(" Returns the associated error message string.\n");
+ break;
+#endif /* CKCHANNELIO */
+
+ case FN_AADUMP:
+ printf("\\faaconvert(name,&a[,&b])\n\
+ name = name of associative array, &a and &b = names of regular arrays.\n");
+ printf(
+" Converts the given associative array into two regular arrays, &a and &b,\n\
+ containing the indices and values, respectively:\n");
+ printf("Returns number:\n\
+ How many elements were converted.\n");
+ break;
+
+#ifdef CK_KERBEROS
+ case FN_KRB_TK:
+ printf("\\fkrbtickets(n)\n\
+ n = Kerberos version number (4 or 5).\n\
+ Returns string:\n\
+ The number of active Kerberos 4 or 5 tickets.\n\
+ Resets the ticket list used by \\fkrbnextticket(n).\n");
+ break;
+
+ case FN_KRB_NX:
+ printf("\\fkrbnextticket(n)\n\
+ n = Kerberos version number (4 or 5).\n\
+ Returns string:\n\
+ The next ticket in the Kerberos 4 or 5 ticket list that was set up by\n\
+ the most recent invocation of \\fkrbtickets(n).\n");
+ break;
+
+ case FN_KRB_IV:
+ printf("\\fkrbisvalid(n,name)\n\
+ n = Kerberos version number (4 or 5).\n\
+ name = a ticket name as returned by \\fkrbnextticket(n).\n\
+ Returns number:\n\
+ 1 if the ticket is valid, 0 if not valid.\n\
+ A ticket is valid if all the following conditions are true:\n\n");
+ printf("\n\
+ (i) it exists in the current cache file;\n\
+ (ii) it is not expired;\n\
+ (iii) it is not marked invalid (K5 only);\n\
+ (iv) it was issued from the current IP address\n");
+ printf("\n This value can be used in an IF statement, e.g.:\n\n");
+ printf(" if \\fkrbisvalid(4,krbtgt.FOO.BAR.EDU@FOO.BAR.EDU) ...\n");
+ break;
+
+ case FN_KRB_TT:
+ printf("\\fkrbtimeleft(n,name)\n\
+ n = Kerberos version number (4 or 5).\n\
+ name = a ticket name as returned by \\fkrbnextticket(n).\n\
+ Returns string:\n\
+ The number of seconds remaining in the ticket's lifetime.\n");
+ break;
+
+ case FN_KRB_FG:
+ printf("\\fkrbflags(n,name)\n\
+ n = Kerberos version number (4 or 5).\n\
+ name = a ticket name as returned by \\fkrbnextticket(n).\n\
+ Returns string:\n");
+ printf(
+" The flags string as reported with AUTH K5 LIST /FLAGS. This string can\n\
+ be searched for a particular flag using the \\findex() function when\n\
+ SET CASE is ON (for case sensitive searches). Flag strings are only\n\
+ available for K5 tickets.\n");
+ break;
+#endif /* CK_KERBEROS */
+
+ case FN_PATTERN:
+ printf("\\fpattern(s)\n\
+ s = string\n\
+ Returns string: s with any variables, etc, evaluated in the normal manner.\n"
+ );
+ printf("\
+ For use with INPUT, MINPUT, and REINPUT to declare that a search target is\n\
+ a pattern rather than a literal string.\n");
+ break;
+
+ case FN_HEX2N:
+ printf("\\fhex2n(s)\n\
+ s = hexadecimal number\n\
+ Returns decimal equivalent.\n");
+ break;
+
+ case FN_HEX2IP:
+ printf("\\fhex2ip(s)\n\
+ s = 8-digit hexadecimal number\n\
+ Returns the equivalent decimal dotted IP address.\n");
+ break;
+
+ case FN_IP2HEX:
+ printf("\\fip2hex(s)\n\
+ s = decimal dotted IP address\n\
+ Returns the equivalent 8-digit hexadecimal number.\n");
+ break;
+
+ case FN_OCT2N:
+ printf("\\foct2n(s)\n\
+ s = octal number\n\
+ Returns decimal equivalent.\n");
+ break;
+
+ case FN_RADIX:
+ printf("\\fradix(s,n1,n2)\n\
+ s = number in radix n1\n\
+ Returns the number's representation in radix n2.\n");
+ break;
+
+ case FN_JOIN:
+ printf("\\fjoin(&a[,s[,n1[,n2]]])\n\
+ &a = array designator, can include range specifier.\n\
+ s = optional separator.\n");
+ printf("\
+ n1 = nonzero to put grouping around elements that contain spaces;\n\
+ see \\fword() grouping mask for values of n.\n");
+ printf("\
+ n2 = 0 or omitted to put spaces between elements; nonzero to omit them.\n");
+ printf("\
+ Returns the (selected) elements of the array joined to together,\n\
+ separated by the separator.\n");
+ break;
+
+ case FN_SUBST:
+ printf("\\fsubstitute(s1,s2,s3)\n\
+ s1 = Source string.\n\
+ s2 = List of characters to be translated.\n\
+ s3 = List of characters to translate them to.\n");
+ printf(
+" Returns: s1, with each character that is in s2 translated to the\n\
+ corresponding character in s3. s2 and s3 can contain ASCII ranges,\n\
+ like [a-z]. Any characters in s2 that don't have corresponding\n\
+ characters in s3 (after range expansion) are removed from the result.\n");
+ break;
+
+#ifndef NOSEXP
+ case FN_SEXP:
+ printf("\\fsexpression(s1)\n\
+ s1 = S-Expression.\n");
+ printf(" Returns: The result of evaluating s1.\n");
+ break;
+
+#endif /* NOSEXP */
+
+ case FN_CMDSTK:
+ printf("\\fcmdstack(n1,n2)\n\
+ n1 = Command-stack level, 0 to \\v(cmdlevel), default \\v(cmdlevel).\n\
+ n2 = Function code, 0 or 1.\n");
+ printf("Returns:\n");
+ printf(" n2 = 0: name of object at stack level n1\n\
+ n2 = 1: type of object at stack level n1:\n\
+ 0 = interactive prompt\n\
+ 1 = command file\n\
+ 2 = macro\n"
+ );
+ break;
+
+#ifdef CKFLOAT
+ case FN_DIFDATE:
+ printf("\\fdiffdates(d1,d2)\n\
+ d1 = free-format date and/or time (default = NOW).\n\
+ d2 = ditto.\n");
+ printf("Returns:\n");
+ printf(" Difference expressed as delta time:\n");
+ printf(" Negative if d2 is later than d1, otherwise positive.\n");
+ break;
+#endif /* CKFLOAT */
+
+ case FN_CMPDATE:
+ printf("\\fcmpdates(d1,d2)\n\
+ d1 = free-format date and/or time (default = NOW).\n\
+ d2 = ditto.\n");
+ printf("Returns:\n");
+ printf(" 0 if d1 is equal to d2;\n\
+ 1 if d1 is later than d2;\n\
+ -1 if d1 is earlier than d2.\n");
+ break;
+
+ case FN_TOGMT:
+ printf("\\futcdate(d1)\n\
+ d1 = free-format date and/or time (default = NOW).\n");
+ printf("Returns:\n");
+ printf(" Date-time converted to UTC (GMT) yyyymmdd hh:mm:ss.\n");
+ break;
+
+#ifdef TCPSOCKET
+ case FN_HSTADD:
+ printf("\\faddr2name(s)\n\
+ s = numeric IP address.\n");
+ printf("Returns:\n");
+ printf(" Corresponding IP hostname if found, otherwise null.\n");
+ break;
+ case FN_HSTNAM:
+ printf("\\fname2addr(s)\n\
+ s = IP host name.\n");
+ printf("Returns:\n");
+ printf(" Corresponding numeric IP address if found, else null.\n");
+ break;
+#endif /* TCPSOCKET */
+
+ case FN_DELSEC:
+ printf("\\fdelta2secs(dt)\n\
+ dt = Delta time, e.g. +3d14:27:52.\n");
+ printf("Returns:\n");
+ printf(" The corresponding number of seconds.\n");
+ break;
+
+ case FN_PC_DU:
+ printf("\\fdos2unixpath(p)\n\
+ p = string, DOS pathname.\n");
+ printf("Returns:\n");
+ printf(" The argument converted to a Unix pathname.\n");
+ break;
+
+ case FN_PC_UD:
+ printf("\\funix2dospath(p)\n\
+ p = string, Unix pathname.\n");
+ printf("Returns:\n");
+ printf(" The argument converted to a DOS pathname.\n");
+ break;
+
+#ifdef FN_ERRMSG
+ case FN_ERRMSG:
+ printf("\\ferrstring(n)\n\
+ n = platform-dependent numeric error code.\n");
+ printf("Returns:\n");
+ printf(" The corresponding error string.\n");
+ break;
+#endif /* FN_ERRMSG */
+
+ case FN_KWVAL:
+ printf("\\fkeywordvalue(s1,c1)\n\
+ s1 = string of the form \"name=value\"\n\
+ c1 = separator character (default separator is \"=\")\n");
+ printf(" Assigns the value, if any, to the named macro.\n");
+ printf(" If s1 contains no separator, nothing happens.\n");
+ printf(
+" If s1 contains a separator but no value, the macro is undefined.\n");
+ printf("Returns:\n");
+ printf(" 0 on failure\n");
+ printf(" 1 on success\n");
+ break;
+
+#ifdef COMMENT
+ case FN_SLEEP:
+ printf("\\fsleep(n)\n\
+ n = number of seconds\n");
+ printf(" Pauses for the given number of seconds.\n");
+ printf("Returns: the empty string.\n");
+ break;
+
+ case FN_MSLEEP:
+ printf("\\fmsleep(n)\n\
+ n = number of milliseconds\n");
+ printf(" Pauses for the given number of milliseconds.\n");
+ printf("Returns: the empty string.\n");
+ break;
+#endif /* COMMENT */
+
+#ifdef NT
+ case FN_SNAME:
+ printf("\\fshortpathname(s)\n\
+ s = file or directory name string\n");
+ printf(" Returns the short path form of the given input.\n");
+ break;
+
+ case FN_LNAME:
+ printf("\\flongpathname(s)\n\
+ s = file or directory name string\n");
+ printf(" Returns the long path form of the given input.\n");
+ break;
+#else
+ case FN_SNAME:
+ printf("\\fshortpathname(s)\n\
+ Synonym for \fpathname()\n");
+ break;
+
+ case FN_LNAME:
+ printf("\\flongpathname(s)\n\
+ Synonym for \fpathname()\n");
+ break;
+#endif /* NT */
+
+ default:
+ printf("Sorry, help not available for \"%s\"\n",cmdbuf);
+ }
+ printf("\n");
+ return(0);
+}
+#endif /* NOSPL */
+
+#ifdef OS2
+#ifndef NOKVERBS
+
+/* D O H K V E R B -- Give help for a Kverb */
+
+int
+dohkverb(xx) int xx; {
+ int x,i,found,button,event;
+
+ if (xx == -3) {
+ printf("\n Type SHOW KVERBS to see a list of available Kverbs.\n"
+ );
+ printf(
+" Type HELP KVERB <name> to see the current definition of a given Kverb.\n\n"
+ );
+ return(-9);
+ }
+ if (xx < 0) return(xx);
+ if ((x = cmcfm()) < 0) return(x);
+ switch ( xx ) {
+ /* DEC VT keyboard key definitions */
+
+ case K_COMPOSE : /* Compose key */
+ printf("\\Kcompose Compose an accented character\n");
+ break;
+ case K_C_UNI16 : /* UCS2 key */
+ printf("\\Kucs2 Enter a Unicode character\n");
+ break;
+
+/* DEC arrow keys */
+
+ case K_UPARR : /* DEC Up Arrow key */
+ printf("\\Kuparr Transmit Terminal Up Arrow sequence\n");
+ break;
+ case K_DNARR : /* DEC Down Arrow key */
+ printf("\\Kdnarr Transmit Terminal Down Arrow sequence\n");
+ break;
+ case K_RTARR : /* DEC Right Arrow key */
+ printf("\\Krtarr Transmit Terminal Right Arrow sequence\n");
+ break;
+ case K_LFARR : /* DEC Left Arrow key */
+ printf("\\Klfarr Transmit Terminal Left Arrow sequence\n");
+ break;
+
+ case K_PF1 : /* DEC PF1 key */
+ printf("\\Kpf1,\\Kgold Transmit DEC PF1 sequence\n");
+ break;
+ case K_PF2 : /* DEC PF2 key */
+ printf("\\Kpf2 Transmit DEC PF2 sequence\n");
+ break;
+ case K_PF3 : /* DEC PF3 key */
+ printf("\\Kpf3 Transmit DEC PF3 sequence\n");
+ break;
+ case K_PF4 : /* DEC PF4 key */
+ printf("\\Kpf4 Transmit DEC PF4 sequence\n");
+ break;
+
+ case K_KP0 : /* DEC Keypad 0 */
+ printf("\\Kkp0 Transmit DEC Keypad-0 sequence\n");
+ break;
+ case K_KP1 : /* DEC Keypad 1 */
+ printf("\\Kkp1 Transmit DEC Keypad-1 sequence\n");
+ break;
+ case K_KP2 : /* etc ... through 9 */
+ printf("\\Kkp2 Transmit DEC Keypad-2 sequence\n");
+ break;
+ case K_KP3 :
+ printf("\\Kkp3 Transmit DEC Keypad-3 sequence\n");
+ break;
+ case K_KP4 :
+ printf("\\Kkp4 Transmit DEC Keypad-4 sequence\n");
+ break;
+ case K_KP5 :
+ printf("\\Kkp5 Transmit DEC Keypad-5 sequence\n");
+ break;
+ case K_KP6 :
+ printf("\\Kkp6 Transmit DEC Keypad-6 sequence\n");
+ break;
+ case K_KP7 :
+ printf("\\Kkp7 Transmit DEC Keypad-7 sequence\n");
+ break;
+ case K_KP8 :
+ printf("\\Kkp8 Transmit DEC Keypad-8 sequence\n");
+ break;
+ case K_KP9 :
+ printf("\\Kkp9 Transmit DEC Keypad-9 sequence\n");
+ break;
+ case K_KPCOMA : /* DEC keypad comma */
+ printf("\\Kkpcoma Transmit DEC Keypad-Comma sequence\n");
+ break;
+ case K_KPMINUS : /* DEC keypad minus */
+ printf("\\Kkpminus Transmit DEC Keypad-Minus sequence\n");
+ break;
+ case K_KPDOT : /* DEC keypad period */
+ printf("\\Kkpdot Transmit DEC Keypad-Period sequence\n");
+ break;
+ case K_KPENTER : /* DEC keypad enter */
+ printf("\\Kkpenter Transmit DEC Keypad-Enter sequence\n");
+ break;
+
+/* DEC Top-Rank F keys */
+
+ case K_DECF1 : /* DEC F1 key */
+ printf("\\Kdecf1 Transmit DEC F1 sequence for PC keyboard\n");
+ break;
+ case K_DECF2 : /* DEC F2 key */
+ printf("\\Kdecf2 Transmit DEC F2 sequence for PC keyboard\n");
+ break;
+ case K_DECF3 : /* DEC F3 key */
+ printf("\\Kdecf3 Transmit DEC F3 sequence for PC keyboard\n");
+ break;
+ case K_DECF4 : /* DEC F4 key */
+ printf("\\Kdecf4 Transmit DEC F4 sequence for PC keyboard\n");
+ break;
+ case K_DECF5 : /* DEC F5 key */
+ printf("\\Kdecf5 Transmit DEC F5 sequence for PC keyboard\n");
+ break;
+ case K_DECHOME: /* DEC HOME key */
+ printf("\\Kdechome Transmit DEC HOME sequence for PC keyboard\n");
+ break;
+
+ case K_DECF6 : /* DEC F6 key */
+ printf("\\Kdecf6 Transmit DEC F6 sequence\n");
+ break;
+ case K_DECF7 : /* etc, through F20 */
+ printf("\\Kdecf7 Transmit DEC F7 sequence\n");
+ break;
+ case K_DECF8 :
+ printf("\\Kdecf8 Transmit DEC F8 sequence\n");
+ break;
+ case K_DECF9 :
+ printf("\\Kdecf9 Transmit DEC F9 sequence\n");
+ break;
+ case K_DECF10 :
+ printf("\\Kdecf10 Transmit DEC F10 sequence\n");
+ break;
+ case K_DECF11 :
+ printf("\\Kdecf11 Transmit DEC F11 sequence\n");
+ break;
+ case K_DECF12 :
+ printf("\\Kdecf12 Transmit DEC F12 sequence\n");
+ break;
+ case K_DECF13 :
+ printf("\\Kdecf13 Transmit DEC F13 sequence\n");
+ break;
+ case K_DECF14 :
+ printf("\\Kdecf14 Transmit DEC F14 sequence\n");
+ break;
+ case K_DECHELP : /* DEC Help key */
+ printf("\\Kdecf15,\\Kdechelp Transmit DEC HELP sequence\n");
+ break;
+ case K_DECDO : /* DEC Do key */
+ printf("\\Kdecf16,\\Kdecdo Transmit DEC DO sequence\n");
+ break;
+ case K_DECF17 :
+ printf("\\Kdecf17 Transmit DEC F17 sequence\n");
+ break;
+ case K_DECF18 :
+ printf("\\Kdecf18 Transmit DEC F18 sequence\n");
+ break;
+ case K_DECF19 :
+ printf("\\Kdecf19 Transmit DEC F19 sequence\n");
+ break;
+ case K_DECF20 :
+ printf("\\Kdecf20 Transmit DEC F20 sequence\n");
+ break;
+
+/* DEC editing keys */
+
+ case K_DECFIND : /* DEC Find key */
+ printf("\\Kdecfind Transmit DEC FIND sequence\n");
+ break;
+ case K_DECINSERT : /* DEC Insert key */
+ printf("\\Kdecinsert Transmit DEC INSERT HERE sequence\n");
+ break;
+ case K_DECREMOVE : /* DEC Remove key */
+ printf("\\Kdecremove Transmit DEC REMOVE sequence\n");
+ break;
+ case K_DECSELECT : /* DEC Select key */
+ printf("\\Kdecfselect Transmit DEC SELECT sequence\n");
+ break;
+ case K_DECPREV : /* DEC Previous Screen key */
+ printf("\\Kdecprev Transmit DEC PREV SCREEN sequence\n");
+ break;
+ case K_DECNEXT : /* DEC Next Screen key */
+ printf("\\Kdecnext Transmit DEC NEXT SCREEN sequence\n");
+ break;
+
+/* DEC User-Defined Keys */
+
+ case K_UDKF1 : /* F1 - F5 are XTERM extensions */
+ printf("\\Kudkf1 Transmit XTERM F1 User Defined Key sequence\n");
+ break;
+ case K_UDKF2 :
+ printf("\\Kudkf2 Transmit XTERM F2 User Defined Key sequence\n");
+ break;
+ case K_UDKF3 :
+ printf("\\Kudkf3 Transmit XTERM F3 User Defined Key sequence\n");
+ break;
+ case K_UDKF4 :
+ printf("\\Kudkf4 Transmit XTERM F4 User Defined Key sequence\n");
+ break;
+ case K_UDKF5 :
+ printf("\\Kudkf5 Transmit XTERM F5 User Defined Key sequence\n");
+ break;
+ case K_UDKF6 : /* DEC User Defined Key F6 */
+ printf("\\Kudkf6 Transmit DEC F6 User Defined Key sequence\n");
+ break;
+ case K_UDKF7 : /* DEC User Defined Key F7 */
+ printf("\\Kudkf7 Transmit DEC F7 User Defined Key sequence\n");
+ break;
+ case K_UDKF8 : /* etc ... through F20 */
+ printf("\\Kudkf8 Transmit DEC F8 User Defined Key sequence\n");
+ break;
+ case K_UDKF9 :
+ printf("\\Kudkf9 Transmit DEC F9 User Defined Key sequence\n");
+ break;
+ case K_UDKF10 :
+ printf("\\Kudkf10 Transmit DEC F10 User Defined Key sequence\n");
+ break;
+ case K_UDKF11 :
+ printf("\\Kudkf11 Transmit DEC F11 User Defined Key sequence\n");
+ break;
+ case K_UDKF12 :
+ printf("\\Kudkf12 Transmit DEC F12 User Defined Key sequence\n");
+ break;
+ case K_UDKF13 :
+ printf("\\Kudkf13 Transmit DEC F13 User Defined Key sequence\n");
+ break;
+ case K_UDKF14 :
+ printf("\\Kudkf14 Transmit DEC F14 User Defined Key sequence\n");
+ break;
+ case K_UDKHELP :
+ printf(
+ "\\Kudkhelp,\\Kudkf15 Transmit DEC HELP User Defined Key sequence\n");
+ break;
+ case K_UDKDO :
+ printf(
+ "\\Kudkdo,\\Kudkf16 Transmit DEC DO User Defined Key sequence\n");
+ break;
+ case K_UDKF17 :
+ printf("\\Kudkf17 Transmit DEC F17 User Defined Key sequence\n");
+ break;
+ case K_UDKF18 :
+ printf("\\Kudkf18 Transmit DEC F18 User Defined Key sequence\n");
+ break;
+ case K_UDKF19 :
+ printf("\\Kudkf19 Transmit DEC F19 User Defined Key sequence\n");
+ break;
+ case K_UDKF20 :
+ printf("\\Kudkf20 Transmit DEC F20 User Defined Key sequence\n");
+ break;
+
+/* Emacs Keys */
+ case K_EMACS_OVER:
+ printf(
+ "\\Kemacs_overwrite Transmit EMACS Overwrite toggle command sequence\n");
+ break;
+
+/* Kermit screen-scrolling keys */
+
+ case K_DNONE : /* Screen rollback: down one line */
+ printf("\\Kdnone Screen rollback: down one line\n");
+ break;
+ case K_DNSCN : /* Screen rollback: down one screen */
+ printf("\\Kdnscn Screen rollback: down one screen\n");
+ break;
+ case K_UPONE : /* Screen rollback: Up one line */
+ printf("\\Kupone Screen rollback: up one line\n");
+ break;
+ case K_UPSCN : /* Screen rollback: Up one screen */
+ printf("\\Kupscn Screen rollback: up one screen\n");
+ break;
+ case K_ENDSCN : /* Screen rollback: latest screen */
+ printf("\\Kendscn Screen rollback: latest screen\n");
+ break;
+ case K_HOMSCN : /* Screen rollback: oldest screen */
+ printf("\\Khomscn Screen rollback: oldest screen\n");
+ break;
+ case K_GO_BOOK : /* Scroll to bookmark */
+ printf("\\Kgobook Screen rollback: go to bookmark\n");
+ break;
+ case K_GOTO : /* Scroll to line number */
+ printf("\\Kgoto Screen rollback: go to line number\n");
+ break;
+
+ case K_LFONE : /* Horizontal Scroll: Left one cell */
+ printf("\\Klfone Horizontal Scroll: Left one column\n");
+ break;
+ case K_LFPAGE : /* Horizontal Scroll: Left one page */
+ printf("\\Klfpage Horizontal Scroll: Left eight columns\n");
+ break;
+ case K_LFALL :
+ printf("\\Klfall Horizontal Scroll: Left to margin\n");
+ break;
+ case K_RTONE : /* Horizontal Scroll: Right one cell */
+ printf("\\Krtone Horizontal Scroll: Right one column\n");
+ break;
+ case K_RTPAGE : /* Horizontal Scroll: Right one page */
+ printf("\\Krtpage Horizontal Scroll: Right eight columns\n");
+ break;
+ case K_RTALL :
+ printf("\\Krtall Horizontal Scroll: Right to margin\n");
+ break;
+
+/* Keyboard language switching verbs */
+
+ case K_KB_ENG : /* English keyboard mode */
+ printf("\\Kkbenglish Switch to Normal (English) keyboard mode\n");
+ break;
+ case K_KB_HEB : /* Hebrew keyboard mode */
+ printf("\\Kkbhebrew Switch to Hebrew keyboard mode\n");
+ break;
+ case K_KB_RUS : /* Russian keyboard mode */
+ printf("\\Kkbrussian Switch to Russian keyboard mode\n");
+ break;
+ case K_KB_EMA : /* Emacs keyboard mode */
+ printf("\\Kkbemacs Switch to EMACS keyboard mode\n");
+ break;
+ case K_KB_WP : /* Word Perfect 5.1 mode */
+ printf("\\Kkbwp Switch to Word Perfect 5.1 keyboard mode\n");
+ break;
+
+/* Mark Mode actions */
+
+ case K_MARK_START : /* Enter Mark Mode/Start marking */
+ printf("\\Kmarkstart Mark Mode: Enter mode or Start marking\n");
+ break;
+ case K_MARK_CANCEL : /* Exit Mark Mode - Do Nothing */
+ printf("\\Kmarkcancel Mark Mode: Cancel mode\n");
+ break;
+ case K_MARK_COPYCLIP: /* Exit Mark Mode - Copy data to clipboard */
+ printf("\\Kmarkcopyclip Mark Mode: Copy marked text to clipboard\n");
+ break;
+ case K_MARK_COPYHOST: /* Exit Mark Mode - Copy data to host */
+ printf("\\Kmarkcopyhost Mark Mode: Copy marked text to host\n");
+ break;
+ case K_MARK_SELECT : /* Exit Mark Mode - Select */
+ printf(
+ "\\Kmarkselect Mark Mode: Place marked text into \\v(select)\n");
+ break;
+ case K_BACKSRCH : /* Search Backwards for text */
+ printf("\\Kbacksearch Search: Begin backward search for text\n");
+ break;
+ case K_FWDSRCH : /* Search Forwards for text */
+ printf("\\Kfwdsearch Search: Begin forward search for text\n");
+ break;
+ case K_BACKNEXT : /* Search Backwards for next instance of text */
+ printf(
+ "\\Kbacknext Search: Find next instance of text backwards\n");
+ break;
+ case K_FWDNEXT : /* Search Forwards for next instance of text */
+ printf("\\Kfwdnext Search: Find next instance of text forwards\n");
+ break;
+
+/* Miscellaneous Kermit actions */
+
+ case K_EXIT : /* Return to command parser */
+ printf("\\Kexit Toggle between COMMAND and CONNECT modes\n");
+ break;
+ case K_BREAK : /* Send a BREAK */
+ printf("\\Kbreak Transmit BREAK signal to host\n");
+ break;
+ case K_RESET : /* Reset emulator */
+ printf("\\Kreset Reset Terminal Emulator to user defaults\n");
+ break;
+ case K_DOS : /* Push to DOS (i.e. OS/2) */
+ printf("\\Kdos,\\Kos2 Push to Command Shell\n");
+ break;
+ case K_HANGUP : /* Hang up the connection */
+ printf("\\Khangup Hangup the active connection\n");
+ break;
+ case K_DUMP : /* Dump/Print current screen */
+ printf(
+ "\\Kdump Dump/copy current screen to SET PRINTER device/file\n");
+ break;
+ case K_LBREAK : /* Send a Long BREAK */
+ printf("\\Klbreak Transmit LONG BREAK signal to host\n");
+ break;
+ case K_NULL : /* Send a NUL */
+ printf("\\Knull Transmit NULL ('\0') character to host\n");
+ break;
+ case K_HELP : /* Pop-up help */
+ printf("\\Khelp Raise Pop-Up help display\n");
+ break;
+ case K_HOLDSCRN : /* Hold screen */
+ printf("\\Kholdscrn Pause data input during CONNECT mode\n");
+ break;
+ case K_IGNORE : /* Ignore this key, don't even beep */
+ printf("\\Kignore Ignore key\n");
+ break;
+
+ case K_LOGOFF : /* Turn off session logging */
+ printf("\\Klogoff Turn off session logging (see \\Ksession)\n");
+ break;
+ case K_LOGON : /* Turn on session logging */
+ printf("\\Klogon Turn on session logging (see \\Ksession)\n");
+ break;
+ case K_SESSION:
+ printf(
+ "\\Ksession Toggle on/off session logging to 'session.log'\n");
+ break;
+ case K_AUTODOWN:
+ printf("\\Kautodown Toggle on/off terminal autodownload.\n");
+ break;
+ case K_BYTESIZE:
+ printf(
+ "\\Kbytesize Toggle terminal bytesize between 7 and 8 bits.\n");
+ break;
+
+#ifdef COMMENT
+ case MODELINE:
+ case K_NETHOLD : /* Put network connection on hold */
+ case K_NEXTSESS : /* Toggle to next network session */
+#endif /* COMMENT */
+
+ case K_CURSOR_URL:
+ printf(
+ "\\Kurl Treat text under cursor position as a URL\n");
+ break;
+ case K_STATUS : /* Show status */
+ printf(
+ "\\Kstatus Toggle statusline (None, Indicator, Host Writeable)\n");
+ break;
+ case K_TERMTYPE : /* Toggle term type: text/graphics */
+ printf("\\Ktermtype Toggle Terminal Type\n");
+ break;
+ case K_PRTCTRL : /* Print Controller mode */
+ printf("\\Kprtctrl Toggle Ctrl-Print (transparent) mode\n");
+ break;
+ case K_PRINTFF : /* Print formfeed */
+ printf("\\Kprintff Output Form Feed to SET PRINTER device\n");
+ break;
+ case K_FLIPSCN : /* Flip screen */
+ printf("\\Kflipscn Reverse foreground and background colors\n");
+ break;
+ case K_DEBUG : /* Toggle debugging */
+ printf("\\Kdebug Toggle Terminal Debug mode\n");
+ break;
+ case K_TN_SAK : /* TELNET Secure Access Key */
+ printf("\\Ktn_sak TELNET: IBM Secure Access Key\n");
+ printf(" Used to request a Trusted Shell with AIX\n");
+ break;
+ case K_TN_AO : /* TELNET Cancel Output */
+ printf("\\Ktn_ao TELNET: Transmit Cancel-Output request\n");
+ break;
+ case K_TN_AYT : /* TELNET Are You There */
+ printf("\\Ktnayt TELNET: Transmit Are You There? request\n");
+ break;
+ case K_TN_EC : /* TELNET Erase Character */
+ printf("\\Ktn_ec TELNET: Transmit Erase Character request\n");
+ break;
+ case K_TN_EL : /* TELNET Erase Line */
+ printf("\\Ktn_el TELNET: Transmit Erase Line request\n");
+ break;
+ case K_TN_GA : /* TELNET Go Ahead */
+ printf("\\Ktn_ga TELNET: Transmit Go Ahead request\n");
+ break;
+ case K_TN_IP : /* TELNET Interrupt Process */
+ printf("\\Ktn_ip TELNET: Transmit Interrupt Process request\n");
+ break;
+ case K_TN_LOGOUT : /* TELNET Logout */
+ printf("\\Ktn_logout TELNET: Transmit Do Logout Option\n");
+ break;
+ case K_TN_NAWS : /* TELNET NAWS */
+ printf(
+ "\\Ktn_naws TELNET: Transmit Window Size if NAWS is active\n");
+ break;
+ case K_PASTE : /* Paste data from clipboard */
+ printf("\\Kpaste Paste data from clipboard to host\n");
+ break;
+ case K_CLRSCRN : /* Clear Terminal Screen */
+ printf("\\Kclearscreen Clear the Terminal screen\n");
+ break;
+ case K_PRTAUTO : /* Print Auto mode */
+ printf("\\Kprtauto Toggle Auto-Print mode\n");
+ break;
+ case K_PRTCOPY : /* Print Copy mode */
+ printf("\\Kprtcopy Toggle Copy-Print mode\n");
+ break;
+ case K_ANSWERBACK : /* Transmit Answerback String */
+ printf("\\Kanswerback Transmit answerback string to host\n");
+ break;
+ case K_SET_BOOK : /* Set Bookmark */
+ printf("\\Ksetbook Set bookmark\n");
+ break;
+ case K_QUIT : /* Quit Kermit */
+ printf("\\Kquit Hangup connection and quit kermit\n");
+ break;
+ case K_KEYCLICK : /* Toggle Keyclick */
+ printf("\\Kkeyclick Toggle Keyclick mode\n");
+ break;
+ case K_LOGDEBUG : /* Toggle Debug Log File */
+ printf("\\Klogdebug Toggle Debug Logging to File\n");
+ break;
+ case K_FNKEYS : /* Show Function Key Labels */
+ printf("\\Kfnkeys Display Function Key Labels\n");
+ break;
+
+#ifdef OS2MOUSE
+/* Mouse only Kverbs */
+
+ case K_MOUSE_CURPOS :
+ printf("\\Kmousecurpos Mouse: Move host cursor to position\n");
+ break;
+ case K_MOUSE_MARK :
+ printf(
+ "\\Kmousemark Mouse: Mark text for selection (drag event only)\n");
+ break;
+ case K_MOUSE_URL :
+ printf("\\Kmouseurl Mouse: Start browser with selected URL\n");
+ break;
+#endif /* OS2MOUSE */
+
+/* ANSI Function Key definitions */
+ case K_ANSIF01 :
+ printf("\\Kansif01 Transmit SCOANSI/AT386: F1 \n");
+ break;
+ case K_ANSIF02 :
+ printf("\\Kansif02 Transmit SCOANSI/AT386: F2 \n");
+ break;
+ case K_ANSIF03 :
+ printf("\\Kansif03 Transmit SCOANSI/AT386: F3 \n");
+ break;
+ case K_ANSIF04 :
+ printf("\\Kansif04 Transmit SCOANSI/AT386: F4 \n");
+ break;
+ case K_ANSIF05 :
+ printf("\\Kansif05 Transmit SCOANSI/AT386: F5 \n");
+ break;
+ case K_ANSIF06 :
+ printf("\\Kansif06 Transmit SCOANSI/AT386: F6 \n");
+ break;
+ case K_ANSIF07 :
+ printf("\\Kansif07 Transmit SCOANSI/AT386: F7 \n");
+ break;
+ case K_ANSIF08 :
+ printf("\\Kansif08 Transmit SCOANSI/AT386: F8 \n");
+ break;
+ case K_ANSIF09 :
+ printf("\\Kansif09 Transmit SCOANSI/AT386: F9 \n");
+ break;
+ case K_ANSIF10 :
+ printf("\\Kansif10 Transmit SCOANSI/AT386: F10\n");
+ break;
+ case K_ANSIF11 :
+ printf("\\Kansif11 Transmit SCOANSI/AT386: F11\n");
+ break;
+ case K_ANSIF12 :
+ printf("\\Kansif12 Transmit SCOANSI/AT386: F12\n");
+ break;
+ case K_ANSIF13 :
+ printf("\\Kansif13 Transmit SCOANSI/AT386: Shift-F1 \n");
+ break;
+ case K_ANSIF14 :
+ printf("\\Kansif14 Transmit SCOANSI/AT386: Shift-F2 \n");
+ break;
+ case K_ANSIF15 :
+ printf("\\Kansif15 Transmit SCOANSI/AT386: Shift-F3 \n");
+ break;
+ case K_ANSIF16 :
+ printf("\\Kansif16 Transmit SCOANSI/AT386: Shift-F4 \n");
+ break;
+ case K_ANSIF17 :
+ printf("\\Kansif17 Transmit SCOANSI/AT386: Shift-F5 \n");
+ break;
+ case K_ANSIF18 :
+ printf("\\Kansif18 Transmit SCOANSI/AT386: Shift-F6 \n");
+ break;
+ case K_ANSIF19 :
+ printf("\\Kansif19 Transmit SCOANSI/AT386: Shift-F7 \n");
+ break;
+ case K_ANSIF20 :
+ printf("\\Kansif20 Transmit SCOANSI/AT386: Shift-F8 \n");
+ break;
+ case K_ANSIF21 :
+ printf("\\Kansif21 Transmit SCOANSI/AT386: Shift-F9 \n");
+ break;
+ case K_ANSIF22 :
+ printf("\\Kansif22 Transmit SCOANSI/AT386: Shift-F10\n");
+ break;
+ case K_ANSIF23 :
+ printf("\\Kansif23 Transmit SCOANSI/AT386: Shift-F11\n");
+ break;
+ case K_ANSIF24 :
+ printf("\\Kansif24 Transmit SCOANSI/AT386: Shift-F12\n");
+ break;
+ case K_ANSIF25 :
+ printf("\\Kansif25 Transmit SCOANSI/AT386: Ctrl-F1 \n");
+ break;
+ case K_ANSIF26 :
+ printf("\\Kansif26 Transmit SCOANSI/AT386: Ctrl-F2 \n");
+ break;
+ case K_ANSIF27 :
+ printf("\\Kansif27 Transmit SCOANSI/AT386: Ctrl-F3 \n");
+ break;
+ case K_ANSIF28 :
+ printf("\\Kansif28 Transmit SCOANSI/AT386: Ctrl-F4 \n");
+ break;
+ case K_ANSIF29 :
+ printf("\\Kansif29 Transmit SCOANSI/AT386: Ctrl-F5 \n");
+ break;
+ case K_ANSIF30 :
+ printf("\\Kansif30 Transmit SCOANSI/AT386: Ctrl-F6 \n");
+ break;
+ case K_ANSIF31 :
+ printf("\\Kansif31 Transmit SCOANSI/AT386: Ctrl-F7 \n");
+ break;
+ case K_ANSIF32 :
+ printf("\\Kansif32 Transmit SCOANSI/AT386: Ctrl-F8 \n");
+ break;
+ case K_ANSIF33 :
+ printf("\\Kansif33 Transmit SCOANSI/AT386: Ctrl-F9 \n");
+ break;
+ case K_ANSIF34 :
+ printf("\\Kansif34 Transmit SCOANSI/AT386: Ctrl-F10\n");
+ break;
+ case K_ANSIF35 :
+ printf("\\Kansif35 Transmit SCOANSI/AT386: Ctrl-F11\n");
+ break;
+ case K_ANSIF36 :
+ printf("\\Kansif36 Transmit SCOANSI/AT386: Ctrl-F12\n");
+ break;
+ case K_ANSIF37 :
+ printf("\\Kansif37 Transmit SCOANSI/AT386: Ctrl-Shift-F1 \n");
+ break;
+ case K_ANSIF38 :
+ printf("\\Kansif38 Transmit SCOANSI/AT386: Ctrl-Shift-F2 \n");
+ break;
+ case K_ANSIF39 :
+ printf("\\Kansif39 Transmit SCOANSI/AT386: Ctrl-Shift-F3 \n");
+ break;
+ case K_ANSIF40 :
+ printf("\\Kansif40 Transmit SCOANSI/AT386: Ctrl-Shift-F4 \n");
+ break;
+ case K_ANSIF41 :
+ printf("\\Kansif41 Transmit SCOANSI/AT386: Ctrl-Shift-F5 \n");
+ break;
+ case K_ANSIF42 :
+ printf("\\Kansif42 Transmit SCOANSI/AT386: Ctrl-Shift-F6 \n");
+ break;
+ case K_ANSIF43 :
+ printf("\\Kansif43 Transmit SCOANSI/AT386: Ctrl-Shift-F7 \n");
+ break;
+ case K_ANSIF44 :
+ printf("\\Kansif44 Transmit SCOANSI/AT386: Ctrl-Shift-F8 \n");
+ break;
+ case K_ANSIF45 :
+ printf("\\Kansif45 Transmit SCOANSI/AT386: Ctrl-Shift-F9 \n");
+ break;
+ case K_ANSIF46 :
+ printf("\\Kansif46 Transmit SCOANSI/AT386: Ctrl-Shift-F10\n");
+ break;
+ case K_ANSIF47 :
+ printf("\\Kansif47 Transmit SCOANSI/AT386: Ctrl-Shift-F11\n");
+ break;
+ case K_ANSIF48 :
+ printf("\\Kansif48 Transmit SCOANSI/AT386: Ctrl-Shift-F12\n");
+ break;
+ case K_ANSIF49 :
+ printf("\\Kansif49 Transmit SCOANSI/AT386: Home\n");
+ break;
+ case K_ANSIF50 :
+ printf("\\Kansif50 Transmit SCOANSI/AT386: Up Arrow\n");
+ break;
+ case K_ANSIF51 :
+ printf("\\Kansif51 Transmit SCOANSI/AT386: PgUp\n");
+ break;
+ case K_ANSIF52 :
+ printf("\\Kansif52 Transmit SCOANSI/AT386: Ctrl-Shift-Subtract\n");
+ break;
+ case K_ANSIF53 :
+ printf("\\Kansif53 Transmit SCOANSI/AT386: Left Arrow\n");
+ break;
+ case K_ANSIF54 :
+ printf("\\Kansif54 Transmit SCOANSI/AT386: Clear\n");
+ break;
+ case K_ANSIF55 :
+ printf("\\Kansif55 Transmit SCOANSI/AT386: Right Arrow\n");
+ break;
+ case K_ANSIF56 :
+ printf("\\Kansif56 Transmit SCOANSI/AT386: Shift-Add\n");
+ break;
+ case K_ANSIF57 :
+ printf("\\Kansif57 Transmit SCOANSI/AT386: End\n");
+ break;
+ case K_ANSIF58 :
+ printf("\\Kansif58 Transmit SCOANSI/AT386: Down Arrow\n");
+ break;
+ case K_ANSIF59 :
+ printf("\\Kansif59 Transmit SCOANSI/AT386: PgDn\n");
+ break;
+ case K_ANSIF60 :
+ printf("\\Kansif60 Transmit SCOANSI/AT386: Insert\n");
+ break;
+ case K_ANSIF61 :
+ printf("\\Kansif61 Transmit SCOANSI/AT386: (not named)\n");
+ break;
+
+/* WYSE Function Keys (unshifted) */
+ case K_WYF01 :
+ printf("\\Kwyf01 Transmit WYSE 30/50/60/160: F1\n");
+ break;
+ case K_WYF02 :
+ printf("\\Kwyf02 Transmit WYSE 30/50/60/160: F2\n");
+ break;
+ case K_WYF03 :
+ printf("\\Kwyf03 Transmit WYSE 30/50/60/160: F3\n");
+ break;
+ case K_WYF04 :
+ printf("\\Kwyf04 Transmit WYSE 30/50/60/160: F4\n");
+ break;
+ case K_WYF05 :
+ printf("\\Kwyf05 Transmit WYSE 30/50/60/160: F5\n");
+ break;
+ case K_WYF06 :
+ printf("\\Kwyf06 Transmit WYSE 30/50/60/160: F6\n");
+ break;
+ case K_WYF07 :
+ printf("\\Kwyf07 Transmit WYSE 30/50/60/160: F7\n");
+ break;
+ case K_WYF08 :
+ printf("\\Kwyf08 Transmit WYSE 30/50/60/160: F8\n");
+ break;
+ case K_WYF09 :
+ printf("\\Kwyf09 Transmit WYSE 30/50/60/160: F9\n");
+ break;
+ case K_WYF10 :
+ printf("\\Kwyf10 Transmit WYSE 30/50/60/160: F10\n");
+ break;
+ case K_WYF11 :
+ printf("\\Kwyf11 Transmit WYSE 30/50/60/160: F11\n");
+ break;
+ case K_WYF12 :
+ printf("\\Kwyf12 Transmit WYSE 30/50/60/160: F12\n");
+ break;
+ case K_WYF13 :
+ printf("\\Kwyf13 Transmit WYSE 30/50/60/160: F13\n");
+ break;
+ case K_WYF14 :
+ printf("\\Kwyf14 Transmit WYSE 30/50/60/160: F14\n");
+ break;
+ case K_WYF15 :
+ printf("\\Kwyf15 Transmit WYSE 30/50/60/160: F15\n");
+ break;
+ case K_WYF16 :
+ printf("\\Kwyf16 Transmit WYSE 30/50/60/160: F16\n");
+ break;
+ case K_WYF17 :
+ printf("\\Kwyf17 Transmit WYSE 30/50/60/160: F17\n");
+ break;
+ case K_WYF18 :
+ printf("\\Kwyf18 Transmit WYSE 30/50/60/160: F18\n");
+ break;
+ case K_WYF19 :
+ printf("\\Kwyf19 Transmit WYSE 30/50/60/160: F19\n");
+ break;
+ case K_WYF20 :
+ printf("\\Kwyf20 Transmit WYSE 30/50/60/160: F20\n");
+ break;
+
+/* WYSE Function Keys (shifted) */
+ case K_WYSF01 :
+ printf("\\Kwysf01 Transmit WYSE 30/50/60/160: Shift-F1\n");
+ break;
+ case K_WYSF02 :
+ printf("\\Kwysf02 Transmit WYSE 30/50/60/160: Shift-F2\n");
+ break;
+ case K_WYSF03 :
+ printf("\\Kwysf03 Transmit WYSE 30/50/60/160: Shift-F3\n");
+ break;
+ case K_WYSF04 :
+ printf("\\Kwysf04 Transmit WYSE 30/50/60/160: Shift-F4\n");
+ break;
+ case K_WYSF05 :
+ printf("\\Kwysf05 Transmit WYSE 30/50/60/160: Shift-F5\n");
+ break;
+ case K_WYSF06 :
+ printf("\\Kwysf06 Transmit WYSE 30/50/60/160: Shift-F6\n");
+ break;
+ case K_WYSF07 :
+ printf("\\Kwysf07 Transmit WYSE 30/50/60/160: Shift-F7\n");
+ break;
+ case K_WYSF08 :
+ printf("\\Kwysf08 Transmit WYSE 30/50/60/160: Shift-F8\n");
+ break;
+ case K_WYSF09 :
+ printf("\\Kwysf09 Transmit WYSE 30/50/60/160: Shift-F9\n");
+ break;
+ case K_WYSF10 :
+ printf("\\Kwysf10 Transmit WYSE 30/50/60/160: Shift-F10\n");
+ break;
+ case K_WYSF11 :
+ printf("\\Kwysf11 Transmit WYSE 30/50/60/160: Shift-F11\n");
+ break;
+ case K_WYSF12 :
+ printf("\\Kwysf12 Transmit WYSE 30/50/60/160: Shift-F12\n");
+ break;
+ case K_WYSF13 :
+ printf("\\Kwysf13 Transmit WYSE 30/50/60/160: Shift-F13\n");
+ break;
+ case K_WYSF14 :
+ printf("\\Kwysf14 Transmit WYSE 30/50/60/160: Shift-F14\n");
+ break;
+ case K_WYSF15 :
+ printf("\\Kwysf15 Transmit WYSE 30/50/60/160: Shift-F15\n");
+ break;
+ case K_WYSF16 :
+ printf("\\Kwysf16 Transmit WYSE 30/50/60/160: Shift-F16\n");
+ break;
+ case K_WYSF17 :
+ printf("\\Kwysf17 Transmit WYSE 30/50/60/160: Shift-F17\n");
+ break;
+ case K_WYSF18 :
+ printf("\\Kwysf18 Transmit WYSE 30/50/60/160: Shift-F18\n");
+ break;
+ case K_WYSF19 :
+ printf("\\Kwysf19 Transmit WYSE 30/50/60/160: Shift-F19\n");
+ break;
+ case K_WYSF20 :
+ printf("\\Kwysf20 Transmit WYSE 30/50/60/160: Shift-F20\n");
+ break;
+
+/* WYSE Edit and Special Keys */
+ case K_WYBS :
+ printf("\\Kwybs Transmit WYSE 30/50/60/160: Backspace\n");
+ break;
+ case K_WYCLRLN :
+ printf("\\Kwyclrln Transmit WYSE 30/50/60/160: Clear Line\n");
+ break;
+ case K_WYSCLRLN :
+ printf("\\Kwysclrln Transmit WYSE 30/50/60/160: Shift-Clear Line\n");
+ break;
+ case K_WYCLRPG :
+ printf("\\Kwyclrpg Transmit WYSE 30/50/60/160: Clear Page\n");
+ break;
+ case K_WYSCLRPG :
+ printf("\\Kwysclrpg Transmit WYSE 30/50/60/160: Shift-Clear Page\n");
+ break;
+ case K_WYDELCHAR :
+ printf("\\Kwydelchar Transmit WYSE 30/50/60/160: Delete Char\n");
+ break;
+ case K_WYDELLN :
+ printf("\\Kwydelln Transmit WYSE 30/50/60/160: Delete Line\n");
+ break;
+ case K_WYENTER :
+ printf("\\Kwyenter Transmit WYSE 30/50/60/160: Enter\n");
+ break;
+ case K_WYESC :
+ printf("\\Kwyesc Transmit WYSE 30/50/60/160: Esc\n");
+ break;
+ case K_WYHOME :
+ printf("\\Kwyhome Transmit WYSE 30/50/60/160: Home\n");
+ break;
+ case K_WYSHOME :
+ printf("\\Kwyshome Transmit WYSE 30/50/60/160: Shift-Home\n");
+ break;
+ case K_WYINSERT :
+ printf("\\Kwyinsert Transmit WYSE 30/50/60/160: Insert\n");
+ break;
+ case K_WYINSCHAR :
+ printf("\\Kwyinschar Transmit WYSE 30/50/60/160: Insert Char\n");
+ break;
+ case K_WYINSLN :
+ printf("\\Kwyinsln Transmit WYSE 30/50/60/160: Insert Line\n");
+ break;
+ case K_WYPGNEXT :
+ printf("\\Kwypgnext Transmit WYSE 30/50/60/160: Page Next\n");
+ break;
+ case K_WYPGPREV :
+ printf("\\Kwypgprev Transmit WYSE 30/50/60/160: Page Previous\n");
+ break;
+ case K_WYREPLACE :
+ printf("\\Kwyreplace Transmit WYSE 30/50/60/160: Replace \n");
+ break;
+ case K_WYRETURN :
+ printf("\\Kwyreturn Transmit WYSE 30/50/60/160: Return \n");
+ break;
+ case K_WYTAB :
+ printf("\\Kwytab Transmit WYSE 30/50/60/160: Tab \n");
+ break;
+ case K_WYSTAB :
+ printf("\\Kwystab Transmit WYSE 30/50/60/160: Shift-Tab \n");
+ break;
+ case K_WYPRTSCN :
+ printf("\\Kwyprtscn Transmit WYSE 30/50/60/160: Print Screen \n");
+ break;
+ case K_WYSESC :
+ printf("\\Kwysesc Transmit WYSE 30/50/60/160: Shift-Esc \n");
+ break;
+ case K_WYSBS :
+ printf("\\Kwysbs Transmit WYSE 30/50/60/160: Shift-Backspace\n");
+ break;
+ case K_WYSENTER :
+ printf("\\Kwysenter Transmit WYSE 30/50/60/160: Shift-Enter\n");
+ break;
+ case K_WYSRETURN :
+ printf("\\Kwysreturn Transmit WYSE 30/50/60/160: Shift-Return\n");
+ break;
+ case K_WYUPARR :
+ printf("\\Kwyuparr Transmit WYSE 30/50/60/160: Up Arrow\n");
+ break;
+ case K_WYDNARR :
+ printf("\\Kwydnarr Transmit WYSE 30/50/60/160: Down Arrow\n");
+ break;
+ case K_WYLFARR :
+ printf("\\Kwylfarr Transmit WYSE 30/50/60/160: Left Arrow\n");
+ break;
+ case K_WYRTARR :
+ printf("\\Kwyrtarr Transmit WYSE 30/50/60/160: Right Arrow\n");
+ break;
+ case K_WYSUPARR :
+ printf("\\Kwysuparr Transmit WYSE 30/50/60/160: Shift-Up Arrow\n");
+ break;
+ case K_WYSDNARR :
+ printf("\\Kwysdnarr Transmit WYSE 30/50/60/160: Shift-Down Arrow\n");
+ break;
+ case K_WYSLFARR :
+ printf("\\Kwyslfarr Transmit WYSE 30/50/60/160: Shift-Left Arrow\n");
+ break;
+ case K_WYSRTARR :
+ printf("\\Kwysrtarr Transmit WYSE 30/50/60/160: Shift-Right Arrow\n");
+ break;
+ case K_WYSEND:
+ printf("\\Kwysend Transmit WYSE 30/50/60/160: Send\n");
+ break;
+ case K_WYSSEND:
+ printf("\\Kwyssend Transmit WYSE 30/50/60/160: Shift-Send\n");
+ break;
+
+/* Data General Function Keys (unshifted) */
+ case K_DGF01 :
+ printf("\\Kdgf01 Transmit Data General: F1 \n");
+ break;
+ case K_DGF02 :
+ printf("\\Kdgf01 Transmit Data General: F2 \n");
+ break;
+ case K_DGF03 :
+ printf("\\Kdgf01 Transmit Data General: F3 \n");
+ break;
+ case K_DGF04 :
+ printf("\\Kdgf01 Transmit Data General: F4 \n");
+ break;
+ case K_DGF05 :
+ printf("\\Kdgf01 Transmit Data General: F5 \n");
+ break;
+ case K_DGF06 :
+ printf("\\Kdgf01 Transmit Data General: F6 \n");
+ break;
+ case K_DGF07 :
+ printf("\\Kdgf01 Transmit Data General: F7 \n");
+ break;
+ case K_DGF08 :
+ printf("\\Kdgf01 Transmit Data General: F8 \n");
+ break;
+ case K_DGF09 :
+ printf("\\Kdgf01 Transmit Data General: F9 \n");
+ break;
+ case K_DGF10 :
+ printf("\\Kdgf01 Transmit Data General: F10 \n");
+ break;
+ case K_DGF11 :
+ printf("\\Kdgf01 Transmit Data General: F11 \n");
+ break;
+ case K_DGF12 :
+ printf("\\Kdgf01 Transmit Data General: F12 \n");
+ break;
+ case K_DGF13 :
+ printf("\\Kdgf01 Transmit Data General: F13 \n");
+ break;
+ case K_DGF14 :
+ printf("\\Kdgf01 Transmit Data General: F14 \n");
+ break;
+ case K_DGF15 :
+ printf("\\Kdgf01 Transmit Data General: F15 \n");
+ break;
+
+/* Data General Function Keys (shifted) */
+ case K_DGSF01 :
+ printf(
+ "\\Kdgsf01 Transmit Data General: Shift-F1 \n");
+ break;
+ case K_DGSF02 :
+ printf(
+ "\\Kdgsf02 Transmit Data General: Shift-F2 \n");
+ break;
+ case K_DGSF03 :
+ printf(
+ "\\Kdgsf03 Transmit Data General: Shift-F3 \n");
+ break;
+ case K_DGSF04 :
+ printf(
+ "\\Kdgsf04 Transmit Data General: Shift-F4 \n");
+ break;
+ case K_DGSF05 :
+ printf(
+ "\\Kdgsf05 Transmit Data General: Shift-F5 \n");
+ break;
+ case K_DGSF06 :
+ printf(
+ "\\Kdgsf06 Transmit Data General: Shift-F6 \n");
+ break;
+ case K_DGSF07 :
+ printf(
+ "\\Kdgsf07 Transmit Data General: Shift-F7 \n");
+ break;
+ case K_DGSF08 :
+ printf(
+ "\\Kdgsf08 Transmit Data General: Shift-F8 \n");
+ break;
+ case K_DGSF09 :
+ printf(
+ "\\Kdgsf09 Transmit Data General: Shift-F9 \n");
+ break;
+ case K_DGSF10 :
+ printf(
+ "\\Kdgsf10 Transmit Data General: Shift-F10 \n");
+ break;
+ case K_DGSF11 :
+ printf(
+ "\\Kdgsf11 Transmit Data General: Shift-F11 \n");
+ break;
+ case K_DGSF12 :
+ printf(
+ "\\Kdgsf12 Transmit Data General: Shift-F12 \n");
+ break;
+ case K_DGSF13 :
+ printf(
+ "\\Kdgsf13 Transmit Data General: Shift-F13 \n");
+ break;
+ case K_DGSF14 :
+ printf(
+ "\\Kdgsf14 Transmit Data General: Shift-F14 \n");
+ break;
+ case K_DGSF15 :
+ printf(
+ "\\Kdgsf15 Transmit Data General: Shift-F15 \n");
+ break;
+
+/* Data General Function Keys (control) */
+ case K_DGCF01 :
+ printf(
+ "\\Kdgcf01 Transmit Data General: Ctrl-F1 \n");
+ break;
+ case K_DGCF02 :
+ printf(
+ "\\Kdgcf02 Transmit Data General: Ctrl-F2 \n");
+ break;
+ case K_DGCF03 :
+ printf(
+ "\\Kdgcf03 Transmit Data General: Ctrl-F3 \n");
+ break;
+ case K_DGCF04 :
+ printf(
+ "\\Kdgcf04 Transmit Data General: Ctrl-F4 \n");
+ break;
+ case K_DGCF05 :
+ printf(
+ "\\Kdgcf05 Transmit Data General: Ctrl-F5 \n");
+ break;
+ case K_DGCF06 :
+ printf(
+ "\\Kdgcf06 Transmit Data General: Ctrl-F6 \n");
+ break;
+ case K_DGCF07 :
+ printf(
+ "\\Kdgcf07 Transmit Data General: Ctrl-F7 \n");
+ break;
+ case K_DGCF08 :
+ printf(
+ "\\Kdgcf08 Transmit Data General: Ctrl-F8 \n");
+ break;
+ case K_DGCF09 :
+ printf(
+ "\\Kdgcf09 Transmit Data General: Ctrl-F9 \n");
+ break;
+ case K_DGCF10 :
+ printf(
+ "\\Kdgcf10 Transmit Data General: Ctrl-F10 \n");
+ break;
+ case K_DGCF11 :
+ printf(
+ "\\Kdgcf11 Transmit Data General: Ctrl-F11 \n");
+ break;
+ case K_DGCF12 :
+ printf(
+ "\\Kdgcf12 Transmit Data General: Ctrl-F12 \n");
+ break;
+ case K_DGCF13 :
+ printf(
+ "\\Kdgcf13 Transmit Data General: Ctrl-F13 \n");
+ break;
+ case K_DGCF14 :
+ printf(
+ "\\Kdgcf14 Transmit Data General: Ctrl-F14 \n");
+ break;
+ case K_DGCF15 :
+ printf(
+ "\\Kdgcf15 Transmit Data General: Ctrl-F15 \n");
+ break;
+
+/* Data General Function Keys (control shifted) */
+ case K_DGCSF01 :
+ printf(
+ "\\Kdgcsf01 Transmit Data General: Ctrl-Shift-F1 \n");
+ break;
+ case K_DGCSF02 :
+ printf(
+ "\\Kdgcsf02 Transmit Data General: Ctrl-Shift-F2 \n");
+ break;
+ case K_DGCSF03 :
+ printf(
+ "\\Kdgcsf03 Transmit Data General: Ctrl-Shift-F3 \n");
+ break;
+ case K_DGCSF04 :
+ printf(
+ "\\Kdgcsf04 Transmit Data General: Ctrl-Shift-F4 \n");
+ break;
+ case K_DGCSF05 :
+ printf(
+ "\\Kdgcsf05 Transmit Data General: Ctrl-Shift-F5 \n");
+ break;
+ case K_DGCSF06 :
+ printf(
+ "\\Kdgcsf06 Transmit Data General: Ctrl-Shift-F6 \n");
+ break;
+ case K_DGCSF07 :
+ printf(
+ "\\Kdgcsf07 Transmit Data General: Ctrl-Shift-F7 \n");
+ break;
+ case K_DGCSF08 :
+ printf(
+ "\\Kdgcsf08 Transmit Data General: Ctrl-Shift-F8 \n");
+ break;
+ case K_DGCSF09 :
+ printf(
+ "\\Kdgcsf09 Transmit Data General: Ctrl-Shift-F9 \n");
+ break;
+ case K_DGCSF10 :
+ printf(
+ "\\Kdgcsf10 Transmit Data General: Ctrl-Shift-F10 \n");
+ break;
+ case K_DGCSF11 :
+ printf(
+ "\\Kdgcsf11 Transmit Data General: Ctrl-Shift-F11 \n");
+ break;
+ case K_DGCSF12 :
+ printf(
+ "\\Kdgcsf12 Transmit Data General: Ctrl-Shift-F12 \n");
+ break;
+ case K_DGCSF13 :
+ printf(
+ "\\Kdgcsf13 Transmit Data General: Ctrl-Shift-F13 \n");
+ break;
+ case K_DGCSF14 :
+ printf(
+ "\\Kdgcsf14 Transmit Data General: Ctrl-Shift-F14 \n");
+ break;
+ case K_DGCSF15 :
+ printf(
+ "\\Kdgcsf15 Transmit Data General: Ctrl-Shift-F15 \n");
+ break;
+
+ case K_DGUPARR :
+ printf("\\Kdguparr Transmit Data General: Up Arrow \n");
+ break;
+ case K_DGDNARR :
+ printf("\\Kdgdnarr Transmit Data General: Down Arrow \n");
+ break;
+ case K_DGLFARR :
+ printf("\\Kdglfarr Transmit Data General: Left Arrow \n");
+ break;
+ case K_DGRTARR :
+ printf("\\Kdgrtarr Transmit Data General: Right Arrow \n");
+ break;
+ case K_DGSUPARR :
+ printf("\\Kdgsuparr Transmit Data General: Shift-Up Arrow \n");
+ break;
+ case K_DGSDNARR :
+ printf("\\Kdgsdnarr Transmit Data General: Shift-Down Arrow \n");
+ break;
+ case K_DGSLFARR :
+ printf("\\Kdgslfarr Transmit Data General: Shift-Left Arrow \n");
+ break;
+ case K_DGSRTARR :
+ printf("\\Kdgsrtarr Transmit Data General: Shift-Right Arrow \n");
+ break;
+
+ case K_DGERASEPAGE :
+ printf("\\Kdgerasepage Transmit Data General: Erase Page \n");
+ break;
+ case K_DGC1 :
+ printf("\\Kdgc1 Transmit Data General: C1 \n");
+ break;
+ case K_DGC2 :
+ printf("\\Kdgc2 Transmit Data General: C2 \n");
+ break;
+ case K_DGERASEEOL :
+ printf("\\Kdgeraseeol Transmit Data General: Erase EOL \n");
+ break;
+ case K_DGC3 :
+ printf("\\Kdgc3 Transmit Data General: C3 \n");
+ break;
+ case K_DGC4 :
+ printf("\\Kdgc4 Transmit Data General: C4 \n");
+ break;
+ case K_DGCMDPRINT :
+ printf("\\Kdgcmdprint Transmit Data General: Command Print \n");
+ break;
+ case K_DGHOME :
+ printf("\\Kdghome Transmit Data General: Home \n");
+ break;
+ case K_DGSERASEPAGE :
+ printf("\\Kdgserasepage Transmit Data General: Erase Page \n");
+ break;
+ case K_DGSC1 :
+ printf("\\Kdgsc1 Transmit Data General: Shift-C1 \n");
+ break;
+ case K_DGSC2 :
+ printf("\\Kdgsc2 Transmit Data General: Shift-C2 \n");
+ break;
+ case K_DGSERASEEOL :
+ printf("\\Kdgseraseeol Transmit Data General: Shift-Erase EOL \n");
+ break;
+ case K_DGSC3 :
+ printf("\\Kdgsc3 Transmit Data General: Shift-C3 \n");
+ break;
+ case K_DGSC4 :
+ printf("\\Kdgsc4 Transmit Data General: Shift-C4 \n");
+ break;
+ case K_DGSCMDPRINT :
+ printf("\\Kdgscmdprint Transmit Data General: Shift-Command Print\n");
+ break;
+ case K_DGBS :
+ printf("\\Kdgbs Transmit Data General: Backspace \n");
+ break;
+ case K_DGSHOME :
+ printf("\\Kdshome Transmit Data General: Shift-Home \n");
+ break;
+
+
+/* Televideo Function Keys (unshifted) */
+ case K_TVIF01 :
+ printf("\\Ktvif01 Transmit Televideo: F1 \n");
+ break;
+ case K_TVIF02 :
+ printf("\\Ktvif02 Transmit Televideo: F2 \n");
+ break;
+ case K_TVIF03 :
+ printf("\\Ktvif03 Transmit Televideo: F3 \n");
+ break;
+ case K_TVIF04 :
+ printf("\\Ktvif04 Transmit Televideo: F4 \n");
+ break;
+ case K_TVIF05 :
+ printf("\\Ktvif05 Transmit Televideo: F5 \n");
+ break;
+ case K_TVIF06 :
+ printf("\\Ktvif06 Transmit Televideo: F6 \n");
+ break;
+ case K_TVIF07 :
+ printf("\\Ktvif07 Transmit Televideo: F7 \n");
+ break;
+ case K_TVIF08 :
+ printf("\\Ktvif08 Transmit Televideo: F8 \n");
+ break;
+ case K_TVIF09 :
+ printf("\\Ktvif09 Transmit Televideo: F9 \n");
+ break;
+ case K_TVIF10 :
+ printf("\\Ktvif10 Transmit Televideo: F10 \n");
+ break;
+ case K_TVIF11 :
+ printf("\\Ktvif11 Transmit Televideo: F11 \n");
+ break;
+ case K_TVIF12 :
+ printf("\\Ktvif12 Transmit Televideo: F12 \n");
+ break;
+ case K_TVIF13 :
+ printf("\\Ktvif13 Transmit Televideo: F13 \n");
+ break;
+ case K_TVIF14 :
+ printf("\\Ktvif14 Transmit Televideo: F14 \n");
+ break;
+ case K_TVIF15 :
+ printf("\\Ktvif15 Transmit Televideo: F15 \n");
+ break;
+ case K_TVIF16 :
+ printf("\\Ktvif16 Transmit Televideo: F16 \n");
+ break;
+
+/* Televideo Function Keys (shifted) */
+ case K_TVISF01 :
+ printf("\\Ktvisf01 Transmit Televideo: Shift-F1 \n");
+ break;
+ case K_TVISF02 :
+ printf("\\Ktvisf02 Transmit Televideo: Shift-F2 \n");
+ break;
+ case K_TVISF03 :
+ printf("\\Ktvisf03 Transmit Televideo: Shift-F3 \n");
+ break;
+ case K_TVISF04 :
+ printf("\\Ktvisf04 Transmit Televideo: Shift-F4 \n");
+ break;
+ case K_TVISF05 :
+ printf("\\Ktvisf05 Transmit Televideo: Shift-F5 \n");
+ break;
+ case K_TVISF06 :
+ printf("\\Ktvisf06 Transmit Televideo: Shift-F6 \n");
+ break;
+ case K_TVISF07 :
+ printf("\\Ktvisf07 Transmit Televideo: Shift-F7 \n");
+ break;
+ case K_TVISF08 :
+ printf("\\Ktvisf08 Transmit Televideo: Shift-F8 \n");
+ break;
+ case K_TVISF09 :
+ printf("\\Ktvisf09 Transmit Televideo: Shift-F9 \n");
+ break;
+ case K_TVISF10 :
+ printf("\\Ktvisf10 Transmit Televideo: Shift-F10\n");
+ break;
+ case K_TVISF11 :
+ printf("\\Ktvisf11 Transmit Televideo: Shift-F11\n");
+ break;
+ case K_TVISF12 :
+ printf("\\Ktvisf12 Transmit Televideo: Shift-F12\n");
+ break;
+ case K_TVISF13 :
+ printf("\\Ktvisf13 Transmit Televideo: Shift-F13\n");
+ break;
+ case K_TVISF14 :
+ printf("\\Ktvisf14 Transmit Televideo: Shift-F14\n");
+ break;
+ case K_TVISF15 :
+ printf("\\Ktvisf15 Transmit Televideo: Shift-F15\n");
+ break;
+ case K_TVISF16 :
+ printf("\\Ktvisf16 Transmit Televideo: Shift-F16\n");
+ break;
+
+/* Televideo Edit and Special Keys */
+ case K_TVIBS :
+ printf("\\Ktvibs Transmit Televideo: Backspace \n");
+ break;
+ case K_TVICLRLN :
+ printf("\\Ktviclrln Transmit Televideo: Clear Line \n");
+ break;
+ case K_TVISCLRLN :
+ printf("\\Ktvisclrln Transmit Televideo: Shift-Clear Line\n");
+ break;
+ case K_TVICLRPG :
+ printf("\\Ktviclrpg Transmit Televideo: Clear Page \n");
+ break;
+ case K_TVISCLRPG :
+ printf("\\Ktvisclrpg Transmit Televideo: Shift-Clear Page\n");
+ break;
+ case K_TVIDELCHAR :
+ printf("\\Ktvidelchar Transmit Televideo: Delete Char \n");
+ break;
+ case K_TVIDELLN :
+ printf("\\Ktvidelln Transmit Televideo: Delete Line \n");
+ break;
+ case K_TVIENTER :
+ printf("\\Ktvienter Transmit Televideo: Enter \n");
+ break;
+ case K_TVIESC :
+ printf("\\Ktviesc Transmit Televideo: Esc \n");
+ break;
+ case K_TVIHOME :
+ printf("\\Ktvihome Transmit Televideo: Home \n");
+ break;
+ case K_TVISHOME :
+ printf("\\Ktvishome Transmit Televideo: Shift-Home \n");
+ break;
+ case K_TVIINSERT :
+ printf("\\Ktviinsert Transmit Televideo: Insert \n");
+ break;
+ case K_TVIINSCHAR :
+ printf("\\Ktviinschar Transmit Televideo: Insert Char \n");
+ break;
+ case K_TVIINSLN :
+ printf("\\Ktviinsln Transmit Televideo: Insert Line \n");
+ break;
+ case K_TVIPGNEXT :
+ printf("\\Ktvipgnext Transmit Televideo: Page Next \n");
+ break;
+ case K_TVIPGPREV :
+ printf("\\Ktvipgprev Transmit Televideo: Page Previous \n");
+ break;
+ case K_TVIREPLACE :
+ printf("\\Ktvireplace Transmit Televideo: Replace \n");
+ break;
+ case K_TVIRETURN :
+ printf("\\Ktvireturn Transmit Televideo: Return \n");
+ break;
+ case K_TVITAB :
+ printf("\\Ktvitab Transmit Televideo: Tab \n");
+ break;
+ case K_TVISTAB :
+ printf("\\Ktvistab Transmit Televideo: Shift-Tab \n");
+ break;
+ case K_TVIPRTSCN :
+ printf("\\Ktviprtscn Transmit Televideo: Print Screen \n");
+ break;
+ case K_TVISESC :
+ printf("\\Ktvisesc Transmit Televideo: Shift-Esc \n");
+ break;
+ case K_TVISBS :
+ printf("\\Ktvisbs Transmit Televideo: Shift-Backspace \n");
+ break;
+ case K_TVISENTER :
+ printf("\\Ktvisenter Transmit Televideo: Shift-Enter \n");
+ break;
+ case K_TVISRETURN :
+ printf("\\Ktvisreturn Transmit Televideo: Shift-Return \n");
+ break;
+ case K_TVIUPARR :
+ printf("\\Ktviuparr Transmit Televideo: Up Arrow \n");
+ break;
+ case K_TVIDNARR :
+ printf("\\Ktvidnarr Transmit Televideo: Down Arrow \n");
+ break;
+ case K_TVILFARR :
+ printf("\\Ktvilfarr Transmit Televideo: Left Arrow \n");
+ break;
+ case K_TVIRTARR :
+ printf("\\Ktvirtarr Transmit Televideo: Right Arrow \n");
+ break;
+ case K_TVISUPARR :
+ printf("\\Ktvisuparr Transmit Televideo: Shift-Up Arrow \n");
+ break;
+ case K_TVISDNARR :
+ printf("\\Ktvisdnarr Transmit Televideo: Shift-Down Arrow\n");
+ break;
+ case K_TVISLFARR :
+ printf("\\Ktvislfarr Transmit Televideo: Shift-Left Arrow\n");
+ break;
+ case K_TVISRTARR :
+ printf("\\Ktvisrtarr Transmit Televideo: Shift-Right Arrow\n");
+ break;
+ case K_TVISEND:
+ printf("\\Ktvisend Transmit Televideo: Send\n");
+ break;
+ case K_TVISSEND:
+ printf("\\Ktvissend Transmit Televideo: Shift-Send\n");
+ break;
+
+/* HP Function and Edit keys */
+ case K_HPF01 :
+ printf("\\Khpf01 Transmit Hewlett-Packard: F1 \n");
+ break;
+ case K_HPF02 :
+ printf("\\Khpf02 Transmit Hewlett-Packard: F2 \n");
+ break;
+ case K_HPF03 :
+ printf("\\Khpf03 Transmit Hewlett-Packard: F3 \n");
+ break;
+ case K_HPF04 :
+ printf("\\Khpf04 Transmit Hewlett-Packard: F4 \n");
+ break;
+ case K_HPF05 :
+ printf("\\Khpf05 Transmit Hewlett-Packard: F5 \n");
+ break;
+ case K_HPF06 :
+ printf("\\Khpf06 Transmit Hewlett-Packard: F6 \n");
+ break;
+ case K_HPF07 :
+ printf("\\Khpf07 Transmit Hewlett-Packard: F7 \n");
+ break;
+ case K_HPF08 :
+ printf("\\Khpf08 Transmit Hewlett-Packard: F8 \n");
+ break;
+ case K_HPF09 :
+ printf("\\Khpf09 Transmit Hewlett-Packard: F9 \n");
+ break;
+ case K_HPF10 :
+ printf("\\Khpf10 Transmit Hewlett-Packard: F10 \n");
+ break;
+ case K_HPF11 :
+ printf("\\Khpf11 Transmit Hewlett-Packard: F11 \n");
+ break;
+ case K_HPF12 :
+ printf("\\Khpf12 Transmit Hewlett-Packard: F12 \n");
+ break;
+ case K_HPF13 :
+ printf("\\Khpf13 Transmit Hewlett-Packard: F13 \n");
+ break;
+ case K_HPF14 :
+ printf("\\Khpf14 Transmit Hewlett-Packard: F14 \n");
+ break;
+ case K_HPF15 :
+ printf("\\Khpf15 Transmit Hewlett-Packard: F15 \n");
+ break;
+ case K_HPF16 :
+ printf("\\Khpf16 Transmit Hewlett-Packard: F16 \n");
+ break;
+ case K_HPRETURN :
+ printf("\\Khpreturn Transmit Hewlett-Packard: Return\n");
+ break;
+ case K_HPENTER :
+ printf("\\Khpenter Transmit Hewlett-Packard: Enter (keypad)\n");
+ break;
+ case K_HPBACKTAB :
+ printf("\\Khpbacktab Transmit Hewlett-Packard: Back Tab\n");
+ break;
+ /* Siemens Nixdorf International 97801-5xx kverbs */
+ case K_SNI_DOUBLE_0 :
+ printf("\\Ksni_00 Transmit SNI-97801-5xx: Double-Zero\n");
+ break;
+ case K_SNI_C_DOUBLE_0 :
+ printf(
+"\\Ksni_c_00 Transmit SNI-97801-5xx: Ctrl-Double-Zero\n");
+ break;
+ case K_SNI_C_CE :
+ printf("\\Ksni_c_ce Transmit SNI-97801-5xx: Ctrl-CE\n");
+ break;
+ case K_SNI_C_COMPOSE :
+ printf("\\Ksni_c_compose Transmit SNI-97801-5xx: Ctrl-Compose\n");
+ break;
+ case K_SNI_C_DELETE_CHAR :
+ printf(
+"\\Ksni_c_del_char Transmit SNI-97801-5xx: Ctrl-Delete Char\n");
+ break;
+ case K_SNI_C_DELETE_LINE :
+ printf(
+"\\Ksni_c_del_line Transmit SNI-97801-5xx: Ctrl-Delete Line\n");
+ break;
+ case K_SNI_C_DELETE_WORD :
+ printf(
+"\\Ksni_c_del_word Transmit SNI-97801-5xx: Ctrl-Delete Word\n");
+ break;
+ case K_SNI_C_CURSOR_DOWN :
+ printf(
+"\\Ksni_c_dnarr Transmit SNI-97801-5xx: Ctrl-Cursor Down\n");
+ break;
+ case K_SNI_C_ENDMARKE :
+ printf("\\Ksni_c_endmarke Transmit SNI-97801-5xx: Ctrl-End Marke\n");
+ break;
+ case K_SNI_C_F01 :
+ printf("\\Ksni_c_f01 Transmit SNI-97801-5xx: Ctrl-F1\n");
+ break;
+ case K_SNI_C_F02 :
+ printf("\\Ksni_c_f02 Transmit SNI-97801-5xx: Ctrl-F2\n");
+ break;
+ case K_SNI_C_F03 :
+ printf("\\Ksni_c_f03 Transmit SNI-97801-5xx: Ctrl-F3\n");
+ break;
+ case K_SNI_C_F04 :
+ printf("\\Ksni_c_f04 Transmit SNI-97801-5xx: Ctrl-F4\n");
+ break;
+ case K_SNI_C_F05 :
+ printf("\\Ksni_c_f05 Transmit SNI-97801-5xx: Ctrl-F5\n");
+ break;
+ case K_SNI_C_F06 :
+ printf("\\Ksni_c_f06 Transmit SNI-97801-5xx: Ctrl-F6\n");
+ break;
+ case K_SNI_C_F07 :
+ printf("\\Ksni_c_f07 Transmit SNI-97801-5xx: Ctrl-F7\n");
+ break;
+ case K_SNI_C_F08 :
+ printf("\\Ksni_c_f08 Transmit SNI-97801-5xx: Ctrl-F8\n");
+ break;
+ case K_SNI_C_F09 :
+ printf("\\Ksni_c_f09 Transmit SNI-97801-5xx: Ctrl-F9\n");
+ break;
+ case K_SNI_C_F10 :
+ printf("\\Ksni_c_f10 Transmit SNI-97801-5xx: Ctrl-F10\n");
+ break;
+ case K_SNI_C_F11 :
+ printf("\\Ksni_c_f11 Transmit SNI-97801-5xx: Ctrl-F11\n");
+ break;
+ case K_SNI_C_F12 :
+ printf("\\Ksni_c_f12 Transmit SNI-97801-5xx: Ctrl-F12\n");
+ break;
+ case K_SNI_C_F13 :
+ printf("\\Ksni_c_f13 Transmit SNI-97801-5xx: Ctrl-F13\n");
+ break;
+ case K_SNI_C_F14 :
+ printf("\\Ksni_c_f14 Transmit SNI-97801-5xx: Ctrl-F14\n");
+ break;
+ case K_SNI_C_F15 :
+ printf("\\Ksni_c_f15 Transmit SNI-97801-5xx: Ctrl-F15\n");
+ break;
+ case K_SNI_C_F16 :
+ printf("\\Ksni_c_f16 Transmit SNI-97801-5xx: Ctrl-F16\n");
+ break;
+ case K_SNI_C_F17 :
+ printf("\\Ksni_c_f17 Transmit SNI-97801-5xx: Ctrl-F17\n");
+ break;
+ case K_SNI_C_F18 :
+ printf("\\Ksni_c_f18 Transmit SNI-97801-5xx: Ctrl-F18\n");
+ break;
+ case K_SNI_C_USER1 :
+ printf(
+"\\Ksni_c_user1 Transmit SNI-97801-5xx: Ctrl-Key below F18\n");
+ break;
+ case K_SNI_C_F19 :
+ printf("\\Ksni_c_f19 Transmit SNI-97801-5xx: Ctrl-F19\n");
+ break;
+ case K_SNI_C_USER2 :
+ printf(
+"\\Ksni_c_user2 Transmit SNI-97801-5xx: Ctrl-Key below F19\n");
+ break;
+ case K_SNI_C_F20 :
+ printf("\\Ksni_c_f20 Transmit SNI-97801-5xx: Ctrl-F20\n");
+ break;
+ case K_SNI_C_USER3 :
+ printf(
+"\\Ksni_c_user3 Transmit SNI-97801-5xx: Ctrl-Key below F20\n");
+ break;
+ case K_SNI_C_F21 :
+ printf("\\Ksni_c_f21 Transmit SNI-97801-5xx: Ctrl-F21\n");
+ break;
+ case K_SNI_C_USER4 :
+ printf(
+"\\Ksni_c_user4 Transmit SNI-97801-5xx: Ctrl-Key below F21\n");
+ break;
+ case K_SNI_C_F22 :
+ printf("\\Ksni_c_f22 Transmit SNI-97801-5xx: Ctrl-F22\n");
+ break;
+ case K_SNI_C_USER5 :
+ printf(
+"\\Ksni_c_user5 Transmit SNI-97801-5xx: Ctrl-Key below F22\n");
+ break;
+ case K_SNI_C_HELP :
+ printf("\\Ksni_c_help Transmit SNI-97801-5xx: Ctrl-Help\n");
+ break;
+ case K_SNI_C_HOME :
+ printf("\\Ksni_c_home Transmit SNI-97801-5xx: Ctrl-Home\n");
+ break;
+ case K_SNI_C_INSERT_CHAR :
+ printf(
+"\\Ksni_c_ins_char Transmit SNI-97801-5xx: Ctrl-Insert Char\n");
+ break;
+ case K_SNI_C_INSERT_LINE :
+ printf(
+"\\Ksni_c_ins_line Transmit SNI-97801-5xx: Ctrl-Insert Line\n");
+ break;
+ case K_SNI_C_INSERT_WORD :
+ printf(
+"\\Ksni_c_ins_word Transmit SNI-97801-5xx: Ctrl-Insert Word\n");
+ break;
+ case K_SNI_C_LEFT_TAB :
+ printf("\\Ksni_c_left_tab Transmit SNI-97801-5xx: Ctrl-Left Tab\n");
+ break;
+ case K_SNI_C_CURSOR_LEFT :
+ printf(
+"\\Ksni_c_lfarr Transmit SNI-97801-5xx: Ctrl-Cursor Left\n");
+ break;
+ case K_SNI_C_MODE :
+ printf("\\Ksni_c_mode Transmit SNI-97801-5xx: Ctrl-Mode\n");
+ break;
+ case K_SNI_C_PAGE :
+ printf("\\Ksni_c_page Transmit SNI-97801-5xx: Ctrl-Page\n");
+ break;
+ case K_SNI_C_PRINT :
+ printf("\\Ksni_c_print Transmit SNI-97801-5xx: Ctrl-Print\n");
+ break;
+ case K_SNI_C_CURSOR_RIGHT:
+ printf(
+"\\Ksni_c_rtarr Transmit SNI-97801-5xx: Ctrl-Cursor Right\n");
+ break;
+ case K_SNI_C_SCROLL_DOWN :
+ printf(
+"\\Ksni_c_scroll_dn Transmit SNI-97801-5xx: Ctrl-Scroll Down\n");
+ break;
+ case K_SNI_C_SCROLL_UP :
+ printf("\\Ksni_c_scroll_up Transmit SNI-97801-5xx: Ctrl-Scroll Up\n");
+ break;
+ case K_SNI_C_START :
+ printf("\\Ksni_c_start Transmit SNI-97801-5xx: Ctrl-Start\n");
+ break;
+ case K_SNI_C_CURSOR_UP :
+ printf("\\Ksni_c_uparr Transmit SNI-97801-5xx: Ctrl-Cursor Up\n");
+ break;
+ case K_SNI_C_TAB :
+ printf("\\Ksni_c_tab Transmit SNI-97801-5xx: Ctrl-Tab\n");
+ break;
+ case K_SNI_CE :
+ printf("\\Ksni_ce Transmit SNI-97801-5xx: CE\n");
+ break;
+ case K_SNI_CH_CODE:
+ printf("\\Ksni_ch_code Toggle SNI-97801-5xx: CH.CODE function.\n");
+ break;
+ case K_SNI_COMPOSE :
+ printf("\\Ksni_compose Transmit SNI-97801-5xx: Compose\n");
+ break;
+ case K_SNI_DELETE_CHAR :
+ printf("\\Ksni_del_char Transmit SNI-97801-5xx: Delete Char\n");
+ break;
+ case K_SNI_DELETE_LINE :
+ printf("\\Ksni_del_line Transmit SNI-97801-5xx: Delete Line\n");
+ break;
+ case K_SNI_DELETE_WORD :
+ printf("\\Ksni_del_word Transmit SNI-97801-5xx: Delete Word\n");
+ break;
+ case K_SNI_CURSOR_DOWN :
+ printf("\\Ksni_dnarr Transmit SNI-97801-5xx: Cursor Down\n");
+ break;
+ case K_SNI_ENDMARKE :
+ printf("\\Ksni_endmarke Transmit SNI-97801-5xx: End Marke\n");
+ break;
+ case K_SNI_F01 :
+ printf("\\Ksni_f01 Transmit SNI-97801-5xx: F1\n");
+ break;
+ case K_SNI_F02 :
+ printf("\\Ksni_f02 Transmit SNI-97801-5xx: F2\n");
+ break;
+ case K_SNI_F03 :
+ printf("\\Ksni_f03 Transmit SNI-97801-5xx: F3\n");
+ break;
+ case K_SNI_F04 :
+ printf("\\Ksni_f04 Transmit SNI-97801-5xx: F4\n");
+ break;
+ case K_SNI_F05 :
+ printf("\\Ksni_f05 Transmit SNI-97801-5xx: F5\n");
+ break;
+ case K_SNI_F06 :
+ printf("\\Ksni_f06 Transmit SNI-97801-5xx: F6\n");
+ break;
+ case K_SNI_F07 :
+ printf("\\Ksni_f07 Transmit SNI-97801-5xx: F7\n");
+ break;
+ case K_SNI_F08 :
+ printf("\\Ksni_f08 Transmit SNI-97801-5xx: F8\n");
+ break;
+ case K_SNI_F09 :
+ printf("\\Ksni_f09 Transmit SNI-97801-5xx: F9\n");
+ break;
+ case K_SNI_F10 :
+ printf("\\Ksni_f10 Transmit SNI-97801-5xx: F10\n");
+ break;
+ case K_SNI_F11 :
+ printf("\\Ksni_f11 Transmit SNI-97801-5xx: F11\n");
+ break;
+ case K_SNI_F12 :
+ printf("\\Ksni_f12 Transmit SNI-97801-5xx: F12\n");
+ break;
+ case K_SNI_F13 :
+ printf("\\Ksni_f13 Transmit SNI-97801-5xx: F13\n");
+ break;
+ case K_SNI_F14 :
+ printf("\\Ksni_f14 Transmit SNI-97801-5xx: F14\n");
+ break;
+ case K_SNI_F15 :
+ printf("\\Ksni_f15 Transmit SNI-97801-5xx: F15\n");
+ break;
+ case K_SNI_F16 :
+ printf("\\Ksni_f16 Transmit SNI-97801-5xx: F16\n");
+ break;
+ case K_SNI_F17 :
+ printf("\\Ksni_f17 Transmit SNI-97801-5xx: F17\n");
+ break;
+ case K_SNI_F18 :
+ printf("\\Ksni_f18 Transmit SNI-97801-5xx: F18\n");
+ break;
+ case K_SNI_USER1 :
+ printf("\\Ksni_user1 Transmit SNI-97801-5xx: Key below F18\n");
+ break;
+ case K_SNI_F19 :
+ printf("\\Ksni_f19 Transmit SNI-97801-5xx: F19\n");
+ break;
+ case K_SNI_USER2 :
+ printf("\\Ksni_user2 Transmit SNI-97801-5xx: Key below F19\n");
+ break;
+ case K_SNI_F20 :
+ printf("\\Ksni_f20 Transmit SNI-97801-5xx: F20\n");
+ break;
+ case K_SNI_USER3 :
+ printf("\\Ksni_user3 Transmit SNI-97801-5xx: Key below F20\n");
+ break;
+ case K_SNI_F21 :
+ printf("\\Ksni_f21 Transmit SNI-97801-5xx: F21\n");
+ break;
+ case K_SNI_USER4 :
+ printf("\\Ksni_user4 Transmit SNI-97801-5xx: Key below F21\n");
+ break;
+ case K_SNI_F22 :
+ printf("\\Ksni_f22 Transmit SNI-97801-5xx: F22\n");
+ break;
+ case K_SNI_USER5 :
+ printf("\\Ksni_user5 Transmit SNI-97801-5xx: Key below F22\n");
+ break;
+ case K_SNI_HELP :
+ printf("\\Ksni_help Transmit SNI-97801-5xx: Help\n");
+ break;
+ case K_SNI_HOME :
+ printf("\\Ksni_home Transmit SNI-97801-5xx: Home\n");
+ break;
+ case K_SNI_INSERT_CHAR :
+ printf("\\Ksni_ins_char Transmit SNI-97801-5xx: Insert Char\n");
+ break;
+ case K_SNI_INSERT_LINE :
+ printf("\\Ksni_ins_line Transmit SNI-97801-5xx: Insert Line\n");
+ break;
+ case K_SNI_INSERT_WORD :
+ printf("\\Ksni_ins_word Transmit SNI-97801-5xx: Insert Word\n");
+ break;
+ case K_SNI_LEFT_TAB :
+ printf("\\Ksni_left_tab Transmit SNI-97801-5xx: Left Tab\n");
+ break;
+ case K_SNI_CURSOR_LEFT :
+ printf("\\Ksni_lfarr Transmit SNI-97801-5xx: Cursor Left\n");
+ break;
+ case K_SNI_MODE :
+ printf("\\Ksni_mode Transmit SNI-97801-5xx: Mode\n");
+ break;
+ case K_SNI_PAGE :
+ printf("\\Ksni_page Transmit SNI-97801-5xx: Page\n");
+ break;
+ case K_SNI_PRINT :
+ printf("\\Ksni_print Transmit SNI-97801-5xx: Print\n");
+ break;
+ case K_SNI_CURSOR_RIGHT :
+ printf("\\Ksni_rtarr Transmit SNI-97801-5xx: Cursor Right\n");
+ break;
+ case K_SNI_S_DOUBLE_0 :
+ printf(
+"\\Ksni_s_00 Transmit SNI-97801-5xx: Shift-Double-Zero\n");
+ break;
+ case K_SNI_S_CE :
+ printf("\\Ksni_s_ce Transmit SNI-97801-5xx: Shift-CE\n");
+ break;
+ case K_SNI_S_COMPOSE :
+ printf("\\Ksni_s_compose Transmit SNI-97801-5xx: Shift-Compose\n");
+ break;
+ case K_SNI_S_DELETE_CHAR :
+ printf(
+"\\Ksni_s_del_char Transmit SNI-97801-5xx: Shift-Delete Char\n");
+ break;
+ case K_SNI_S_DELETE_LINE :
+ printf(
+"\\Ksni_s_del_line Transmit SNI-97801-5xx: Shift-Delete Line\n");
+ break;
+ case K_SNI_S_DELETE_WORD :
+ printf(
+"\\Ksni_s_del_word Transmit SNI-97801-5xx: Shift-Delete Word\n");
+ break;
+ case K_SNI_S_CURSOR_DOWN :
+ printf(
+"\\Ksni_s_dnarr Transmit SNI-97801-5xx: Shift-Cursor Down\n");
+ break;
+ case K_SNI_S_ENDMARKE :
+ printf("\\Ksni_s_endmarke Transmit SNI-97801-5xx: Shift-End Marke\n");
+ break;
+ case K_SNI_S_F01 :
+ printf("\\Ksni_s_f01 Transmit SNI-97801-5xx: Shift-F1\n");
+ break;
+ case K_SNI_S_F02 :
+ printf("\\Ksni_s_f02 Transmit SNI-97801-5xx: Shift-F2\n");
+ break;
+ case K_SNI_S_F03 :
+ printf("\\Ksni_s_f03 Transmit SNI-97801-5xx: Shift-F3\n");
+ break;
+ case K_SNI_S_F04 :
+ printf("\\Ksni_s_f04 Transmit SNI-97801-5xx: Shift-F4\n");
+ break;
+ case K_SNI_S_F05 :
+ printf("\\Ksni_s_f05 Transmit SNI-97801-5xx: Shift-F5\n");
+ break;
+ case K_SNI_S_F06 :
+ printf("\\Ksni_s_f06 Transmit SNI-97801-5xx: Shift-F6\n");
+ break;
+ case K_SNI_S_F07 :
+ printf("\\Ksni_s_f07 Transmit SNI-97801-5xx: Shift-F7\n");
+ break;
+ case K_SNI_S_F08 :
+ printf("\\Ksni_s_f08 Transmit SNI-97801-5xx: Shift-F8\n");
+ break;
+ case K_SNI_S_F09 :
+ printf("\\Ksni_s_f09 Transmit SNI-97801-5xx: Shift-F9\n");
+ break;
+ case K_SNI_S_F10 :
+ printf("\\Ksni_s_f10 Transmit SNI-97801-5xx: Shift-F10\n");
+ break;
+ case K_SNI_S_F11 :
+ printf("\\Ksni_s_f11 Transmit SNI-97801-5xx: Shift-F11\n");
+ break;
+ case K_SNI_S_F12 :
+ printf("\\Ksni_s_f12 Transmit SNI-97801-5xx: Shift-F12\n");
+ break;
+ case K_SNI_S_F13 :
+ printf("\\Ksni_s_f13 Transmit SNI-97801-5xx: Shift-F13\n");
+ break;
+ case K_SNI_S_F14 :
+ printf("\\Ksni_s_f14 Transmit SNI-97801-5xx: Shift-F14\n");
+ break;
+ case K_SNI_S_F15 :
+ printf("\\Ksni_s_f15 Transmit SNI-97801-5xx: Shift-F15\n");
+ break;
+ case K_SNI_S_F16 :
+ printf("\\Ksni_s_f16 Transmit SNI-97801-5xx: Shift-F16\n");
+ break;
+ case K_SNI_S_F17 :
+ printf("\\Ksni_s_f17 Transmit SNI-97801-5xx: Shift-F17\n");
+ break;
+ case K_SNI_S_F18 :
+ printf("\\Ksni_s_f18 Transmit SNI-97801-5xx: Shift-F18\n");
+ break;
+ case K_SNI_S_USER1 :
+ printf(
+"\\Ksni_s_user1 Transmit SNI-97801-5xx: Shift-Key below F18\n");
+ break;
+ case K_SNI_S_F19 :
+ printf("\\Ksni_s_f19 Transmit SNI-97801-5xx: Shift-F19\n");
+ break;
+ case K_SNI_S_USER2 :
+ printf(
+"\\Ksni_s_user2 Transmit SNI-97801-5xx: Shift-Key below F19\n");
+ break;
+ case K_SNI_S_F20 :
+ printf("\\Ksni_s_f20 Transmit SNI-97801-5xx: Shift-F20\n");
+ break;
+ case K_SNI_S_USER3 :
+ printf(
+"\\Ksni_s_user3 Transmit SNI-97801-5xx: Shift-Key below F20\n");
+ break;
+ case K_SNI_S_F21 :
+ printf("\\Ksni_s_f21 Transmit SNI-97801-5xx: Shift-F21\n");
+ break;
+ case K_SNI_S_USER4 :
+ printf(
+"\\Ksni_s_user4 Transmit SNI-97801-5xx: Shift-Key below F21\n");
+ break;
+ case K_SNI_S_F22 :
+ printf("\\Ksni_s_f22 Transmit SNI-97801-5xx: Shift-F22\n");
+ break;
+ case K_SNI_S_USER5 :
+ printf(
+"\\Ksni_s_user5 Transmit SNI-97801-5xx: Shift-Key below F22\n");
+ break;
+ case K_SNI_S_HELP :
+ printf("\\Ksni_s_help Transmit SNI-97801-5xx: Shift-Help\n");
+ break;
+ case K_SNI_S_HOME :
+ printf("\\Ksni_s_home Transmit SNI-97801-5xx: Shift-Home\n");
+ break;
+ case K_SNI_S_INSERT_CHAR :
+ printf(
+"\\Ksni_s_ins_char Transmit SNI-97801-5xx: Shift-Insert Char\n");
+ break;
+ case K_SNI_S_INSERT_LINE :
+ printf(
+"\\Ksni_s_ins_line Transmit SNI-97801-5xx: Shift-Insert Line\n");
+ break;
+ case K_SNI_S_INSERT_WORD :
+ printf(
+"\\Ksni_s_ins_word Transmit SNI-97801-5xx: Shift-Insert Word\n");
+ break;
+ case K_SNI_S_LEFT_TAB :
+ printf("\\Ksni_s_left_tab Transmit SNI-97801-5xx: Shift-Left Tab\n");
+ break;
+ case K_SNI_S_CURSOR_LEFT :
+ printf(
+"\\Ksni_s_lfarr Transmit SNI-97801-5xx: Shift-Cursor Left\n");
+ break;
+ case K_SNI_S_MODE :
+ printf("\\Ksni_s_mode Transmit SNI-97801-5xx: Shift-Mode\n");
+ break;
+ case K_SNI_S_PAGE :
+ printf("\\Ksni_s_page Transmit SNI-97801-5xx: Shift-Page\n");
+ break;
+ case K_SNI_S_PRINT :
+ printf("\\Ksni_s_print Transmit SNI-97801-5xx: Shift-Print\n");
+ break;
+ case K_SNI_S_CURSOR_RIGHT:
+ printf(
+"\\Ksni_s_rtarr Transmit SNI-97801-5xx: Shift-Cursor Right\n");
+ break;
+ case K_SNI_S_SCROLL_DOWN :
+ printf(
+"\\Ksni_s_scroll_dn Transmit SNI-97801-5xx: Shift-Scroll Down\n");
+ break;
+ case K_SNI_S_SCROLL_UP :
+ printf("\\Ksni_s_scroll_up Transmit SNI-97801-5xx: Shift-Scroll Up\n");
+ break;
+ case K_SNI_S_START :
+ printf("\\Ksni_s_start Transmit SNI-97801-5xx: Shift-Start\n");
+ break;
+ case K_SNI_S_CURSOR_UP :
+ printf("\\Ksni_s_uparr Transmit SNI-97801-5xx: Shift-Cursor Up\n");
+ break;
+ case K_SNI_S_TAB :
+ printf("\\Ksni_s_tab Transmit SNI-97801-5xx: Shift-Tab\n");
+ break;
+ case K_SNI_SCROLL_DOWN :
+ printf("\\Ksni_scroll_dn Transmit SNI-97801-5xx: Scroll Down\n");
+ break;
+ case K_SNI_SCROLL_UP :
+ printf("\\Ksni_scroll_up Transmit SNI-97801-5xx: Scroll Up\n");
+ break;
+ case K_SNI_START :
+ printf("\\Ksni_start Transmit SNI-97801-5xx: Start\n");
+ break;
+ case K_SNI_TAB :
+ printf("\\Ksni_tab Transmit SNI-97801-5xx: Tab\n");
+ break;
+ case K_SNI_CURSOR_UP :
+ printf("\\Ksni_uparr Transmit SNI-97801-5xx: Cursor Up\n");
+ break;
+
+ case K_BA80_ATTR:
+ printf("\\Kba80_attr Transmit BA80: Attr\n");
+ break;
+ case K_BA80_C_KEY:
+ printf("\\Kba80_c_key Transmit BA80: C\n");
+ break;
+ case K_BA80_CLEAR:
+ printf("\\Kba80_clear Transmit BA80: Clear\n");
+ break;
+ case K_BA80_CMD:
+ printf("\\Kba80_cmd Transmit BA80: Cmd\n");
+ break;
+ case K_BA80_COPY:
+ printf("\\Kba80_copy Transmit BA80: Copy\n");
+ break;
+ case K_BA80_DEL:
+ printf("\\Kba80_del Transmit BA80: Delete\n");
+ break;
+ case K_BA80_DEL_B:
+ printf("\\Kba80_del_b Transmit BA80: Delete B\n");
+ break;
+ case K_BA80_DO:
+ printf("\\Kba80_do Transmit BA80: Do\n");
+ break;
+ case K_BA80_END:
+ printf("\\Kba80_end Transmit BA80: End\n");
+ break;
+ case K_BA80_ENV:
+ printf("\\Kba80_env Transmit BA80: Env\n");
+ break;
+ case K_BA80_EOP:
+ printf("\\Kba80_eop Transmit BA80: EOP\n");
+ break;
+ case K_BA80_ERASE:
+ printf("\\Kba80_erase Transmit BA80: Erase\n");
+ break;
+ case K_BA80_FMT:
+ printf("\\Kba80_fmt Transmit BA80: Format\n");
+ break;
+ case K_BA80_HELP:
+ printf("\\Kba80_help Transmit BA80: Help\n");
+ break;
+ case K_BA80_HOME:
+ printf("\\Kba80_home Transmit BA80: Home\n");
+ break;
+ case K_BA80_INS:
+ printf("\\Kba80_ins Transmit BA80: Insert\n");
+ break;
+ case K_BA80_INS_B:
+ printf("\\Kba80_ins_b Transmit BA80: Insert B\n");
+ break;
+ case K_BA80_MARK:
+ printf("\\Kba80_mark Transmit BA80: Mark\n");
+ break;
+ case K_BA80_MOVE:
+ printf("\\Kba80_move Transmit BA80: Move\n");
+ break;
+ case K_BA80_PA01:
+ printf("\\Kba80_pa01 Transmit BA80: PA1\n");
+ break;
+ case K_BA80_PA02:
+ printf("\\Kba80_pa02 Transmit BA80: PA2\n");
+ break;
+ case K_BA80_PA03:
+ printf("\\Kba80_pa03 Transmit BA80: PA3\n");
+ break;
+ case K_BA80_PA04:
+ printf("\\Kba80_pa04 Transmit BA80: PA4\n");
+ break;
+ case K_BA80_PA05:
+ printf("\\Kba80_pa05 Transmit BA80: PA5\n");
+ break;
+ case K_BA80_PA06:
+ printf("\\Kba80_pa06 Transmit BA80: PA6\n");
+ break;
+ case K_BA80_PA07:
+ printf("\\Kba80_pa07 Transmit BA80: PA7\n");
+ break;
+ case K_BA80_PA08:
+ printf("\\Kba80_pa08 Transmit BA80: PA8\n");
+ break;
+ case K_BA80_PA09:
+ printf("\\Kba80_pa09 Transmit BA80: PA9\n");
+ break;
+ case K_BA80_PA10:
+ printf("\\Kba80_pa10 Transmit BA80: PA10\n");
+ break;
+ case K_BA80_PA11:
+ printf("\\Kba80_pa11 Transmit BA80: PA11\n");
+ break;
+ case K_BA80_PA12:
+ printf("\\Kba80_pa12 Transmit BA80: PA12\n");
+ break;
+ case K_BA80_PA13:
+ printf("\\Kba80_pa13 Transmit BA80: PA13\n");
+ break;
+ case K_BA80_PA14:
+ printf("\\Kba80_pa14 Transmit BA80: PA14\n");
+ break;
+ case K_BA80_PA15:
+ printf("\\Kba80_pa15 Transmit BA80: PA15\n");
+ break;
+ case K_BA80_PA16:
+ printf("\\Kba80_pa16 Transmit BA80: PA16\n");
+ break;
+ case K_BA80_PA17:
+ printf("\\Kba80_pa17 Transmit BA80: PA17\n");
+ break;
+ case K_BA80_PA18:
+ printf("\\Kba80_pa18 Transmit BA80: PA18\n");
+ break;
+ case K_BA80_PA19:
+ printf("\\Kba80_pa19 Transmit BA80: PA19\n");
+ break;
+ case K_BA80_PA20:
+ printf("\\Kba80_pa20 Transmit BA80: PA20\n");
+ break;
+ case K_BA80_PA21:
+ printf("\\Kba80_pa21 Transmit BA80: PA21\n");
+ break;
+ case K_BA80_PA22:
+ printf("\\Kba80_pa22 Transmit BA80: PA22\n");
+ break;
+ case K_BA80_PA23:
+ printf("\\Kba80_pa23 Transmit BA80: PA23\n");
+ break;
+ case K_BA80_PA24:
+ printf("\\Kba80_pa24 Transmit BA80: PA24\n");
+ break;
+ case K_BA80_PGDN:
+ printf("\\Kba80_pgdn Transmit BA80: Page Down\n");
+ break;
+ case K_BA80_PGUP:
+ printf("\\Kba80_pgup Transmit BA80: Page Up\n");
+ break;
+ case K_BA80_PICK:
+ printf("\\Kba80_pick Transmit BA80: Pick\n");
+ break;
+ case K_BA80_PRINT:
+ printf("\\Kba80_print Transmit BA80: Print\n");
+ break;
+ case K_BA80_PUT:
+ printf("\\Kba80_put Transmit BA80: Put\n");
+ break;
+ case K_BA80_REFRESH:
+ printf("\\Kba80_refresh Transmit BA80: Refresh \n");
+ break;
+ case K_BA80_RESET:
+ printf("\\Kba80_reset Transmit BA80: Reset\n");
+ break;
+ case K_BA80_RUBOUT:
+ printf("\\Kba80_rubout Transmit BA80: Rubout\n");
+ break;
+ case K_BA80_SAVE:
+ printf("\\Kba80_save Transmit BA80: Save\n");
+ break;
+ case K_BA80_SOFTKEY1:
+ printf("\\Kba80_softkey1 Transmit BA80: Softkey 1\n");
+ break;
+ case K_BA80_SOFTKEY2:
+ printf("\\Kba80_softkey2 Transmit BA80: Softkey 2\n");
+ break;
+ case K_BA80_SOFTKEY3:
+ printf("\\Kba80_softkey3 Transmit BA80: Softkey 3\n");
+ break;
+ case K_BA80_SOFTKEY4:
+ printf("\\Kba80_softkey4 Transmit BA80: Softkey 4\n");
+ break;
+ case K_BA80_SOFTKEY5:
+ printf("\\Kba80_softkey5 Transmit BA80: Softkey 5\n");
+ break;
+ case K_BA80_SOFTKEY6:
+ printf("\\Kba80_softkey6 Transmit BA80: Softkey 6\n");
+ break;
+ case K_BA80_SOFTKEY7:
+ printf("\\Kba80_softkey7 Transmit BA80: Softkey 7\n");
+ break;
+ case K_BA80_SOFTKEY8:
+ printf("\\Kba80_softkey8 Transmit BA80: Softkey 8\n");
+ break;
+ case K_BA80_SOFTKEY9:
+ printf("\\Kba80_softkey9 Transmit BA80: Softkey 9\n");
+ break;
+ case K_BA80_UNDO:
+ printf("\\Kba80_undo Transmit BA80: Undo\n");
+ break;
+
+ case K_I31_F01:
+ printf("\\Ki31_f01 Transmit IBM 31xx: F1\n");
+ break;
+ case K_I31_F02:
+ printf("\\Ki31_f02 Transmit IBM 31xx: F2\n");
+ break;
+ case K_I31_F03:
+ printf("\\Ki31_f03 Transmit IBM 31xx: F3\n");
+ break;
+ case K_I31_F04:
+ printf("\\Ki31_f04 Transmit IBM 31xx: F4\n");
+ break;
+ case K_I31_F05:
+ printf("\\Ki31_f05 Transmit IBM 31xx: F5\n");
+ break;
+ case K_I31_F06:
+ printf("\\Ki31_f06 Transmit IBM 31xx: F6\n");
+ break;
+ case K_I31_F07:
+ printf("\\Ki31_f07 Transmit IBM 31xx: F7\n");
+ break;
+ case K_I31_F08:
+ printf("\\Ki31_f08 Transmit IBM 31xx: F8\n");
+ break;
+ case K_I31_F09:
+ printf("\\Ki31_f09 Transmit IBM 31xx: F9\n");
+ break;
+ case K_I31_F10:
+ printf("\\Ki31_f10 Transmit IBM 31xx: F10\n");
+ break;
+ case K_I31_F11:
+ printf("\\Ki31_f11 Transmit IBM 31xx: F11\n");
+ break;
+ case K_I31_F12:
+ printf("\\Ki31_f12 Transmit IBM 31xx: F12\n");
+ break;
+ case K_I31_F13:
+ printf("\\Ki31_f13 Transmit IBM 31xx: F13\n");
+ break;
+ case K_I31_F14:
+ printf("\\Ki31_f14 Transmit IBM 31xx: F14\n");
+ break;
+ case K_I31_F15:
+ printf("\\Ki31_f15 Transmit IBM 31xx: F15\n");
+ break;
+ case K_I31_F16:
+ printf("\\Ki31_f16 Transmit IBM 31xx: F16\n");
+ break;
+ case K_I31_F17:
+ printf("\\Ki31_f17 Transmit IBM 31xx: F17\n");
+ break;
+ case K_I31_F18:
+ printf("\\Ki31_f18 Transmit IBM 31xx: F18\n");
+ break;
+ case K_I31_F19:
+ printf("\\Ki31_f19 Transmit IBM 31xx: F19\n");
+ break;
+ case K_I31_F20:
+ printf("\\Ki31_f20 Transmit IBM 31xx: F20\n");
+ break;
+ case K_I31_F21:
+ printf("\\Ki31_f21 Transmit IBM 31xx: F21\n");
+ break;
+ case K_I31_F22:
+ printf("\\Ki31_f22 Transmit IBM 31xx: F22\n");
+ break;
+ case K_I31_F23:
+ printf("\\Ki31_f23 Transmit IBM 31xx: F23\n");
+ break;
+ case K_I31_F24:
+ printf("\\Ki31_f24 Transmit IBM 31xx: F24\n");
+ break;
+ case K_I31_F25:
+ printf("\\Ki31_f25 Transmit IBM 31xx: F25\n");
+ break;
+ case K_I31_F26:
+ printf("\\Ki31_f26 Transmit IBM 31xx: F26\n");
+ break;
+ case K_I31_F27:
+ printf("\\Ki31_f27 Transmit IBM 31xx: F27\n");
+ break;
+ case K_I31_F28:
+ printf("\\Ki31_f28 Transmit IBM 31xx: F28\n");
+ break;
+ case K_I31_F29:
+ printf("\\Ki31_f29 Transmit IBM 31xx: F29\n");
+ break;
+ case K_I31_F30:
+ printf("\\Ki31_f30 Transmit IBM 31xx: F30\n");
+ break;
+ case K_I31_F31:
+ printf("\\Ki31_f31 Transmit IBM 31xx: F31\n");
+ break;
+ case K_I31_F32:
+ printf("\\Ki31_f32 Transmit IBM 31xx: F32\n");
+ break;
+ case K_I31_F33:
+ printf("\\Ki31_f33 Transmit IBM 31xx: F33\n");
+ break;
+ case K_I31_F34:
+ printf("\\Ki31_f34 Transmit IBM 31xx: F34\n");
+ break;
+ case K_I31_F35:
+ printf("\\Ki31_f35 Transmit IBM 31xx: F35\n");
+ break;
+ case K_I31_F36:
+ printf("\\Ki31_f36 Transmit IBM 31xx: F36\n");
+ break;
+ case K_I31_PA1:
+ printf("\\Ki31_pa1 Transmit IBM 31xx: PA1\n");
+ break;
+ case K_I31_PA2:
+ printf("\\Ki31_pa2 Transmit IBM 31xx: PA2\n");
+ break;
+ case K_I31_PA3:
+ printf("\\Ki31_pa3 Transmit IBM 31xx: PA3\n");
+ break;
+ case K_I31_RESET:
+ printf("\\Ki31_reset Transmit IBM 31xx: Reset\n");
+ break;
+ case K_I31_JUMP:
+ printf("\\Ki31_jump Transmit IBM 31xx: Jump\n");
+ break;
+ case K_I31_CLEAR:
+ printf("\\Ki31_clear Transmit IBM 31xx: Clear\n");
+ break;
+ case K_I31_ERASE_EOF:
+ printf("\\Ki31_erase_eof Transmit IBM 31xx: Erase to End of Field\n");
+ break;
+ case K_I31_ERASE_EOP:
+ printf("\\Ki31_eop Transmit IBM 31xx: Erase to End of Page\n");
+ break;
+ case K_I31_ERASE_INP:
+ printf("\\Ki31_inp Transmit IBM 31xx: Erase Input Operation\n");
+ break;
+ case K_I31_INSERT_CHAR:
+ printf("\\Ki31_ins_char Transmit IBM 31xx: Insert Character\n");
+ break;
+ case K_I31_INSERT_SPACE:
+ printf("\\Ki31_ins_space Transmit IBM 31xx: Insert Space\n");
+ break;
+ case K_I31_DELETE:
+ printf("\\Ki31_delete Transmit IBM 31xx: Delete Character\n");
+ break;
+ case K_I31_INS_LN:
+ printf("\\Ki31_ins_line Transmit IBM 31xx: Insert Line\n");
+ break;
+ case K_I31_DEL_LN:
+ printf("\\Ki31_del_ln Transmit IBM 31xx: Delete Line\n");
+ break;
+ case K_I31_PRINT_LINE:
+ printf("\\Ki31_prt_line Transmit IBM 31xx: Print Line\n");
+ break;
+ case K_I31_PRINT_MSG:
+ printf("\\Ki31_prt_msg Transmit IBM 31xx: Print Message\n");
+ break;
+ case K_I31_PRINT_SHIFT:
+ printf("\\Ki31_prt_shift Transmit IBM 31xx: Print Shift\n");
+ break;
+ case K_I31_CANCEL:
+ printf("\\Ki31_cancel Transmit IBM 31xx: Cancel\n");
+ break;
+ case K_I31_SEND_LINE:
+ printf("\\Ki31_send_line Transmit IBM 31xx: Send Line\n");
+ break;
+ case K_I31_SEND_MSG:
+ printf("\\Ki31_send_msg Transmit IBM 31xx: Send Message\n");
+ break;
+ case K_I31_SEND_PAGE:
+ printf("\\Ki31_send_page Transmit IBM 31xx: Send Page\n");
+ break;
+ case K_I31_HOME:
+ printf("\\Ki31_home Transmit IBM 31xx: Home\n");
+ break;
+ case K_I31_BACK_TAB:
+ printf("\\Ki31_back_tab Transmit IBM 31xx: Back Tab\n");
+ break;
+ case K_SUN_STOP:
+ printf("\\Ksunstop Transmit SUN Console: Stop\n");
+ break;
+ case K_SUN_AGAIN:
+ printf("\\Ksunagain Transmit SUN Console: Again\n");
+ break;
+ case K_SUN_PROPS:
+ printf("\\Ksunprops Transmit SUN Console: Props\n");
+ break;
+ case K_SUN_UNDO:
+ printf("\\Ksunundo Transmit SUN Console: Undo\n");
+ break;
+ case K_SUN_FRONT:
+ printf("\\Ksunfront Transmit SUN Console: Front\n");
+ break;
+ case K_SUN_COPY:
+ printf("\\Ksuncopy Transmit SUN Console: Copy\n");
+ break;
+ case K_SUN_OPEN:
+ printf("\\Ksunopen Transmit SUN Console: Open\n");
+ break;
+ case K_SUN_PASTE:
+ printf("\\Ksunpaste Transmit SUN Console: Paste\n");
+ break;
+ case K_SUN_FIND:
+ printf("\\Ksunfind Transmit SUN Console: Find\n");
+ break;
+ case K_SUN_CUT:
+ printf("\\Ksuncut Transmit SUN Console: Cut\n");
+ break;
+ case K_SUN_HELP:
+ printf("\\Ksunhelp Transmit SUN Console: Help\n");
+ break;
+
+ default:
+ printf("No additional help available for this kverb\n");
+ }
+ printf("\n");
+
+ /* This is not the proper way to do it since it doesn't show */
+ /* all emulations, nor does it show the special modes, but it */
+ /* is better than nothing. */
+
+ printf("Current bindings:\n");
+ found = 0;
+ for (i = 256; i < KMSIZE ; i++) {
+ con_event evt = mapkey(i);
+ if (evt.type != kverb)
+ continue;
+ if ((evt.kverb.id & ~F_KVERB) == xx) {
+ found = 1;
+ printf(" \\%-4d - %s\n",i,keyname(i));
+ }
+ }
+#ifdef OS2MOUSE
+ for ( button = 0 ; button < MMBUTTONMAX ; button++ )
+ for ( event = 0 ; event < MMEVENTSIZE ; event++ )
+ if ( mousemap[button][event].type == kverb ) {
+ if ( (mousemap[button][event].kverb.id & ~F_KVERB) == xx ) {
+ found = 1;
+ printf(" Mouse - %s\n",mousename(button,event));
+ }
+ }
+#endif /* OS2MOUSE */
+
+ if ( !found ) {
+ printf(" (none)\n");
+ }
+ return(0);
+}
+#endif /* NOKVERBS */
+#endif /* OS2 */
+
+#ifndef NOXFER
+/* D O H R M T -- Give help about REMOTE command */
+
+static char *hrset[] = {
+"Syntax: REMOTE SET parameter value",
+"Example: REMOTE SET FILE TYPE BINARY",
+" Asks the Kermit server to set the named parameter to the given value.",
+" Equivalent to typing the corresponding SET command directly to the other",
+" Kermit if it were in interactive mode.", "" };
+
+int
+dohrmt(xx) int xx; {
+ int x;
+ if (xx == -3) return(hmsga(hmhrmt));
+ if (xx < 0) return(xx);
+ if ((x = cmcfm()) < 0) return(x);
+ switch (xx) {
+
+case XZCPY:
+ return(hmsg("Syntax: REMOTE COPY source destination\n\
+ Asks the Kermit server to copy the source file to destination.\n\
+ Synonym: RCOPY."));
+
+case XZCWD:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE CD [ name ]\n\
+ Asks the Kermit or FTP server to change its working directory or device.\n\
+ If the device or directory name is omitted, restore the default.\n\
+ Synonym: RCD."));
+#else
+ return(hmsg("Syntax: REMOTE CD [ name ]\n\
+ Asks the Kermit server to change its working directory or device.\n\
+ If the device or directory name is omitted, restore the default.\n\
+ Synonym: RCD."));
+#endif /* NEWFTP */
+
+case XZDEL:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE DELETE filespec\n\
+ Asks the Kermit or FTP server to delete the named file(s).\n\
+ Synonym: RDEL."));
+#else
+ return(hmsg("Syntax: REMOTE DELETE filespec\n\
+ Asks the Kermit server to delete the named file(s).\n\
+ Synonym: RDEL."));
+#endif /* NEWFTP */
+
+case XZMKD:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE MKDIR directory-name\n\
+ Asks the Kermit or FTP server to create the named directory.\n\
+ Synonym: RMKDIR."));
+#else
+ return(hmsg("Syntax: REMOTE MKDIR directory-name\n\
+ Asks the Kermit server to create the named directory.\n\
+ Synonym: RMKDIR."));
+#endif /* NEWFTP */
+
+case XZRMD:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE RMDIR directory-name\n\
+ Asks the Kermit or FTP server to remove the named directory.\n\
+ Synonym: RRMDIR."));
+#else
+ return(hmsg("Syntax: REMOTE RMDIR directory-name\n\
+ Asks the Kermit server to remove the named directory.\n\
+ Synonym: RRMDIR."));
+#endif /* NEWFTP */
+
+case XZDIR:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE DIRECTORY [ filespec ]\n\
+ Asks the Kermit or FTP server to provide a directory listing of the named\n\
+ file(s) or if no file specification is given, of all files in its current\n\
+ directory. Synonym: RDIR."));
+#else
+ return(hmsg("Syntax: REMOTE DIRECTORY [ filespec ]\n\
+ Asks the Kermit server to provide a directory listing of the named\n\
+ file(s) or if no file specification is given, of all files in its current\n\
+ directory. Synonym: RDIR."));
+#endif /* NEWFTP */
+
+case XZHLP:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE HELP\n\
+ Asks the Kermit or FTP server to list the services it provides.\n\
+ Synonym: RHELP."));
+#else
+ return(hmsg("Syntax: REMOTE HELP\n\
+ Asks the Kermit server to list the services it provides.\n\
+ Synonym: RHELP."));
+#endif /* NEWFTP */
+
+case XZHOS:
+ return(hmsg("Syntax: REMOTE HOST command\n\
+ Sends a command to the other computer in its own command language\n\
+ through the Kermit server that is running on that host. Synonym: RHOST."));
+
+#ifndef NOFRILLS
+case XZKER:
+ return(hmsg("Syntax: REMOTE KERMIT command\n\
+ Sends a command to the remote Kermit server in its own command language.\n\
+ Synonym: RKERMIT."));
+
+case XZLGI:
+ return(hmsg("Syntax: REMOTE LOGIN user password [ account ]\n\
+ Logs in to a remote Kermit server that requires you login. Note: RLOGIN\n\
+ is NOT a synonym for REMOTE LOGIN."));
+
+case XZLGO:
+ return(hmsg("Syntax: REMOTE LOGOUT\n\
+ Logs out from a remote Kermit server to which you have previously logged in."
+));
+
+case XZPRI:
+ return(hmsg("Syntax: REMOTE PRINT filespec [ options ]\n\
+ Sends the specified file(s) to the remote Kermit and ask it to have the\n\
+ file printed on the remote system's printer, using any specified options.\n\
+ Synonym: RPRINT."));
+#endif /* NOFRILLS */
+
+case XZREN:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE RENAME filespec newname\n\
+ Asks the Kermit or FTP server to rename the file. Synonym: RRENAME."));
+#else
+ return(hmsg("Syntax: REMOTE RENAME filespec newname\n\
+ Asks the Kermit server to rename the file. Synonym: RRENAME."));
+#endif /* NEWFTP */
+
+case XZSET:
+ return(hmsga(hrset));
+
+case XZSPA:
+ return(hmsg("Syntax: REMOTE SPACE [ name ]\n\
+ Asks the Kermit server to tell you about its disk space on the current\n\
+ disk or directory, or in the one that you name. Synonym: RSPACE."));
+
+#ifndef NOFRILLS
+case XZTYP:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE TYPE file\n\
+ Asks the Kermit or FTP server to send the named file to your screen.\n\
+ Synonym: RTYPE."));
+#else
+ return(hmsg("Syntax: REMOTE TYPE file\n\
+ Asks the Kermit server to send the named file(s) to your screen.\n\
+ Synonym: RTYPE."));
+#endif /* NEWFTP */
+
+
+case XZWHO:
+ return(hmsg("Syntax: REMOTE WHO [ name ]\n\
+ Asks the Kermit server to list who's logged in, or to give information\n\
+ about the named user. Synonym: RWHO."));
+#endif /* NOFRILLS */
+
+#ifndef NOSPL
+case XZQUE:
+ return(hmsg(
+"Syntax: [ REMOTE ] QUERY { KERMIT, SYSTEM, USER } variable-name\n\
+ Asks the Kermit server to send the value of the named variable of the\n\
+ given type, and make it available in the \\v(query) variable. When the\n\
+ type is KERMIT functions may also be specified as if they were variables."));
+
+case XZASG:
+ return(hmsg(
+"Syntax: REMOTE ASSIGN variable-name [ value ]\n\
+ Assigns the given value to the named global variable on the server.\n\
+ Synonyms: RASG, RASSIGN."));
+#endif /* NOSPL */
+
+case XZPWD:
+ return(hmsg(
+#ifdef NEWFTP
+"Syntax: REMOTE PWD\n\
+ Asks the Kermit server to display its current working directory.\n\
+ Synonym: RPWD."));
+#else
+"Syntax: REMOTE PWD\n\
+ Asks the Kermit or FTP server to display its current working directory.\n\
+ Synonym: RPWD."));
+#endif /* NEWFTP */
+
+case XZXIT:
+#ifdef NEWFTP
+ return(hmsg("Syntax: REMOTE EXIT\n\
+ Asks the Kermit server to exit (without disconnecting), or closes an FTP\n\
+ connection. Synonym: REXIT, and (for FTP only) BYE, FTP BYE."));
+#else
+ return(hmsg("Syntax: REMOTE EXIT\n\
+ Asks the Kermit server to exit. Synonym: REXIT."));
+#endif /* NEWFTP */
+
+default:
+ if ((x = cmcfm()) < 0) return(x);
+ printf("?Sorry, no help available - \"%s\"\n",cmdbuf);
+ return(-9);
+ }
+}
+#endif /* NOXFER */
+#endif /* NOHELP */
+#endif /* NOICP */