|
|
1.1 ! root 1: #ifndef NOICP ! 2: ! 3: /* C K U U S 3 -- "User Interface" for Unix Kermit, part 3 */ ! 4: ! 5: /* ! 6: Author: Frank da Cruz ([email protected], [email protected]), ! 7: Columbia University Center for Computing Activities. ! 8: First released January 1985. ! 9: Copyright (C) 1985, 1992, Trustees of Columbia University in the City of New ! 10: York. Permission is granted to any individual or institution to use this ! 11: software as long as it is not sold for profit. This copyright notice must be ! 12: retained. This software may not be included in commercial products without ! 13: written permission of Columbia University. ! 14: */ ! 15: ! 16: /* SET command (but much material has been split off into ckuus7.c). */ ! 17: ! 18: /* ! 19: Kermit-specific includes. ! 20: Definitions here supersede those from system include files. ! 21: */ ! 22: #include "ckcdeb.h" /* Debugging & compiler things */ ! 23: #include "ckcasc.h" /* ASCII character symbols */ ! 24: #include "ckcker.h" /* Kermit application definitions */ ! 25: #include "ckcxla.h" /* Character set translation */ ! 26: #include "ckcnet.h" /* Network symbols */ ! 27: #include "ckuusr.h" /* User interface symbols */ ! 28: ! 29: /* Variables */ ! 30: ! 31: extern int size, spsiz, spmax, urpsiz, srvtim, ! 32: local, server, success, ! 33: flow, binary, delay, parity, escape, what, srvdis, ! 34: turn, duplex, backgrd, ! 35: turnch, bctr, mdmtyp, keep, maxtry, unkcs, network, ! 36: ebqflg, quiet, swcapr, nettype, ! 37: wslotr, lscapr, lscapu, ! 38: carrier, debses, ! 39: cdtimo, nlangs, bgset, pflag, msgflg, dblchar, ! 40: cmdmsk, spsizr, wildxpand, suspend, ! 41: techo, terror; ! 42: ! 43: extern char *ccntab[]; ! 44: ! 45: #ifndef NOSCRIPT ! 46: extern int secho; /* Whether SCRIPT cmd should echo */ ! 47: #endif /* NOSCRIPT */ ! 48: ! 49: #ifndef NOSPL ! 50: #ifdef DCMDBUF ! 51: extern int *count; ! 52: #else ! 53: extern int count[]; ! 54: #endif /* DCMDBUF */ ! 55: extern int mecho, merror; /* Macro echo, error */ ! 56: extern int incase; /* INPUT case */ ! 57: #endif /* NOSPL */ ! 58: ! 59: extern int bigsbsiz, bigrbsiz; /* Packet buffers */ ! 60: ! 61: extern long speed; /* Terminal speed */ ! 62: ! 63: extern CHAR sstate; /* Protocol start state */ ! 64: extern char ttname[]; /* Communication device name */ ! 65: #ifndef MAC ! 66: #ifndef NOSETKEY ! 67: extern KEY *keymap; /* Character map for SET KEY (1:1) */ ! 68: extern MACRO *macrotab; /* Macro map for SET KEY (1:string) */ ! 69: #ifdef OS2 ! 70: int wideresult; /* for SET KEY, wide OS/2 scan codes */ ! 71: #endif /* OS2 */ ! 72: #endif /* NOSETKEY */ ! 73: #endif /* MAC */ ! 74: ! 75: #ifndef NOCSETS ! 76: /* system-independent character sets, defined in ckcxla.[ch] */ ! 77: extern struct csinfo tcsinfo[]; ! 78: extern struct langinfo langs[]; ! 79: ! 80: /* Other character-set related variables */ ! 81: extern int tcharset, tslevel, language; ! 82: #endif /* NOCSETS */ ! 83: ! 84: /* Declarations from cmd package */ ! 85: ! 86: #ifdef DCMDBUF ! 87: extern char *cmdbuf; /* Command buffer */ ! 88: extern char *line; ! 89: #else ! 90: extern char cmdbuf[]; /* Command buffer */ ! 91: extern char line[]; /* Character buffer for anything */ ! 92: #endif /* DCMDBUF */ ! 93: ! 94: /* From main ckuser module... */ ! 95: ! 96: extern char tmpbuf[], *tp, *lp; /* Temporary buffer */ ! 97: ! 98: extern int tlevel; /* Take Command file level */ ! 99: ! 100: #ifndef NOSPL ! 101: extern int cmdlvl; /* Overall command level */ ! 102: #endif /* NOSPL */ ! 103: ! 104: #ifdef UNIX ! 105: extern int sessft; /* Session-log file type */ ! 106: #endif /* UNIX */ ! 107: ! 108: ! 109: #ifdef VMS ! 110: int vms_msgs = 1; /* SET MESSAGES */ ! 111: #endif /* VMS */ ! 112: ! 113: /* Keyword tables for SET commands */ ! 114: ! 115: struct keytab chktab[] = { ! 116: "1", 1, 0, ! 117: "2", 2, 0, ! 118: "3", 3, 0, ! 119: "blank-free-2", 4, 0 ! 120: }; ! 121: ! 122: /* For SET MODEM */ ! 123: ! 124: struct keytab autotab[] = { ! 125: "changes-speed", 1, 0, ! 126: "matches-speed", 0, 0 ! 127: }; ! 128: ! 129: /* For SET CARRIER */ ! 130: ! 131: struct keytab crrtab[] = { ! 132: "auto", CAR_AUT, 0, ! 133: "off", CAR_OFF, 0, ! 134: "on", CAR_ON, 0 ! 135: }; ! 136: int ncrr = 3; ! 137: ! 138: /* For SET DEBUG */ ! 139: ! 140: struct keytab dbgtab[] = { ! 141: "off", 0, 0, ! 142: "on", 1, 0, ! 143: "session", 2, 0 ! 144: }; ! 145: int ndbg = 3; ! 146: ! 147: /* Transmission speeds */ ! 148: ! 149: /* Note, the values are encoded in cps rather than bps because 19200 and */ ! 150: /* 38400 are too big for some ints. All but 75bps are multiples of ten. */ ! 151: /* Result of lookup in this table must be multiplied by 10 to get actual */ ! 152: /* speed in bps. If this number is 70, it must be changed to 75. */ ! 153: /* If it is 888, this means 75/1200 split speed. 134.5 (IBM 2741) is not */ ! 154: /* supported, and split speed is not possible in AT&T UNIX. */ ! 155: ! 156: /* The values are generic, rather than specific to UNIX. We can't use */ ! 157: /* B75, B1200, B9600, etc, because non-UNIX versions of C-Kermit will not */ ! 158: /* necessarily have these symbols defined. */ ! 159: ! 160: /* Like all other keytabs, this one must be in "alphabetical" order, */ ! 161: /* rather than numeric order. */ ! 162: ! 163: struct keytab spdtab[] = { ! 164: "0", 0, CM_INV, ! 165: "110", 11, 0, ! 166: #ifdef OS2 ! 167: #ifdef __32BIT__ ! 168: "115200",11520, 0, ! 169: #endif /* __32BIT__ */ ! 170: #endif /* OS2 */ ! 171: "1200", 120, 0, ! 172: #ifdef OS2 ! 173: "14400", 1440, 0, ! 174: #endif /* OS2 */ ! 175: "150", 15, 0, ! 176: "19200", 1920, 0, ! 177: "200", 20, 0, ! 178: "2400", 240, 0, ! 179: "300", 30, 0, ! 180: "3600", 360, 0, ! 181: "38400", 3840, 0, ! 182: "4800", 480, 0, ! 183: "50", 5, 0, ! 184: #ifdef OS2 ! 185: "57600", 5760, 0, ! 186: #endif /* OS2 */ ! 187: "600", 60, 0, ! 188: #ifdef OS2 ! 189: "7200", 720, 0, ! 190: #endif /* OS2 */ ! 191: "75", 7, 0, ! 192: #ifdef ANYBSD ! 193: "75/1200",888, 0, /* Special code "888" for split speed */ ! 194: #endif /* ANYBSD */ ! 195: #ifdef OS2 ! 196: #ifdef __32BIT__ ! 197: "76800", 7680, 0, ! 198: #endif /* __32BIT__ */ ! 199: #endif /* OS2 */ ! 200: "9600", 960, 0 ! 201: }; ! 202: int nspd = (sizeof(spdtab) / sizeof(struct keytab)); /* how many speeds */ ! 203: ! 204: #ifndef NOCSETS ! 205: extern struct keytab lngtab[]; /* Languages for SET LANGUAGE */ ! 206: extern int nlng; ! 207: #endif /* NOCSETS */ ! 208: ! 209: /* Duplex keyword table */ ! 210: ! 211: struct keytab dpxtab[] = { ! 212: "full", 0, 0, ! 213: "half", 1, 0 ! 214: }; ! 215: ! 216: /* SET FILE parameters */ ! 217: ! 218: struct keytab filtab[] = { ! 219: "bytesize", XYFILS, 0, ! 220: #ifndef NOCSETS ! 221: "character-set", XYFILC, 0, ! 222: #endif /* NOCSETS */ ! 223: "collision", XYFILX, 0, ! 224: "display", XYFILD, 0, ! 225: "incomplete", XYFILI, 0, ! 226: #ifdef VMS ! 227: "label", XYFILL, 0, ! 228: #endif /* VMS */ ! 229: "names", XYFILN, 0, ! 230: #ifdef VMS ! 231: "record-length", XYFILR, 0, ! 232: #endif /* VMS */ ! 233: "type", XYFILT, 0, ! 234: "warning", XYFILW, CM_INV ! 235: }; ! 236: int nfilp = (sizeof(filtab) / sizeof(struct keytab)); ! 237: ! 238: /* Flow Control */ ! 239: ! 240: struct keytab flotab[] = { /* SET FLOW-CONTROL keyword table */ ! 241: #ifdef CK_DTRCD ! 242: "dtr/cd", FLO_DTRC, 0, ! 243: #endif /* CK_DTRCD */ ! 244: #ifdef CK_DTRCTS ! 245: "dtr/cts",FLO_DTRT, 0, ! 246: #endif /* CK_DTRCTS */ ! 247: "keep", FLO_KEEP, 0, ! 248: "none", FLO_NONE, 0, ! 249: #ifdef CK_RTSCTS ! 250: "rts/cts", FLO_RTSC, 0, ! 251: #endif /* CK_RTSCTS */ ! 252: "xon/xoff", FLO_XONX, 0 ! 253: }; ! 254: int nflo = (sizeof(flotab) / sizeof(struct keytab)); ! 255: ! 256: /* Handshake characters */ ! 257: ! 258: struct keytab hshtab[] = { ! 259: "bell", 007, 0, ! 260: "code", 998, 0, ! 261: "cr", 015, 0, ! 262: "esc", 033, 0, ! 263: "lf", 012, 0, ! 264: "none", 999, 0, /* (can't use negative numbers) */ ! 265: "xoff", 023, 0, ! 266: "xon", 021, 0 ! 267: }; ! 268: int nhsh = (sizeof(hshtab) / sizeof(struct keytab)); ! 269: ! 270: struct keytab fttab[] = { /* File types */ ! 271: #ifdef VMS ! 272: "b", XYFT_B, CM_INV|CM_ABR, ! 273: #endif /* VMS */ ! 274: "binary", XYFT_B, 0, ! 275: #ifdef VMS ! 276: "block", XYFT_I, CM_INV, ! 277: "image", XYFT_I, 0, ! 278: "labeled", XYFT_L, 0, ! 279: #endif /* VMS */ ! 280: "text", XYFT_T, 0 ! 281: }; ! 282: int nfttyp = (sizeof(fttab) / sizeof(struct keytab)); ! 283: ! 284: #ifndef NODIAL ! 285: extern struct keytab mdmtab[] ; /* Modem types (in module ckudia.c) */ ! 286: extern int nmdm; /* Number of them */ ! 287: #ifndef MINIDIAL ! 288: extern int tbmodel; /* Telebit model ID */ ! 289: #endif /* MINIDIAL */ ! 290: #endif /* NODIAL */ ! 291: ! 292: #ifdef UNIX ! 293: struct keytab wildtab[] = { /* SET WILDCARD-EXPANSION */ ! 294: "kermit", 0, 0, ! 295: "shell", 1, 0 ! 296: }; ! 297: #endif /* UNIX */ ! 298: ! 299: #ifdef NETCONN ! 300: extern struct keytab netcmd[]; ! 301: extern int nnets; ! 302: #endif /* NETCONN */ ! 303: ! 304: #ifdef SUNX25 ! 305: struct keytab x25tab[] = { ! 306: "call-user-data", XYUDAT, 0, ! 307: "closed-user-group", XYCLOS, 0, ! 308: "reverse-charge", XYREVC, 0 ! 309: }; ! 310: int nx25 = (sizeof(x25tab) / sizeof(struct keytab)); ! 311: ! 312: struct keytab padx3tab[] = { ! 313: "break-action", PAD_BREAK_ACTION, 0, ! 314: "break-character", PAD_BREAK_CHARACTER, 0, ! 315: "character-delete", PAD_CHAR_DELETE_CHAR, 0, ! 316: "cr-padding", PAD_PADDING_AFTER_CR, 0, ! 317: "discard-output", PAD_SUPPRESSION_OF_DATA, 0, ! 318: "echo", PAD_ECHO, 0, ! 319: "editing", PAD_EDITING, 0, ! 320: "escape", PAD_ESCAPE, 0, ! 321: "forward", PAD_DATA_FORWARD_CHAR, 0, ! 322: "lf-padding", PAD_PADDING_AFTER_LF, 0, ! 323: "lf-insert", PAD_LF_AFTER_CR, 0, ! 324: "line-delete", PAD_BUFFER_DELETE_CHAR, 0, ! 325: "line-display", PAD_BUFFER_DISPLAY_CHAR, 0, ! 326: "line-fold", PAD_LINE_FOLDING, 0, ! 327: "pad-flow-control", PAD_FLOW_CONTROL_BY_PAD, 0, ! 328: "service-signals", PAD_SUPPRESSION_OF_SIGNALS, 0, ! 329: "timeout", PAD_DATA_FORWARD_TIMEOUT, 0, ! 330: /* Speed is read-only */ ! 331: "transmission-rate", PAD_LINE_SPEED, 0, ! 332: "user-flow-control", PAD_FLOW_CONTROL_BY_USER, 0 ! 333: }; ! 334: int npadx3 = (sizeof(padx3tab) / sizeof(struct keytab)); ! 335: #endif /* SUNX25 */ ! 336: ! 337: /* Parity keyword table */ ! 338: ! 339: struct keytab partab[] = { ! 340: "even", 'e', 0, ! 341: "mark", 'm', 0, ! 342: "none", 0 , 0, ! 343: "odd", 'o', 0, ! 344: "space", 's', 0 ! 345: }; ! 346: int npar = (sizeof(partab) / sizeof(struct keytab)); ! 347: ! 348: /* On/Off table */ ! 349: ! 350: struct keytab onoff[] = { ! 351: "off", 0, 0, ! 352: "on", 1, 0 ! 353: }; ! 354: ! 355: struct keytab rltab[] = { ! 356: "local", 1, 0, ! 357: "off", 0, CM_INV, ! 358: "on", 1, CM_INV, ! 359: "remote", 0, 0 ! 360: }; ! 361: int nrlt = (sizeof(rltab) / sizeof(struct keytab)); ! 362: ! 363: /* Incomplete File Disposition table */ ! 364: static ! 365: struct keytab ifdtab[] = { ! 366: "discard", 0, 0, ! 367: "keep", 1, 0 ! 368: }; ! 369: ! 370: /* SET TAKE parameters table */ ! 371: static ! 372: struct keytab taktab[] = { ! 373: "echo", 0, 0, ! 374: "error", 1, 0, ! 375: "off", 2, CM_INV, /* For compatibility */ ! 376: "on", 3, CM_INV /* with MS-DOS Kermit... */ ! 377: }; ! 378: ! 379: /* SET MACRO parameters table */ ! 380: static ! 381: struct keytab smactab[] = { ! 382: "echo", 0, 0, ! 383: "error", 1, 0 ! 384: }; ! 385: ! 386: #ifndef NOSCRIPT ! 387: static ! 388: struct keytab scrtab[] = { ! 389: "echo", 0, 0 ! 390: }; ! 391: #endif /* NOSCRIPT */ ! 392: ! 393: /* Bytesize table */ ! 394: struct keytab byttab[] = { ! 395: "bytesize", 0, 0 ! 396: }; ! 397: int nbytt = 1; ! 398: ! 399: #ifndef NOSERVER ! 400: /* Server parameters table */ ! 401: struct keytab srvtab[] = { ! 402: "display", XYSERD, 0, ! 403: "timeout", XYSERT, 0 ! 404: }; ! 405: #endif /* NOSERVER */ ! 406: ! 407: /* SET TRANSFER/XFER table */ ! 408: ! 409: struct keytab tstab[] = { ! 410: #ifndef NOCSETS ! 411: "character-set", 1, 0, ! 412: #endif /* NOCSETS */ ! 413: "locking-shift", 2, 0 ! 414: }; ! 415: int nts = (sizeof(tstab) / sizeof(struct keytab)); ! 416: ! 417: #ifndef NOCSETS ! 418: /* SET TRANSFER CHARACTER-SET table */ ! 419: ! 420: extern struct keytab tcstab[]; ! 421: extern int ntcs; ! 422: #endif /* NOCSETS */ ! 423: ! 424: /* SET TRANSFER LOCKING-SHIFT table */ ! 425: struct keytab lstab[] = { ! 426: "forced", 2, 0, ! 427: "off", 0, 0, ! 428: "on", 1, 0 ! 429: }; ! 430: int nls = (sizeof(lstab) / sizeof(struct keytab)); ! 431: ! 432: /* SET TELNET table */ ! 433: #ifdef TNCODE ! 434: extern int tn_duplex, tn_nlm; ! 435: extern char *tn_term; ! 436: struct keytab tntab[] = { ! 437: "echo", CK_TN_EC, 0, ! 438: "newline-mode", CK_TN_NL, 0, ! 439: "terminal-type", CK_TN_TT, 0 ! 440: }; ! 441: int ntn = (sizeof(tntab) / sizeof(struct keytab)); ! 442: #endif /* TNCODE */ ! 443: ! 444: struct keytab ftrtab[] = { /* Feature table */ ! 445: #ifndef NOCSETS /* 0 = we have it, 1 = we don't */ ! 446: "character-sets", 0, 0, ! 447: #else ! 448: "character-sets", 1, 0, ! 449: #endif /* NOCSETS */ ! 450: #ifndef NOCYRIL ! 451: "cyrillic", 0, 0, ! 452: #else ! 453: "cyrillic", 1, 0, ! 454: #endif /* NOCYRIL */ ! 455: ! 456: #ifndef NODEBUG ! 457: "debug", 0, 0, ! 458: #else ! 459: "debug", 1, 0, ! 460: #endif /* NODEBUG */ ! 461: ! 462: #ifndef NODIAL ! 463: "dial", 0, 0, ! 464: #else ! 465: "dial", 1, 0, ! 466: #endif /* NODIAL */ ! 467: ! 468: #ifdef DYNAMIC ! 469: "dynamic-memory", 0, 0, ! 470: #else ! 471: "dynamic-memory", 1, 0, ! 472: #endif /* DYNAMIC */ ! 473: ! 474: #ifdef CK_CURSES ! 475: "fullscreen-display", 0, 0, ! 476: #else ! 477: "fullscreen-display", 1, 0, ! 478: #endif /* CK_CURSES */ ! 479: #ifndef NOHELP ! 480: "help", 0, 0, ! 481: #else ! 482: "help", 1, 0, ! 483: #endif /* NOHELP */ ! 484: #ifndef NOSPL ! 485: "if-command", 0, 0, ! 486: #else ! 487: "if-command", 1, 0, ! 488: #endif /* NOSPL */ ! 489: #ifndef NOJC ! 490: #ifdef UNIX ! 491: "job-control", 0, 0, ! 492: #else ! 493: "job-control", 1, 0, ! 494: #endif /* UNIX */ ! 495: #else ! 496: "job-control", 1, 0, ! 497: #endif /* NOJC */ ! 498: #ifdef KANJI ! 499: "kanji", 0, 0, ! 500: #else ! 501: "kanji", 1, 0, ! 502: #endif /* KANJI */ ! 503: #ifndef NOCSETS ! 504: "latin1", 0, 0, ! 505: #else ! 506: "latin1", 1, 0, ! 507: #endif /* NOCSETS */ ! 508: #ifdef LATIN2 ! 509: "latin2", 0, 0, ! 510: #else ! 511: "latin2", 1, 0, ! 512: #endif /* LATIN2 */ ! 513: #ifdef NETCONN ! 514: "network", 0, 0, ! 515: #else ! 516: "network", 1, 0, ! 517: #endif /* NETCONN */ ! 518: #ifndef NOPUSH ! 519: "push", 0, 0, ! 520: #else ! 521: "push", 1, 0, ! 522: #endif /* PUSH */ ! 523: #ifndef NOSCRIPT ! 524: "script-command", 0, 0, ! 525: #else ! 526: "script-command", 1, 0, ! 527: #endif /* NOSCRIPT */ ! 528: #ifndef NOSERVER ! 529: "server-mode", 0, 0, ! 530: #else ! 531: "server-mode", 1, 0, ! 532: #endif /* NOSERVER */ ! 533: #ifndef NOSHOW ! 534: "show-command", 0, 0, ! 535: #else ! 536: "show-command", 1, 0, ! 537: #endif /* NOSHOW */ ! 538: #ifndef NOXMIT ! 539: "transmit", 0, 0, ! 540: #else ! 541: "transmit", 1, 0 ! 542: #endif /* NOXMIT */ ! 543: }; ! 544: int nftr = (sizeof(ftrtab) / sizeof(struct keytab)); ! 545: ! 546: int /* CHECK command */ ! 547: dochk() { ! 548: int x, y; ! 549: if ((y = cmkey(ftrtab,nftr,"","",xxstring)) < 0) return(y); ! 550: if ((x = cmcfm()) < 0) return(x); ! 551: if (msgflg) /* If at top level... */ ! 552: printf(" %svailable\n", y ? "Not a" : "A"); /* Print a message */ ! 553: else if (y && !backgrd) /* Or if not available and in */ ! 554: printf(" CHECK: feature not available\n"); /* command file or macro */ ! 555: return(success = 1 - y); ! 556: } ! 557: ! 558: #ifndef MAC ! 559: #ifndef NOSETKEY ! 560: int ! 561: set_key() { /* SET KEY */ ! 562: int y; ! 563: int kc; /* Key code */ ! 564: char *bind; /* Key binding */ ! 565: ! 566: if ((y = cmnum("numeric key code","",10,&kc,xxstring)) < 0) ! 567: return(y); ! 568: if (kc < 0 || kc >= KMSIZE) { ! 569: printf("?key code must be between 0 and %d\n", KMSIZE - 1); ! 570: return(-9); ! 571: } ! 572: #ifdef OS2 ! 573: wideresult = -1; ! 574: #endif /* OS2 */ ! 575: if ((y = cmtxt("key definition","",&bind,xxstring)) < 0) ! 576: return(y); ! 577: if (macrotab[kc]) { /* Possibly free old macro from key */ ! 578: free(macrotab[kc]); ! 579: macrotab[kc] = NULL; ! 580: } ! 581: switch (strlen(bind)) { /* Action depends on length */ ! 582: #ifdef OS2 ! 583: case 0: /* Reset to default binding */ ! 584: keymap[kc] = wideresult == -1 ? kc : 0; /* or bind to NUL */ ! 585: break; ! 586: case 1: /* Single character */ ! 587: keymap[kc] = wideresult == -1 ? (CHAR) *bind : wideresult; ! 588: break; ! 589: #else /* Not OS/2 */ ! 590: case 0: /* Reset to default binding */ ! 591: keymap[kc] = kc; ! 592: break; ! 593: case 1: /* Single character */ ! 594: keymap[kc] = (CHAR) *bind; ! 595: break; ! 596: #endif /* OS2 */ ! 597: ! 598: default: /* Character string */ ! 599: keymap[kc] = kc; ! 600: macrotab[kc] = (MACRO) malloc(strlen(bind)+1); ! 601: if (macrotab[kc]) ! 602: strcpy((char *) macrotab[kc], bind); ! 603: break; ! 604: } ! 605: return(1); ! 606: } ! 607: #endif /* NOSETKEY */ ! 608: #endif /* MAC */ ! 609: ! 610: /* D O P R M -- Set a parameter. */ ! 611: /* ! 612: Returns: ! 613: -2: illegal input ! 614: -1: reparse needed ! 615: 0: success ! 616: */ ! 617: int ! 618: doprm(xx,rmsflg) int xx, rmsflg; { ! 619: int i, x, y = 0, z; ! 620: long zz; ! 621: char *s; ! 622: ! 623: switch (xx) { ! 624: ! 625: #ifdef SUNX25 /* SET X25 ... */ ! 626: case XYX25: ! 627: return(setx25()); ! 628: ! 629: case XYPAD: /* SET PAD ... */ ! 630: return(setpadp()); ! 631: #endif /* SUNX25 */ ! 632: ! 633: case XYEOL: /* These have all been moved to set send/receive... */ ! 634: case XYLEN: /* Let the user know what to do. */ ! 635: case XYMARK: ! 636: case XYNPAD: ! 637: case XYPADC: ! 638: case XYTIMO: ! 639: printf("...Use SET SEND or SET RECEIVE instead.\n"); ! 640: printf("Type HELP SET SEND or HELP SET RECEIVE for more info.\n"); ! 641: return(success = 0); ! 642: ! 643: case XYATTR: /* File Attribute packets */ ! 644: return(setat(rmsflg)); ! 645: ! 646: case XYIFD: /* Incomplete file disposition */ ! 647: if ((y = cmkey(ifdtab,2,"","discard",xxstring)) < 0) return(y); ! 648: if ((x = cmcfm()) < 0) return(x); ! 649: if (rmsflg) { ! 650: sstate = setgen('S', "310", y ? "1" : "0", ""); ! 651: return((int) sstate); ! 652: } else { ! 653: keep = y; ! 654: return(success = 1); ! 655: } ! 656: ! 657: #ifndef NOSPL ! 658: case XYINPU: /* SET INPUT */ ! 659: return(setinp()); ! 660: #endif /* NOSPL */ ! 661: ! 662: #ifdef NETCONN ! 663: case XYNET: /* SET NETWORK */ ! 664: if ((z = cmkey(netcmd,nnets,"","tcp/ip",xxstring)) < 0) ! 665: return(z); ! 666: if ((x = cmcfm()) < 0) return(x); ! 667: nettype = z; ! 668: if ( ! 669: (nettype != NET_DEC) && ! 670: (nettype != NET_SX25) && ! 671: (nettype != NET_TCPB)) { ! 672: printf("?Network type not supported\n"); ! 673: return(success = 0); ! 674: } else { ! 675: return(success = 1); ! 676: } ! 677: #endif /* NETCONN */ ! 678: ! 679: case XYHOST: /* SET HOST or SET LINE */ ! 680: case XYLINE: ! 681: return(setlin(xx,1)); ! 682: ! 683: #ifndef MAC ! 684: #ifndef NOSETKEY ! 685: case XYKEY: /* SET KEY */ ! 686: return(set_key()); ! 687: #endif /* NOSETKEY */ ! 688: #endif /* MAC */ ! 689: ! 690: #ifndef NOCSETS ! 691: case XYLANG: /* Language */ ! 692: if ((y = cmkey(lngtab,nlng,"","none",xxstring)) < 0) /* language code */ ! 693: return(y); ! 694: if ((x = cmcfm()) < 0) return(x); /* And confirmation of command */ ! 695: ! 696: /* Look up language and get associated character sets */ ! 697: for (i = 0; (i < nlangs) && (langs[i].id != y); i++) ; ! 698: if (i >= nlangs) { ! 699: printf("?internal error, sorry\n"); ! 700: return(success = 0); ! 701: } ! 702: language = i; /* All good, set the language, */ ! 703: return(success = 1); ! 704: #endif /* NOCSETS */ ! 705: ! 706: #ifndef MAC ! 707: case XYBACK: /* BACKGROUND */ ! 708: if ((z = cmkey(onoff,2,"","",xxstring)) < 0) return(z); ! 709: if ((y = cmcfm()) < 0) return(y); ! 710: bgset = z; ! 711: success = 1; ! 712: bgchk(); ! 713: return(success); ! 714: #endif /* MAC */ ! 715: ! 716: case XYQUIE: /* QUIET */ ! 717: return(success = seton(&quiet)); ! 718: ! 719: case XYBUF: { /* BUFFERS */ ! 720: #ifdef DYNAMIC ! 721: int sb, rb; ! 722: if ((y = cmnum("send buffer size","",10,&sb,xxstring)) < 0) { ! 723: if (y == -3) printf("?two numbers required\n"); ! 724: return(y); ! 725: } ! 726: if (sb < 80) { ! 727: printf("?too small"); ! 728: return(-2); ! 729: } ! 730: if ((y = cmnum("receive buffer size","",10,&rb,xxstring)) < 0) { ! 731: if (y == -3) printf("?receive buffer size required\n"); ! 732: return(y); ! 733: } ! 734: if (rb < 80) { ! 735: printf("?too small"); ! 736: return(-2); ! 737: } ! 738: if ((y = cmcfm()) < 0) return(y); ! 739: if ((y = inibufs(sb,rb)) < 0) return(y); ! 740: y = adjpkl(urpsiz,wslotr,bigrbsiz); /* Maybe adjust packet sizes */ ! 741: if (y != urpsiz) urpsiz = y; ! 742: y = adjpkl(spsiz,wslotr,bigsbsiz); ! 743: if (y != spsiz) spsiz = spmax = spsizr = y; ! 744: return(success = 1); ! 745: #else ! 746: printf("?Sorry, not available\n"); ! 747: return(success = 0); ! 748: #endif /* DYNAMIC */ ! 749: } ! 750: ! 751: case XYCHKT: /* BLOCK-CHECK */ ! 752: if ((x = cmkey(chktab,4,"","1",xxstring)) < 0) return(x); ! 753: if ((y = cmcfm()) < 0) return(y); ! 754: bctr = x; /* Set locally too, even if REMOTE SET */ ! 755: if (rmsflg) { ! 756: if (x == 4) { ! 757: tmpbuf[0] = 'B'; ! 758: tmpbuf[1] = '\0'; ! 759: } else sprintf(tmpbuf,"%d",x); ! 760: sstate = setgen('S', "400", tmpbuf, ""); ! 761: return((int) sstate); ! 762: } else { ! 763: return(success = 1); ! 764: } ! 765: ! 766: #ifndef MAC ! 767: /* ! 768: The Mac has no carrier... ! 769: */ ! 770: case XYCARR: /* CARRIER */ ! 771: if ((y = cmkey(crrtab,ncrr,"","auto",xxstring)) < 0) return(y); ! 772: if (y == CAR_ON) { ! 773: x = cmnum("Carrier wait timeout, seconds","0",10,&z,xxstring); ! 774: if (x < 0) return(z); ! 775: } ! 776: if ((x = cmcfm()) < 0) return(x); ! 777: carrier = ttscarr(y); ! 778: cdtimo = z; ! 779: return(success = 1); ! 780: #endif /* MAC */ ! 781: ! 782: #ifdef TNCODE ! 783: case XYTEL: /* TELNET */ ! 784: if ((z = cmkey(tntab,ntn,"parameter for TELNET negotiations", "", ! 785: xxstring)) < 0) return(z); ! 786: switch (z) { ! 787: case CK_TN_EC: /* ECHO */ ! 788: if ((x = cmkey(rltab,nrlt, ! 789: "initial TELNET echoing state","local",xxstring)) < 0) ! 790: return(x); ! 791: if ((y = cmcfm()) < 0) return(y); ! 792: tn_duplex = x; ! 793: return(success = 1); ! 794: ! 795: case CK_TN_TT: /* TERMINAL TYPE */ ! 796: if ((y = cmtxt("terminal type for TELNET connections","", ! 797: &s,xxstring)) < 0) ! 798: return(y); ! 799: if (tn_term) free(tn_term); /* Free any previous storage */ ! 800: if (s == NULL || *s == NUL) { /* If none given */ ! 801: tn_term = NULL; /* remove the override string */ ! 802: return(success = 1); ! 803: } else if (tn_term = malloc(strlen(s)+1)) { /* Make storage for new */ ! 804: strcpy(tn_term,s); /* Copy string into new storage */ ! 805: return(success = 1); ! 806: } else return(success = 0); ! 807: ! 808: case CK_TN_NL: /* NEWLINE-MODE */ ! 809: return(success = seton(&tn_nlm)); ! 810: ! 811: default: ! 812: return(-2); ! 813: } ! 814: #endif /* TNCODE */ ! 815: ! 816: default: ! 817: break; ! 818: } ! 819: ! 820: switch (xx) { ! 821: #ifndef NOSPL ! 822: case XYCOUN: /* SET COUNT */ ! 823: x = cmnum("Positive number","0",10,&z,xxstring); ! 824: if (x < 0) return(x); ! 825: if ((x = cmcfm()) < 0) return(x); ! 826: if (z < 0) { ! 827: printf("?A positive number, please\n"); ! 828: return(0); ! 829: } ! 830: debug(F101,"XYCOUN: z","",z); ! 831: return(success = setnum(&count[cmdlvl],z,0,10000)); ! 832: #endif /* NOSPL */ ! 833: ! 834: #ifndef NOSPL ! 835: case XYCASE: ! 836: return(success = seton(&incase)); ! 837: #endif /* NOSPL */ ! 838: ! 839: case XYCMD: /* COMMAND ... */ ! 840: if ((y = cmkey(byttab,nbytt,"","bytesize",xxstring)) < 0) return(y); ! 841: if ((y = cmnum("bytesize for command characters, 7 or 8","7",10,&x, ! 842: xxstring)) < 0) ! 843: return(y); ! 844: if (x != 7 && x != 8) { ! 845: printf("\n?The choices are 7 and 8\n"); ! 846: return(success = 0); ! 847: } ! 848: if ((y = cmcfm()) < 0) return(y); ! 849: if (x == 7) cmdmsk = 0177; ! 850: else if (x == 8) cmdmsk = 0377; ! 851: return(success = 1); ! 852: ! 853: case XYDFLT: /* SET DEFAULT = CD */ ! 854: return(success = docd()); ! 855: ! 856: case XYDEBU: /* SET DEBUG { on, off, session } */ ! 857: if ((y = cmkey(dbgtab,ndbg,"","",xxstring)) < 0) return(y); ! 858: if ((x = cmcfm()) < 0) return(x); ! 859: switch (y) { ! 860: case 0: /* 0 = all debugging off. */ ! 861: debses = 0; ! 862: #ifdef DEBUG ! 863: if (deblog) doclslog(LOGD); ! 864: #endif /* DEBUG */ ! 865: return(success = 1); ! 866: ! 867: case 1: /* 1 = log debugging to debug.log */ ! 868: #ifdef DEBUG ! 869: deblog = debopn("debug.log", 0); ! 870: return(success = deblog ? 1 : 0); ! 871: #else ! 872: printf("?Sorry, debug log feature not enabled\n"); ! 873: return(success = 0); ! 874: #endif /* DEBUG */ ! 875: ! 876: case 2: /* 2 = session. */ ! 877: return(success = debses = 1); ! 878: } ! 879: ! 880: case XYDELA: /* SET DELAY */ ! 881: y = cmnum("Number of seconds before starting to send","5",10,&x,xxstring); ! 882: if (x < 0) x = 0; ! 883: return(success = setnum(&delay,x,y,999)); ! 884: ! 885: default: ! 886: break; ! 887: } ! 888: ! 889: switch (xx) { ! 890: ! 891: #ifndef NODIAL ! 892: case XYDIAL: /* SET DIAL */ ! 893: return(setdial()); ! 894: #endif /* NODIAL */ ! 895: ! 896: #ifdef COMMENT /* Unused at present */ ! 897: case XYDOUB: ! 898: if ((x = cmfld("Character to double","none",&s,xxstring)) < 0) { ! 899: if (x == -3) { ! 900: dblchar = -1; ! 901: if (msgflg) printf("Doubling Off\n"); ! 902: return(success = 1); ! 903: } else return(x); ! 904: } ! 905: strcpy(line,s); ! 906: lp = line; ! 907: if ((x = cmcfm()) < 0) return(x); ! 908: if (!xxstrcmp(lp,"none",4)) { ! 909: dblchar = -1; ! 910: if (msgflg) printf("Doubling Off\n"); ! 911: return(success = 1); ! 912: } ! 913: if ((int)strlen(lp) != 1) return(-2); ! 914: dblchar = *lp & 0xFF; ! 915: if (msgflg) printf("Doubled: %d\n",dblchar); ! 916: return(success = 1); ! 917: #endif /* COMMENT */ ! 918: ! 919: case XYDUPL: /* SET DUPLEX */ ! 920: if ((y = cmkey(dpxtab,2,"","full",xxstring)) < 0) return(y); ! 921: if ((x = cmcfm()) < 0) return(x); ! 922: duplex = y; ! 923: return(success = 1); ! 924: ! 925: case XYLCLE: /* LOCAL-ECHO (= DUPLEX) */ ! 926: return(success = seton(&duplex)); ! 927: ! 928: case XYESC: /* SET ESCAPE */ ! 929: sprintf(tmpbuf,"%d",DFESC); ! 930: y = cmnum("Decimal ASCII code for CONNECT-mode escape character", ! 931: tmpbuf, 10,&x,xxstring); ! 932: success = setcc(&escape,x,y); ! 933: #ifdef COMMENT ! 934: /* This is what SHOW ESCAPE is for. */ ! 935: if (success && msgflg) ! 936: printf(" CONNECT-mode escape character: %d (Ctrl-%c, %s)\n", ! 937: escape,ctl(escape),(escape == 127 ? "DEL" : ccntab[escape])); ! 938: #endif /* COMMENT */ ! 939: return(success); ! 940: ! 941: default: ! 942: break; ! 943: } ! 944: ! 945: switch (xx) { ! 946: case XYFILE: /* SET FILE */ ! 947: return(setfil(rmsflg)); ! 948: ! 949: case XYFLOW: /* FLOW-CONTROL */ ! 950: /* ! 951: Note: flotab[] keyword table (defined above) only includes the legal ! 952: flow-control options for each implementation, controlled by symbols ! 953: defined in ckcdeb.h. ! 954: */ ! 955: if ((y = cmkey(flotab,nflo,"","xon/xoff",xxstring)) < 0) return(y); ! 956: if ((x = cmcfm()) < 0) return(x); ! 957: flow = y; ! 958: debug(F101,"set flow","",flow); ! 959: return(success = 1); ! 960: ! 961: case XYHAND: /* HANDSHAKE */ ! 962: if ((y = cmkey(hshtab,nhsh,"","none",xxstring)) < 0) return(y); ! 963: if (y == 998) { ! 964: if ((x = cmnum("ASCII value","",10,&y,xxstring)) < 0) ! 965: return(x); ! 966: if ((y < 1) || ((y > 31) && (y != 127))) { ! 967: printf("?Character must be in ASCII control range\n"); ! 968: return(-9); ! 969: } ! 970: } ! 971: if ((x = cmcfm()) < 0) return(x); ! 972: turn = (y > 0127) ? 0 : 1 ; ! 973: turnch = y; ! 974: return(success = 1); ! 975: ! 976: #ifndef NOSPL ! 977: case XYMACR: /* SET MACRO */ ! 978: if ((y = cmkey(smactab,2,"","",xxstring)) < 0) return(y); ! 979: switch (y) { ! 980: case 0: return(success = seton(&mecho)); ! 981: case 1: return(success = seton(&merror)); ! 982: default: return(-2); ! 983: } ! 984: #endif /* NOSPL */ ! 985: ! 986: #ifndef NODIAL ! 987: case XYMODM: /* SET MODEM */ ! 988: if ((x = cmkey(mdmtab,nmdm,"type of modem","none", xxstring)) < 0) ! 989: return(x); ! 990: if ((z = cmcfm()) < 0) return(z); ! 991: mdmtyp = x; ! 992: #ifndef MINIDIAL ! 993: tbmodel = 0; /* If it's a Telebit, we don't know the model yet */ ! 994: #endif /* MINIDIAL */ ! 995: return(success = 1); ! 996: #endif /* NODIAL */ ! 997: ! 998: case XYMSGS: ! 999: #ifdef VMS ! 1000: if ((z = cmkey(onoff,2,"","",xxstring)) < 0) return(z); ! 1001: if ((y = cmcfm()) < 0) return(y); ! 1002: vms_msgs = z; ! 1003: printf("Sorry, SET MESSAGES not implemented yet\n"); ! 1004: return(success = 0); ! 1005: #endif /* VMS */ ! 1006: default: ! 1007: break; ! 1008: } ! 1009: ! 1010: switch (xx) { ! 1011: ! 1012: case XYPARI: /* PARITY */ ! 1013: if ((y = cmkey(partab,npar,"","none",xxstring)) < 0) return(y); ! 1014: if ((x = cmcfm()) < 0) return(x); ! 1015: ! 1016: /* If parity not none, then we also want 8th-bit prefixing */ ! 1017: ! 1018: if (parity = y) ebqflg = 1; else ebqflg = 0; ! 1019: return(success = 1); ! 1020: ! 1021: #ifndef NOFRILLS ! 1022: case XYPROM: /* SET PROMPT */ ! 1023: /* ! 1024: Note: xxstring not invoked here. Instead, it is invoked every time the ! 1025: prompt is issued. This allows the prompt string to contain variables ! 1026: that can change, like \v(dir), \v(time), etc. ! 1027: */ ! 1028: #ifdef MAC ! 1029: if ((x = cmtxt("Program's command prompt","Mac-Kermit>",&s,NULL)) < 0) ! 1030: #else ! 1031: if ((x = cmtxt("Program's command prompt","C-Kermit>",&s,NULL)) < 0) ! 1032: #endif /* MAC */ ! 1033: return(x); ! 1034: if (*s == '{') { /* Remove enclosing braces, if any */ ! 1035: x = (int)strlen(s); ! 1036: if (s[x-1] == '}') { ! 1037: s[x-1] = NUL; ! 1038: s++; ! 1039: } ! 1040: } ! 1041: #ifdef COMMENT ! 1042: /* ! 1043: Let's not do this any more -- we don't do it anywhere else. ! 1044: */ ! 1045: else if (*s == '"') { /* For compatibility with pre-5A */ ! 1046: x = (int)strlen(s); ! 1047: if (s[x-1] == '"') { ! 1048: s[x-1] = NUL; ! 1049: s++; ! 1050: } ! 1051: } ! 1052: #endif /* COMMENT */ ! 1053: cmsetp(s); /* Set the prompt */ ! 1054: return(success = 1); ! 1055: #endif /* NOFRILLS */ ! 1056: ! 1057: case XYRETR: /* RETRY: per-packet retry limit */ ! 1058: y = cmnum("Maximum retries per packet","10",10,&x,xxstring); ! 1059: if (x < 0) x = 0; ! 1060: if ((x = setnum(&maxtry,x,y,999)) < 0) return(x); ! 1061: if (maxtry <= wslotr) { ! 1062: printf("?Retry limit must be greater than window size\n"); ! 1063: return(success = 0); ! 1064: } ! 1065: sprintf(tmpbuf,"%d",maxtry); ! 1066: if (rmsflg) { ! 1067: sstate = setgen('S', "403", tmpbuf, ""); ! 1068: return((int) sstate); ! 1069: } else return(success = x); ! 1070: ! 1071: #ifndef NOSERVER ! 1072: case XYSERV: /* SET SERVER items */ ! 1073: if ((y = cmkey(srvtab,2,"","",xxstring)) < 0) return(y); ! 1074: switch (y) { ! 1075: case XYSERT: ! 1076: tp = tmpbuf; ! 1077: sprintf(tp,"%d",DSRVTIM); ! 1078: if ((y = cmnum("interval for server NAKs, 0 = none",tp,10,&x, ! 1079: xxstring)) < 0) ! 1080: return(y); ! 1081: if (x < 0) { ! 1082: printf("\n?Specify a positive number, or 0 for no server NAKs\n"); ! 1083: return(0); ! 1084: } ! 1085: if ((y = cmcfm()) < 0) return(y); ! 1086: sprintf(tp,"%d",x); ! 1087: if (rmsflg) { ! 1088: sstate = setgen('S', "404", tp, ""); ! 1089: return((int) sstate); ! 1090: } else { ! 1091: srvtim = x; /* Set the server timeout variable */ ! 1092: return(success = 1); ! 1093: } ! 1094: case XYSERD: /* SERVER DISPLAY */ ! 1095: return(success = seton(&srvdis)); /* ON or OFF... */ ! 1096: default: ! 1097: return(-2); ! 1098: } ! 1099: #endif /* NOSERVER */ ! 1100: ! 1101: #ifdef UNIX ! 1102: #ifndef NOJC ! 1103: case XYSUSP: /* SET SUSPEND */ ! 1104: seton(&suspend); /* on or off... */ ! 1105: return(success = 1); ! 1106: #endif /* NOJC */ ! 1107: #endif /* UNIX */ ! 1108: ! 1109: case XYTAKE: /* SET TAKE */ ! 1110: if ((y = cmkey(taktab,4,"","",xxstring)) < 0) return(y); ! 1111: switch (y) { ! 1112: case 0: return(success = seton(&techo)); ! 1113: case 1: return(success = seton(&terror)); ! 1114: case 2: techo = 0; return(success = 1); /* For compatibility with */ ! 1115: case 3: techo = 1; return(success = 1); /* MS-DOS Kermit */ ! 1116: default: return(-2); ! 1117: } ! 1118: ! 1119: #ifndef NOSCRIPT ! 1120: case XYSCRI: /* SET SCRIPT */ ! 1121: if ((y = cmkey(scrtab,1,"","echo",xxstring)) < 0) return(y); ! 1122: switch (y) { ! 1123: case 0: return(success = seton(&secho)); ! 1124: default: return(-2); ! 1125: } ! 1126: #endif /* NOSCRIPT */ ! 1127: ! 1128: default: ! 1129: break; ! 1130: } ! 1131: ! 1132: switch (xx) { ! 1133: case XYTERM: /* SET TERMINAL */ ! 1134: return(settrm()); ! 1135: ! 1136: default: ! 1137: break; ! 1138: } ! 1139: ! 1140: switch (xx) { ! 1141: ! 1142: /* SET SEND/RECEIVE protocol parameters. */ ! 1143: ! 1144: case XYRECV: ! 1145: case XYSEND: ! 1146: return(setsr(xx,rmsflg)); ! 1147: ! 1148: #ifdef UNIX ! 1149: case XYSESS: /* SESSION-LOG */ ! 1150: if ((x = cmkey(fttab,2,"type of file","text",xxstring)) < 0) ! 1151: return(x); ! 1152: if ((y = cmcfm()) < 0) return(y); ! 1153: sessft = x; ! 1154: return(success = 1); ! 1155: #endif /* UNIX */ ! 1156: ! 1157: case XYSPEE: /* SET SPEED */ ! 1158: if (network) { ! 1159: printf("\n?Speed cannot be set for network connections\n"); ! 1160: return(success = 0); ! 1161: } ! 1162: lp = line; ! 1163: sprintf(lp,"Transmission rate for %s in bits per second",ttname); ! 1164: ! 1165: if ((x = cmkey(spdtab,nspd,line,"",xxstring)) < 0) { ! 1166: if (x == -3) printf("?value required\n"); ! 1167: return(x); ! 1168: } ! 1169: if ((y = cmcfm()) < 0) return(y); ! 1170: if (!local) { ! 1171: printf("?Sorry, you must SET LINE first\n"); ! 1172: return(success = 0); ! 1173: } ! 1174: zz = (long) x * 10L; ! 1175: if (zz == 70) zz = 75; /* (see spdtab[] def) */ ! 1176: if (ttsspd(x) < 0) { /* Call ttsspd with cps, not bps! */ ! 1177: printf("?Unsupported line speed - %ld\n",zz); ! 1178: return(success = 0); ! 1179: } else { ! 1180: speed = zz; ! 1181: if (pflag && ! 1182: #ifndef NOSPL ! 1183: cmdlvl == 0 ! 1184: #else ! 1185: tlevel < 0 ! 1186: #endif /* NOSPL */ ! 1187: ) { ! 1188: if (speed == 8880) ! 1189: printf("%s, 75/1200 bps\n",ttname); ! 1190: else ! 1191: printf("%s, %ld bps\n",ttname,speed); ! 1192: } ! 1193: return(success = 1); ! 1194: } ! 1195: ! 1196: case XYXFER: /* SET TRANSFER */ ! 1197: if ((y = cmkey(tstab,nts,"","character-set",xxstring)) < 0) return(y); ! 1198: #ifndef NOCSETS ! 1199: if (y == 1) { /* character-set */ ! 1200: if ((y = cmkey(tcstab,ntcs,"","transparent",xxstring)) < 0) return(y); ! 1201: if ((x = cmcfm()) < 0) return(x); ! 1202: if (rmsflg) { ! 1203: sstate = setgen('S', "405", tcsinfo[y].designator, ""); ! 1204: return((int) sstate); ! 1205: } else { ! 1206: tslevel = (y == TC_TRANSP) ? 0 : 1; /* transfer syntax level */ ! 1207: tcharset = y; /* transfer character set */ ! 1208: return(success = 1); ! 1209: } ! 1210: } else ! 1211: #endif /* NOCSETS */ ! 1212: if (y == 2) { /* LOCKING-SHIFT options */ ! 1213: if ((y = cmkey(lstab,nls,"","on",xxstring)) < 0) ! 1214: return(y); ! 1215: if ((x = cmcfm()) < 0) return(x); ! 1216: lscapr = (y == 1) ? 1 : 0; /* ON: requested = 1 */ ! 1217: lscapu = (y == 2) ? 2 : 0; /* FORCED: used = 1 */ ! 1218: return(success = 1); ! 1219: } else return(-2); ! 1220: ! 1221: #ifndef NOXMIT ! 1222: case XYXMIT: /* SET TRANSMIT */ ! 1223: return(setxmit()); ! 1224: #endif /* NOXMIT */ ! 1225: ! 1226: #ifndef NOCSETS ! 1227: case XYUNCS: /* UNKNOWN-CHARACTER-SET */ ! 1228: if ((y = cmkey(ifdtab,2,"","discard",xxstring)) < 0) return(y); ! 1229: if ((x = cmcfm()) < 0) return(x); ! 1230: unkcs = y; ! 1231: return(success = 1); ! 1232: #endif /* NOCSETS */ ! 1233: ! 1234: #ifdef UNIX ! 1235: case XYWILD: /* WILDCARD-EXPANSION */ ! 1236: if ((y = cmkey(wildtab,2,"who expands wildcards","kermit",xxstring)) < 0) ! 1237: return(y); ! 1238: if ((x = cmcfm()) < 0) return(x); ! 1239: wildxpand = y; ! 1240: return(success = 1); ! 1241: #endif /* UNIX */ ! 1242: ! 1243: case XYWIND: /* WINDOW-SLOTS */ ! 1244: y = cmnum("Number of sliding-window slots, 1 to 31","1",10,&x,xxstring); ! 1245: y = setnum(&z,x,y,31); ! 1246: if (y < 0) return(y); ! 1247: if (z < 1) z = 1; ! 1248: #ifdef COMMENT ! 1249: /* This is unreasonable */ ! 1250: if (maxtry < z) { ! 1251: printf("?Window slots must be less than retry limit\n"); ! 1252: return(success = 0); ! 1253: } ! 1254: #endif /* COMMENT */ ! 1255: if (rmsflg) { /* Set remote window size */ ! 1256: tp = tmpbuf; ! 1257: sprintf(tp,"%d",z); ! 1258: sstate = setgen('S', "406", tp, ""); ! 1259: return((int) sstate); ! 1260: } ! 1261: wslotr = z; /* Set local window size */ ! 1262: swcapr = (wslotr > 1) ? 1 : 0; /* Set window bit in capas word? */ ! 1263: if (wslotr > 1) { /* Window size > 1? */ ! 1264: y = adjpkl(urpsiz,wslotr,bigrbsiz); /* Maybe adjust packet size */ ! 1265: if (y != urpsiz) { /* Did it change? */ ! 1266: urpsiz = y; ! 1267: if (msgflg) ! 1268: printf( ! 1269: " Adjusting receive packet-length to %d for %d window slots\n", ! 1270: urpsiz, wslotr); ! 1271: } ! 1272: } ! 1273: return(success = 1); ! 1274: ! 1275: default: ! 1276: if ((x = cmcfm()) < 0) return(x); ! 1277: printf("Not working yet - %s\n",cmdbuf); ! 1278: return(success = 0); ! 1279: } ! 1280: } ! 1281: #endif /* NOICP */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.