Annotation of 43BSDReno/contrib/kermit/ckuus2.c, revision 1.1.1.1

1.1       root        1: /*  C K U U S 2  --  "User Interface" STRINGS module for Unix Kermit  */
                      2: 
                      3: /*
                      4:  Author: Frank da Cruz (SY.FDC@CU20B),
                      5:  Columbia University Center for Computing Activities, January 1985.
                      6:  Copyright (C) 1985, Trustees of Columbia University in the City of New York.
                      7:  Permission is granted to any individual or institution to use, copy, or
                      8:  redistribute this software so long as it is not sold for profit, provided this
                      9:  copyright notice is retained. 
                     10: */
                     11: 
                     12: /*  This module separates long strings from the body of the ckuser module. */  
                     13: 
                     14: #include "ckcdeb.h"
                     15: #include <stdio.h>
                     16: #include <ctype.h>
                     17: #include "ckcker.h"
                     18: #include "ckucmd.h"
                     19: #include "ckuusr.h"
                     20: 
                     21: extern char cmdbuf[];
                     22: extern int nrmt, nprm, dfloc;
                     23: extern char *dftty;
                     24: extern struct keytab prmtab[];
                     25: extern struct keytab remcmd[];
                     26: 
                     27: static
                     28: char *hlp1[] = {
                     29: "\n",
                     30: "  Usage: kermit [-x arg [-x arg]...[-yyy]..]]\n",
                     31: "   x is an option that requires an argument, y an option with no argument:\n",
                     32: "     actions (* options also require -l and -b) --\n",
                     33: "       -s file(s)   send (use '-s -' to send from stdin)\n",
                     34: "       -r           receive\n",
                     35: "       -k           receive to stdout\n",
                     36: "     * -g file(s)   get remote file(s) from server (quote wildcards)\n",
                     37: "       -a name      alternate name, used with -s, -r, -g\n",
                     38: "       -x           enter server mode\n",
                     39: "     * -f           finish remote server\n",
                     40: "     * -c           connect before transaction\n",
                     41: "     * -n           connect after transaction\n",
                     42: "       -h           help - print this message\n",
                     43: "     settings --\n",
                     44: "       -l line      communication line device\n",
                     45: "       -b baud      line speed, e.g. 1200\n",
                     46: "       -i           binary file or Unix-to-Unix\n",
                     47: "       -p x         parity, x is one of e,o,m,s,n\n",
                     48: "       -t           line turnaround handshake = xon, half duplex\n",
                     49: "       -w           don't write over preexisting files\n",
                     50: "       -q           be quiet during file transfer\n",
                     51: "       -d           log debugging info to debug.log\n",
                     52: " If no action command is included, enter interactive dialog.\n",
                     53: ""
                     54: };
                     55: 
                     56: /*  U S A G E */
                     57: 
                     58: usage() {
                     59:     conola(hlp1);
                     60: }
                     61: 
                     62: 
                     63: /*  Help string definitions  */
                     64: 
                     65: static char *tophlp[] = { "\n\
                     66: Type ? for a list of commands, type 'help x' for any command x.\n\
                     67: While typing commands, use the following special characters:\n\n\
                     68:  DEL, RUBOUT, BACKSPACE, CTRL-H: Delete the most recent character typed.\n\
                     69:  CTRL-W: Delete the most recent word typed.\n",
                     70: 
                     71: "\
                     72:  CTRL-U: Delete the current line.\n\
                     73:  CTRL-R: Redisplay the current line.\n\
                     74:  ?       (question mark) display help on the current command or field.\n\
                     75:  ESC     (Escape or Altmode) Attempt to complete the current field.\n",
                     76: 
                     77: "\
                     78:  \\       (backslash) include the following character literally.\n\n\
                     79: From system level, type 'kermit -h' to get help about command line args.\
                     80: \n",
                     81: "" };
                     82: 
                     83: static char *hmxxbye = "\
                     84: Shut down and log out a remote Kermit server";
                     85: 
                     86: static char *hmxxclo = "\
                     87: Close one of the following logs:\n\
                     88:  session, transaction, packet, debugging -- 'help log' for further info.";
                     89: 
                     90: static char *hmxxcon = "\
                     91: Connect to a remote system via the tty device given in the\n\
                     92: most recent 'set line' command";
                     93: 
                     94: static char *hmxxget = "\
                     95: Format: 'get filespec'.  Tell the remote Kermit server to send the named\n\
                     96: files.  If filespec is omitted, then you are prompted for the remote and\n\
                     97: local filenames separately.";
                     98: 
                     99: static char *hmxxlg[] = { "\
                    100: Record information in a log file:\n\n\
                    101:  debugging             Debugging information, to help track down\n\
                    102:   (default debug.log)  bugs in the C-Kermit program.\n\n\
                    103:  packets               Kermit packets, to help track down protocol problems.\n\
                    104:   (packet.log)\n\n",
                    105: 
                    106: " session               Terminal session, during CONNECT command.\n\
                    107:   (session.log)\n\n\
                    108:  transactions          Names and statistics about files transferred.\n\
                    109:   (transact.log)\n",
                    110: "" } ;
                    111: 
                    112: 
                    113: static char *hmxxlogi[] = { "\
                    114: Syntax: script text\n\n",
                    115: "Login to a remote system using the text provided.  The login script\n",
                    116: "is intended to operate similarly to uucp \"L.sys\" entries.\n",
                    117: "A login script is a sequence of the form:\n\n",
                    118: "      expect send [expect send] . . .\n\n",
                    119: "where 'expect' is a prompt or message to be issued by the remote site, and\n",
                    120: "'send' is the names, numbers, etc, to return.  The send may also be the\n",
                    121: "keyword EOT, to send control-d, or BREAK, to send a break.  Letters in\n",
                    122: "send may be prefixed by ~ to send special characters.  These are:\n",
                    123: "~b backspace, ~s space, ~q '?', ~n linefeed, ~r return, ~c don\'t\n",
                    124: "append a return, and ~o[o[o]] for octal of a character.  As with some \n",
                    125: "uucp systems, sent strings are followed by ~r unless they end with ~c.\n\n",
                    126: "Only the last 7 characters in each expect are matched.  A null expect,\n",
                    127: "e.g. ~0 or two adjacent dashes, causes a short delay.  If you expect\n",
                    128: "that a sequence might not arrive, as with uucp, conditional sequences\n",
                    129: "may be expressed in the form:\n\n",
                    130: "      -send-expect[-send-expect[...]]\n\n",
                    131: "where dashed sequences are followed as long as previous expects fail.\n",
                    132: "" };
                    133: 
                    134: static char *hmxxrc[] = { "\
                    135: Format: 'receive [filespec]'.  Wait for a file to arrive from the other\n\
                    136: Kermit, which must be given a 'send' command.  If the optional filespec is\n",
                    137: 
                    138: "given, the (first) incoming file will be stored under that name, otherwise\n\
                    139: it will be stored under the name it arrives with.",
                    140: "" } ;
                    141: 
                    142: static char *hmxxsen = "\
                    143: Format: 'send file1 [file2]'.  File1 may contain wildcard characters '*' or\n\
                    144: '?'.  If no wildcards, then file2 may be used to specify the name file1 is\n\
                    145: sent under; if file2 is omitted, file1 is sent under its own name.";
                    146: 
                    147: static char *hmxxser = "\
                    148: Enter server mode on the currently selected line.  All further commands\n\
                    149: will be taken in packet form from the other Kermit program.";
                    150: 
                    151: static char *hmhset[] = { "\
                    152: The 'set' command is used to establish various communication or file\n",
                    153: "parameters.  The 'show' command can be used to display the values of\n",
                    154: "'set' parameters.  Help is available for each individual parameter;\n",
                    155: "type 'help set ?' to see what's available.\n",
                    156: "" } ;
                    157: 
                    158: static char *hmxychkt[] = { "\
                    159: Type of packet block check to be used for error detection, 1, 2, or 3.\n",
                    160: "Type 1 is standard, and catches most errors.  Types 2 and 3 specify more\n",
                    161: "rigorous checking at the cost of higher overhead.  Not all Kermit programs\n",
                    162: "support types 2 and 3.\n",
                    163: "" } ;
                    164: 
                    165: 
                    166: static char *hmxyf[] = { "set file: names, type, warning, display.\n\n",
                    167: "'names' are normally 'converted', which means file names are converted\n",
                    168: "to 'common form' during transmission; 'literal' means use filenames\n",
                    169: "literally (useful between like systems).\n\n",
                    170: "'type' is normally 'text', in which conversion is done between Unix\n",
                    171: "newlines and CRLF line delimiters; 'binary' means to do no conversion.\n",
                    172: "Use 'binary' for executable programs or binary data.\n\n",
                    173: "'warning' is 'on' or 'off', normally off.  When off, incoming files will\n",
                    174: "overwrite existing files of the same name.  When on, new names will be\n",
                    175: "given to incoming files whose names are the same as existing files.\n",
                    176: "\n\
                    177: 'display' is normally 'on', causing file transfer progress to be displayed\n",
                    178: "on your screen when in local mode.  'set display off' is useful for\n",
                    179: "allowing file transfers to proceed in the background.\n\n",
                    180: "" } ;
                    181: 
                    182: static char *hmhrmt[] = { "\
                    183: The 'remote' command is used to send file management instructions to a\n",
                    184: "remote Kermit server.  There should already be a Kermit running in server\n",
                    185: "mode on the other end of the currently selected line.  Type 'remote ?' to\n",
                    186: "see a list of available remote commands.  Type 'help remote x' to get\n",
                    187: "further information about a particular remote command 'x'.\n",
                    188: "" } ;
                    189: 
                    190: 
                    191: /*  D O H L P  --  Give a help message  */
                    192: 
                    193: dohlp(xx) int xx; {
                    194:     int x,y;
                    195: 
                    196:     if (xx < 0) return(xx);
                    197:     switch (xx) {
                    198: 
                    199: case XXBYE:
                    200:     return(hmsg(hmxxbye));
                    201: 
                    202: case XXCLO:
                    203:     return(hmsg(hmxxclo));
                    204: 
                    205: case XXCON:
                    206:     return(hmsg(hmxxcon));
                    207: 
                    208: case XXCWD:
                    209: #ifdef vms
                    210:     return(hmsg("\
                    211: Change Working Directory, equivalent to VMS SET DEFAULT command"));
                    212: #else
                    213:     return(hmsg("Change Working Directory, equivalent to Unix 'cd' command"));
                    214: #endif
                    215: 
                    216: case XXDEL:
                    217:     return(hmsg("Delete a local file or files"));
                    218: 
                    219: case XXDIAL:
                    220:     return(hmsg("Dial a number using modem autodialer"));
                    221: 
                    222: case XXDIR:
                    223:     return(hmsg("Display a directory of local files"));
                    224: 
                    225: case XXECH:
                    226:     return(hmsg("Display the rest of the command on the terminal,\n\
                    227: useful in command files."));
                    228: 
                    229: case XXEXI:
                    230: case XXQUI:
                    231:     return(hmsg("Exit from the Kermit program, closing any open logs."));
                    232: 
                    233: case XXFIN:
                    234:     return(hmsg("\
                    235: Tell the remote Kermit server to shut down without logging out."));
                    236: 
                    237: case XXGET:
                    238:     return(hmsg(hmxxget));
                    239: 
                    240: case XXHLP:
                    241:     return(hmsga(tophlp));
                    242: 
                    243: case XXLOG:
                    244:     return(hmsga(hmxxlg));
                    245: 
                    246: case XXLOGI:
                    247:     return(hmsga(hmxxlogi));
                    248: 
                    249: case XXREC:
                    250:     return(hmsga(hmxxrc));
                    251: 
                    252: 
                    253: case XXREM:
                    254:     if ((y = cmkey(remcmd,nrmt,"Remote command","")) == -2) return(y);
                    255:     if (y == -1) return(y);
                    256:     if (x = (cmcfm()) < 0) return(x);
                    257:     return(dohrmt(y));
                    258: 
                    259: case XXSEN:
                    260:     return(hmsg(hmxxsen));
                    261: 
                    262: case XXSER:
                    263:     return(hmsg(hmxxser));
                    264: 
                    265: case XXSET:
                    266:     if ((y = cmkey(prmtab,nprm,"Parameter","")) == -2) return(y);
                    267:     if (y == -2) return(y);
                    268:     if (x = (cmcfm()) < 0) return(x);
                    269:     return(dohset(y));
                    270: 
                    271: case XXSHE:
                    272: #ifdef vms
                    273:     return(hmsg("\
                    274: Issue a command to VMS (space required after '!')"));
                    275: #else
                    276:     return(hmsg("\
                    277: Issue a command to the Unix shell (space required after '!')"));
                    278: #endif
                    279: 
                    280: case XXSHO:
                    281:     return(hmsg("\
                    282: Display current values of 'set' parameters; 'show version' will display\n\
                    283: program version information for each of the C-Kermit modules."));
                    284: 
                    285: case XXSPA:
                    286:     return(hmsg("Display disk usage in current device, directory"));
                    287: 
                    288: case XXSTA:
                    289:     return(hmsg("Display statistics about most recent file transfer"));
                    290: 
                    291: case XXTAK:
                    292:     return(hmsg("\
                    293: Take Kermit commands from the named file.  Kermit command files may\n\
                    294: themselves contain 'take' commands, up to a reasonable depth of nesting."));
                    295: 
                    296: default:
                    297:     if (x = (cmcfm()) < 0) return(x);
                    298:     printf("Not available yet - %s\n",cmdbuf);
                    299:     break;
                    300:     }
                    301:     return(0);
                    302: }
                    303: 
                    304: 
                    305: /*  H M S G  --  Get confirmation, then print the given message  */
                    306: 
                    307: hmsg(s) char *s; {
                    308:     int x;
                    309:     if (x = (cmcfm()) < 0) return(x);
                    310:     puts(s);
                    311:     return(0);
                    312: }
                    313: 
                    314: hmsga(s) char *s[]; {                  /* Same function, but for arrays */
                    315:     int x, i;
                    316:     if ( x = (cmcfm()) < 0) return(x);
                    317:     for ( i = 0; *s[i] ; i++ ) fputs(s[i], stdout);
                    318:     fputc( '\n', stdout);
                    319:     return(0);
                    320: }
                    321: 
                    322: 
                    323: /*  D O H S E T  --  Give help for SET command  */
                    324: 
                    325: dohset(xx) int xx; {
                    326:     
                    327:     if (xx == -3) return(hmsga(hmhset));
                    328:     if (xx < 0) return(xx);
                    329:     switch (xx) {
                    330: 
                    331: case XYCHKT:
                    332:     return(hmsga(hmxychkt));
                    333: 
                    334: case XYDELA: 
                    335:     puts("\
                    336: Number of seconds to wait before sending first packet after 'send' command.");
                    337:     return(0);
                    338: 
                    339: case XYDUPL:
                    340:     puts("\
                    341: During 'connect': 'full' means remote host echoes, 'half' means this program");
                    342:     puts("does its own echoing.");
                    343:     return(0);
                    344: 
                    345: case XYESC:
                    346:     printf("%s","\
                    347: Decimal ASCII value for escape character during 'connect', normally 28\n\
                    348: (Control-\\)\n");
                    349:     return(0);
                    350: 
                    351: case XYFILE:
                    352:     return(hmsga(hmxyf));
                    353: 
                    354: case XYFLOW:
                    355:     puts("\
                    356: Type of flow control to be used.  Choices are 'xon/xoff' and 'none'.");
                    357:     puts("normally xon/xoff.");
                    358:     return(0);
                    359: 
                    360: case XYHAND:
                    361:     puts("\
                    362: Decimal ASCII value for character to use for half duplex line turnaround");
                    363:     puts("handshake.  Normally, handshaking is not done.");
                    364:     return(0);
                    365: 
                    366: case XYIFD:
                    367:     puts("\
                    368: Incomplete file disposition: discard or keep.  Normally discard.");
                    369:     return(0);
                    370: 
                    371: case XYLINE:
                    372:     printf("\
                    373: Device name of communication line to use.  Normally %s.\n",dftty);
                    374:     if (!dfloc) {
                    375:        printf("\
                    376: If you set the line to other than %s, then Kermit\n",dftty);
                    377:        printf("\
                    378: will be in 'local' mode; 'set line' will reset Kermit to its default mode.\n");
                    379: #ifndef vms
                    380:        printf("\
                    381: 'set line /dev/tty' will always put Kermit in remote mode.\n");
                    382: #endif
                    383:     }
                    384:     puts("\
                    385: If the line has a modem, and if the modem-dialer is set to direct, this");
                    386:     puts("\
                    387: command causes waiting for a carrier detect (e.g. on a hayes type modem).");
                    388:     puts("\
                    389: This can be used to wait for incoming calls.");
                    390:     puts("\
                    391: To use the modem to dial out, first set modem-dialer (e.g., to hayes), then");
                    392:     puts("set line, next issue the dial command, and finally connect.");
                    393: 
                    394:     return(0);
                    395: 
                    396: case XYMODM:
                    397:     puts("\
                    398: Type of modem for dialing remote connections.  Needed to indicate modem can");
                    399:     puts("\
                    400: be commanded to dial without 'carrier detect' from modem.  Many recently");
                    401:     puts("\
                    402: manufactured modems use 'hayes' protocol.  Type 'set modem ?' to see what");
                    403:     puts("\
                    404: types of modems are supported by this program.");
                    405:     return(0);
                    406: 
                    407: 
                    408: case XYPARI:
                    409:     puts("Parity to use during terminal connection and file transfer:");
                    410:     puts("even, odd, mark, space, or none.  Normally none.");
                    411:     return(0);
                    412: 
                    413: case XYPROM:
                    414:     puts("Prompt string for this program, normally 'C-Kermit>'.");
                    415:     return(0);
                    416: 
                    417: case XYSPEE:
                    418:     puts("\
                    419: Communication line speed for external tty line specified in most recent");
                    420:     puts("\
                    421: 'set line' command.  Any of the common baud rates:");
                    422:     puts(" 0, 110, 150, 300, 600, 1200, 1800, 2400, 4800, 9600.");
                    423:     return(0);
                    424: 
                    425: case XYRECV:
                    426:     puts("\
                    427: Specify parameters for inbound packets:");
                    428:     puts("\
                    429: End-Of-Packet (ASCII value), Packet-Length (94 or less),");
                    430:     puts("\
                    431: Padding (amount, 94 or less), Pad-Character (ASCII value),");
                    432:     puts("\
                    433: Start-Of-Packet (ASCII value), and Timeout (94 seconds or less),");
                    434:     puts("\
                    435: all specified as decimal numbers.");
                    436:     return(0);
                    437: 
                    438: case XYSEND:
                    439:     puts("\
                    440: Specify parameters for outbound packets:");
                    441:     puts("\
                    442: End-Of-Packet (ASCII value), Packet-Length (94 or less),");
                    443:     puts("\
                    444: Padding (amount, 94 or less), Pad-Character (ASCII value),");
                    445:     puts("\
                    446: Start-Of-Packet (ASCII value), and Timeout (94 seconds or less),");
                    447:     puts("\
                    448: all specified as decimal numbers.");
                    449:     return(0);
                    450: 
                    451: default:
                    452:     printf("%s","Not available yet - %s\n",cmdbuf);
                    453:     return(0);
                    454:     }
                    455: }
                    456: 
                    457: 
                    458: /*  D O H R M T  --  Give help about REMOTE command  */
                    459: 
                    460: dohrmt(xx) int xx; {
                    461:     int x;
                    462:     if (xx == -3) return(hmsga(hmhrmt));
                    463:     if (xx < 0) return(xx);
                    464:     switch (xx) {
                    465: 
                    466: case XZCWD:
                    467:     return(hmsg("\
                    468: Ask remote Kermit server to change its working directory."));
                    469: 
                    470: case XZDEL:
                    471:     return(hmsg("\
                    472: Ask remote Kermit server to delete the named file(s)."));
                    473: 
                    474: case XZDIR:
                    475:     return(hmsg("\
                    476: Ask remote Kermit server to provide directory listing of the named file(s)."));
                    477: 
                    478: case XZHLP:
                    479:     return(hmsg("\
                    480: Ask remote Kermit server to tell you what services it provides."));
                    481: 
                    482: case XZHOS:
                    483:     return(hmsg("\
                    484: Send a command to the remote system in its own command language\n\
                    485: through the remote Kermit server."));
                    486: 
                    487: case XZSPA:
                    488:     return(hmsg("\
                    489: Ask the remote Kermit server to tell you about its disk space."));
                    490: 
                    491: case XZTYP:
                    492:     return(hmsg("\
                    493: Ask the remote Kermit server to type the named file(s) on your screen."));
                    494: 
                    495: case XZWHO:
                    496:     return(hmsg("\
                    497: Ask the remote Kermit server to list who's logged in, or to give information\n\
                    498: about the specified user."));
                    499: 
                    500: default:
                    501:     if (x = (cmcfm()) < 0) return(x);
                    502:     printf("%s","not working yet - %s\n",cmdbuf);
                    503:     return(-2);
                    504:     }
                    505: }

unix.superglobalmegacorp.com

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