home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
pub
/
uniflex
/
ufkerm.uue
/
ufkerm.arc
/
UFSET.C
< prev
next >
Wrap
C/C++ Source or Header
|
1989-01-09
|
11KB
|
550 lines
#include "ufk.h"
TABLE set_table[] =
{
"debug", 1,
"escape", 2,
"line", 3,
"baud", 4,
"configuration", 5,
"timeout", 6,
"prompt", 7,
"filetype", 8,
"log", 9,
"duplex", 10,
"handshake", 11,
"block_check_type", 12,
"repeat_quote", 13,
"retry", 14,
"packet_length", 15,
"padding", 16,
"padchar", 17,
"start_of_packet", 18,
"end_of_line", 19,
"quote", 20,
"eight_bit_quote", 21,
"incomplete", 22,
"delay", 23,
"warning", 24,
"mapping", 25,
"auto_recover", 26,
"attributes", 27,
"", 0
};
set()
{
int fpoint;
fpoint = parse(params[1], set_table); /* Parse 'set' command */
if (fpoint == NULL) /* Ambiguous */
prterr(ER_AMBIGSET);
else if (fpoint == ERROR) /* Unknown */
prterr(ER_UNKNWSET);
else if (!synerr(3)) /* Dispatch to command if no error */
switch(fpoint)
{
case 1:
set_debug();
break;
case 2:
set_escape();
break;
case 3:
set_line();
break;
case 4:
set_baud(FALSE,0);
break;
case 5:
set_config();
break;
case 6:
set_timeout();
break;
case 7:
set_prompt();
break;
case 8:
set_filetype();
break;
case 9:
set_log();
break;
case 10:
set_dup();
break;
case 11:
set_hsh();
break;
case 12:
set_block_check_type();
break;
case 13:
set_repeat_quote();
break;
case 14:
set_retry();
break;
case 15:
set_packet_length();
break;
case 16:
set_padding();
break;
case 17:
set_padchar();
break;
case 18:
set_start_of_packet();
break;
case 19:
set_end_of_line();
break;
case 20:
set_quote();
break;
case 21:
set_eight_bit_quote();
break;
case 22:
set_incomplete();
break;
case 23:
set_delay();
break;
case 24:
set_warning();
break;
case 25:
set_mapping();
break;
case 26:
set_auto_recover();
break;
case 27:
set_attributes();
}
}
set_debug()
{
int temp;
if ((temp = set_onoff(2)) != ERROR)
{
debug = temp;
if (dbgfil != ERROR) /* Close file */
fclose(dbgfil);
dbgfil = ERROR;
}
else if (tolower(*params[2]) == 'l') /* Open debug log file */
{
if (numprm < 4)
prterr(ER_FSPCREQ);
else
if (dbgfil != ERROR)
prterr(ER_FILEOPEN);
else
{
strcpy(dbgfname,params[3]);
if ((dbgfil = fopen(params[3],"w")) == NULL)
prterr(ER_OPENERR);
else
debug = 2;
}
}
else
synerr(0);
}
set_escape()
{
escchr = *params[2]; /* Get escape character */
}
set_line()
{
char save_descr[20];
close_port(FALSE,TRUE); /* Make sure it's closed */
if (tolower(*params[2]) == 'r')
strcpy(tty_descr,"Remote"); /* Remote connection */
else
{
strcpy(save_descr,tty_descr); /* Save port */
strcpy(tty_descr,params[2]); /* Setup new port */
if (!open_port(FALSE,TRUE)) /* Check the port */
{
strcpy(tty_descr,save_descr); /* Restore old descriptor */
prterr(ER_INVDEV);
}
else
{
close_port(FALSE,TRUE); /* Make sure it's closed */
call_baud = TRUE; /* Make sure baudrate will be set */
}
}
}
set_baud(startup,argv)
int startup;
char *argv[];
{
int temp,
found,
*p;
static int v_speed[] = {
75,
150,
300,
600,
1200,
2400,
4800,
9600,
0 };
if (!strcmp(tty_descr,"Remote"))
{
prterr(ER_NOREMBD);
return(NULL);
}
p = v_speed;
if (startup)
temp = atoi(*argv++); /* Get speed value */
else
temp = atoi(params[2]); /* Get speed value */
found = FALSE;
while (*p) /* Do until end of table */
if (temp == *p++)
found = TRUE;
if (found)
{
if (!baud(tty_descr,temp))
speed = temp; /* Set new speed value */
else
prterr(ER_NOBAUD);
call_baud = FALSE; /* No need to call it anymore when opening line */
}
else
{
if (startup)
return(ERROR);
else
prterr(ER_INVBAUD);
}
return (NULL);
}
set_config()
{
int temp;
temp = atoi(params[2]); /* Get configuration */
if ((temp < 0) || (temp > 7)) /* Check range */
prterr(ER_ILLVALUE);
else
{
config = temp; /* Set new value */
close_port(FALSE,TRUE);
}
}
set_timeout()
{
int temp;
temp = atoi(params[2]); /* Get timeout value */
if ((temp <= 0) || (temp > 100)) /* Check range */
prterr(ER_ILLVALUE);
else
mytime = temp; /* Set new value */
}
set_prompt()
{
if (strlen(params[2]) > 20)
params[2][20] = '\0'; /* Truncate string */
strcpy(prompt, params[2]); /* Setup new prompt */
}
set_filetype()
{
char temp;
temp = tolower(*params[2]);
if (temp == 'a') /* ASCII */
image = FALSE;
else if (temp == 'b') /* BINARY */
image = TRUE;
else
synerr(0);
}
set_log()
{
if ((params[2][0] == '-') && logfileopen)
{ /* Close file */
fclose(lfp);
logfile[0] = '\0'; /* Zap filename */
logfileopen = logging = FALSE;
}
else
{
if (logfileopen)
prterr(ER_FILEOPEN);
else
{
if (strlen(params[2]) > 80)
params[2][80] = '\0'; /* Truncate string */
strcpy(logfile,params[2]);
if ((lfp = fopen(logfile, "w")) == NULL)
{
prterr(ER_OPENERR);
logfile[0] = '\0'; /* Zap filename */
logfileopen = logging = FALSE;
}
else
{
logfileopen = TRUE;
setbuf(lfp,0);
}
}
}
}
set_dup()
{
char ch;
ch = tolower(*params[2]);
if (ch == 'f')
fulldup = TRUE;
else if (ch == 'h')
fulldup = FALSE;
else
synerr(0);
}
set_hsh()
{
char start_tmp, stop_tmp;
if (!synerr(4)) /* Be sure there are enough parameters */
{
start_tmp = atoi(params[2]); /* Set data start character */
stop_tmp = atoi(params[3]); /* Set data stop character */
if ((start_tmp < 0) || (start_tmp > 127)
|| (stop_tmp < 0) || (stop_tmp > 127))
prterr(ER_ILLVALUE);
else
dstart = start_tmp;
dstop = stop_tmp;
}
}
set_quote()
{
char c;
if (check_quote(c = *params[2]))
{
if ((c != myeightquote) && (c != myrptquote))
myquote = c;
else
prterr(ER_CHRINUSE);
}
}
set_eight_bit_quote()
{
char c;
if (toupper(c = *params[2]) == 'N')
myeightquote = 0; /* No eight bit quoting done */
else if (check_quote(c))
{
if ((c != myquote) && (c != myrptquote))
myeightquote = c;
else
prterr(ER_CHRINUSE);
}
}
set_repeat_quote()
{
char c;
if (toupper(c = *params[2]) == 'N')
myrptquote = 0; /* No repeat quoting done */
else if (check_quote(c))
{
if ((c != myquote) && (c != myeightquote))
myrptquote = c;
else
prterr(ER_CHRINUSE);
}
}
set_packet_length()
{
int size;
size = atoi(params[2]);
if ((size < 10) || (size > BIG_SIZE - 8))
prterr(ER_INVLENG);
else
maxpacksiz = size;
}
set_padding()
{
int ptmp;
ptmp = atoi(params[2]);
if (ptmp > 94)
prterr(ER_VALOUTRN);
else
mypad = ptmp;
}
set_padchar()
{
int ptmp;
sscanf(params[2], "%x", &ptmp);
mypchar = ptmp;
}
set_retry()
{
maxtry = atoi(params[2]);
}
set_end_of_line()
{
int etmp;
sscanf(params[2], "%x", &etmp);
if (etmp == mypackstart)
prterr(ER_EOLDIF);
else
myeol = etmp;
}
set_start_of_packet()
{
int ptmp;
sscanf(params[2], "%x", &ptmp);
if (ptmp == myeol)
prterr(ER_STRTDIF);
else
mypackstart = ptmp;
}
set_block_check_type()
{
char c;
c = atoi(params[2]);
if ((c >= 1) && (c <= 3))
myblock_check_type = c;
else
prterr(ER_INVCHK);
}
set_incomplete()
{
char c;
c = toupper(*params[2]);
if (c == 'K')
save_file = TRUE; /* Keep file */
else if (c == 'D')
save_file = FALSE; /* Discard file */
else
synerr(0);
}
set_delay()
{
send_delay = atoi(params[2]);
}
set_warning()
{
int temp;
temp = set_onoff(2);
if (temp != ERROR)
warning = temp;
else
synerr(0);
}
set_mapping()
{
int temp;
temp = set_onoff(2);
if (temp != ERROR)
mapping = temp;
else
synerr(0);
}
set_autorecover()
{
int temp;
temp = set_onoff(2);
if (temp != ERROR)
auto_recover = temp;
else
synerr(0);
}
set_attributes()
{
int temp;
temp = set_onoff(2);
if (temp != ERROR)
allowattr = temp;
else
synerr(0);
}
check_quote(qchar)
char qchar;
{
if (((qchar >= '!') && (qchar <= '>')) ||
((qchar >= '{') && (qchar <= '~')) ||
(qchar == '`'))
return (TRUE); /* Valid character */
else
{
prterr(ER_INVCHAR);
return (FALSE); /* Invalid character */
}
}
set_onoff(i)
int i;
{
make_lower(params[i]);
if (strcmp(params[i], "on") == 0)
return TRUE;
else
if ((strcmp(params[i], "of") == 0) ||
(strcmp(params[i], "off") == 0))
return FALSE;
else return ERROR;
}