133685Sbostic /* 245008Skarels * Copyright (c) 1988, 1990 Regents of the University of California. 333685Sbostic * All rights reserved. 433685Sbostic * 542770Sbostic * %sccs.include.redist.c% 633685Sbostic */ 733685Sbostic 833685Sbostic #ifndef lint 933685Sbostic char copyright[] = 1045008Skarels "@(#) Copyright (c) 1988, 1990 Regents of the University of California.\n\ 1133685Sbostic All rights reserved.\n"; 1233685Sbostic #endif /* not lint */ 1333685Sbostic 1433685Sbostic #ifndef lint 15*46808Sdab static char sccsid[] = "@(#)main.c 5.2 (Berkeley) 03/01/91"; 1633685Sbostic #endif /* not lint */ 1733685Sbostic 1832381Sminshall #include <sys/types.h> 1932381Sminshall 2032381Sminshall #include "ring.h" 2132145Sminshall #include "externs.h" 2232145Sminshall #include "defines.h" 2332145Sminshall 2432145Sminshall /* 2532145Sminshall * Initialize variables. 2632145Sminshall */ 27*46808Sdab void 2832145Sminshall tninit() 2932145Sminshall { 3045233Sborman init_terminal(); 3145233Sborman 3245233Sborman init_network(); 3345233Sborman 3445233Sborman init_telnet(); 3545233Sborman 3645233Sborman init_sys(); 3745233Sborman 3845233Sborman #if defined(TN3270) 3945233Sborman init_3270(); 4045233Sborman #endif 4132145Sminshall } 4232145Sminshall 43*46808Sdab void 44*46808Sdab usage() 45*46808Sdab { 46*46808Sdab fprintf(stderr, "Usage: %s %s%s%s%s\n", 47*46808Sdab prompt, 48*46808Sdab #ifdef AUTHENTICATE 49*46808Sdab " [-8] [-E] [-K] [-L] [-X atype] [-a] [-d] [-e char] [-k realm]", 50*46808Sdab "\n\t[-l user] [-n tracefile] ", 51*46808Sdab #else 52*46808Sdab " [-8] [-E] [-L] [-a] [-d] [-e char] [-l user] [-n tracefile]", 53*46808Sdab "\n\t", 54*46808Sdab #endif 55*46808Sdab #if defined(TN3270) && defined(unix) 56*46808Sdab # ifdef AUTHENTICATE 57*46808Sdab "[-noasynch] [-noasynctty] [-noasyncnet]\n\t[-r] [-t transcom] ", 58*46808Sdab # else 59*46808Sdab "[-noasynch] [-noasynctty] [-noasyncnet] [-r] [-t transcom]\n\t", 60*46808Sdab # endif 61*46808Sdab #else 62*46808Sdab "[-r] ", 63*46808Sdab #endif 64*46808Sdab #ifdef ENCRYPT 65*46808Sdab "[-x] [host-name [port]]" 66*46808Sdab #else 67*46808Sdab "[host-name [port]]" 68*46808Sdab #endif 69*46808Sdab ); 70*46808Sdab exit(1); 71*46808Sdab } 7232145Sminshall 7332145Sminshall /* 7432145Sminshall * main. Parse arguments, invoke the protocol or command parser. 7532145Sminshall */ 7645233Sborman 7745233Sborman 7832145Sminshall main(argc, argv) 7932145Sminshall int argc; 8032145Sminshall char *argv[]; 8132145Sminshall { 8245008Skarels extern char *optarg; 8345008Skarels extern int optind; 8445008Skarels int ch; 8545233Sborman char *user, *strrchr(); 8644361Sborman 8745008Skarels tninit(); /* Clear out things */ 8845233Sborman #if defined(CRAY) && !defined(__STDC__) 8945008Skarels _setlist_init(); /* Work around compiler bug */ 9038689Sborman #endif 9145233Sborman 9245008Skarels TerminalSaveState(); 9332145Sminshall 9445233Sborman if (prompt = strrchr(argv[0], '/')) 9545008Skarels ++prompt; 9645008Skarels else 9745008Skarels prompt = argv[0]; 9832145Sminshall 9945008Skarels user = NULL; 100*46808Sdab 101*46808Sdab rlogin = (strncmp(prompt, "rlog", 4) == 0) ? '~' : _POSIX_VDISABLE; 102*46808Sdab autologin = -1; 103*46808Sdab 104*46808Sdab while ((ch = getopt(argc, argv, "8EKLX:ade:k:l:n:rt:x")) != EOF) { 10545008Skarels switch(ch) { 106*46808Sdab case '8': 107*46808Sdab eight = 3; /* binary output and input */ 108*46808Sdab break; 109*46808Sdab case 'E': 110*46808Sdab rlogin = escape = _POSIX_VDISABLE; 111*46808Sdab break; 112*46808Sdab case 'K': 113*46808Sdab #ifdef AUTHENTICATE 114*46808Sdab autologin = 0; 115*46808Sdab #endif 116*46808Sdab break; 117*46808Sdab case 'L': 118*46808Sdab eight |= 2; /* binary output only */ 119*46808Sdab break; 120*46808Sdab case 'X': 121*46808Sdab #ifdef AUTHENTICATE 122*46808Sdab auth_disable_name(optarg); 123*46808Sdab #endif 124*46808Sdab break; 12545008Skarels case 'a': 12645008Skarels autologin = 1; 12745008Skarels break; 12845008Skarels case 'd': 12945008Skarels debug = 1; 13045008Skarels break; 13145008Skarels case 'e': 13245008Skarels set_escape_char(optarg); 13345008Skarels break; 134*46808Sdab case 'k': 135*46808Sdab #if defined(AUTHENTICATE) && defined(KRB4) 136*46808Sdab { 137*46808Sdab extern char *dest_realm, dst_realm_buf[], dst_realm_sz; 138*46808Sdab dest_realm = dst_realm_buf; 139*46808Sdab (void)strncpy(dest_realm, optarg, dst_realm_sz); 140*46808Sdab } 141*46808Sdab #else 142*46808Sdab fprintf(stderr, 143*46808Sdab "%s: Warning: -k ignored, no Kerberos V4 support.\n", 144*46808Sdab prompt); 145*46808Sdab #endif 146*46808Sdab break; 14745008Skarels case 'l': 14845008Skarels autologin = 1; 14945008Skarels user = optarg; 15045008Skarels break; 15145008Skarels case 'n': 15245008Skarels #if defined(TN3270) && defined(unix) 15345008Skarels /* distinguish between "-n oasynch" and "-noasynch" */ 15445008Skarels if (argv[optind - 1][0] == '-' && argv[optind - 1][1] 15545008Skarels == 'n' && argv[optind - 1][2] == 'o') { 15645008Skarels if (!strcmp(optarg, "oasynch")) { 15745008Skarels noasynchtty = 1; 15845008Skarels noasynchnet = 1; 15945008Skarels } else if (!strcmp(optarg, "oasynchtty")) 16045008Skarels noasynchtty = 1; 16145233Sborman else if (!strcmp(optarg, "oasynchnet")) 16245008Skarels noasynchnet = 1; 16345008Skarels } else 16445008Skarels #endif /* defined(TN3270) && defined(unix) */ 16545008Skarels SetNetTrace(optarg); 16645008Skarels break; 167*46808Sdab case 'r': 168*46808Sdab rlogin = '~'; 169*46808Sdab break; 170*46808Sdab case 't': 17145008Skarels #if defined(TN3270) && defined(unix) 17245008Skarels transcom = tline; 17345008Skarels (void)strcpy(transcom, optarg); 174*46808Sdab #else 175*46808Sdab fprintf(stderr, 176*46808Sdab "%s: Warning: -t ignored, no TN3270 support.\n", 177*46808Sdab prompt); 178*46808Sdab #endif 17945008Skarels break; 180*46808Sdab case 'x': 181*46808Sdab #ifdef ENCRYPT 182*46808Sdab encrypt_auto(); 183*46808Sdab #else 184*46808Sdab fprintf(stderr, 185*46808Sdab "%s: Warning: -x ignored, no ENCRYPT support.\n", 186*46808Sdab prompt); 18745008Skarels #endif 188*46808Sdab break; 18945008Skarels case '?': 19045008Skarels default: 19145008Skarels usage(); 19245008Skarels /* NOTREACHED */ 19332145Sminshall } 19445233Sborman } 195*46808Sdab if (autologin == -1) 196*46808Sdab autologin = (rlogin == _POSIX_VDISABLE) ? 0 : 1; 197*46808Sdab 19845008Skarels argc -= optind; 19945008Skarels argv += optind; 20045008Skarels 20145008Skarels if (argc) { 20245008Skarels char *args[7], **argp = args; 20345008Skarels 20445008Skarels if (argc > 2) 20545008Skarels usage(); 20645008Skarels *argp++ = prompt; 20745008Skarels if (user) { 20845008Skarels *argp++ = "-l"; 20945008Skarels *argp++ = user; 21045008Skarels } 21145008Skarels *argp++ = argv[0]; /* host */ 21245008Skarels if (argc > 1) 21345008Skarels *argp++ = argv[1]; /* port */ 21445008Skarels *argp = 0; 21545008Skarels 21645008Skarels if (setjmp(toplevel) != 0) 21745008Skarels Exit(0); 21845008Skarels if (tn(argp - args, args) == 1) 21945008Skarels return (0); 22045008Skarels else 22145008Skarels return (1); 22232145Sminshall } 22345008Skarels (void)setjmp(toplevel); 22445233Sborman for (;;) { 22545008Skarels #ifdef TN3270 22645008Skarels if (shell_active) 22745008Skarels shell_continue(); 22845008Skarels else 22945008Skarels #endif 23045008Skarels command(1, 0, 0); 23145233Sborman } 23232145Sminshall } 233