xref: /csrg-svn/usr.bin/telnet/main.c (revision 34849)
133685Sbostic /*
233685Sbostic  * Copyright (c) 1988 Regents of the University of California.
333685Sbostic  * All rights reserved.
433685Sbostic  *
533685Sbostic  * Redistribution and use in source and binary forms are permitted
633685Sbostic  * provided that this notice is preserved and that due credit is given
733685Sbostic  * to the University of California at Berkeley. The name of the University
833685Sbostic  * may not be used to endorse or promote products derived from this
933685Sbostic  * software without specific prior written permission. This software
1033685Sbostic  * is provided ``as is'' without express or implied warranty.
1133685Sbostic  */
1233685Sbostic 
1333685Sbostic #ifndef lint
1433685Sbostic char copyright[] =
1533685Sbostic "@(#) Copyright (c) 1988 Regents of the University of California.\n\
1633685Sbostic  All rights reserved.\n";
1733685Sbostic #endif /* not lint */
1833685Sbostic 
1933685Sbostic #ifndef lint
20*34849Sminshall static char sccsid[] = "@(#)main.c	1.7 (Berkeley) 06/27/88";
2133685Sbostic #endif /* not lint */
2233685Sbostic 
2332381Sminshall #include <sys/types.h>
2432381Sminshall 
2532381Sminshall #include "ring.h"
2632381Sminshall 
2732145Sminshall #include "externs.h"
2832145Sminshall #include "defines.h"
2932145Sminshall 
3032145Sminshall /*
3132145Sminshall  * Initialize variables.
3232145Sminshall  */
3332145Sminshall 
3432145Sminshall void
3532145Sminshall tninit()
3632145Sminshall {
3732145Sminshall     init_terminal();
3832145Sminshall 
3932145Sminshall     init_network();
4032145Sminshall 
4132145Sminshall     init_telnet();
4232531Sminshall 
4332531Sminshall     init_sys();
4434302Sminshall 
4534302Sminshall     init_3270();
4632145Sminshall }
4732145Sminshall 
4832145Sminshall 
4932145Sminshall /*
5032145Sminshall  * main.  Parse arguments, invoke the protocol or command parser.
5132145Sminshall  */
5232145Sminshall 
5332145Sminshall 
54*34849Sminshall int
5532145Sminshall main(argc, argv)
5632145Sminshall 	int argc;
5732145Sminshall 	char *argv[];
5832145Sminshall {
5932145Sminshall     tninit();		/* Clear out things */
6032145Sminshall 
6132145Sminshall     TerminalSaveState();
6232145Sminshall 
6332145Sminshall     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 */
6932145Sminshall 		NetTrace = fopen(argv[2], "w");
7032145Sminshall 		argv++;
7132145Sminshall 		argc--;
7232145Sminshall 		if (NetTrace == NULL) {
7332145Sminshall 		    NetTrace = stdout;
7432145Sminshall 		}
7532145Sminshall 	    }
7632145Sminshall 	} else {
7732145Sminshall #if	defined(TN3270) && defined(unix)
7832145Sminshall 	    if (!strcmp(argv[1], "-t")) {
7932145Sminshall 		if ((argc > 1) && (argv[2][0] != '-')) { /* get file name */
8032145Sminshall 		    transcom = tline;
8132145Sminshall 		    (void) strcpy(transcom, argv[1]);
8232145Sminshall 		    argv++;
8332145Sminshall 		    argc--;
8432145Sminshall 		}
8532145Sminshall 	    } else if (!strcmp(argv[1], "-noasynch")) {
8632145Sminshall 		noasynch = 1;
8732145Sminshall 	    } else
8832145Sminshall #endif	/* defined(TN3270) && defined(unix) */
8932145Sminshall 	    if (argv[1][1] != '\0') {
9032145Sminshall 		fprintf(stderr, "Unknown option *%s*.\n", argv[1]);
9132145Sminshall 	    }
9232145Sminshall 	}
9332145Sminshall 	argc--;
9432145Sminshall 	argv++;
9532145Sminshall     }
9632145Sminshall     if (argc != 1) {
9732145Sminshall 	if (setjmp(toplevel) != 0)
9832145Sminshall 	    Exit(0);
99*34849Sminshall 	if (tn(argc, argv) == 1) {
100*34849Sminshall 	    return 0;
101*34849Sminshall 	} else {
102*34849Sminshall 	    return 1;
103*34849Sminshall 	}
10432145Sminshall     }
105*34849Sminshall     (void) setjmp(toplevel);
10632145Sminshall     for (;;) {
10732145Sminshall #if	!defined(TN3270)
10832145Sminshall 	command(1);
10932145Sminshall #else	/* !defined(TN3270) */
11032145Sminshall 	if (!shell_active) {
11132145Sminshall 	    command(1);
11232145Sminshall 	} else {
11332145Sminshall #if	defined(TN3270)
11432145Sminshall 	    shell_continue();
11532145Sminshall #endif	/* defined(TN3270) */
11632145Sminshall 	}
11732145Sminshall #endif	/* !defined(TN3270) */
11832145Sminshall     }
11932145Sminshall }
120