xref: /csrg-svn/usr.bin/telnet/main.c (revision 44361)
133685Sbostic /*
233685Sbostic  * Copyright (c) 1988 Regents of the University of California.
333685Sbostic  * All rights reserved.
433685Sbostic  *
542770Sbostic  * %sccs.include.redist.c%
633685Sbostic  */
733685Sbostic 
833685Sbostic #ifndef lint
933685Sbostic char copyright[] =
1033685Sbostic "@(#) Copyright (c) 1988 Regents of the University of California.\n\
1133685Sbostic  All rights reserved.\n";
1233685Sbostic #endif /* not lint */
1333685Sbostic 
1433685Sbostic #ifndef lint
15*44361Sborman static char sccsid[] = "@(#)main.c	1.14 (Berkeley) 06/28/90";
1633685Sbostic #endif /* not lint */
1733685Sbostic 
1832381Sminshall #include <sys/types.h>
1932381Sminshall 
2032381Sminshall #include "ring.h"
2132381Sminshall 
2232145Sminshall #include "externs.h"
2332145Sminshall #include "defines.h"
2432145Sminshall 
2532145Sminshall /*
2632145Sminshall  * Initialize variables.
2732145Sminshall  */
2832145Sminshall 
2932145Sminshall void
3032145Sminshall tninit()
3132145Sminshall {
3232145Sminshall     init_terminal();
3332145Sminshall 
3432145Sminshall     init_network();
3532145Sminshall 
3632145Sminshall     init_telnet();
3732531Sminshall 
3832531Sminshall     init_sys();
3934302Sminshall 
4034302Sminshall     init_3270();
4132145Sminshall }
4232145Sminshall 
4332145Sminshall 
4432145Sminshall /*
4532145Sminshall  * main.  Parse arguments, invoke the protocol or command parser.
4632145Sminshall  */
4732145Sminshall 
4832145Sminshall 
4934849Sminshall int
5032145Sminshall main(argc, argv)
5132145Sminshall 	int argc;
5232145Sminshall 	char *argv[];
5332145Sminshall {
54*44361Sborman     char *user = 0;
55*44361Sborman 
5632145Sminshall     tninit();		/* Clear out things */
5738689Sborman #ifdef	CRAY
5838689Sborman     _setlist_init();	/* Work around compiler bug */
5938689Sborman #endif
6032145Sminshall 
6132145Sminshall     TerminalSaveState();
6232145Sminshall 
63*44361Sborman     prompt = argv[0];
6432145Sminshall     while ((argc > 1) && (argv[1][0] == '-')) {
6532145Sminshall 	if (!strcmp(argv[1], "-d")) {
6632145Sminshall 	    debug = 1;
6732145Sminshall 	} else if (!strcmp(argv[1], "-n")) {
6832145Sminshall 	    if ((argc > 1) && (argv[2][0] != '-')) {	/* get file name */
6938689Sborman 		SetNetTrace(argv[2]);
7032145Sminshall 		argv++;
7132145Sminshall 		argc--;
7232145Sminshall 	    }
73*44361Sborman 	} else if (!strcmp(argv[1], "-l")) {
74*44361Sborman 	    if ((argc > 1) && (argv[2][0] != '-')) {	/* get user name */
75*44361Sborman 		user = argv[2];
76*44361Sborman 		argv++;
77*44361Sborman 		argc--;
78*44361Sborman 	    }
79*44361Sborman 	} else if (!strncmp(argv[1], "-e", 2)) {
80*44361Sborman 		set_escape_char(&argv[1][2]);
8132145Sminshall 	} else {
8232145Sminshall #if	defined(TN3270) && defined(unix)
8332145Sminshall 	    if (!strcmp(argv[1], "-t")) {
8432145Sminshall 		if ((argc > 1) && (argv[2][0] != '-')) { /* get file name */
8532145Sminshall 		    transcom = tline;
8635717Smckusick 		    (void) strcpy(transcom, argv[2]);
8732145Sminshall 		    argv++;
8832145Sminshall 		    argc--;
8932145Sminshall 		}
9032145Sminshall 	    } else if (!strcmp(argv[1], "-noasynch")) {
9136242Sminshall 		noasynchtty = 1;
9236242Sminshall 		noasynchnet = 1;
9336242Sminshall 	    } else if (!strcmp(argv[1], "-noasynchtty")) {
9436242Sminshall 		noasynchtty = 1;
9536242Sminshall 	    } else if (!strcmp(argv[1], "-noasynchnet")) {
9636242Sminshall 		noasynchnet = 1;
9732145Sminshall 	    } else
9832145Sminshall #endif	/* defined(TN3270) && defined(unix) */
9932145Sminshall 	    if (argv[1][1] != '\0') {
10032145Sminshall 		fprintf(stderr, "Unknown option *%s*.\n", argv[1]);
10132145Sminshall 	    }
10232145Sminshall 	}
10332145Sminshall 	argc--;
10432145Sminshall 	argv++;
10532145Sminshall     }
10632145Sminshall     if (argc != 1) {
10732145Sminshall 	if (setjmp(toplevel) != 0)
10832145Sminshall 	    Exit(0);
109*44361Sborman 	if (user) {
110*44361Sborman 	    argc += 2;
111*44361Sborman 	    argv -= 2;
112*44361Sborman 	    argv[0] = argv[2];
113*44361Sborman 	    argv[1] = "-l";
114*44361Sborman 	    argv[2] = user;
115*44361Sborman 	}
11634849Sminshall 	if (tn(argc, argv) == 1) {
11734849Sminshall 	    return 0;
11834849Sminshall 	} else {
11934849Sminshall 	    return 1;
12034849Sminshall 	}
12132145Sminshall     }
12234849Sminshall     (void) setjmp(toplevel);
12332145Sminshall     for (;;) {
12432145Sminshall #if	!defined(TN3270)
12538689Sborman 	command(1, 0, 0);
12632145Sminshall #else	/* !defined(TN3270) */
12732145Sminshall 	if (!shell_active) {
12838689Sborman 	    command(1, 0, 0);
12932145Sminshall 	} else {
13032145Sminshall #if	defined(TN3270)
13132145Sminshall 	    shell_continue();
13232145Sminshall #endif	/* defined(TN3270) */
13332145Sminshall 	}
13432145Sminshall #endif	/* !defined(TN3270) */
13532145Sminshall     }
13632145Sminshall }
137