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*45233Sborman static char sccsid[] = "@(#)main.c 5.1 (Berkeley) 09/14/90"; 1633685Sbostic #endif /* not lint */ 1733685Sbostic 1832381Sminshall #include <sys/types.h> 19*45233Sborman #if defined(unix) 20*45233Sborman #include <strings.h> 21*45233Sborman #else /* defined(unix) */ 2245008Skarels #include <string.h> 23*45233Sborman #endif /* defined(unix) */ 2432381Sminshall 2532381Sminshall #include "ring.h" 2632145Sminshall #include "externs.h" 2732145Sminshall #include "defines.h" 2832145Sminshall 2932145Sminshall /* 3032145Sminshall * Initialize variables. 3132145Sminshall */ 3232145Sminshall void 3332145Sminshall tninit() 3432145Sminshall { 35*45233Sborman init_terminal(); 36*45233Sborman 37*45233Sborman init_network(); 38*45233Sborman 39*45233Sborman init_telnet(); 40*45233Sborman 41*45233Sborman init_sys(); 42*45233Sborman 43*45233Sborman #if defined(TN3270) 44*45233Sborman init_3270(); 45*45233Sborman #endif 4632145Sminshall } 4732145Sminshall 4845008Skarels int autologin; 4932145Sminshall 5032145Sminshall /* 5132145Sminshall * main. Parse arguments, invoke the protocol or command parser. 5232145Sminshall */ 53*45233Sborman 54*45233Sborman 5532145Sminshall main(argc, argv) 5632145Sminshall int argc; 5732145Sminshall char *argv[]; 5832145Sminshall { 5945008Skarels extern char *optarg; 6045008Skarels extern int optind; 6145008Skarels int ch; 62*45233Sborman char *user, *strrchr(); 6344361Sborman 6445008Skarels tninit(); /* Clear out things */ 65*45233Sborman #if defined(CRAY) && !defined(__STDC__) 6645008Skarels _setlist_init(); /* Work around compiler bug */ 6738689Sborman #endif 68*45233Sborman 6945008Skarels TerminalSaveState(); 7032145Sminshall 71*45233Sborman if (prompt = strrchr(argv[0], '/')) 7245008Skarels ++prompt; 7345008Skarels else 7445008Skarels prompt = argv[0]; 7532145Sminshall 7645008Skarels user = NULL; 7745008Skarels autologin = 0; 78*45233Sborman while ((ch = getopt(argc, argv, "ade:l:n:")) != EOF) { 7945008Skarels switch(ch) { 8045008Skarels case 'a': 8145008Skarels autologin = 1; 8245008Skarels break; 8345008Skarels case 'd': 8445008Skarels debug = 1; 8545008Skarels break; 8645008Skarels case 'e': 8745008Skarels set_escape_char(optarg); 8845008Skarels break; 8945008Skarels case 'l': 9045008Skarels autologin = 1; 9145008Skarels user = optarg; 9245008Skarels break; 9345008Skarels case 'n': 9445008Skarels #if defined(TN3270) && defined(unix) 9545008Skarels /* distinguish between "-n oasynch" and "-noasynch" */ 9645008Skarels if (argv[optind - 1][0] == '-' && argv[optind - 1][1] 9745008Skarels == 'n' && argv[optind - 1][2] == 'o') { 9845008Skarels if (!strcmp(optarg, "oasynch")) { 9945008Skarels noasynchtty = 1; 10045008Skarels noasynchnet = 1; 10145008Skarels } else if (!strcmp(optarg, "oasynchtty")) 10245008Skarels noasynchtty = 1; 103*45233Sborman else if (!strcmp(optarg, "oasynchnet")) 10445008Skarels noasynchnet = 1; 10545008Skarels } else 10645008Skarels #endif /* defined(TN3270) && defined(unix) */ 10745008Skarels SetNetTrace(optarg); 10845008Skarels break; 10945008Skarels #if defined(TN3270) && defined(unix) 11045008Skarels case 't': 11145008Skarels transcom = tline; 11245008Skarels (void)strcpy(transcom, optarg); 11345008Skarels break; 11445008Skarels #endif 11545008Skarels case '?': 11645008Skarels default: 11745008Skarels usage(); 11845008Skarels /* NOTREACHED */ 11932145Sminshall } 120*45233Sborman } 12145008Skarels argc -= optind; 12245008Skarels argv += optind; 12345008Skarels 12445008Skarels if (argc) { 12545008Skarels char *args[7], **argp = args; 12645008Skarels 12745008Skarels if (argc > 2) 12845008Skarels usage(); 12945008Skarels *argp++ = prompt; 13045008Skarels if (user) { 13145008Skarels *argp++ = "-l"; 13245008Skarels *argp++ = user; 13345008Skarels } 13445008Skarels *argp++ = argv[0]; /* host */ 13545008Skarels if (argc > 1) 13645008Skarels *argp++ = argv[1]; /* port */ 13745008Skarels *argp = 0; 13845008Skarels 13945008Skarels if (setjmp(toplevel) != 0) 14045008Skarels Exit(0); 14145008Skarels if (tn(argp - args, args) == 1) 14245008Skarels return (0); 14345008Skarels else 14445008Skarels return (1); 14532145Sminshall } 14645008Skarels (void)setjmp(toplevel); 147*45233Sborman for (;;) { 14845008Skarels #ifdef TN3270 14945008Skarels if (shell_active) 15045008Skarels shell_continue(); 15145008Skarels else 15245008Skarels #endif 15345008Skarels command(1, 0, 0); 154*45233Sborman } 15532145Sminshall } 15645008Skarels 15745008Skarels usage() 15845008Skarels { 15945008Skarels fprintf(stderr, "usage: %s [-a] [ [-l user] host-name [port] ]\n", 16045008Skarels prompt); 16145008Skarels exit(1); 16245008Skarels } 163