133685Sbostic /* 2*45008Skarels * 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[] = 10*45008Skarels "@(#) 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*45008Skarels static char sccsid[] = "@(#)main.c 1.15 (Berkeley) 07/27/90"; 1633685Sbostic #endif /* not lint */ 1733685Sbostic 1832381Sminshall #include <sys/types.h> 19*45008Skarels #include <string.h> 2032381Sminshall 2132381Sminshall #include "ring.h" 2232145Sminshall #include "externs.h" 2332145Sminshall #include "defines.h" 2432145Sminshall 2532145Sminshall /* 2632145Sminshall * Initialize variables. 2732145Sminshall */ 2832145Sminshall void 2932145Sminshall tninit() 3032145Sminshall { 31*45008Skarels init_terminal(); 32*45008Skarels init_network(); 33*45008Skarels init_telnet(); 34*45008Skarels init_sys(); 35*45008Skarels init_3270(); 3632145Sminshall } 3732145Sminshall 38*45008Skarels int autologin; 3932145Sminshall 4032145Sminshall /* 4132145Sminshall * main. Parse arguments, invoke the protocol or command parser. 4232145Sminshall */ 4332145Sminshall main(argc, argv) 4432145Sminshall int argc; 4532145Sminshall char *argv[]; 4632145Sminshall { 47*45008Skarels extern char *optarg; 48*45008Skarels extern int optind; 49*45008Skarels int ch; 50*45008Skarels char *user; 5144361Sborman 52*45008Skarels tninit(); /* Clear out things */ 53*45008Skarels #ifdef CRAY 54*45008Skarels _setlist_init(); /* Work around compiler bug */ 5538689Sborman #endif 56*45008Skarels TerminalSaveState(); 5732145Sminshall 58*45008Skarels if (prompt = rindex(argv[0], '/')) 59*45008Skarels ++prompt; 60*45008Skarels else 61*45008Skarels prompt = argv[0]; 6232145Sminshall 63*45008Skarels user = NULL; 64*45008Skarels autologin = 0; 65*45008Skarels while ((ch = getopt(argc, argv, "ade:l:n:")) != EOF) 66*45008Skarels switch(ch) { 67*45008Skarels case 'a': 68*45008Skarels autologin = 1; 69*45008Skarels break; 70*45008Skarels case 'd': 71*45008Skarels debug = 1; 72*45008Skarels break; 73*45008Skarels case 'e': 74*45008Skarels set_escape_char(optarg); 75*45008Skarels break; 76*45008Skarels case 'l': 77*45008Skarels autologin = 1; 78*45008Skarels user = optarg; 79*45008Skarels break; 80*45008Skarels case 'n': 81*45008Skarels #if defined(TN3270) && defined(unix) 82*45008Skarels /* distinguish between "-n oasynch" and "-noasynch" */ 83*45008Skarels if (argv[optind - 1][0] == '-' && argv[optind - 1][1] 84*45008Skarels == 'n' && argv[optind - 1][2] == 'o') { 85*45008Skarels if (!strcmp(optarg, "oasynch")) { 86*45008Skarels noasynchtty = 1; 87*45008Skarels noasynchnet = 1; 88*45008Skarels } else if (!strcmp(optarg, "oasynchtty")) 89*45008Skarels noasynchtty = 1; 90*45008Skarels } else if (!strcmp(optarg, "oasynchnet")) 91*45008Skarels noasynchnet = 1; 92*45008Skarels } 93*45008Skarels } else 94*45008Skarels #endif /* defined(TN3270) && defined(unix) */ 95*45008Skarels SetNetTrace(optarg); 96*45008Skarels break; 97*45008Skarels #if defined(TN3270) && defined(unix) 98*45008Skarels case 't': 99*45008Skarels transcom = tline; 100*45008Skarels (void)strcpy(transcom, optarg); 101*45008Skarels break; 102*45008Skarels #endif 103*45008Skarels case '?': 104*45008Skarels default: 105*45008Skarels usage(); 106*45008Skarels /* NOTREACHED */ 10732145Sminshall } 108*45008Skarels argc -= optind; 109*45008Skarels argv += optind; 110*45008Skarels 111*45008Skarels if (argc) { 112*45008Skarels char *args[7], **argp = args; 113*45008Skarels 114*45008Skarels if (argc > 2) 115*45008Skarels usage(); 116*45008Skarels *argp++ = prompt; 117*45008Skarels if (user) { 118*45008Skarels *argp++ = "-l"; 119*45008Skarels *argp++ = user; 120*45008Skarels } 121*45008Skarels *argp++ = argv[0]; /* host */ 122*45008Skarels if (argc > 1) 123*45008Skarels *argp++ = argv[1]; /* port */ 124*45008Skarels *argp = 0; 125*45008Skarels 126*45008Skarels if (setjmp(toplevel) != 0) 127*45008Skarels Exit(0); 128*45008Skarels if (tn(argp - args, args) == 1) 129*45008Skarels return (0); 130*45008Skarels else 131*45008Skarels return (1); 13232145Sminshall } 133*45008Skarels (void)setjmp(toplevel); 134*45008Skarels for (;;) 135*45008Skarels #ifdef TN3270 136*45008Skarels if (shell_active) 137*45008Skarels shell_continue(); 138*45008Skarels else 139*45008Skarels #endif 140*45008Skarels command(1, 0, 0); 14132145Sminshall } 142*45008Skarels 143*45008Skarels usage() 144*45008Skarels { 145*45008Skarels fprintf(stderr, "usage: %s [-a] [ [-l user] host-name [port] ]\n", 146*45008Skarels prompt); 147*45008Skarels exit(1); 148*45008Skarels } 149