|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.