blob: 8545f89eaaaaffed39b4431d0d1b01fda801cd45 [file] [log] [blame]
#ifdef SSHTEST
#define SSHBUILTIN
#endif /* SSHTEST */
#include "ckcsym.h"
char *userv = "User Interface 8.0.278, 12 Mar 2004";
/* C K U U S R -- "User Interface" for C-Kermit (Part 1) */
/*
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.
*/
/*
Originally the entire user interface was in one module, ckuusr.c. Over
the years it has been split into many modules: ckuus2.c, ckuus3.c, ...,
ckuus7.c. ckuus2.c contains the HELP command parser and help-text strings;
ckuusy.c contains the UNIX-style command-line interface; ckuusx.c contains
routines needed by both the command-line interface and the interactive
command parser.
*/
/*
The ckuus*.c modules depend on the existence of C library features like
fopen, fgets, feof, (f)printf, argv/argc, etc. Other functions that are
likely to vary among different platforms -- like setting terminal modes or
interrupts -- are invoked via calls to functions that are defined in the
system- dependent modules, ck?[ft]io.c. The command line parser processes
any arguments found on the command line, as passed to main() via argv/argc.
The interactive parser uses the facilities of the cmd package (developed for
this program, but usable by any program). Any command parser may be
substituted for this one. The only requirements for the Kermit command
parser are these:
. Set parameters via global variables like duplex, speed, ttname, etc. See
ckmain.c for the declarations and descriptions of these variables.
. If a command can be executed without the use of Kermit protocol, then
execute the command directly and set the variable sstate to 0. Examples
include 'set' commands, local directory listings, the 'connect' command.
. If a command requires the Kermit protocol, set the following variables:
sstate string data
'x' (enter server mode) (none)
'r' (send a 'get' command) cmarg, cmarg2
'v' (enter receive mode) cmarg2
'g' (send a generic command) cmarg
's' (send files) nfils, cmarg & cmarg2 OR cmlist
'c' (send a remote host command) cmarg
cmlist is an array of pointers to strings.
cmarg, cmarg2 are pointers to strings.
nfils is an integer.
cmarg can be a filename string (possibly wild), or
a pointer to a prefabricated generic command string, or
a pointer to a host command string.
cmarg2 is an "as-name" - the name to send file(s) under, or
the name under which to store incoming file(s); must not be wild.
A null or empty value means to use the file's own name.
cmlist is a list of filenames, such as passed via argv.
nfils is an integer, interpreted as follows:
-1: filespec (possibly wild) in cmarg, must be expanded internally.
0: send from stdin (standard input).
>0: number of files to send, from cmlist.
The screen() function is used to update the screen during file transfer.
The tlog() function writes to a transaction log.
The debug() function writes to a debugging log.
The intmsg() and chkint() functions provide the user i/o for interrupting
file transfers.
*/
/* Includes */
#ifdef MULTINET
#define MULTINET_OLD_STYLE /* Leave select prototype undefined */
#endif /* MULTINET */
#include "ckcdeb.h"
#include "ckcasc.h"
#include "ckcker.h"
#include "ckcnet.h" /* Network symbols */
#include "ckuusr.h"
#include "ckcxla.h"
int g_fncact = -1; /* Needed for NOICP builds */
int noinit = 0; /* Flag for skipping init file */
int nscanfile = SCANFILEBUF;
int rcdactive = 0; /* RCD active */
int keepallchars = 0; /* See cmfld() */
int locus = 1; /* Current LOCUS is LOCAL */
#ifdef OS2
int autolocus = 2; /* Automatic LOCUS switching: ASK */
#else /* OS2 */
int autolocus = 1; /* Automatic LOCUS switching enabled */
#endif /* OS2 */
#ifndef NOICP
#ifdef CKLEARN
#ifdef VMS
#include <time.h> /* For CKLEARN */
#endif /* VMS */
#endif /* CKLEARN */
#ifdef OS2
#ifndef NT
#define INCL_NOPM
#define INCL_VIO /* Needed for ckocon.h */
#include <os2.h>
#undef COMMENT
#else
#define APIRET ULONG
#include <windows.h>
#include <tapi.h>
#include "cknwin.h"
#include "ckntap.h" /* CK_TAPI definition */
#endif /* NT */
#include "ckowin.h"
#include "ckocon.h"
extern int tcp_avail;
extern bool viewonly;
extern int k95stdout;
extern int tt_scroll;
#ifndef NOTERM
extern tt_status[VNUM];
#endif /* NOTERM */
int display_demo = 1;
#include "ckossh.h"
#ifdef KUI
#include "ikui.h"
#endif /* KUI */
#endif /* OS2 */
int optlines = 0;
int didsetlin = 0;
#ifdef NEWFTP
extern int ftpget, ftpisopen(), doftpres();
_PROTOTYP(int doftptyp,(int));
#endif /* NEWFTP */
#ifdef VMS
extern int batch;
#endif /* VMS */
#ifdef datageneral
#include <packets:common.h>
#define fgets(stringbuf,max,fd) dg_fgets(stringbuf,max,fd)
#endif /* datageneral */
extern int xcmdsrc, hints, cmflgs, whyclosed;
char * hlptok = NULL;
#ifdef CK_TTGWSIZ /* Whether to use more-prompting */
int xaskmore = 1; /* Momentary setting */
int saveask = 1; /* Permanent setting */
#else
int xaskmore = 0;
int saveask = 0;
#endif /* CK_TTGWSIZ */
#ifndef NOCSETS
extern int nfilc;
extern struct keytab fcstab[];
extern int fcharset;
#endif /* NOCSETS */
char * g_pswd = NULL;
int g_pcpt = -1;
int g_pflg = -1;
extern int cmd_rows, cmd_cols;
#ifdef CKROOT
extern int ckrooterr;
#endif /* CKROOT */
extern int inserver, filepeek;
#ifdef CKLEARN
FILE * learnfp = NULL;
char * learnfile = NULL;
int learning = 0;
#endif /* CKLEARN */
#ifndef NOXFER
extern int atcapr, atdiso, nfils, moving, protocol, sendmode, epktflg, size,
sndsrc, server, displa, fncnv, fnspath, fnrpath, xfermode, urpsiz,
spsizf, spsiz, spsizr, spmax, wslotr, prefixing, fncact, reliable,
setreliable;
#ifdef IKSDCONF
extern int iksdcf;
#endif /* IKSDCONF */
#ifdef CK_LOGIN
extern int isguest;
#endif /* CK_LOGIN */
extern long sendstart;
extern char *cmarg, *cmarg2, **cmlist, *dftty;
extern struct keytab fntab[]; extern int nfntab;
extern struct ck_p ptab[NPROTOS];
int sndcmd = 0; /* Last command was a SEND-class command. */
int g_xfermode = -1;
int g_proto = -1;
int g_urpsiz = -1;
int g_spsizf = -1;
int g_spsiz = -1;
int g_spsizr = -1;
int g_spmax = -1;
int g_wslotr = -1;
int g_prefixing = -1;
int g_fncnv = -1;
int g_fnspath = -1;
int g_fnrpath = -1;
int g_fnact = -1;
int g_displa = -1;
int g_spath = -1;
int g_rpath = -1;
char * g_sfilter = NULL;
char * g_rfilter = NULL;
extern int patterns;
#ifdef PATTERNS
extern char *txtpatterns[], *binpatterns[];
int g_patterns = -1;
#endif /* PATTERNS */
int g_skipbup = -1;
#ifdef PIPESEND
extern int usepipes, pipesend;
extern char * sndfilter;
#endif /* PIPESEND */
#ifndef NOSPL
extern int sndxlo, sndxhi, sndxin;
#endif /* NOSPL */
extern char fspec[]; /* Most recent filespec */
extern int fspeclen; /* Length of fspec[] buffer */
#ifndef NOFRILLS
extern int rmailf; /* MAIL command items */
extern char optbuf[];
#endif /* NOFRILLS */
extern int
en_cpy, en_cwd, en_del, en_dir, en_fin, en_get, en_bye, en_mai, en_pri,
en_hos, en_ren, en_sen, en_spa, en_set, en_typ, en_who, en_ret, en_xit,
en_mkd, en_rmd, en_asg;
#ifndef NOMSEND /* Multiple SEND */
extern char *msfiles[];
int filesinlist = 0; /* And ADD ... */
extern struct filelist * filehead;
extern struct filelist * filetail;
extern struct filelist * filenext;
extern int addlist;
#endif /* NOMSEND */
static struct keytab addtab[] = {
#ifdef PATTERNS
{ "binary-patterns", ADD_BIN, 0 },
#endif /* PATTERNS */
#ifndef NOMSEND
{ "send-list", ADD_SND, 0 },
#endif /* NOMSEND */
#ifdef PATTERNS
{ "text-patterns", ADD_TXT, 0 },
#endif /* PATTERNS */
{ "", 0, 0 }
};
static int naddtab = sizeof(addtab)/sizeof(struct keytab) - 1;
#ifndef NOCSETS
struct keytab assoctab[] = {
{ "file-character-set", ASSOC_FC, 0 },
{ "transfer-character-set", ASSOC_TC, 0 },
{ "xfer-character-set", ASSOC_TC, CM_INV }
};
static int nassoc = sizeof(assoctab)/sizeof(struct keytab);
extern int afcset[MAXFCSETS+1]; /* Character-set associations */
extern int axcset[MAXTCSETS+1];
#endif /* NOCSETS */
#ifndef ADDCMD
#ifndef NOMSEND
#define ADDCMD
#endif /* NOMSEND */
#ifndef ADDCMD
#ifdef PATTERNS
#define ADDCMD
#endif /* PATTERNS */
#endif /* ADDCMD */
#endif /* ADDCMD */
#endif /* NOXFER */
/* External Kermit Variables, see ckmain.c for description. */
extern xx_strp xxstring;
extern long xvernum;
extern int local, xitsta, binary, msgflg, escape, duplex, quiet, tlevel,
pflag, zincnt, ckxech, carrier, what, nopush, haveline, bye_active;
#ifdef TNCODE
extern int debses;
extern char tn_msg[];
#endif /* TNCODE */
int sleepcan = 1;
int g_binary = -1;
int g_recursive = -1;
int g_matchdot = -1;
extern int nolinks;
extern long vernum;
extern char *versio, *copyright[];
extern char *ckxsys;
#ifndef NOHELP
extern char *introtxt[];
extern char *newstxt[];
#endif /* NOHELP */
#ifndef OS2
#ifndef UNIX
extern char *PWDCMD;
#endif /* UNIX */
extern char *WHOCMD;
#endif /* OS2 */
extern char ttname[];
extern CHAR sstate;
extern int network; /* Have active network connection */
extern int nettype; /* Type of network */
extern int ttnproto; /* NET_TCPB protocol */
#ifndef NODIAL
extern int dialsta, dialatmo, dialcon, dialcq; /* DIAL status, etc. */
#endif /* NODIAL */
#ifdef CK_APC
extern int apcactive, apcstatus;
#endif /* CK_APC */
#ifndef NOPUSH
#ifndef NOFRILLS
extern char editor[];
extern char editopts[];
extern char editfile[];
#endif /* NOFRILLS */
#endif /* NOPUSH */
#ifdef BROWSER
extern char browser[]; /* Web browser application */
extern char browsopts[]; /* Web browser options */
extern char browsurl[]; /* Most recent URL */
#endif /* BROWSER */
#ifndef NOFTP
char ftpapp[CKMAXPATH+1] = { NUL, NUL }; /* ftp executable */
char ftpopts[128] = { NUL, NUL }; /* ftp command-line options */
#endif /* NOFTP */
extern struct keytab onoff[]; /* On/Off keyword table */
#ifdef CK_TMPDIR
int f_tmpdir = 0; /* Directory changed temporarily */
char savdir[TMPDIRLEN]; /* For saving current directory */
#endif /* CK_TMPDIR */
int activecmd = -1; /* Keyword index of active command */
int doconx = -1; /* CONNECT-class command active */
int ooflag = 0; /* User-settable on/off flag */
int rcflag = 0; /* Pointer to home directory string */
int repars, /* Reparse needed */
techo = 0; /* Take echo */
int secho = 1; /* SCRIPT echo */
int xitwarn = /* Warn about open connection on exit */
#ifdef NOWARN
0
#else
1
#endif /* NOWARN */
;
struct keytab onoffsw[] = {
{ "/off", 0, 0 },
{ "/on", 1, 0 }
};
#ifdef CKEXEC
struct keytab redirsw[] = {
{ "/redirect", 1, 0 }
};
#endif /* CKEXEC */
#ifndef NOXMIT
/* Variables for TRANSMIT command */
int xmitx = 1; /* Whether to echo during TRANSMIT */
int xmitf = 0; /* Character to fill empty lines */
int xmitl = 0; /* 0 = Don't send linefeed too */
int xmitp = LF; /* Host line prompt */
int xmits = 0; /* Use shift-in/shift-out, 0 = no */
int xmitw = 0; /* Milliseconds to pause during TRANSMIT */
int xmitt = 1; /* Seconds to wait for each char to echo */
int xmita = 1; /* Action upon timeout */
#define XMI_BIN 1
#define XMI_TXT 2
#define XMI_CMD 3
#define XMI_TRA 4
#define XMI_VRB 5
#define XMI_QUI 6
#define XMI_NOW 7
#define XMI_NOE 8
static struct keytab xmitsw[] = { /* TRANSMIT command options */
{ "/binary", XMI_BIN, 0 },
#ifdef PIPESEND
{ "/command", XMI_CMD, CM_INV|CM_PSH },
#endif /* PIPESEND */
{ "/noecho", XMI_NOE, 0 },
{ "/nowait", XMI_NOW, 0 },
#ifdef PIPESEND
{ "/pipe", XMI_CMD, 0 },
#endif /* PIPESEND */
#ifdef COMMENT
{ "/quiet", XMI_QUI, 0 },
#endif /* COMMENT */
{ "/text", XMI_TXT, 0 },
{ "/transparent", XMI_TRA, 0 },
#ifdef COMMENT
{ "/verbose", XMI_VRB, 0 },
#endif /* COMMENT */
{ "", 0, 0 }
};
#define NXMITSW sizeof(xmitsw)/sizeof(struct keytab) - 1
static int nxmitsw = NXMITSW;
#endif /* NOXMIT */
/* Declarations from ck?fio.c module */
extern char *SPACMD, *SPACM2; /* SPACE commands */
/* Command-oriented items */
#ifdef DCMDBUF
extern char *cmdbuf; /* Command buffers */
extern char *atmbuf;
extern char *line; /* Character buffer for anything */
extern char *tmpbuf; /* Short temporary string buffer */
extern int *ifcmd;
extern int *intime;
extern int *inpcas;
#else
extern char cmdbuf[]; /* Command buffers */
extern char atmbuf[];
extern char line[]; /* Character buffer for anything */
extern char tmpbuf[]; /* Temporary buffer */
extern int ifcmd[];
extern int intime[];
extern int inpcas[];
#endif /* DCMDBUF */
#ifndef NOSPL
extern char * prstring[];
#endif /* NOSPL */
char *lp; /* Pointer to line buffer */
#ifndef NOSPL
int unkmacro = 0; /* Flag for in ON_UNKNOWN_COMMAND */
int oldeval = 0;
char evalbuf[33]; /* EVALUATE result */
extern char * inpbuf; /* Buffer for INPUT and REINPUT */
char *inpbp; /* And pointer to same */
extern char lblbuf[]; /* Buffer for labels */
int m_found; /* MINPUT result */
int i_active = 0; /* INPUT command is active */
char *ms[MINPMAX]; /* Pointers to MINPUT strings */
static int mp[MINPMAX]; /* and flags */
extern int fndiags, fnerror, fnsuccess; /* Function diagnostics */
#ifndef NOSEXP
char * lastsexp = NULL; /* S-Expressions */
char * sexpval = NULL;
int sexpecho = SET_AUTO;
#endif /* NOSEXP */
#endif /* NOSPL */
char psave[PROMPTL] = { NUL }; /* For saving & restoring prompt */
extern int success; /* Command success/failure flag */
extern int cmdlvl; /* Current position in command stack */
#ifndef NOSPL
int /* SET INPUT parameters. */
/* Note, INPUT TIMEOUT, intime[], is on the command-level stack. */
inbufsize = 0, /* INPUT buffer size */
indef = 1, /* default timeout, seconds */
inecho = 1, /* 1 = echo on */
inautodl = 0, /* INPUT autodownload */
inintr = 1, /* INPUT interrupion allowed */
innomatch = 0, /* INPUT /NOMATCH */
insilence = 0; /* 0 = no silence constraint */
#ifdef CKFLOAT
CKFLOAT inscale = 1.0; /* Timeout scale factor */
#endif /* CKFLOAT */
#ifdef OS2
int interm = 1; /* Terminal emulator displays input */
#endif /* OS2 */
int maclvl = -1; /* Macro nesting level */
int mecho = 0; /* Macro echo, 0 = don't */
char varnam[6]; /* For variable names */
extern int macargc[]; /* ARGC from macro invocation */
extern char *m_arg[MACLEVEL][NARGS]; /* Stack of macro arguments */
extern char *mrval[];
extern char **a_ptr[]; /* Array pointers */
extern int a_dim[]; /* Array dimensions */
extern int a_link[];
#ifdef DCMDBUF
extern struct cmdptr *cmdstk; /* The command stack itself */
#else
extern struct cmdptr cmdstk[]; /* The command stack itself */
#endif /* DCMDBUF */
long ck_alarm = 0; /* SET ALARM value */
char alrm_date[24] = { ' ',' ',' ',' ',' ',' ',' ',' ',' ' };
char alrm_time[24] = { ' ',' ',' ',' ',' ',' ',' ' };
#define INPSW_NOM 1
struct keytab inputsw[] = {
{ "/nomatch", INPSW_NOM, 0 }
};
static int ninputsw = sizeof(inputsw)/sizeof(struct keytab);
#endif /* NOSPL */
static int x, y, z = 0; /* Local workers */
static char *s;
#ifdef CK_MINPUT
static char c1chars[] = { /* C1 control chars escept NUL */
001,002,003,004,005,006,007,010,011,012,013,014,015,016,017,020,
021,022,023,024,025,026,027,030,031,032,033,034,035,036,037
};
#endif /* CK_MINPUT */
#define xsystem(s) zsyscmd(s)
/* Top-Level Interactive Command Keyword Table */
/* Keywords must be in lowercase and in alphabetical order. */
struct keytab cmdtab[] = {
#ifndef NOPUSH
{ "!", XXSHE, CM_INV|CM_PSH }, /* Shell escape */
#else
{ "!", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOPUSH */
{ "#", XXCOM, CM_INV }, /* Comment */
#ifndef NOSPL
{ "(", XXSEXP,CM_INV }, /* S-Expression */
{ ".", XXDEF, CM_INV }, /* Assignment */
{ ":", XXLBL, CM_INV }, /* Label */
#endif /* NOSPL */
#ifdef CK_REDIR
#ifndef NOPUSH
{ "<", XXFUN, CM_INV|CM_PSH }, /* REDIRECT */
#else
{ "<", XXNOTAV, CM_INV|CM_PSH }, /* REDIRECT */
#endif /* NOPUSH */
#endif /* CK_REDIR */
#ifndef NOPUSH
{ "@", XXSHE, CM_INV|CM_PSH }, /* DCL escape */
#else
{ "@", XXNOTAV, CM_INV|CM_PSH }, /* DCL escape */
#endif /* NOPUSH */
#ifdef CK_RECALL
{ "^", XXREDO,CM_INV|CM_NOR }, /* Synonym for REDO */
#endif /* CK_RECALL */
#ifndef NOSPL
{ "_asg", XXASX, CM_INV }, /* Used internally by FOR, etc */
{ "_assign", XXASX, CM_INV }, /* Used internally by FOR, etc */
{ "_decrement", XX_DECR, CM_INV },
{ "_define", XXDFX, CM_INV }, /* Used internally by FOR, etc */
{ "_evaluate", XX_EVAL, CM_INV },
{ "_forward", XXXFWD, CM_INV }, /* Used internally by SWITCH */
{ "_getargs", XXGTA, CM_INV }, /* Used internally by FOR, etc */
{ "_increment", XX_INCR, CM_INV },
{ "_putargs", XXPTA, CM_INV }, /* Used internally by FOR, etc */
{ "_undefine", XXUNDFX, CM_INV },
#endif /* NOSPL */
{ "about", XXVER, CM_INV }, /* Synonym for VERSION */
#ifndef NOSPL
#ifdef NEWFTP
{ "account", XXACCT, CM_INV }, /* (FTP) Account */
#endif /* NEWFTP */
#ifdef ADDCMD
{ "add", XXADD, 0 }, /* ADD */
#endif /* ADDCMD */
#ifndef NODIAL
{ "answer", XXANSW, CM_LOC }, /* ANSWER the phone */
#else
{ "answer", XXNOTAV, CM_INV|CM_LOC }, /* ANSWER the phone */
#endif /* NODIAL */
{ "apc", XXAPC, 0 }, /* Application Program Command */
#ifndef NOSPL
{ "array", XXARRAY, 0 }, /* Array operations */
#endif /* NOSPL */
{ "ascii", XXASC, CM_INV }, /* == SET FILE TYPE TEXT */
{ "asg", XXASS, CM_INV }, /* Invisible synonym for ASSIGN */
{ "ask", XXASK, 0 }, /* ASK for text, assign to variable */
{ "askq", XXASKQ,0 }, /* ASK quietly (no echo) */
#ifndef NOSPL
{ "ass", XXASS, CM_INV|CM_ABR }, /* ASSIGN */
{ "assert", XXASSER, CM_INV }, /* ASSERT */
{ "assign", XXASS, 0 }, /* ASSIGN */
#endif /* NOSPL */
#ifndef NOXFER
#ifndef NOCSETS
{ "associate", XXASSOC, 0 }, /* ASSOCIATE */
#else
{ "associate", XXNOTAV, CM_INV }, /* ASSOCIATE */
#endif /* NOCSETS */
#endif /* NOXFER */
#ifdef CK_KERBEROS
#ifdef CK_AUTHENTICATION
{ "authenticate",XXAUTH, 0 }, /* Authentication */
#else
{ "authenticate",XXAUTH, CM_INV },
#endif /* CK_AUTHENTICATION */
#endif /* CK_KERBEROS */
#endif /* NOSPL */
#ifndef NOFRILLS
{ "back", XXBACK, 0 }, /* BACK to previous directory */
#else
{ "back", XXNOTAV,CM_INV },
#endif /* NOFRILLS */
{ "beep", XXBEEP,CM_INV }, /* BEEP */
#ifndef NOXFER
{ "binary", XXBIN, CM_INV }, /* == SET FILE TYPE BINARY */
#endif /* NOXFER */
#ifndef NOFRILLS
{ "bug", XXBUG, CM_INV }, /* BUG report instructions */
#else
{ "bug", XXNOTAV, CM_INV },
#endif /* NOFRILLS */
#ifdef BROWSER
{ "browse", XXBROWS, CM_PSH|CM_LOC }, /* BROWSE (start browser) */
#else
{ "browse", XXNOTAV, CM_INV|CM_PSH|CM_LOC },
#endif /* BROWSER */
#ifndef NOXFER
{ "bye", XXBYE, 0 }, /* BYE to remote server */
#endif /* NOXFER */
#ifndef NOLOCAL
{ "c", XXCON, CM_INV|CM_ABR|CM_LOC }, /* (CONNECT) */
#endif /* NOLOCAL */
#ifndef NOFRILLS
{ "cat", XXCAT, CM_INV }, /* Invisible synonym for TYPE */
#endif /* NOFRILLS */
#ifndef NOSPL
#ifndef NOXFER
{ "cautious", XXCAU, CM_INV },
#endif /* NOXFER */
#endif /* NOSPL */
{ "cd", XXCWD, 0 }, /* Change Directory */
{ "cdup", XXCDUP, CM_INV }, /* Change Directory Up */
#ifndef NOXFER
#ifdef PIPESEND
{ "cget", XXCGET, CM_INV|CM_PSH }, /* CGET */
#else
{ "cget", XXNOTAV, CM_INV|CM_PSH }, /* CGET */
#endif /* PIPESEND */
#endif /* NOXFER */
{ "ch", XXCHK, CM_INV|CM_ABR },
{ "check", XXCHK, 0 }, /* CHECK for a feature */
#ifdef CK_PERMS
#ifdef UNIX
{ "chmod", XXCHMOD, 0 }, /* CHMOD */
#else
{ "chmod", XXNOTAV, CM_INV },
#endif /* UNIX */
#else
{ "chmod", XXNOTAV, CM_INV },
#endif /* CK_PERMS */
#ifdef CKROOT
{ "chroot", XXCHRT, CM_INV }, /* CHROOT */
#endif /* CKROOT */
{ "ckermit", XXKERMI, CM_INV }, /* CKERMIT (like KERMIT) */
{ "cl", XXCLO, CM_ABR|CM_INV },
#ifndef NOFRILLS
{ "clear", XXCLE, 0 }, /* CLEAR input and/or device buffer */
#else
{ "clear", XXNOTAV, CM_INV },
#endif /* NOFRILLS */
{ "close", XXCLO, 0 }, /* CLOSE a log or other file */
{ "cls", XXCLS, CM_INV }, /* Clear Screen (CLS) */
{ "comment", XXCOM, CM_INV }, /* Introduce a comment */
#ifndef NOLOCAL
{ "connect", XXCON, CM_LOC }, /* Begin terminal connection */
#else
{ "connect", XXNOTAV, CM_LOC },
#endif /* NOLOCAL */
{ "continue", XXCONT, CM_INV }, /* CONTINUE */
#ifndef NOFRILLS
#ifdef ZCOPY
{ "co", XXCPY, CM_INV|CM_ABR },
{ "cop", XXCPY, CM_INV|CM_ABR },
{ "copy", XXCPY, 0 }, /* COPY a file */
#else
{ "copy", XXNOTAV, CM_INV },
#endif /* ZCOPY */
{ "copyright", XXCPR, CM_INV }, /* COPYRIGHT */
#ifdef ZCOPY
{ "cp", XXCPY, CM_INV }, /* COPY a file */
#endif /* ZCOPY */
#ifndef NOLOCAL
#ifndef OS2
{ "cq", XXCQ, CM_INV|CM_LOC }, /* CQ (connect quietly) */
#endif /* OS2 */
#endif /* NOLOCAL */
#ifndef NOXFER
#ifdef PIPESEND
{ "creceive", XXCREC,CM_INV|CM_PSH }, /* RECEIVE to a command */
{ "csend", XXCSEN,CM_INV|CM_PSH }, /* SEND from command */
#else
{ "creceive", XXNOTAV,CM_INV|CM_PSH },
{ "csend", XXNOTAV,CM_INV|CM_PSH },
#endif /* PIPESEND */
#endif /* NOXFER */
#endif /* NOFRILLS */
{ "cwd", XXCWD, CM_INV }, /* Traditional synonym for cd */
#ifndef NOSPL
{ "date", XXDATE, 0 }, /* DATE */
{ "dcl", XXDCL, CM_INV }, /* DECLARE an array (see ARRAY) */
{ "debug", XXDEBUG, CM_INV },
{ "declare", XXDCL, CM_INV }, /* DECLARE an array (see ARRAY) */
{ "decrement", XXDEC, 0 }, /* DECREMENT a numeric variable */
{ "define", XXDEF, 0 }, /* DEFINE a macro or variable */
#else
{ "date", XXNOTAV, CM_INV },
{ "dcl", XXNOTAV, CM_INV },
{ "declare", XXNOTAV, CM_INV },
{ "decrement", XXNOTAV, CM_INV },
{ "define", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOFRILLS
{ "delete", XXDEL, 0 }, /* DELETE a file */
#else
{ "delete", XXNOTAV, CM_INV },
#endif /* NOFRILLS */
#ifndef NODIAL
{ "dial", XXDIAL, CM_LOC }, /* DIAL a phone number */
#else
{ "dial", XXNOTAV, CM_INV|CM_LOC },
#endif /* NODIAL */
#ifdef NT
{ "dialer", XXDIALER, CM_INV }, /* K95 Dialer */
#endif /* NT */
{ "directory", XXDIR, 0 }, /* DIRECTORY of files */
#ifndef NOFRILLS
#ifndef NOSERVER
{ "disable", XXDIS, 0 }, /* DISABLE a server function */
#else
{ "disable", XXNOTAV, CM_INV },
#endif /* NOSERVER */
#endif /* NOFRILLS */
#ifndef NOSPL
{ "do", XXDO, 0 }, /* DO (execute) a macro */
#else
{ "do", XXNOTAV, CM_INV },
#endif /* NOSPL */
{ "e", XXEXI, CM_INV|CM_ABR },
#ifndef NOFRILLS
#ifndef NOXFER
{ "e-packet", XXERR, CM_INV }, /* Send an Error-Packet */
#endif /* NOXFER */
#endif /* NOFRILLS */
{ "echo", XXECH, 0 }, /* ECHO text */
#ifndef NOFRILLS
#ifndef NOPUSH
{ "edit", XXEDIT, CM_PSH }, /* EDIT */
#else
{ "edit", XXNOTAV, CM_INV|CM_PSH }, /* EDIT */
#endif /* NOPUSH */
#endif /* NOFRILLS */
{ "eightbit", XXEIGHT, CM_INV }, /* EIGHTBIT */
#ifndef NOSPL
{ "else", XXELS, CM_INV }, /* ELSE part of IF statement */
#else
{ "else", XXNOTAV, CM_INV }, /* ELSE part of IF statement */
#endif /* NOSPL */
#ifndef NOSERVER
#ifndef NOFRILLS
{ "enable", XXENA, 0 }, /* ENABLE a server function */
#else
{ "enable", XXNOTAV, CM_INV },
#endif /* NOFRILLS */
#endif /* NOSERVER */
#ifndef NOSPL
{ "end", XXEND, 0 }, /* END command file or macro */
#else
{ "end", XXNOTAV, CM_INV },
#endif /* NOSPL */
{ "erase", XXDEL, CM_INV }, /* Synonym for DELETE */
#ifndef NOSPL
{ "evaluate", XXEVAL, 0 }, /* EVALUATE */
#else
{ "evaluate", XXNOTAV, CM_INV },
#endif /* NOSPL */
{ "ex", XXEXI, CM_INV|CM_ABR }, /* Let "ex" still be EXIT */
#ifdef CKEXEC
{ "exec", XXEXEC, CM_INV|CM_LOC }, /* exec() */
#else
{ "exec", XXNOTAV, CM_INV|CM_LOC },
#endif /* CKEXEC */
{ "exit", XXEXI, 0 }, /* EXIT from C-Kermit */
{ "extended-options", XXXOPTS,CM_INV|CM_HLP }, /* Extended-Options */
#ifdef OS2
{ "extproc", XXCOM, CM_INV }, /* Dummy command for OS/2 */
#endif /* OS2 */
#ifndef NOXFER
{ "f", XXFIN, CM_INV|CM_ABR }, /* Invisible abbrev for FIN */
#endif /* NOXFER */
#ifndef NOSPL
{ "fail", XXFAIL, CM_INV }, /* FAIL */
#ifndef NOXFER
{ "fast", XXFAST, CM_INV },
#endif /* NOXFER */
#ifdef CKCHANNELIO
{ "fclose", XXF_CL, CM_INV }, /* FCLOSE */
{ "fcount", XXF_CO, CM_INV }, /* FCOUNT */
{ "fflush", XXF_FL, CM_INV }, /* FFLUSH */
#endif /* CKCHANNELIO */
#ifndef NOXFER
{ "fi", XXFIN, CM_INV|CM_ABR }, /* FINISH */
#endif /* NOXFER */
#ifdef CKCHANNELIO
{ "file", XXFILE, 0 }, /* FILE */
#endif /* CKCHANNELIO */
#endif /* NOSPL */
#ifndef NOXFER
{ "fin", XXFIN, CM_INV|CM_ABR }, /* FINISH */
#endif /* NOXFER */
#ifndef UNIXOROSK
{ "find", XXGREP, 0 }, /* FIND (grep) */
#else
{ "find", XXGREP,CM_INV },
#endif /* UNIXOROSK */
#ifndef NOXFER
{ "finish", XXFIN, 0 }, /* FINISH */
#endif /* NOXFER */
#ifdef TCPSOCKET
{ "firewall", XXFIREW, CM_INV|CM_HLP },
#endif /* TCPSOCKET */
#ifdef CKCHANNELIO
{ "flist", XXF_LI, CM_INV }, /* FLIST */
{ "fopen", XXF_OP, CM_INV }, /* FOPEN */
#endif /* CKCHANNELIO */
#ifndef NOSPL
{ "fo", XXFOR, CM_INV|CM_ABR }, /* Invisible abbrev for... */
{ "for", XXFOR, 0 }, /* FOR loop */
{ "forward", XXFWD, CM_INV }, /* FORWARD */
#endif /* NOSPL */
#ifndef NOFRILLS
{ "fot", XXDIR, CM_INV }, /* "fot" = "dir" (for Chris) */
#endif /* NOFRILLS */
#ifdef CKCHANNELIO
{ "fread", XXF_RE, CM_INV }, /* FREAD */
{ "frewind", XXF_RW, CM_INV }, /* FREWIND */
{ "fseek", XXF_SE, CM_INV }, /* FSEEK */
{ "fstatus", XXF_ST, CM_INV }, /* FSTATUS */
#endif /* CKCHANNELIO */
#ifdef TCPSOCKET
#ifndef NOFTP
#ifdef SYSFTP
#ifndef NOPUSH
{ "ftp", XXFTP, CM_INV|CM_PSH|CM_LOC }, /* System FTP */
#else
{ "ftp", XXNOTAV, CM_INV|CM_PSH|CM_LOC },
#endif /* NOPUSH */
#else /* SYSFTP */
{ "ftp", XXFTP, 0 }, /* Built-in FTP */
#endif /* SYSFTP */
#else /* NOFTP */
{ "ftp", XXNOTAV, CM_INV }, /* No FTP */
#endif /* NOFTP */
#endif /* TCPSOCKET */
#ifndef NOSPL
{ "function", XXFUNC, CM_INV|CM_HLP }, /* (for HELP FUNCTION) */
#endif /* NOSPL */
#ifdef CKCHANNELIO
{ "fwrite", XXF_WR, CM_INV }, /* FWRITE */
#endif /* CKCHANNELIO */
#ifndef NOXFER
{ "g", XXGET, CM_INV|CM_ABR }, /* Invisible abbrev for GET */
#ifndef NOSPL
{ "ge", XXGET, CM_INV|CM_ABR }, /* Ditto */
#endif /* NOSPL */
{ "get", XXGET, 0 }, /* GET */
#endif /* NOXFER */
#ifndef NOSPL
{ "getc", XXGETC, 0 }, /* GETC */
#ifdef OS2
{ "getkeycode", XXGETK, 0 }, /* GETKEYCODE */
#endif /* OS2 */
#ifndef NOFRILLS
{ "getok", XXGOK, 0 }, /* GETOK (ask for Yes/No/OK) */
#endif /* NOFRILLS */
#endif /* NOSPL */
#ifndef NOSPL
{ "goto", XXGOTO,0 }, /* GOTO label in take file or macro */
#endif /* NOSPL */
#ifdef UNIXOROSK
{ "grep", XXGREP,0 }, /* GREP (find) */
#else
{ "grep", XXGREP,CM_INV }, /* GREP (find) */
#endif /* UNIXOROSK */
{ "h", XXHLP, CM_INV|CM_ABR }, /* Invisible synonym for HELP */
{ "he", XXHLP, CM_INV|CM_ABR }, /* Invisible synonym for HELP */
#ifndef NOFRILLS
{ "head", XXHEAD, 0 },
#endif /* NOFRILLS */
#ifndef NOLOCAL
{ "hangup", XXHAN, CM_LOC }, /* HANGUP the connection */
#endif /* NOLOCAL */
{ "HELP", XXHLP, 0 }, /* Display HELP text */
#ifndef NOHTTP
#ifdef TCPSOCKET
{ "http", XXHTTP, 0 }, /* HTTP operations */
#endif /* TCPSOCKET */
#endif /* NOHTTP */
#ifndef NOSPL
{ "i", XXINP, CM_INV|CM_ABR }, /* Invisible synonym for INPUT */
{ "if", XXIF, 0 }, /* IF ( condition ) command */
#ifdef TCPSOCKET
{ "iksd", XXIKSD, CM_INV }, /* Make connection to IKSD */
#else
{ "iksd", XXNOTAV, CM_INV },
#endif /* TCPSOCKET */
{ "in", XXINP, CM_INV|CM_ABR }, /* Invisible synonym for INPUT */
{ "increment", XXINC, 0 }, /* Increment a numeric variable */
{ "input", XXINP, 0 }, /* INPUT text from comm device */
#endif /* NOSPL */
#ifndef NOHELP
{ "int", XXINT, CM_INV|CM_ABR },
{ "intr", XXINT, CM_INV|CM_ABR },
{ "INTRO", XXINT, 0 },
{ "introduction",XXINT, CM_INV }, /* Print introductory text */
#else
{ "intro", XXNOTAV, CM_INV },
{ "introduction",XXNOTAV, CM_INV },
#endif /* NOHELP */
#ifdef OS2
{ "k95", XXKERMI, CM_INV }, /* Hmmm what's this... */
#endif /* OS2 */
#ifndef NOSPL
{ "kcd", XXKCD, 0 },
#endif /* NOSPL */
{ "kermit", XXKERMI, CM_INV },
#ifdef OS2
#ifndef NOKVERBS
{ "kverb", XXKVRB, CM_INV|CM_HLP }, /* Keyboard verb */
#endif /* NOKVERBS */
#endif /* OS2 */
#ifndef NOFRILLS
{ "l", XXLOG, CM_INV|CM_ABR }, /* Invisible synonym for log */
#endif /* NOFRILLS */
{ "lcd", XXLCWD, CM_INV },
{ "lcdup", XXLCDU, CM_INV },
{ "lcwd", XXLCWD, CM_INV },
{ "ldelete", XXLDEL, CM_INV },
{ "ldirectory", XXLDIR, CM_INV },
#ifdef CKLEARN
{ "learn", XXLEARN, 0 }, /* LEARN - automatic script writing */
#else
{ "learn", XXNOTAV, CM_INV },
#endif /* CKLEARN */
{ "li", XXLNOUT, CM_INV|CM_ABR },
{ "LICENSE", XXCPR, 0 }, /* LICENSE */
#ifndef NOSPL
{ "lineout", XXLNOUT, 0 }, /* LINEOUT = OUTPUT + eol */
#endif /* NOSPL */
#ifdef NT
{ "link", XXLINK, 0 }, /* LINK source destination */
#endif /* NT */
{ "lmkdir", XXLMKD, CM_INV },
#ifndef NOFRILLS
{ "lo", XXLOG, CM_INV|CM_ABR }, /* Invisible synonym for log */
#endif /* NOFRILLS */
#ifndef NOSPL
{ "local", XXLOCAL, CM_INV }, /* LOCAL variable declaration */
#else
{ "local", XXNOTAV, CM_INV },
#endif /* NOSPL */
{ "log", XXLOG, 0 }, /* Open a log file */
{ "login", XXLOGIN, 0 }, /* (REMOTE) LOGIN to server or IKSD */
{ "logout", XXLOGOUT, 0 }, /* LOGOUT from server or IKSD */
#ifndef NOFRILLS
#ifndef NODIAL
{ "lookup", XXLOOK, 0 }, /* LOOKUP */
#else
{ "lookup", XXNOTAV, CM_INV },
#endif /* NODIAL */
{ "lpwd", XXLPWD, CM_INV },
{ "lrename", XXLREN, CM_INV },
{ "lrmdir", XXLRMD, CM_INV },
#ifdef UNIXOROSK
{ "ls", XXLS, CM_INV|CM_PSH }, /* UNIX ls command */
#else
{ "ls", XXDIR, CM_INV }, /* Invisible synonym for DIR */
#endif /* UNIXOROSK */
#ifndef NOXFER
{ "mail", XXMAI, 0 }, /* Send a file as e-mail */
#endif /* NOXFER */
#ifndef NOHELP
{ "manual", XXMAN, CM_PSH }, /* MAN(UAL) */
#else
{ "manual", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOHELP */
#endif /* NOFRILLS */
#ifdef CK_MKDIR
{ "md", XXMKDIR, CM_INV }, /* Synonym for MKDIR */
#endif /* CK_MKDIR */
#ifdef CK_MINPUT
{ "minput", XXMINP, 0 }, /* MINPUT */
#else
{ "minput", XXNOTAV, CM_INV },
#endif /* CK_MINPUT */
#ifndef NOMSEND
{ "mget", XXMGET, 0 }, /* MGET */
#else
{ "mget", XXNOTAV, CM_INV },
#endif /* NOMSEND */
#ifdef CK_MKDIR
{ "mkdir", XXMKDIR, 0 }, /* MKDIR */
#else
{ "mkdir", XXNOTAV, CM_INV },
#endif /* CK_MKDIR */
#ifndef NOXFER
#ifndef NOMSEND
{ "mmove", XXMMOVE, 0 }, /* MMOVE */
#else
{ "mmove", XXNOTAV, CM_INV },
#endif /* NOMSEND */
#endif /* NOXFER */
#ifndef NOFRILLS
{ "more", XXMORE, CM_INV }, /* MORE */
#endif /* NOFRILLS */
#ifndef NOXFER
{ "move", XXMOVE, 0 }, /* MOVE */
#endif /* NOXFER */
#ifndef NOSPL
{ "mpause", XXMSL, CM_INV }, /* Millisecond sleep */
#else
{ "mpause", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOXFER
#ifndef NOMSEND
{ "mput", XXMSE, CM_INV }, /* MPUT = MSEND */
{ "ms", XXMSE, CM_INV|CM_ABR },
{ "msend", XXMSE, 0 }, /* Multiple SEND */
#else
{ "mput", XXNOTAV, CM_INV },
{ "msend", XXNOTAV, CM_INV },
#endif /* NOMSEND */
#endif /* NOXFER */
#ifndef NOSPL
{ "msleep", XXMSL, 0 }, /* Millisecond sleep */
#else
{ "msleep", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOFRILLS
{ "mv", XXREN, CM_INV }, /* Synonym for rename */
#endif /* NOFRILLS */
#ifndef NOHELP
{ "news", XXNEW, CM_INV }, /* Display NEWS of new features */
#else
{ "news", XXNOTAV, CM_INV },
#endif /* NOHELP */
{ "nolocal", XXNLCL, CM_INV }, /* Disable SET LINE / SET HOST */
{ "nopush", XXNPSH, CM_INV }, /* Disable PUSH command/features */
#ifdef OS2
{ "noscroll", XXNSCR, CM_INV }, /* Disable scroll operations */
#endif /* OS2 */
#ifndef NOSPL
{ "o", XXOUT, CM_INV|CM_ABR }, /* Invisible synonym for OUTPUT */
{ "open", XXOPE, 0 }, /* OPEN file for reading or writing */
#else
{ "open", XXOPE, CM_INV }, /* OPEN */
#endif /* NOSPL */
#ifndef NOHELP
{ "options", XXOPTS,CM_INV|CM_HLP }, /* Options */
#endif /* NOHELP */
{ "orientation", XXORIE, 0 },
#ifndef NOSPL
{ "output", XXOUT, 0 }, /* OUTPUT text to comm device */
#else
{ "output", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifdef ANYX25
#ifndef IBMX25
{ "pad", XXPAD, CM_LOC }, /* X.3 PAD commands */
#endif /* IBMX25 */
#endif /* ANYX25 */
#ifdef NEWFTP
{ "passive", XXPASV, CM_INV }, /* (FTP) PASSIVE */
#endif /* NEWFTP */
#ifndef NOHELP
{ "patterns", XXPAT,CM_INV|CM_HLP }, /* Pattern syntax */
#endif /* NOHELP */
#ifndef NOSPL
{ "pause", XXPAU, 0 }, /* Sleep for specified interval */
#else
{ "pause", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NODIAL
{ "pdial", XXPDIA, CM_LOC }, /* PDIAL (partial dial) */
#else
{ "pdial", XXNOTAV, CM_INV|CM_LOC },
#endif /* NODIAL */
#ifdef TCPSOCKET
#ifndef NOPUSH
{ "ping", XXPNG, CM_INV|CM_PSH|CM_LOC }, /* PING */
#else
{ "ping", XXNOTAV, CM_INV|CM_PSH|CM_LOC },
#endif /* NOPUSH */
#endif /* TCPSOCKET */
#ifdef NETCMD
#ifndef NOPUSH
{ "pipe", XXPIPE, CM_PSH }, /* PIPE */
#else
{ "pipe", XXNOTAV, CM_INV|CM_PSH }, /* PIPE */
#endif /* NOPUSH */
#endif /* NETCMD */
#ifndef NOSPL
{ "pop", XXEND, CM_INV }, /* Invisible synonym for END */
#endif /* NOSPL */
#ifndef NOFRILLS
{ "print", XXPRI, 0 }, /* PRINT a file locally */
#endif /* NOFRILLS */
{ "prompt", XXPROMP, CM_INV }, /* Go interactive (from script) */
#ifndef NOXFER
#ifdef CK_RESEND
{ "psend", XXPSEN, CM_INV }, /* PSEND */
#else
{ "psend", XXNOTAV, CM_INV },
#endif /* CK_RESEND */
#endif /* NOXFER */
#ifdef NETPTY
{ "pty", XXPTY, CM_PSH }, /* PTY */
#else
{ "pty", XXNOTAV, CM_INV|CM_PSH },
#endif /* NETPTY */
#ifndef NOPUSH
{ "pu", XXSHE, CM_INV|CM_ABR|CM_PSH }, /* PU = PUSH */
#endif /* NOPUSH */
#ifdef CKPURGE
{ "purge", XXPURGE, 0 }, /* PURGE (real) */
#else
#ifdef VMS
{ "purge", XXPURGE, 0 }, /* PURGE (fake) */
#else
{ "purge", XXNOTAV, CM_INV },
#endif /* VMS */
#endif /* CKPURGE */
#ifndef NOPUSH
{ "push", XXSHE, CM_PSH }, /* PUSH command (like RUN, !) */
#else
{ "push", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOPUSH */
#ifndef NOXFER
{ "put", XXSEN, CM_INV }, /* PUT = SEND */
#endif /* NOXFER */
{ "pwd", XXPWD, 0 }, /* Print Working Directory */
{ "q", XXQUI, CM_INV|CM_ABR }, /* Invisible synonym for QUIT */
#ifndef NOXFER
{ "query", XXRQUE,CM_INV }, /* (= REMOTE QUERY) */
#endif /* NOXFER */
{ "quit", XXQUI, 0 }, /* QUIT from program = EXIT */
#ifndef NOXFER
{ "r", XXREC, CM_INV|CM_ABR }, /* Inv synonym for RECEIVE */
#endif /* NOXFER */
#ifndef NOXFER
{ "rasg", XXRASG, CM_INV }, /* REMOTE ASSIGN */
{ "rassign", XXRASG, CM_INV }, /* ditto */
{ "rcd", XXRCWD, CM_INV }, /* REMOTE CD */
{ "rcdup", XXRCDUP,CM_INV }, /* REMOTE CD */
{ "rcopy", XXRCPY, CM_INV }, /* REMOTE COPY */
{ "rcwd", XXRCWD, CM_INV }, /* REMOTE CWD */
{ "rdelete", XXRDEL, CM_INV }, /* REMOTE DELETE */
{ "rdirectory", XXRDIR, CM_INV }, /* REMODE DIRECTORY */
#endif /* NOXFER */
#ifndef NOSPL
{ "read", XXREA, 0 }, /* READ a line from a file */
#else
{ "read", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOXFER
{ "receive", XXREC, 0 }, /* RECEIVE files */
#endif /* NOXFER */
#ifndef NODIAL
{ "red", XXRED, CM_INV|CM_ABR|CM_LOC }, /* Inv syn for REDIAL */
{ "redi", XXRED, CM_INV|CM_ABR|CM_LOC }, /* ditto */
{ "redial", XXRED, CM_LOC }, /* REDIAL last DIAL number */
#else
{ "red", XXNOTAV, CM_INV|CM_LOC },
{ "redi", XXNOTAV, CM_INV|CM_LOC },
{ "redial", XXNOTAV, CM_INV|CM_LOC },
#endif /* NODIAL */
#ifdef CK_REDIR
#ifdef OS2
#ifndef NOPUSH
{ "redirect", XXFUN, CM_INV|CM_PSH }, /* REDIRECT */
#else
{ "redirect", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOPUSH */
#else /* OS2 */
#ifndef NOPUSH
{ "redirect", XXFUN, CM_PSH }, /* REDIRECT */
#else
{ "redirect", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOPUSH */
#endif /* OS2 */
#endif /* CK_REDIR */
#ifdef CK_RECALL
{ "redo", XXREDO, CM_NOR }, /* REDO */
#else
{ "redo", XXNOTAV, CM_INV },
#endif /* CK_RECALL */
#ifndef NOXFER
#ifdef CK_RESEND
{ "reget", XXREGET, 0 }, /* REGET */
#else
{ "reget", XXNOTAV, CM_INV },
#endif /* CK_RESEND */
#endif /* NOXFER */
#ifndef NOSPL
{ "reinput", XXREI, CM_INV }, /* REINPUT (from INPUT buffer) */
#else
{ "reinput", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOXFER
#ifdef ADDCMD
{ "rem", XXREM, CM_INV|CM_ABR },
{ "remo", XXREM, CM_INV|CM_ABR },
#endif /* ADDCMD */
{ "remote", XXREM, 0 }, /* Send REMOTE command to server */
#endif /* NOXFER */
#ifdef ADDCMD
{ "remove", XXREMV,0 }, /* REMOVE (something from a list) */
#else
{ "remove", XXNOTAV, CM_INV },
#endif /* ADDCMD */
#ifndef NOFRILLS
#ifndef NORENAME
{ "rename", XXREN, 0 }, /* RENAME a local file */
#else
{ "rename", XXNOTAV, CM_INV },
#endif /* NORENAME */
{ "replay", XXTYP, CM_INV }, /* REPLAY (for now, just type) */
#endif /* NOFRILLS */
#ifndef NOXFER
#ifdef CK_RESEND
{ "res", XXRSEN, CM_INV|CM_ABR }, /* RESEND */
{ "rese", XXRSEN, CM_INV|CM_ABR }, /* RESEND */
{ "resend", XXRSEN, 0 }, /* RESEND */
#else
{ "res", XXNOTAV, CM_INV },
{ "rese", XXNOTAV, CM_INV },
{ "resend", XXNOTAV, CM_INV },
#endif /* CK_RESEND */
#endif /* NOXFER */
{ "reset", XXRESET, CM_INV }, /* RESET */
#ifdef CK_RESEND
#ifndef NOSPL
{ "ret", XXRET, CM_INV|CM_ABR },
#endif /* NOSPL */
#endif /* CK_RESEND */
#ifndef NOXFER
{ "retrieve", XXRETR, CM_INV }, /* RETRIEVE */
#endif /* NOXFER */
#ifndef NOSPL
{ "return", XXRET, 0 }, /* RETURN from a function */
#else
{ "return", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOXFER
{ "rexit", XXRXIT, CM_INV }, /* REMOTE EXIT */
#endif /* NOXFER */
#ifdef CK_REXX
#ifndef NOPUSH
{ "rexx", XXREXX, CM_PSH }, /* Execute a Rexx command */
#else
{ "rexx", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOPUSH */
#endif /* CK_REXX */
#ifndef NOXFER
{ "rhelp", XXRHLP, CM_INV }, /* REMOTE HELP */
{ "rhost", XXRHOS, CM_INV }, /* REMOTE HOST */
{ "rkermit", XXRKER, CM_INV }, /* REMOTE KERMIT */
#endif /* NOXFER */
#ifdef TCPSOCKET
{ "rlogin", XXRLOG, CM_LOC }, /* Make an Rlogin connection */
#else
{ "rlogin", XXNOTAV, CM_INV|CM_LOC },
#endif /* TCPSOCKET */
#ifndef NOFRILLS
{ "rm", XXDEL, CM_INV }, /* Invisible synonym for delete */
#endif /* NOFRILLS */
#ifdef CK_MKDIR
{ "rmdir", XXRMDIR, 0 }, /* RMDIR */
#else
{ "rmdir", XXNOTAV, CM_INV },
#endif /* CK_MKDIR */
#ifndef NOXFER
{ "rmkdir", XXRMKD, CM_INV }, /* REMOTE MKDIR */
#ifndef NOSPL
{ "robust", XXROB, CM_INV },
#else
{ "robust", XXNOTAV, CM_INV },
#endif /* NOSPL */
{ "rprint", XXRPRI, CM_INV }, /* REMOTE PRINT */
{ "rpwd", XXRPWD, CM_INV }, /* REMOTE PWD */
{ "rquery", XXRQUE, CM_INV }, /* REMOTE QUERY */
#endif /* NOXFER */
#ifdef CK_RECALL
{ "rr", XXREDO, CM_INV|CM_NOR },
#endif /* CK_RECALL */
#ifndef NOXFER
{ "rrename", XXRREN, CM_INV }, /* REMOTE RENAME */
{ "rrmdir", XXRRMD, CM_INV }, /* REMOTE REMDIR */
{ "rset", XXRSET, CM_INV }, /* REMOTE SET */
{ "rspace", XXRSPA, CM_INV }, /* REMOTE SPACE */
{ "rtype", XXRTYP, CM_INV }, /* REMOTE TYPE */
#endif /* NOXFER */
#ifndef NOPUSH
{ "run", XXSHE, CM_PSH }, /* RUN a program or command */
#else
{ "run", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOPUSH */
#ifndef NOXFER
{ "rwho", XXRWHO, CM_INV }, /* REMOTE WHO */
{ "s", XXSEN, CM_INV|CM_ABR }, /* Invisible synonym for send */
#endif /* NOXFER */
#ifndef NOSETKEY
#ifdef OS2
{ "save", XXSAVE, 0 }, /* SAVE something */
#else
{ "save", XXSAVE, CM_INV },
#endif /* OS2 */
#else
{ "save", XXNOTAV, CM_INV },
#endif /* NOSETKEY */
#ifndef NOSCRIPT
{ "sc", XXLOGI, CM_INV|CM_ABR|CM_LOC },
{ "scr", XXLOGI, CM_INV|CM_ABR|CM_LOC },
#endif /* NOSCRIPT */
{ "screen", XXSCRN, 0 }, /* SCREEN actions */
#ifndef NOSCRIPT
{ "script", XXLOGI, CM_LOC }, /* Expect-Send-style script line */
#else
{ "script", XXNOTAV, CM_INV|CM_LOC },
#endif /* NOSCRIPT */
{ "search", XXGREP,CM_INV }, /* Synonym for GREP and FIND */
#ifndef NOXFER
{ "send", XXSEN, 0 }, /* Send (a) file(s) */
#ifndef NOSERVER
{ "server", XXSER, 0 }, /* Be a SERVER */
#else
{ "server", XXNOTAV, CM_INV },
#endif /* NOSERVER */
#endif /* NOXFER */
{ "set", XXSET, 0 }, /* SET parameters */
#ifndef NOSPL
#ifndef NOSEXP
{ "sexpression", XXSEXP, CM_INV|CM_HLP }, /* SEXPR */
#endif /* NOSEXP */
#ifdef SFTP_BUILTIN
{ "sftp", XXSFTP, 0 }, /* SFTP */
#endif /* SFTP_BUILTIN */
#ifndef NOSHOW
{ "sh", XXSHO, CM_INV|CM_ABR }, /* SHOW parameters */
#endif /* NOSHOW */
{ "shift", XXSHIFT, 0 }, /* SHIFT args */
#else
{ "shift", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOSHOW
{ "show", XXSHO, 0 }, /* SHOW parameters */
#else
{ "show", XXNOTAV, CM_INV },
#endif /* NOSHOW */
#ifdef NEWFTP
{ "site", XXSITE, CM_INV }, /* (FTP) SITE */
#endif /* NEWFTP */
#ifdef SSHBUILTIN
{ "skermit", XXSKRM, 0 }, /* SKERMIT */
#endif /* SSHBUILTIN */
#ifndef NOSPL
#ifndef NOFRILLS
{ "sleep", XXPAU, CM_INV }, /* SLEEP for specified interval */
#endif /* NOFRILLS */
#endif /* NOSPL */
#ifndef NOSPL
{ "sort", XXSORT, CM_INV }, /* (see ARRAY) */
#else
{ "sort", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef MAC
#ifndef NOFRILLS
{ "sp", XXSPA, CM_INV|CM_ABR },
{ "spa", XXSPA, CM_INV|CM_ABR },
#endif /* NOFRILLS */
{ "space", XXSPA, 0 }, /* Show available disk SPACE */
#endif /* MAC */
#ifndef NOFRILLS
#ifndef NOPUSH
{ "spawn", XXSHE, CM_INV|CM_PSH }, /* Synonym for PUSH, RUN */
#else
{ "spawn", XXNOTAV, CM_INV|CM_PSH }, /* Synonym for PUSH, RUN */
#endif /* NOPUSH */
#endif /* NOFRILLS */
#ifdef ANYSSH
{ "ssh", XXSSH, 0 },
#endif /* ANYSSH */
#ifndef NOXFER
{ "sta", XXSTA, CM_INV|CM_ABR },
{ "stat", XXSTA, CM_INV|CM_ABR },
{ "statistics", XXSTA, 0 }, /* Display file transfer stats */
#endif /* NOXFER */
{ "status", XXSTATUS,0 }, /* Show status of previous command */
#ifndef NOSPL
{ "stop", XXSTO, 0 }, /* STOP all take files and macros */
{ "succeed", XXSUCC, CM_INV }, /* SUCCEED */
#else
{ "stop", XXNOTAV, CM_INV },
{ "succeed", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOFRILLS
{ "SUPPORT", XXBUG, 0 }, /* Tech support instructions */
#else
{ "support", XXNOTAV, CM_INV },
#endif /* NOFRILLS */
#ifndef NOJC
{ "suspend", XXSUS, CM_PSH }, /* SUSPEND C-Kermit (UNIX only) */
#else
{ "suspend", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOJC */
#ifndef NOSPL
{ "switch", XXSWIT, 0 }, /* SWITCH */
#else
{ "switch", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifdef CK_TAPI
{ "ta", XXTAK, CM_INV|CM_ABR }, /* (because of TAPI) */
#endif /* CK_TAPI */
#ifndef NOFRILLS
{ "tail", XXTAIL, 0 }, /* Display end of a local file */
#endif /* NOFRILLS */
{ "take", XXTAK, 0 }, /* TAKE commands from a file */
#ifdef CK_TAPI
{ "tapi", XXTAPI, CM_LOC }, /* Microsoft TAPI commands */
#else
{ "tapi", XXNOTAV, CM_INV|CM_LOC },
#endif /* CK_TAPI */
#ifndef NOFRILLS
#ifdef TCPSOCKET
{ "tel", XXTEL, CM_INV|CM_ABR|CM_LOC },
{ "telnet", XXTEL, CM_LOC }, /* TELNET (TCP/IP only) */
{ "telopt", XXTELOP, CM_INV }, /* TELOPT (ditto) */
#else
{ "tel", XXNOTAV, CM_INV|CM_LOC },
{ "telnet", XXNOTAV, CM_INV|CM_LOC },
{ "telopt", XXNOTAV, CM_INV },
#endif /* TCPSOCKET */
#ifdef OS2
{ "terminal", XXTERM, CM_INV|CM_LOC }, /* == SET TERMINAL TYPE */
#else
{ "terminal", XXTERM, CM_INV },
#endif /* OS2 */
#endif /* NOFRILLS */
#ifndef NOXFER
{ "text", XXASC, CM_INV }, /* == SET FILE TYPE TEXT */
#endif /* NOXFER */
#ifndef NOSPL
{ "trace", XXTRACE, 0 }, /* TRACE */
#else
{ "trace", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOCSETS
{ "translate", XXXLA, 0 }, /* TRANSLATE local file char sets */
#else
{ "translate", XXNOTAV, CM_INV },
#endif /* NOCSETS */
#ifndef NOXMIT
{ "transmit", XXTRA, 0 }, /* Send (upload) a file, no protocol */
#else
{ "transmit", XXNOTAV, CM_INV },
#endif /* NOXMIT */
#ifndef NOFRILLS
{ "type", XXTYP, 0 }, /* Display a local file */
#endif /* NOFRILLS */
#ifndef NOSPL
{ "undcl", XXUNDCL, CM_INV },
{ "undeclare", XXUNDCL, 0 }, /* UNDECLARE an array */
{ "undefine", XXUNDEF, 0 }, /* UNDEFINE a variable or macro */
#else
{ "undcl", XXNOTAV, CM_INV },
{ "undeclare", XXNOTAV, CM_INV },
{ "undefine", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifdef NEWFTP
{ "user", XXUSER, CM_INV }, /* (FTP) USER */
#endif /* NEWFTP */
{ "version", XXVER, 0 }, /* VERSION-number display */
#ifdef OS2
{ "viewonly", XXVIEW, CM_LOC }, /* VIEWONLY Terminal Mode */
#endif /* OS2 */
{ "void", XXVOID, 0 }, /* VOID */
#ifndef NOSPL
{ "wait", XXWAI, 0 }, /* WAIT */
#else
{ "wait", XXNOTAV, CM_INV },
#endif /* NOSPL */
{ "wermit", XXKERMI, CM_INV },
#ifndef NOXFER
{ "where", XXWHERE, 0 }, /* WHERE (did my file go?) */
#endif /* NOXFER */
#ifndef NOSPL
{ "while", XXWHI, 0 }, /* WHILE loop */
#else
{ "while", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef OS2
#ifndef MAC
#ifndef NOFRILLS
{ "who", XXWHO, CM_PSH }, /* WHO's logged in? */
#endif /* NOFRILLS */
#endif /* MAC */
#endif /* OS2 */
#ifndef NOHELP
{ "wildcards", XXWILD,CM_INV|CM_HLP }, /* Wildcard syntax */
#endif /* NOHELP */
#ifndef NOSPL
{ "wr", XXWRI, CM_INV|CM_ABR },
{ "wri", XXWRI, CM_INV|CM_ABR },
{ "writ", XXWRI, CM_INV|CM_ABR },
{ "write", XXWRI, 0 }, /* WRITE characters to a file */
{ "write-line", XXWRL, CM_INV }, /* WRITE a line to a file */
{ "writeln", XXWRL, CM_INV }, /* Pascalisch synonym for write-line */
#else
{ "wr", XXNOTAV, CM_INV },
{ "wri", XXNOTAV, CM_INV },
{ "writ", XXNOTAV, CM_INV },
{ "write", XXNOTAV, CM_INV },
{ "write-line", XXNOTAV, CM_INV },
{ "writeln", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOFRILLS
{ "xecho", XXXECH,0 }, /* XECHO */
#endif /* NOFRILLS */
#ifndef NOSPL
{ "xif", XXIFX, CM_INV }, /* Extended IF command (obsolete) */
#else
{ "xif", XXNOTAV, CM_INV },
#endif /* NOSPL */
#ifndef NOCSETS
{ "xlate", XXXLA, CM_INV }, /* Synonym for TRANSLATE */
#else
{ "xlate", XXNOTAV, CM_INV },
#endif /* NOCSETS */
#ifndef NOXMIT
{ "xmit", XXTRA, CM_INV }, /* Synonym for TRANSMIT */
#else
{ "xmit", XXNOTAV, CM_INV },
#endif /* NOXMIT */
#ifndef OS2
#ifndef NOJC
{ "z", XXSUS, CM_INV|CM_PSH }, /* Synonym for SUSPEND */
#else
{ "z", XXNOTAV, CM_INV|CM_PSH },
#endif /* NOJC */
#endif /* OS2 */
#ifndef NOSPL
{ "{", XXMACRO, CM_INV }, /* Immediate macro */
#endif /* NOSPL */
{ "", 0, 0 }
};
int ncmd = (sizeof(cmdtab) / sizeof(struct keytab)) - 1;
/* NOTE: Tokens must also be entered above into cmdtab[]. */
char toktab[] = {
#ifndef NOPUSH
'!', /* Shell escape */
#endif /* NOPUSH */
'#', /* Comment */
#ifndef NOSPL
'(', /* S-Expression */
'.', /* Assignment */
#endif /* NOSPL */
';', /* Comment */
#ifndef NOSPL
':', /* Label */
#endif /* NOSPL */
#ifndef NOPUSH
#ifdef CK_REDIR
'<', /* REDIRECT */
#endif /* CK_REDIR */
'@', /* DCL escape */
#endif /* NOPUSH */
#ifdef CK_RECALL
'^', /* Command recall */
#endif /* CK_RECALL */
#ifndef NOSPL
'{', /* Immediate macro */
#endif /* NOSPL */
'\0' /* End of this string */
};
int xxdot = 0; /* Used with "." token */
struct keytab yesno[] = { /* Yes/No keyword table */
{ "no", 0, 0 },
{ "ok", 1, 0 },
{ "yes", 1, 0 }
};
int nyesno = (sizeof(yesno) / sizeof(struct keytab));
/* Save keyword table */
struct keytab savtab[] = {
#ifdef OS2
{ "command", XSCMD, 0 },
#else
#ifdef CK_RECALL
{ "command", XSCMD, 0 },
#endif /* CK_RECALL */
#endif /* OS2 */
#ifndef NOSETKEY
{ "keymap", XSKEY, 0 },
#endif /* NOSETKEY */
#ifdef OS2
{ "terminal", XSTERM, 0 },
#endif /* OS2 */
{ "", 0, 0 }
};
int nsav = (sizeof(savtab) / sizeof(struct keytab)) - 1;
/* Parameter keyword table */
struct keytab prmtab[] = {
{ "alarm", XYALRM, 0 },
#ifdef COMMENT /* SET ANSWER not implemented yet */
#ifndef NODIAL
{ "answer", XYANSWER,0 },
#endif /* NODIAL */
#endif /* COMMENT */
{ "ask-timer", XYTIMER, 0 },
#ifndef NOXFER
{ "attributes", XYATTR, 0 },
#endif /* NOXFER */
#ifdef CK_AUTHENTICATION
{ "authentication", XYAUTH, 0 },
#else /* CK_AUTHENTICATION */
#ifdef CK_SSL
{ "authentication", XYAUTH, 0 },
#endif /* CK_SSL */
#endif /* CK_AUTHENTICATION */
{ "b", XYBACK, CM_INV|CM_ABR|CM_PSH },
{ "ba", XYBACK, CM_INV|CM_ABR|CM_PSH },
#ifdef VMS
{ "background", XYBACK, CM_INV|CM_PSH },
{ "batch", XYBACK, CM_PSH },
#else
{ "background", XYBACK, CM_PSH },
{ "batch", XYBACK, CM_INV|CM_PSH },
#endif /* VMS */
#ifndef NOLOCAL
{ "baud", XYSPEE, CM_INV|CM_LOC },
#endif /* NOLOCAL */
{ "bell", XYBELL, 0 },
#ifndef NOXFER
{ "block-check", XYCHKT, 0 },
#endif /* NOXFER */
#ifdef OS2
#ifdef BPRINT
{ "bprinter", XYBDCP, CM_INV },
#endif /* BPRINT */
#endif /* OS2 */
#ifdef BROWSER
{ "browser", XYBROWSE,CM_PSH|CM_LOC },
#endif /* BROWSER */
#ifndef NOXFER
#ifdef DYNAMIC
{ "buffers", XYBUF, 0 },
#endif /* DYNAMIC */
#endif /* NOXFER */
#ifndef NOLOCAL
#ifndef MAC
{ "carrier-watch", XYCARR, CM_LOC },
#endif /* MAC */
#endif /* NOLOCAL */
#ifndef NOSPL
{ "case", XYCASE, 0 },
#endif /* NOSPL */
{ "cd", XYCD, 0 },
#ifndef NOXFER
{ "cl", XYCLEAR, CM_INV|CM_ABR },
{ "cle", XYCLEAR, CM_INV|CM_ABR },
{ "clea", XYCLEAR, CM_INV|CM_ABR },
{ "clear", XYCLEAR, CM_INV|CM_ABR },
{ "clear-channel", XYCLEAR, 0 },
{ "clearchannel", XYCLEAR, CM_INV },
#endif /* NOXFER */
#ifndef NOLOCAL
{ "close-on-disconnect", XYDISC, CM_INV|CM_LOC },
#endif /* NOLOCAL */
{ "cmd", XYCMD, CM_INV },
{ "command", XYCMD, 0 },
#ifdef CK_SPEED
{ "con", XYQCTL, CM_INV|CM_ABR },
#endif /* CK_SPEED */
{ "console", XYCMD, CM_INV },
#ifdef CK_SPEED
{ "control-character",XYQCTL, 0 },
#endif /* CK_SPEED */
#ifndef NOSPL
{ "count", XYCOUN, 0 },
#endif /* NOSPL */
#ifndef NOXFER
{ "d", XYDELA, CM_INV|CM_ABR },
{ "de", XYDELA, CM_INV|CM_ABR },
#endif /* NOXFER */
{ "debug", XYDEBU, 0 },
#ifdef VMS
{ "default", XYDFLT, 0 },
#else
#ifndef MAC
{ "default", XYDFLT, CM_INV },
#endif /* MAC */
#endif /* VMS */
#ifndef NOXFER
{ "delay", XYDELA, 0 },
{ "destination", XYDEST, 0 },
#endif /* NOXFER */
#ifndef NODIAL
{ "di", XYDIAL, CM_INV|CM_ABR|CM_LOC },
{ "dia", XYDIAL, CM_INV|CM_ABR|CM_LOC },
{ "dial", XYDIAL, CM_LOC },
#endif /* NODIAL */
#ifdef OS2
{ "dialer", XYDLR, CM_INV },
#endif /* OS2 */
#ifndef NOLOCAL
{ "disconnect", XYDISC, CM_LOC },
{ "duplex", XYDUPL, CM_LOC },
#endif /* NOLOCAL */
#ifndef NOPUSH
#ifndef NOFRILLS
{ "editor", XYEDIT, CM_PSH },
#endif /* NOFRILLS */
#endif /* NOPUSH */
#ifdef CK_CTRLZ
{ "eof", XYEOF, CM_INV },
#endif /* CK_CTRLZ */
#ifndef NOLOCAL
{ "escape-character", XYESC, CM_LOC },
#endif /* NOLOCAL */
#ifndef NOSPL
{ "evaluate", XYEVAL, CM_INV },
#endif /* NOSPL */
{ "exit", XYEXIT, 0 },
#ifndef NOXFER
{ "f-ack-bug", XYFACKB, CM_INV },
{ "f-ack-path", XYFACKP, CM_INV },
#endif /* NOXFER */
{ "file", XYFILE, 0 },
{ "fl", XYFLOW, CM_INV|CM_ABR },
#ifndef NOSPL
{ "flag", XYFLAG, 0 },
#endif /* NOSPL */
#ifdef TCPSOCKET
#ifndef SYSFTP
#ifndef NOFTP
{ "ft", XYFTPX, CM_INV|CM_ABR },
{ "ftp", XYFTPX, 0 },
#endif /* NOFTP */
#endif /* SYSFTP */
#endif /* TCPSOCKET */
#ifdef BROWSER
{ "ftp-client", XYFTP, CM_PSH },
#endif /* BROWSER */
{ "flow-control", XYFLOW, 0 },
#ifndef NOSPL
{ "function", XYFUNC, 0 },
#endif /* NOSPL */
#ifdef NEWFTP
{ "get-put-remote", XYGPR, 0 },
#endif /* NEWFTP */
#ifdef KUI
{ "gui", XYGUI, 0 },
#endif /* KUI */
{ "handshake", XYHAND, 0 },
{ "hints", XYHINTS, 0 },
#ifdef NETCONN
{ "host", XYHOST, CM_LOC },
#endif /* NETCONN */
#ifndef NOSPL
{ "i", XYINPU, CM_INV|CM_ABR },
#endif /* NOSPL */
#ifdef IKSD
{ "iks", XYIKS, 0 },
#else
{ "iks", XYIKS, CM_INV },
#endif /* IKSD */
#ifndef NOSPL
{ "in", XYINPU, CM_INV|CM_ABR },
#endif /* NOSPL */
#ifndef NOXFER
{ "incomplete", XYIFD, CM_INV },
#endif /* NOXFER */
#ifndef NOSPL
{ "input", XYINPU, 0 },
#endif /* NOSPL */
#ifndef NOSETKEY
{ "key", XYKEY, 0 },
#endif /* NOSETKEY */
{ "l", XYLINE, CM_INV|CM_ABR },
#ifndef NOCSETS
{ "language", XYLANG, 0 },
#endif /* NOCSETS */
#ifndef NOLOCAL
{ "line", XYLINE, CM_LOC },
{ "local-echo", XYLCLE, CM_INV|CM_LOC },
#endif /* NOLOCAL */
#ifdef LOCUS
{ "locus", XYLOCUS, 0 },
#endif /* LOCUS */
#ifndef NOSPL
{ "login", XYLOGIN, CM_LOC },
#endif /* NOSPL */
#ifndef NOSPL
{ "macro", XYMACR, 0 },
#endif /* NOSPL */
{ "match", XYMATCH, 0 },
#ifdef COMMENT
#ifdef VMS
{ "messages", XYMSGS, 0 },
#endif /* VMS */
#endif /* COMMENT */
#ifndef NODIAL
{ "modem", XYMODM, CM_LOC },
#endif /* NODIAL */
#ifndef NOLOCAL
#ifdef OS2MOUSE
{ "mouse", XYMOUSE, 0 },
#endif /* OS2MOUSE */
#endif /* NOLOCAL */
#ifdef OS2
{ "mskermit", XYMSK, 0 },
#endif /* OS2 */
#ifdef NETCONN
{ "network", XYNET, CM_LOC },
#endif /* NETCONN */
#ifndef NOSPL
{ "output", XYOUTP, 0 },
#endif /* NOSPL */
{ "options", XYOPTS, 0 },
{ "pause", XYSLEEP, CM_INV },
#ifdef ANYX25
#ifndef IBMX25
{ "pad", XYPAD, CM_LOC },
#endif /* IBMX25 */
#endif /* ANYX25 */
{ "parity", XYPARI, 0 },
#ifndef NOLOCAL
#ifdef OS2
{ "port", XYLINE, CM_LOC },
#else
{ "port", XYLINE, CM_INV|CM_LOC },
#endif /* OS2 */
#endif /* NOLOCAL */
#ifndef NOFRILLS
{ "pr", XYPROM, CM_INV|CM_ABR },
{ "printer", XYPRTR, 0 },
#endif /* NOFRILLS */
#ifdef OS2
{ "priority", XYPRTY, 0 },
#endif /* OS2 */
#ifdef CK_SPEED
{ "prefixing", XYPREFIX, 0 },
#endif /* CK_SPEED */
#ifndef NOFRILLS
{ "prompt", XYPROM, 0 },
#endif /* NOFRILLS */
#ifndef NOXFER
{ "protocol", XYPROTO, 0 },
#endif /* NOXFER */
{ "q", XYQUIE, CM_INV|CM_ABR },
#ifndef NOXFER
{ "q8flag", XYQ8FLG, CM_INV },
#endif /* NOXFER */
#ifdef QNX
{ "qnx-port-lock", XYQNXPL, 0 },
#else
{ "qnx-port-lock", XYQNXPL, CM_INV },
#endif /* QNX */
{ "quiet", XYQUIE, 0 },
#ifndef NOXFER
{ "rec", XYRECV, CM_INV|CM_ABR },
{ "receive", XYRECV, 0 },
{ "recv", XYRECV, CM_INV },
#endif /* NOXFER */
{ "reliable", XYRELY, 0 },
#ifndef NOXFER
{ "repeat", XYREPT, 0 },
{ "retry-limit", XYRETR, 0 },
#endif /* NOXFER */
#ifdef CKROOT
{ "root", XYROOT, 0 },
#endif /* CKROOT */
#ifndef NOSCRIPT
{ "script", XYSCRI, CM_LOC },
#endif /* NOSCRIPT */
#ifndef NOXFER
{ "send", XYSEND, 0 },
#ifndef NOLOCAL
#ifndef NOSERVER
{ "ser", XYSERV, CM_INV|CM_ABR },
#endif /* NOSERVER */
#endif /* NOXFER */
{ "serial", XYSERIAL,CM_LOC },
#endif /* NOLOCAL */
#ifndef NOSERVER
{ "server", XYSERV, 0 },
#endif /* NOSERVER */
#ifdef SESLIMIT
#ifndef NOLOCAL
{ "session-l", XYSESS, CM_INV|CM_ABR },
#endif /* NOLOCAL */
{ "session-limit", XYLIMIT, CM_INV|CM_LOC }, /* Session Limit */
#endif /* SESLIMIT */
#ifndef NOLOCAL
{ "session-log", XYSESS, CM_LOC },
#endif /* NOLOCAL */
#ifndef NOSPL
#ifndef NOSEXP
{ "sexpression", XYSEXP, CM_INV },
#endif /* NOSEXP */
#endif /* NOSPL */
{ "sleep", XYSLEEP, 0 },
#ifndef NOLOCAL
{ "speed", XYSPEE, CM_LOC },
#endif /* NOLOCAL */
#ifdef ANYSSH
{ "ssh", XYSSH, 0 },
#endif /* ANYSSH */
#ifndef NOSPL
{ "startup-file", XYSTARTUP, CM_INV },
#endif /* NOSPL */
#ifndef NOLOCAL
#ifdef HWPARITY
{ "stop-bits", XYSTOP, CM_LOC },
#else
#ifdef TN_COMPORT
{ "stop-bits", XYSTOP, CM_LOC },
#endif /* TN_COMPORT */
#endif /* HWPARITY */
#endif /* NOLOCAL */
#ifndef NOXFER
#ifdef STREAMING
{ "streaming", XYSTREAM, 0 },
#endif /* STREAMING */
#endif /* NOXFER */
#ifndef NOJC
{ "suspend", XYSUSP, CM_PSH },
#endif /* NOJC */
#ifdef CKSYSLOG
{ "syslog", XYSYSL, CM_INV },
#endif /* CKSYSLOG */
{ "take", XYTAKE, 0 },
#ifdef CK_TAPI
{ "tapi", XYTAPI, CM_LOC },
#endif /* CK_TAPI */
#ifndef NOTCPOPTS
#ifdef TCPSOCKET
{ "tcp", XYTCP, CM_LOC },
#endif /* TCPSOCKET */
#endif /* NOTCPOPTS */
#ifdef TNCODE
{ "tel", XYTEL, CM_INV|CM_ABR },
{ "telnet", XYTEL, 0 },
{ "telopt", XYTELOP, 0 },
#endif /* TNCODE */
#ifndef NOSPL
{ "temp-directory", XYTMPDIR,0 },
#endif /* NOSPL */
#ifndef NOLOCAL
{ "terminal", XYTERM, CM_LOC },
#endif /* NOLOCAL */
#ifdef OS2
{ "title", XYTITLE, CM_LOC },
#endif /* OS2 */
#ifdef TLOG
{ "transaction-log", XYTLOG, 0 },
#endif /* TLOG */
#ifndef NOXFER
{ "transfer", XYXFER, 0 },
#endif /* NOXFER */
#ifndef NOXMIT
{ "transmit", XYXMIT, 0 },
#endif /* NOXMIT */
#ifndef NOXFER
#ifndef NOCSETS
{ "unknown-char-set", XYUNCS, 0 },
#endif /* NOCSETS */
#endif /* NOXFER */
{ "wait", XYSLEEP, CM_INV },
#ifndef NOPUSH
#ifdef UNIX
{ "wildcard-expansion", XYWILD, 0 },
#endif /* UNIX */
#endif /* NOPUSH */
#ifdef NT
{ "w", XYWIND, CM_INV|CM_ABR },
{ "wi", XYWIND, CM_INV|CM_ABR },
{ "win", XYWIND, CM_INV|CM_ABR },
#endif /* NT */
{ "window-size", XYWIND, 0 },
#ifdef NT
{ "win95", XYWIN95, 0 },
#endif /* NT */
#ifdef ANYX25
{ "x.25", XYX25, CM_LOC },
{ "x25", XYX25, CM_INV|CM_LOC },
#endif /* ANYX25 */
{ "xfer", XYXFER, CM_INV },
#ifndef NOXMIT
{ "xmit", XYXMIT, CM_INV },
#endif /* NOXMIT */
{ "", 0, 0 }
};
int nprm = (sizeof(prmtab) / sizeof(struct keytab)) - 1; /* How many */
struct keytab scntab[] = { /* Screen commands */
{ "clear", SCN_CLR, 0 },
{ "cleol", SCN_CLE, 0 },
{ "move-to", SCN_MOV, 0 }
};
int nscntab = (sizeof(scntab) / sizeof(struct keytab)); /* How many */
#ifdef ANYSSH /* SSH command table */
#ifdef SSHBUILTIN
int ssh_pf_lcl_n = 0,
ssh_pf_rmt_n = 0;
struct ssh_pf ssh_pf_lcl[32] = { 0, NULL, 0 }; /* SSH Port Forwarding */
struct ssh_pf ssh_pf_rmt[32] = { 0, NULL, 0 }; /* structs... */
extern char * ssh_hst, * ssh_cmd, * ssh_prt;
extern int ssh_ver, ssh_xfw;
char * ssh_tmpuid = NULL, *ssh_tmpcmd = NULL, *ssh_tmpport = NULL,
* ssh_tmpstr = NULL;
int
sshk_type = SSHKT_2D, /* SSH KEY CREATE /TYPE:x */
sshk_bits = 1024, /* SSH KEY CREATE /BITS:n */
sshk_din = SKDF_OSSH, /* SSH KEY DISPLAY /IN-FORMAT: */
sshk_dout = SKDF_OSSH; /* SSH KEY DISPLAY /OUT-FORMAT: */
char
* sshk1_comment = NULL, /* SSH V1 COMMENT */
* sshkp_old = NULL, /* Old key passphrase */
* sshkp_new = NULL, /* New key passphrase */
* sshkc_pass = NULL, /* KEY CREATE /PASS:xxx */
* sshkc_comm = NULL, /* KEY CREATE /V1-RSA-COMMENT:xxx */
* sshd_file = NULL, /* DISPLAY file */
* sshk_file = NULL; /* SSH CREATE KEY file */
static struct keytab sshclr[] = {
{ "local-port-forward", SSHC_LPF, 0 },
{ "remote-port-forward", SSHC_RPF, 0 },
{ "", 0, 0 }
};
static int nsshclr = (sizeof(sshclr) / sizeof(struct keytab)) - 1;
struct keytab sshopnsw[] = {
{ "/command", SSHSW_CMD, CM_ARG },
{ "/password", SSHSW_PWD, CM_ARG },
{ "/subsystem", SSHSW_SUB, CM_ARG },
{ "/user", SSHSW_USR, CM_ARG },
{ "/version", SSHSW_VER, CM_ARG },
{ "/x11-forwarding", SSHSW_X11, CM_ARG },
{ "", 0, 0 }
};
int nsshopnsw = (sizeof(sshopnsw) / sizeof(struct keytab)) - 1;
static struct keytab sshkwtab[] = {
{ "add", XSSH_ADD, 0 },
{ "agent", XSSH_AGT, 0 },
{ "clear", XSSH_CLR, 0 },
{ "forward-local-port", XSSH_FLP, CM_INV },
{ "forward-remote-port", XSSH_FRP, CM_INV },
{ "key", XSSH_KEY, 0 },
{ "open", XSSH_OPN, 0 },
{ "v2", XSSH_V2, 0 },
{ "", 0, 0 }
};
static int nsshcmd = (sizeof(sshkwtab) / sizeof(struct keytab)) - 1;
static struct keytab ssh2tab[] = {
{ "rekey", XSSH2_RKE, 0 },
{ "", 0, 0 }
};
static int nssh2tab = (sizeof(ssh2tab) / sizeof(struct keytab));
static struct keytab addfwd[] = { /* SET SSH ADD command table */
{ "local-port-forward", SSHF_LCL, 0 },
{ "remote-port-forward", SSHF_RMT, 0 },
{ "", 0, 0 }
};
static int naddfwd = (sizeof(addfwd) / sizeof(struct keytab)) - 1;
static struct keytab sshagent[] = { /* SET SSH AGENT command table */
{ "add", SSHA_ADD, 0 },
{ "delete", SSHA_DEL, 0 },
{ "list", SSHA_LST, 0 },
{ "", 0, 0 }
};
static int nsshagent = (sizeof(sshagent) / sizeof(struct keytab)) - 1;
static struct keytab sshagtsw[] = { /* SET SSH AGENT LIST switch table */
{ "/fingerprint", SSHASW_FP, 0 },
{ "", 0, 0 }
};
static int nsshagtsw = (sizeof(sshagtsw) / sizeof(struct keytab)) - 1;
static struct keytab sshkey[] = { /* SET SSH KEY command table */
{ "change-passphrase", SSHK_PASS, 0 },
{ "create", SSHK_CREA, 0 },
{ "display", SSHK_DISP, 0 },
{ "v1", SSHK_V1, 0 },
{ "", 0, 0 }
};
static int nsshkey = (sizeof(sshkey) / sizeof(struct keytab)) - 1;
static struct keytab sshkv1[] = { /* SET SSH KEY V1 command table */
{ "set-comment", 1, 0 }
};
static struct keytab sshkpsw[] = { /* SET SSH KEY PASSPHRASE table */
{ "/new-passphrase", 2, CM_ARG },
{ "/old-passphrase", 1, CM_ARG }
};
static struct keytab sshkcrea[] = { /* SSH KEY CREATE table */
{ "/bits", SSHKC_BI, CM_ARG },
{ "/passphrase", SSHKC_PP, CM_ARG },
{ "/type", SSHKC_TY, CM_ARG },
{ "/v1-rsa-comment", SSHKC_1R, CM_ARG }
};
static int nsshkcrea = (sizeof(sshkcrea) / sizeof(struct keytab));
static struct keytab sshkcty[] = { /* SSH KEY CREATE /TYPE:xxx */
{ "srp", SSHKT_SRP, 0 },
{ "v1-rsa", SSHKT_1R, 0 },
{ "v2-dsa", SSHKT_2D, 0 },
{ "v2-rsa", SSHKT_2R, 0 }
};
static int nsshkcty = (sizeof(sshkcty) / sizeof(struct keytab));
static struct keytab sshdswi[] = { /* SET SSH KEY DISPLAY /switches */
{ "/format", SSHKD_OUT, CM_ARG }
};
static int nsshdswi = (sizeof(sshdswi) / sizeof(struct keytab));
#ifdef COMMENT
static struct keytab sshdifmt[] = { /* SSH KEY DISPLAY /IN-FORMAT: */
{ "openssh", SKDF_OSSH, 0 },
{ "ssh.com", SKDF_SSHC, 0 }
};
static int nsshdifmt = (sizeof(sshdifmt) / sizeof(struct keytab));
#endif /* COMMENT */
static struct keytab sshdofmt[] = { /* SSH KEY DISPLAY /IN-FORMAT: */
{ "fingerprint", SKDF_FING, 0 },
{ "ietf", SKDF_IETF, 0 },
{ "openssh", SKDF_OSSH, 0 },
{ "ssh.com", SKDF_SSHC, 0 }
};
static int nsshdofmt = (sizeof(sshdofmt) / sizeof(struct keytab));
static struct keytab sshkermit[] = { /* SKERMIT */
{ "open", SKRM_OPN, 0 }
};
static int nsshkermit = (sizeof(sshkermit) / sizeof(struct keytab));
struct keytab sshkrmopnsw[] = {
{ "/password", SSHSW_PWD, CM_ARG },
{ "/user", SSHSW_USR, CM_ARG },
{ "/version", SSHSW_VER, CM_ARG },
{ "", 0, 0 }
};
int nsshkrmopnsw = (sizeof(sshkrmopnsw) / sizeof(struct keytab)) - 1;
#endif /* SSHBUILTIN */
#ifdef SFTP_BUILTIN
static struct keytab sftpkwtab[] = { /* SFTP */
{ "cd", SFTP_CD, 0 },
{ "chgrp", SFTP_CHGRP, 0 },
{ "chmod", SFTP_CHMOD, 0 },
{ "chown", SFTP_CHOWN, 0 },
{ "delete", SFTP_RM, 0 },
{ "dir", SFTP_DIR, 0 },
{ "get", SFTP_GET, 0 },
{ "mkdir", SFTP_MKDIR, 0 },
{ "open", SFTP_OPN, 0 },
{ "put", SFTP_PUT, 0 },
{ "pwd", SFTP_PWD, 0 },
{ "rename", SFTP_REN, 0 },
{ "rm", SFTP_RM, CM_INV },
{ "rmdir", SFTP_RMDIR, 0 },
{ "symlink", SFTP_LINK, 0 },
{ "version", SFTP_VER, 0 }
};
static int nsftpkwtab = (sizeof(sftpkwtab) / sizeof(struct keytab));
#endif /* SFTP_BUILTIN */
#endif /* ANYSSH */
#ifdef NETCONN
struct keytab netkey[] = { /* SET NETWORK table */
{ "directory", XYNET_D, 0 },
{ "type", XYNET_T, 0 }
};
int nnetkey = (sizeof(netkey) / sizeof(struct keytab));
struct keytab netcmd[] = {
/*
These are the network types.
*/
#ifdef NETCMD
{ "command", NET_CMD, CM_INV }, /* Command */
#endif /* NETCMD */
#ifdef DECNET /* DECnet / PATHWORKS */
{ "decnet", NET_DEC, 0 },
#endif /* DECNET */
#ifdef NETDLL
{ "dll", NET_DLL, CM_INV }, /* DLL to be loaded */
#endif /* NETDLL */
#ifdef NETFILE
{ "file", NET_FILE, CM_INV }, /* FILE (real crude) */
#endif /* NETFILE */
#ifdef NPIPE /* Named Pipes */
{ "named-pipe", NET_PIPE, 0 },
#endif /* NPIPE */
#ifdef CK_NETBIOS
{ "netbios", NET_BIOS, 0 }, /* NETBIOS */
#endif /* CK_NETBIOS */
#ifdef DECNET /* DECnet / PATHWORKS (alias) */
{ "pathworks", NET_DEC, CM_INV },
#endif /* DECNET */
#ifdef NETCMD
{ "pipe", NET_CMD, 0 }, /* Pipe */
#endif /* NETCMD */
#ifdef NETPTY
{ "pseudoterminal",NET_PTY, 0 }, /* Pseudoterminal */
#endif /* NETPTY */
#ifdef NETPTY
{ "pty", NET_PTY, CM_INV }, /* Inv syn for pseudoterm */
#endif /* NETPTY */
#ifdef SSHBUILTIN
{ "ssh", NET_SSH, 0 },
#endif /* SSHBUILTIN */
#ifdef SUPERLAT
{ "superlat", NET_SLAT, 0 }, /* Meridian Technologies' SuperLAT */
#endif /* SUPERLAT */
#ifdef TCPSOCKET /* TCP/IP sockets library */
{ "tcp/ip", NET_TCPB, 0 },
#endif /* TCPSOCKET */
#ifdef SUPERLAT
{ "tes32", NET_SLAT, 0 }, /* Emulux TES32 */
#endif /* SUPERLAT */
#ifdef ANYX25 /* X.25 */
#ifdef SUNX25
{ "x", NET_SX25, CM_INV|CM_ABR },
{ "x.25", NET_SX25, 0 },
{ "x25", NET_SX25, CM_INV },
#else
#ifdef STRATUSX25
{ "x", NET_VX25, CM_INV|CM_ABR },
{ "x.25", NET_VX25, 0 },
{ "x25", NET_VX25, CM_INV },
#endif /* STRATUSX25 */
#endif /* SUNX25 */
#ifdef IBMX25
{ "x", NET_IX25, CM_INV|CM_ABR },
{ "x.25", NET_IX25, CM_INV },
{ "x25", NET_IX25, CM_INV },
#endif /* IBMX25 */
#ifdef HPX25
{ "x", NET_IX25, CM_INV|CM_ABR },
{ "x.25", NET_IX25, 0 },
{ "x25", NET_IX25, CM_INV },
#endif /* HPX25 */
#endif /* ANYX25 */
{ "", 0, 0 }
};
int nnets = (sizeof(netcmd) / sizeof(struct keytab));
#ifndef NOTCPOPTS
#ifdef TCPSOCKET
/* TCP options */
struct keytab tcpopt[] = {
{ "address", XYTCP_ADDRESS, 0 },
#ifdef CK_DNS_SRV
{ "dns-service-records", XYTCP_DNS_SRV, 0 },
#endif /* CK_DNS_SRV */
#ifdef SO_DONTROUTE
{ "dontroute", XYTCP_DONTROUTE, 0 },
#endif /* SO_DONTROUTE */
#ifndef NOHTTP
{ "http-proxy", XYTCP_HTTP_PROXY, 0 },
#endif /* NOHTTP */
#ifdef SO_KEEPALIVE
{ "keepalive", XYTCP_KEEPALIVE, 0 },
#endif /* SO_KEEPALIVE */
#ifdef SO_LINGER
{ "linger", XYTCP_LINGER, 0 },
#endif /* SO_LINGER */
#ifdef TCP_NODELAY
{ "nagle", XYTCP_NAGLE, CM_INV },
{ "nodelay", XYTCP_NODELAY, 0 },
#endif /* TCP_NODELAY */
{ "reverse-dns-lookup", XYTCP_RDNS, 0 },
#ifdef SO_RCVBUF
{ "recvbuf", XYTCP_RECVBUF, 0 },
#endif /* SO_RCVBUF */
#ifdef SO_SNDBUF
{ "sendbuf", XYTCP_SENDBUF, 0 },
#endif /* SO_SNDBUF */
#ifdef NT
#ifdef CK_SOCKS
{ "socks-server", XYTCP_SOCKS_SVR, 0 },
#endif /* CK_SOCKS */
#endif /* NT */
#ifdef VMS
#ifdef DEC_TCPIP
{ "ucx-port-bug", XYTCP_UCX, 0 },
#endif /* DEC_TCPIP */
#endif /* VMS */
{ "",0,0 }
};
int ntcpopt = (sizeof(tcpopt) / sizeof(struct keytab));
#endif /* TCPSOCKET */
#endif /* NOTCPOPTS */
#endif /* NETCONN */
#ifdef OS2
/* K95 Manual Chapter Table -- Keep these two tables in sync! */
static char * linktbl[] = { /* Internal links in k95.htm */
"#top", /* 00 */
"#what", /* 01 */
"#install", /* 02 */
"#start", /* 03 */
"#dialer", /* 04 */
"#entries", /* 05 */
"#command", /* 06 */
"#terminal", /* 07 */
"#transfer", /* 08 */
"#hostmode" /* 09 */
};
static struct keytab chaptbl[] = {
{ "Command-Screen", 6, 0 },
{ "Contents", 0, 0 },
{ "Dialer-Entries", 5, 0 },
{ "File-Transfer", 8, 0 },
{ "Getting-Started", 3, 0 },
{ "Host-Mode", 9, 0 },
{ "Installation", 2, 0 },
{ "Terminal-Emulation", 7, 0 },
{ "Using-The-Dialer", 4, 0 },
{ "What-Is-K95", 1, 0 },
{ "", 0, 0 }
};
static int nchaptbl = (sizeof(chaptbl) / sizeof(struct keytab) - 1);
#endif /* OS2 */
#ifndef NOXFER
/* Remote Command Table */
struct keytab remcmd[] = {
#ifndef NOSPL
{ "as", XZASG, CM_INV|CM_ABR },
{ "asg", XZASG, CM_INV },
{ "assign", XZASG, 0 },
#endif /* NOSPL */
{ "cd", XZCWD, 0 },
{ "cdup", XZCDU, CM_INV },
{ "copy", XZCPY, 0 },
{ "cwd", XZCWD, CM_INV },
{ "delete", XZDEL, 0 },
{ "directory", XZDIR, 0 },
{ "e", XZXIT, CM_ABR|CM_INV },
{ "erase", XZDEL, CM_INV },
{ "exit", XZXIT, 0 },
{ "help", XZHLP, 0 },
#ifndef NOPUSH
{ "host", XZHOS, 0 },
#endif /* NOPUSH */
#ifndef NOFRILLS
{ "kermit", XZKER, 0 },
{ "l", XZLGI, CM_ABR|CM_INV },
{ "lo", XZLGI, CM_ABR|CM_INV },
{ "log", XZLGI, CM_ABR|CM_INV },
{ "login", XZLGI, 0 },
{ "logout", XZLGO, 0 },
{ "mkdir", XZMKD, 0 },
{ "print", XZPRI, 0 },
#endif /* NOFRILLS */
{ "pwd", XZPWD, 0 },
#ifndef NOSPL
{ "query", XZQUE, 0 },
#endif /* NOSPL */
{ "rename", XZREN, 0 },
{ "rmdir", XZRMD, 0 },
{ "set", XZSET, 0 },
{ "space", XZSPA, 0 },
#ifndef NOFRILLS
{ "type", XZTYP, 0 },
{ "who", XZWHO, 0 },
#endif /* NOFRILLS */
{ "", 0, 0}
};
int nrmt = (sizeof(remcmd) / sizeof(struct keytab)) - 1;
#endif /* NOXFER */
struct keytab logtab[] = {
#ifdef CKLOGDIAL
{ "connections", LOGM, CM_INV },
{ "cx", LOGM, 0