home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
convergent
/
ctconu.c
< prev
next >
Wrap
C/C++ Source or Header
|
2020-01-01
|
6KB
|
312 lines
char *connv = "Connect functions CTOS Version-1.00, Summer 1987";
/* C K C O N U -- Terminal connection to remote system */
/* modified for CTOS C2.0 by Joel Dunn, UNC-CH, October 1986 */
#include "ctermi.h"
extern int local, speed, escape, duplex, parity, flow, seslog, mdmtyp,
termtype;
extern char ttname[], sesfil[];
/* Variables global to this module */
int c; /* c is a character, but must be signed
integer to pass thru -1, which is the
modem disconnection signal, and is
different from the character 0377 */
int i, active;
char *chstr();
/* C O N E C T -- Perform terminal connection */
conect() {
int n;
char errmsg[50], *erp;
if (!local) {
printf("Sorry, you must 'set line' first\n");
return(-2);
}
if (speed < 0) {
printf("Sorry, you must 'set speed' first\n");
return(-2);
}
if ((escape < 0) || (escape > 0177)) {
printf("Your escape character is not ASCII - %d\n",escape);
return(-2);
}
if (ttopen(ttname,local,mdmtyp) < 0) {
erp = errmsg;
sprintf(erp,"Sorry, can't open %s",ttname);
perror(errmsg);
return(-2);
}
printf("\nConnecting thru %s, speed %d.\r\n",ttname,speed);
printf("The local escape character is %s (%d).\r\n",chstr(escape),escape);
printf("Type the local escape character followed by C to get back,\r\n");
printf("or followed by ? to see other options.\r\n");
if (seslog) printf("(Session logged to %s.)\r\n",sesfil);
/* Condition console terminal and communication line */
if (conbin(escape) < 0) {
printf("Sorry, can't condition console terminal\n");
return(-2);
}
if (ttvt(speed,flow) < 0) {
conres();
printf("Sorry, Can't condition communication line\n");
return(-2);
}
/* Select connect function based on terminal type */
switch (termtype)
{
case 0: /* TTY */
contty();
return(0);
case 1: /* VT100, routines in ckvt100.c */
convt100();
return(0);
default: /* other value */
printf("\n\nInvalid terminal type.\n\n");
return(-2);
}
}
/* C O N T T Y -- Connect in TTY mode */
contty()
{
printf("\n\nConnected in TTY Emulation Mode\n");
active = 1;
while (((c = ttinc(0)) >= 0) & active)
{
/* read, prints port input */
if (c > 0)
{
c &= 0177; /* Got a char, strip parity. */
conoc(c); /* Put it on the screen. */
if (seslog) zchout(ZSFILE,c); /* If logging, log it. */
}
/* read, prints keyboard input */
c = coninc(0) & 0177;
if (c == escape)
{ /* Look for escape char */
c = coninc(9999) & 0177;
doesc(c);
}
else if (c > 0)
{ /* Ordinary character */
ttoc(dopar(c)); /* Send with desired parity */
if (duplex) { /* Half duplex? */
conoc(c); /* Yes, echo it. */
/* And maybe log it. */
if (seslog) zchout(ZSFILE,c);
}
}
}
if (c < 0)
{ /* Comm line hangup detected*/
printf("\r\nCommunications line failure\r\n");
}
conres(); /* Reset the console. */
printf("\nTTY Emulation Disconnected\n");
return(0);
}
/* H C O N N E -- Give help message for connect. */
hconne() {
int c;
static char *hlpmsg[] = {"\
\r\nC to close the connection, or:",
"\r\n S for status",
"\r\n ? for help",
"\r\n B to send a BREAK",
"\r\n 0 to send a null",
"\r\n escape character twice to send the escape character.\r\n\r\n",
"" };
conola(hlpmsg); /* Print the help message. */
conol("Command>"); /* Prompt for command. */
c = coninc(9999);
conoc(c); /* Echo it. */
conoll("");
c &= 0177; /* Strip any parity. */
return(c); /* Return it. */
}
/* C H S T R -- Make a printable string out of control key */
static char *
chstr(c) int c; {
static char s[15];
char *cp = s;
switch (c)
{
case 0:
sprintf(cp,"HELP");
break;
case 1:
sprintf(cp,"'up arrow'");
break;
case 2:
sprintf(cp,"MARK");
break;
case 4:
sprintf(cp,"FINISH");
break;
case 5:
sprintf(cp,"PREV PAGE");
break;
case 7:
sprintf(cp,"CANCEL");
break;
case 8:
sprintf(cp,"BACKSPACE");
break;
case 9:
sprintf(cp,"TAB");
break;
case 10:
sprintf(cp,"BOUND");
break;
case 11:
sprintf(cp,"'down arrow'");
break;
case 12:
sprintf(cp,"NEXT PAGE");
break;
case 13:
sprintf(cp,"RETURN/NEXT");
break;
case 14:
sprintf(cp,"'left arrow'");
break;
case 15:
sprintf(cp,"MOVE");
break;
case 17:
sprintf(cp,"SCROLL UP");
break;
case 18:
sprintf(cp,"'right arrow'");
break;
case 19:
sprintf(cp,"SCROLL DOWN");
break;
case 20:
sprintf(cp,"COPY");
break;
case 21:
sprintf(cp,"F1");
break;
case 22:
sprintf(cp,"F2");
break;
case 23:
sprintf(cp,"F3");
break;
case 24:
sprintf(cp,"F4");
break;
case 25:
sprintf(cp,"F5");
break;
case 26:
sprintf(cp,"F6");
break;
case 27:
sprintf(cp,"GO");
break;
case 28:
sprintf(cp,"F7");
break;
case 29:
sprintf(cp,"F8");
break;
case 30:
sprintf(cp,"F9");
break;
case 31:
sprintf(cp,"F10");
break;
default:
s[0] = c;
s[1] = '\0';
break;
}
cp = s;
return(cp);
}
/* D O E S C -- Process an escape character argument */
doesc(c) char c; {
int d;
c &= 0177;
while (1) {
if (c == escape) { /* Send escape character */
d = dopar(c);
ttoc(d);
return;
} else /* Or else look it up below. */
if (isupper(c)) c = tolower(c);
switch (c) {
case 'c': /* Close connection */
case '\03':
active = 0;
conol("\r\n");
return;
case 'b': /* Send a BREAK */
case '\02':
ttsndb();
return;
case 's': /* Status */
case '\023':
conol("\r\nConnected thru ");
conoll(ttname);
if (seslog) {
conol(", logging to ");
conol(sesfil);
}
return;
case '?': /* Help */
c = hconne();
continue;
case '0': /* Send a null */
c = '\0';
d = dopar(c);
ttoc(d);
return;
case SP: /* Space, ignore */
return;
default: /* Other */
conoc(BEL); /* Invalid esc arg, beep */
return;
}
}
}