xref: /csrg-svn/usr.bin/telnet/main.c (revision 45008)
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