home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GRIPS 2: Government Rast…rocessing Software & Data
/
GRIPS_2.cdr
/
dos
/
ncsa_tel
/
tel_2_2_
/
source
/
minitel.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-07-15
|
2KB
|
125 lines
/*
* minitel
* Example TCP/IP program for the NCSA TCP/IP kernel
*/
#include "stdio.h"
#include "whatami.h"
#include "hostform.h"
struct machinfo *mp;
char *neterrstring(),buf[256];
main(argc,argv)
int argc;
char *argv[];
{
int i,cnt,ev,pnum,what,dat;
char *errmsg;
char c;
puts("National Center for Supercomputing Applications");
puts("Mini-telnet example program");
puts("July 1987\n");
if (argc < 2)
exit(1);
if (Snetinit()) { /* call session initialization */
errhandle(); /* Snetinit() reads config.tel file */
exit(1);
}
mp = Sgethost(argv[1]); /* look up in hosts cache */
if (!mp)
Sdomain(argv[1]); /* not in hosts, try domain */
else {
if (0 > (pnum = Snetopen(mp,23))) {
errhandle();
netshut();
exit(1);
}
}
c = 0;
do {
if (kbhit()) { /* has key been pressed */
c = getch();
netwrite(pnum,&c,1); /* user input sent on connection */
}
/*
* get event from network, these two classes return all of the events
* of user interest.
*/
ev = Sgetevent(USERCLASS | CONCLASS | ERRCLASS,&what,&dat);
if (!ev)
continue;
if (what == ERRCLASS) { /* error event */
errmsg = neterrstring(dat);
puts(errmsg);
}
else if (what == CONCLASS) { /* event of user interest */
switch (ev) {
case CONOPEN: /* connection opened or closed */
netpush(dat); /* negotiation */
netwrite(dat,"\377\375\001\377\375\003\377\374\030",9);
break;
default:
break;
case CONDATA: /* data arrived for me */
cnt = netread(dat,buf,80);
for (i=0; i<cnt; i++)
if (buf[i] < 128)
putchar(buf[i]);
break;
case CONFAIL:
puts("Connection attempt failed");
/* drop through to exit */
case CONCLOSE:
netshut();
exit(1);
}
}
else if (what == USERCLASS) {
switch (ev) {
case DOMOK: /* domain worked */
mp = Slooknum(dat); /* get machine info */
pnum = Snetopen(mp,23); /* open to host name */
break;
case DOMFAIL: /* domain failed */
n_puts("domain failed");
netshut();
exit(1);
default:
break;
}
}
} while (c != 16); /* Ctrl-P, arbitrary escape */
netclose(pnum);
netshut();
exit(0);
}
/*********************************************************************/
/* errhandle
* write error messages to the console window
*/
errhandle()
{
char *errmsg;
int i,j;
while (ERR1 == Sgetevent(ERRCLASS,&i,&j)) {
errmsg = neterrstring(j);
puts(errmsg);
}
}