|
|
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.