|
|
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 mystch, stchr, eol, seol, padch, mypadc, ctlq;
22: extern CHAR data[], *rdatap, ttname[];
23: extern char cmdbuf[], line[], debfil[], pktfil[], sesfil[], trafil[];
24: extern int nrmt, nprm, dfloc, deblog, seslog, speed, local, parity, duplex;
25: extern int turn, turnch, pktlog, tralog, mdmtyp, flow, cmask, timef, spsizf;
26: extern int rtimo, timint, npad, mypadn, bctr, delay;
27: extern int maxtry, spsiz, urpsiz, maxsps, maxrps, ebqflg, ebq;
28: extern int rptflg, rptq, fncnv, binary, pktlog, warn, quiet, fmask, keep;
29: extern int tsecs, bctu, len, atcapu, lpcapu, swcapu, wsize, sq, rpsiz;
30: extern int capas;
31: extern long filcnt, tfc, tlci, tlco, ffc, flci, flco;
32: extern char *dftty, *versio, *ckxsys;
33: extern struct keytab prmtab[];
34: extern struct keytab remcmd[];
35:
36: static
37: char *hlp1[] = {
38: "\n",
39: " Usage: kermit [-x arg [-x arg]...[-yyy]..]]\n",
40: " x is an option that requires an argument, y an option with no argument:\n",
41: " actions (* options also require -l and -b) --\n",
42: " -s file(s) send (use '-s -' to send from stdin)\n",
43: " -r receive\n",
44: " -k receive to stdout\n",
45: " * -g file(s) get remote file(s) from server (quote wildcards)\n",
46: " -a name alternate name, used with -s, -r, -g\n",
47: " -x enter server mode\n",
48: " * -f finish remote server\n",
49: " * -c connect before transaction\n",
50: " * -n connect after transaction\n",
51: " settings --\n",
52: " -l line communication line device\n",
53: " -b baud line speed, e.g. 1200\n",
54: " -i binary file or Unix-to-Unix (text by default)\n",
55: " -p x parity, x is one of e,o,m,s,n\n",
56: " -t line turnaround handshake = xon, half duplex\n",
57: " -w don't write over preexisting files\n",
58: " -q be quiet during file transfer\n",
59: " -d log debugging info to debug.log\n",
60: " -e length (extended) receive packet length\n",
61: " If no action command is included, enter interactive dialog.\n",
62: ""
63: };
64:
65: /* U S A G E */
66:
67: usage() {
68: conola(hlp1);
69: }
70:
71:
72: /* Help string definitions */
73:
74: static char *tophlp[] = { "\n\
75: Type ? for a list of commands, type 'help x' for any command x.\n\
76: While typing commands, use the following special characters:\n\n\
77: DEL, RUBOUT, BACKSPACE, CTRL-H: Delete the most recent character typed.\n\
78: CTRL-W: Delete the most recent word typed.\n",
79:
80: "\
81: CTRL-U: Delete the current line.\n\
82: CTRL-R: Redisplay the current line.\n\
83: ? (question mark) display help on the current command or field.\n\
84: ESC (Escape or Altmode) Attempt to complete the current field.\n",
85:
86: "\
87: \\ (backslash) include the following character literally.\n\n\
88: From system level, type 'kermit -h' to get help about command line args.\
89: \n",
90: "" };
91:
92: static char *hmxxbye = "\
93: Shut down and log out a remote Kermit server";
94:
95: static char *hmxxclo = "\
96: Close one of the following logs:\n\
97: session, transaction, packet, debugging -- 'help log' for further info.";
98:
99: static char *hmxxcon = "\
100: Connect to a remote system via the tty device given in the\n\
101: most recent 'set line' command";
102:
103: static char *hmxxget = "\
104: Format: 'get filespec'. Tell the remote Kermit server to send the named\n\
105: files. If filespec is omitted, then you are prompted for the remote and\n\
106: local filenames separately.";
107:
108: static char *hmxxlg[] = { "\
109: Record information in a log file:\n\n\
110: debugging Debugging information, to help track down\n\
111: (default debug.log) bugs in the C-Kermit program.\n\n\
112: packets Kermit packets, to help track down protocol problems.\n\
113: (packet.log)\n\n",
114:
115: " session Terminal session, during CONNECT command.\n\
116: (session.log)\n\n\
117: transactions Names and statistics about files transferred.\n\
118: (transact.log)\n",
119: "" } ;
120:
121:
122: static char *hmxxlogi[] = { "\
123: Syntax: script text\n\n",
124: "Login to a remote system using the text provided. The login script\n",
125: "is intended to operate similarly to uucp \"L.sys\" entries.\n",
126: "A login script is a sequence of the form:\n\n",
127: " expect send [expect send] . . .\n\n",
128: "where 'expect' is a prompt or message to be issued by the remote site, and\n",
129: "'send' is the names, numbers, etc, to return. The send may also be the\n",
130: "keyword EOT, to send control-d, or BREAK, to send a break. Letters in\n",
131: "send may be prefixed by ~ to send special characters. These are:\n",
132: "~b backspace, ~s space, ~q '?', ~n linefeed, ~r return, ~c don\'t\n",
133: "append a return, and ~o[o[o]] for octal of a character. As with some \n",
134: "uucp systems, sent strings are followed by ~r unless they end with ~c.\n\n",
135: "Only the last 7 characters in each expect are matched. A null expect,\n",
136: "e.g. ~0 or two adjacent dashes, causes a short delay. If you expect\n",
137: "that a sequence might not arrive, as with uucp, conditional sequences\n",
138: "may be expressed in the form:\n\n",
139: " -send-expect[-send-expect[...]]\n\n",
140: "where dashed sequences are followed as long as previous expects fail.\n",
141: "" };
142:
143: static char *hmxxrc[] = { "\
144: Format: 'receive [filespec]'. Wait for a file to arrive from the other\n\
145: Kermit, which must be given a 'send' command. If the optional filespec is\n",
146:
147: "given, the (first) incoming file will be stored under that name, otherwise\n\
148: it will be stored under the name it arrives with.",
149: "" } ;
150:
151: static char *hmxxsen = "\
152: Format: 'send file1 [file2]'. File1 may contain wildcard characters '*' or\n\
153: '?'. If no wildcards, then file2 may be used to specify the name file1 is\n\
154: sent under; if file2 is omitted, file1 is sent under its own name.";
155:
156: static char *hmxxser = "\
157: Enter server mode on the currently selected line. All further commands\n\
158: will be taken in packet form from the other Kermit program.";
159:
160: static char *hmhset[] = { "\
161: The 'set' command is used to establish various communication or file\n",
162: "parameters. The 'show' command can be used to display the values of\n",
163: "'set' parameters. Help is available for each individual parameter;\n",
164: "type 'help set ?' to see what's available.\n",
165: "" } ;
166:
167: static char *hmxychkt[] = { "\
168: Type of packet block check to be used for error detection, 1, 2, or 3.\n",
169: "Type 1 is standard, and catches most errors. Types 2 and 3 specify more\n",
170: "rigorous checking at the cost of higher overhead. Not all Kermit programs\n",
171: "support types 2 and 3.\n",
172: "" } ;
173:
174:
175: static char *hmxyf[] = { "\set file: names, type, warning, display.\n\n",
176: "'names' are normally 'converted', which means file names are converted\n",
177: "to 'common form' during transmission; 'literal' means use filenames\n",
178: "literally (useful between like systems).\n\n",
179: "'type' is normally 'text', in which conversion is done between Unix\n",
180: "newlines and CRLF line delimiters; 'binary' means to do no conversion.\n",
181: "Use 'binary' for executable programs or binary data.\n\n",
182: "'warning' is 'on' or 'off', normally off. When off, incoming files will\n",
183: "overwrite existing files of the same name. When on, new names will be\n",
184: "given to incoming files whose names are the same as existing files.\n",
185: "\n\
186: 'display' is normally 'on', causing file transfer progress to be displayed\n",
187: "on your screen when in local mode. 'set display off' is useful for\n",
188: "allowing file transfers to proceed in the background.\n\n",
189: "" } ;
190:
191: static char *hmhrmt[] = { "\
192: The 'remote' command is used to send file management instructions to a\n",
193: "remote Kermit server. There should already be a Kermit running in server\n",
194: "mode on the other end of the currently selected line. Type 'remote ?' to\n",
195: "see a list of available remote commands. Type 'help remote x' to get\n",
196: "further information about a particular remote command 'x'.\n",
197: "" } ;
198:
199:
200: /* D O H L P -- Give a help message */
201:
202: dohlp(xx) int xx; {
203: int x,y;
204:
205: if (xx < 0) return(xx);
206: switch (xx) {
207:
208: case XXBYE:
209: return(hmsg(hmxxbye));
210:
211: case XXCLO:
212: return(hmsg(hmxxclo));
213:
214: case XXCON:
215: return(hmsg(hmxxcon));
216:
217: case XXCWD:
218: #ifdef vms
219: return(hmsg("\
220: Change Working Directory, equivalent to VMS SET DEFAULT command"));
221: #else
222: #ifdef datageneral
223: return(hmsg("Change Working Directory, equivalent to DG 'dir' command"));
224: #else
225: return(hmsg("Change Working Directory, equivalent to Unix 'cd' command"));
226: #endif
227: #endif
228:
229: case XXDEL:
230: return(hmsg("Delete a local file or files"));
231:
232: case XXDIAL:
233: return(hmsg("Dial a number using modem autodialer"));
234:
235: case XXDIR:
236: return(hmsg("Display a directory of local files"));
237:
238: case XXECH:
239: return(hmsg("Display the rest of the command on the terminal,\n\
240: useful in command files."));
241:
242: case XXEXI:
243: case XXQUI:
244: return(hmsg("Exit from the Kermit program, closing any open logs."));
245:
246: case XXFIN:
247: return(hmsg("\
248: Tell the remote Kermit server to shut down without logging out."));
249:
250: case XXGET:
251: return(hmsg(hmxxget));
252:
253: case XXHLP:
254: return(hmsga(tophlp));
255:
256: case XXLOG:
257: return(hmsga(hmxxlg));
258:
259: case XXLOGI:
260: return(hmsga(hmxxlogi));
261:
262: case XXREC:
263: return(hmsga(hmxxrc));
264:
265:
266: case XXREM:
267: if ((y = cmkey(remcmd,nrmt,"Remote command","")) == -2) return(y);
268: if (y == -1) return(y);
269: if (x = (cmcfm()) < 0) return(x);
270: return(dohrmt(y));
271:
272: case XXSEN:
273: return(hmsg(hmxxsen));
274:
275: case XXSER:
276: return(hmsg(hmxxser));
277:
278: case XXSET:
279: if ((y = cmkey(prmtab,nprm,"Parameter","")) == -2) return(y);
280: if (y == -2) return(y);
281: if (x = (cmcfm()) < 0) return(x);
282: return(dohset(y));
283:
284: case XXSHE:
285: #ifdef vms
286: return(hmsg("\
287: Issue a command to VMS (space required after '!')"));
288: #else
289: #ifdef AMIGA
290: return(hmsg("\
291: Issue a command to CLI (space required after '!')"));
292: #else
293: #ifdef datageneral
294: return(hmsg("\
295: Issue a command to the CLI (space required after '!')"));
296: #else
297: return(hmsg("\
298: Issue a command to the Unix shell (space required after '!')"));
299: #endif
300: #endif
301: #endif
302:
303: case XXSHO:
304: return(hmsg("\
305: Display current values of 'set' parameters; 'show version' will display\n\
306: program version information for each of the C-Kermit modules."));
307:
308: case XXSPA:
309: #ifdef datageneral
310: return(hmsg("\
311: Display disk usage in current device, directory,\n\
312: or return space for a specified device, directory."));
313: #else
314: return(hmsg("Display disk usage in current device, directory"));
315: #endif
316:
317: case XXSTA:
318: return(hmsg("Display statistics about most recent file transfer"));
319:
320: case XXTAK:
321: return(hmsg("\
322: Take Kermit commands from the named file. Kermit command files may\n\
323: themselves contain 'take' commands, up to a reasonable depth of nesting."));
324:
325: default:
326: if (x = (cmcfm()) < 0) return(x);
327: printf("Not available yet - %s\n",cmdbuf);
328: break;
329: }
330: return(0);
331: }
332:
333:
334: /* H M S G -- Get confirmation, then print the given message */
335:
336: hmsg(s) char *s; {
337: int x;
338: if ((x = cmcfm()) < 0) return(x);
339: puts(s);
340: return(0);
341: }
342:
343: hmsga(s) char *s[]; { /* Same function, but for arrays */
344: int x, i;
345: if ( x = (cmcfm()) < 0) return(x);
346: for ( i = 0; *s[i] ; i++ ) fputs(s[i], stdout);
347: fputc( '\n', stdout);
348: return(0);
349: }
350:
351:
352: /* D O H S E T -- Give help for SET command */
353:
354: dohset(xx) int xx; {
355:
356: if (xx == -3) return(hmsga(hmhset));
357: if (xx < 0) return(xx);
358: switch (xx) {
359:
360: case XYCHKT:
361: return(hmsga(hmxychkt));
362:
363: case XYDELA:
364: puts("\
365: Number of seconds to wait before sending first packet after 'send' command.");
366: return(0);
367:
368: case XYDUPL:
369: puts("\
370: During 'connect': 'full' means remote host echoes, 'half' means this program");
371: puts("does its own echoing.");
372: return(0);
373:
374: case XYESC:
375: printf("%s","\
376: Decimal ASCII value for escape character during 'connect', normally 28\n\
377: (Control-\\)\n");
378: return(0);
379:
380: case XYFILE:
381: return(hmsga(hmxyf));
382:
383: case XYFLOW:
384: puts("\
385: Type of flow control to be used. Choices are 'xon/xoff' and 'none'.");
386: puts("normally xon/xoff.");
387: return(0);
388:
389: case XYHAND:
390: puts("\
391: Decimal ASCII value for character to use for half duplex line turnaround");
392: puts("handshake. Normally, handshaking is not done.");
393: return(0);
394:
395: case XYLINE:
396: printf("\
397: Device name of communication line to use. Normally %s.\n",dftty);
398: if (!dfloc) {
399: printf("\
400: If you set the line to other than %s, then Kermit\n",dftty);
401: printf("\
402: will be in 'local' mode; 'set line' will reset Kermit to remote mode.\n");
403: puts("\
404: If the line has a modem, and if the modem-dialer is set to direct, this");
405: puts("\
406: command causes waiting for a carrier detect (e.g. on a hayes type modem).");
407: puts("\
408: This can be used to wait for incoming calls.");
409: puts("\
410: To use the modem to dial out, first set modem-dialer (e.g., to hayes), then");
411: puts("set line, next issue the dial command, and finally connect.");
412: }
413: return(0);
414:
415: case XYMODM:
416: puts("\
417: Type of modem for dialing remote connections. Needed to indicate modem can");
418: puts("\
419: be commanded to dial without 'carrier detect' from modem. Many recently");
420: puts("\
421: manufactured modems use 'hayes' protocol. Type 'set modem ?' to see what");
422: puts("\
423: types of modems are supported by this program.");
424: return(0);
425:
426:
427: case XYPARI:
428: puts("Parity to use during terminal connection and file transfer:");
429: puts("even, odd, mark, space, or none. Normally none.");
430: return(0);
431:
432: case XYPROM:
433: puts("Prompt string for this program, normally 'C-Kermit>'.");
434: return(0);
435:
436: case XYRETR:
437: puts("\
438: How many times to retransmit a particular packet before giving up");
439: return(0);
440:
441: case XYSPEE:
442: puts("\
443: Communication line speed for external tty line specified in most recent");
444: #ifdef AMIGA
445: puts("\
446: 'set line' command. Any baud rate between 110 and 292000, although you");
447: puts(" will receive a warning if you do not use a standard baud rate:");
448: puts("\
449: 110, 150, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600.");
450: #else
451: #ifdef datageneral
452: puts("\
453: 'set line' command. Any of the common baud rates:");
454: puts(" 0, 50, 75, 110, 134, 150, 300, 600, 1200, 1800, ");
455: puts(" 2400, 3600, 7200, 4800, 9600, 19200, 38400.");
456: #else
457: puts("\
458: 'set line' command. Any of the common baud rates:");
459: puts(" 0, 110, 150, 300, 600, 1200, 1800, 2400, 4800, 9600.");
460: #endif
461: #endif
462: return(0);
463:
464: case XYRECV:
465: puts("\
466: Specify parameters for inbound packets:");
467: puts("\
468: End-Of-Packet (ASCII value), Packet-Length (1000 or less),");
469: puts("\
470: Padding (amount, 94 or less), Pad-Character (ASCII value),");
471: puts("\
472: Start-Of-Packet (ASCII value), and Timeout (94 seconds or less),");
473: puts("\
474: all specified as decimal numbers.");
475: return(0);
476:
477: case XYSEND:
478: puts("\
479: Specify parameters for outbound packets:");
480: puts("\
481: End-Of-Packet (ASCII value), Packet-Length (2000 or less),");
482: puts("\
483: Padding (amount, 94 or less), Pad-Character (ASCII value),");
484: puts("\
485: Start-Of-Packet (ASCII value), and Timeout (94 seconds or less),");
486: puts("\
487: all specified as decimal numbers.");
488: return(0);
489:
490: default:
491: printf("%s","Not available yet - %s\n",cmdbuf);
492: return(0);
493: }
494: }
495:
496:
497: /* D O H R M T -- Give help about REMOTE command */
498:
499: dohrmt(xx) int xx; {
500: int x;
501: if (xx == -3) return(hmsga(hmhrmt));
502: if (xx < 0) return(xx);
503: switch (xx) {
504:
505: case XZCWD:
506: return(hmsg("\
507: Ask remote Kermit server to change its working directory."));
508:
509: case XZDEL:
510: return(hmsg("\
511: Ask remote Kermit server to delete the named file(s)."));
512:
513: case XZDIR:
514: return(hmsg("\
515: Ask remote Kermit server to provide directory listing of the named file(s)."));
516:
517: case XZHLP:
518: return(hmsg("\
519: Ask remote Kermit server to tell you what services it provides."));
520:
521: case XZHOS:
522: return(hmsg("\
523: Send a command to the remote system in its own command language\n\
524: through the remote Kermit server."));
525:
526: case XZSPA:
527: return(hmsg("\
528: Ask the remote Kermit server to tell you about its disk space."));
529:
530: case XZTYP:
531: return(hmsg("\
532: Ask the remote Kermit server to type the named file(s) on your screen."));
533:
534: case XZWHO:
535: return(hmsg("\
536: Ask the remote Kermit server to list who's logged in, or to give information\n\
537: about the specified user."));
538:
539: default:
540: if (x = (cmcfm()) < 0) return(x);
541: printf("%s","not working yet - %s\n",cmdbuf);
542: return(-2);
543: }
544: }
545:
546: /*** The following functions moved here from ckuusr.c because that module ***/
547: /*** got too big for PDP-11s. ***/
548:
549: /* D O L O G -- Do the log command */
550:
551: dolog(x) int x; {
552: int y; char *s;
553:
554: switch (x) {
555:
556: case LOGD:
557: #ifdef DEBUG
558: y = cmofi("Name of debugging log file","debug.log",&s);
559: #else
560: y = -2; s = "";
561: printf("%s","- Sorry, debug log not available\n");
562: #endif
563: break;
564:
565: case LOGP:
566: y = cmofi("Name of packet log file","packet.log",&s);
567: break;
568:
569: case LOGS:
570: y = cmofi("Name of session log file","session.log",&s);
571: break;
572:
573: case LOGT:
574: #ifdef TLOG
575: y = cmofi("Name of transaction log file","transact.log",&s);
576: #else
577: y = -2; s = "";
578: printf("%s","- Sorry, transaction log not available\n");
579: #endif
580: break;
581:
582: default:
583: printf("\n?Unexpected log designator - %d\n",x);
584: return(-2);
585: }
586: if (y < 0) return(y);
587:
588: strcpy(line,s);
589: s = line;
590: if ((y = cmcfm()) < 0) return(y);
591:
592: /* cont'd... */
593:
594: /* ...dolog, cont'd */
595:
596:
597: switch (x) {
598:
599: case LOGD:
600: return(deblog = debopn(s));
601:
602: case LOGP:
603: zclose(ZPFILE);
604: y = zopeno(ZPFILE,s);
605: if (y > 0) strcpy(pktfil,s); else *pktfil = '\0';
606: return(pktlog = y);
607:
608: case LOGS:
609: zclose(ZSFILE);
610: y = zopeno(ZSFILE,s);
611: if (y > 0) strcpy(sesfil,s); else *sesfil = '\0';
612: return(seslog = y);
613:
614: case LOGT:
615: zclose(ZTFILE);
616: tralog = zopeno(ZTFILE,s);
617: if (tralog > 0) {
618: strcpy(trafil,s);
619: tlog(F110,"Transaction Log:",versio,0l);
620: tlog(F100,ckxsys,"",0);
621: ztime(&s);
622: tlog(F100,s,"",0l);
623: }
624: else *trafil = '\0';
625: return(tralog);
626:
627: default:
628: return(-2);
629: }
630: }
631:
632:
633: /* D E B O P N -- Open a debugging file */
634:
635: debopn(s) char *s; {
636: #ifdef DEBUG
637: char *tp;
638: zclose(ZDFILE);
639: deblog = zopeno(ZDFILE,s);
640: if (deblog > 0) {
641: strcpy(debfil,s);
642: debug(F110,"Debug Log ",versio,0);
643: debug(F100,ckxsys,"",0);
644: ztime(&tp);
645: debug(F100,tp,"",0);
646: } else *debfil = '\0';
647: return(deblog);
648: #else
649: return(0);
650: #endif
651: }
652:
653: /* S H O P A R -- Show Parameters */
654:
655: shopar() {
656:
657: int i;
658: extern struct keytab mdmtab[]; extern int nmdm;
659:
660: printf("\n%s,%s, ",versio,ckxsys);
661: puts("Communications Parameters:");
662: printf(" Line: %s, speed: %d, mode: ",ttname,speed);
663: if (local) printf("local"); else printf("remote");
664:
665: for (i = 0; i < nmdm; i++) {
666: if (mdmtab[i].val == mdmtyp) {
667: printf(", modem-dialer: %s",mdmtab[i].kwd);
668: break;
669: }
670: }
671: printf("\n Bits: %d",(parity) ? 7 : 8);
672: printf(", parity: ");
673: switch (parity) {
674: case 'e': printf("even"); break;
675: case 'o': printf("odd"); break;
676: case 'm': printf("mark"); break;
677: case 's': printf("space"); break;
678: case 0: printf("none"); break;
679: default: printf("invalid - %d",parity); break;
680: }
681: printf(", duplex: ");
682: if (duplex) printf("half, "); else printf("full, ");
683: printf("flow: ");
684: if (flow == 1) printf("xon/xoff");
685: else if (flow == 0) printf("none");
686: else printf("%d",flow);
687: printf(", handshake: ");
688: if (turn) printf("%d\n",turnch); else printf("none\n");
689: printf("Terminal emulation: %d bits\n", (cmask == 0177) ? 7 : 8);
690:
691: printf("\nProtocol Parameters: Send Receive");
692: if (timef || spsizf) printf(" (* = override)");
693: printf("\n Timeout: %11d%9d", rtimo, timint);
694: if (timef) printf("*");
695: printf("\n Padding: %11d%9d", npad, mypadn);
696: printf(" Block Check: %6d\n",bctr);
697: printf( " Pad Character:%11d%9d", padch, mypadc);
698: printf(" Delay: %6d\n",delay);
699: printf( " Packet Start: %11d%9d", mystch, stchr);
700: printf(" Max Retries: %6d\n",maxtry);
701: printf( " Packet End: %11d%9d", seol, eol);
702: if (ebqflg)
703: printf(" 8th-Bit Prefix: '%c'",ebq);
704: printf( "\n Packet Length:%11d", spsiz);
705: printf( spsizf ? "*" : " " ); printf("%8d", urpsiz);
706: printf( (urpsiz > 94) ? " (94)" : " ");
707: if (rptflg)
708: printf(" Repeat Prefix: '%c'",rptq);
709: printf( "\n Length Limit: %11d%9d\n", maxsps, maxrps);
710:
711: printf("\nFile parameters:\n File Names: ");
712: if (fncnv) printf("%-12s","converted"); else printf("%-12s","literal");
713: #ifdef DEBUG
714: printf(" Debugging Log: ");
715: if (deblog) printf("%s",debfil); else printf("none");
716: #endif
717: printf("\n File Type: ");
718: if (binary) printf("%-12s","binary"); else printf("%-12s","text");
719: printf(" Packet Log: ");
720: if (pktlog) printf(pktfil); else printf("none");
721: printf("\n File Warning: ");
722: if (warn) printf("%-12s","on"); else printf("%-12s","off");
723: printf(" Session Log: ");
724: if (seslog) printf(sesfil); else printf("none");
725: printf("\n File Display: ");
726: if (quiet) printf("%-12s","off"); else printf("%-12s","on");
727: #ifdef TLOG
728: printf(" Transaction Log: ");
729: if (tralog) printf(trafil); else printf("none");
730: #endif
731: printf("\n\nFile Byte Size: %d",(fmask == 0177) ? 7 : 8);
732: printf(", Incomplete File Disposition: ");
733: if (keep) printf("keep"); else printf("discard");
734: #ifdef KERMRC
735: printf(", Init file: %s",KERMRC);
736: #endif
737: puts("\n");
738: }
739:
740: /* D O S T A T -- Display file transfer statistics. */
741:
742: dostat() {
743: printf("\nMost recent transaction --\n");
744: printf(" files: %ld\n",filcnt);
745: printf(" total file characters : %ld\n",tfc);
746: printf(" communication line in : %ld\n",tlci);
747: printf(" communication line out : %ld\n",tlco);
748: printf(" elapsed time : %d sec\n",tsecs);
749: if (filcnt > 0) {
750: if (tsecs > 0) {
751: long lx;
752: lx = (tfc * 10l) / tsecs;
753: printf(" effective baud rate : %ld\n",lx);
754: if (speed > 0) {
755: lx = (lx * 100l) / speed;
756: printf(" efficiency : %ld %%\n",lx);
757: }
758: }
759: printf(" packet length : %d (send), %d (receive)\n",
760: spsiz,urpsiz);
761: printf(" block check type used : %d\n",bctu);
762: printf(" compression : ");
763: if (rptflg) printf("yes [%c]\n",rptq); else printf("no\n");
764: printf(" 8th bit prefixing : ");
765: if (ebqflg) printf("yes [%c]\n",ebq); else printf("no\n\n");
766: } else printf("\n");
767: return(0);
768: }
769:
770: /* F S T A T S -- Record file statistics in transaction log */
771:
772: fstats() {
773: tlog(F100," end of file","",0l);
774: tlog(F101," file characters ","",ffc);
775: tlog(F101," communication line in ","",flci);
776: tlog(F101," communication line out ","",flco);
777: }
778:
779:
780: /* T S T A T S -- Record statistics in transaction log */
781:
782: tstats() {
783: char *tp; int x;
784:
785: ztime(&tp); /* Get time stamp */
786: tlog(F110,"End of transaction",tp,0l); /* Record it */
787:
788: if (filcnt < 1) return; /* If no files, done. */
789:
790: /* If multiple files, record character totals for all files */
791:
792: if (filcnt > 1) {
793: tlog(F101," files","",filcnt);
794: tlog(F101," total file characters ","",tfc);
795: tlog(F101," communication line in ","",tlci);
796: tlog(F101," communication line out ","",tlco);
797: }
798:
799: /* Record timing info for one or more files */
800:
801: tlog(F101," elapsed time (seconds) ","",(long) tsecs);
802: if (tsecs > 0) {
803: x = (tfc / tsecs) * 10;
804: tlog(F101," effective baud rate ","",x);
805: if (speed > 0) {
806: x = (x * 100) / speed;
807: tlog(F101," efficiency (percent) ","",x);
808: }
809: }
810: tlog(F100,"","",0); /* Leave a blank line */
811: }
812:
813: /* S D E B U -- Record spar results in debugging log */
814:
815: sdebu(len) int len; {
816: debug(F111,"spar: data",rdatap,len);
817: debug(F101," spsiz ","", spsiz);
818: debug(F101," timint","",timint);
819: debug(F101," npad ","", npad);
820: debug(F101," padch ","", padch);
821: debug(F101," seol ","", seol);
822: debug(F101," ctlq ","", ctlq);
823: debug(F101," ebq ","", ebq);
824: debug(F101," ebqflg","",ebqflg);
825: debug(F101," bctr ","", bctr);
826: debug(F101," rptq ","", rptq);
827: debug(F101," rptflg","",rptflg);
828: debug(F101," atcapu","",atcapu);
829: debug(F101," lpcapu","",lpcapu);
830: debug(F101," swcapu","",swcapu);
831: debug(F101," wsize ","", wsize);
832: }
833: /* R D E B U -- Debugging display of rpar() values */
834:
835: rdebu(len) int len; {
836: debug(F111,"spar: data",rdatap,len);
837: debug(F101," rpsiz ","",xunchar(data[1]));
838: debug(F101," rtimo ","", rtimo);
839: debug(F101," mypadn","",mypadn);
840: debug(F101," mypadc","",mypadc);
841: debug(F101," eol ","", eol);
842: debug(F101," ctlq ","", ctlq);
843: debug(F101," sq ","", sq);
844: debug(F101," ebq ","", ebq);
845: debug(F101," ebqflg","",ebqflg);
846: debug(F101," bctr ","", bctr);
847: debug(F101," rptq ","",data[9]);
848: debug(F101," rptflg","",rptflg);
849: debug(F101," capas ","",capas);
850: debug(F101," bits ","",data[capas]);
851: debug(F101," atcapu","",atcapu);
852: debug(F101," lpcapu","",lpcapu);
853: debug(F101," swcapu","",swcapu);
854: debug(F101," wsize ","", wsize);
855: debug(F101," rpsiz(extended)","",rpsiz);
856: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.