home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 2 BBS
/
02-BBS.zip
/
BTMTSRC3.ZIP
/
BTCONFIG.C
< prev
next >
Wrap
Text File
|
1991-10-17
|
27KB
|
1,096 lines
/*--------------------------------------------------------------------------*/
/* */
/* */
/* ------------ Bit-Bucket Software, Co. */
/* \ 10001101 / Writers and Distributors of */
/* \ 011110 / Freely Available<tm> Software. */
/* \ 1011 / */
/* ------ */
/* */
/* (C) Copyright 1987-90, Bit Bucket Software Co., a Delaware Corporation. */
/* */
/* */
/* This module was written by Vince Perriello */
/* */
/* */
/* BinkleyTerm Configuration File Parser */
/* */
/* */
/* For complete details of the licensing restrictions, please refer */
/* to the License agreement, which is published in its entirety in */
/* the MAKEFILE and BT.C, and also contained in the file LICENSE.240. */
/* */
/* USE OF THIS FILE IS SUBJECT TO THE RESTRICTIONS CONTAINED IN THE */
/* BINKLEYTERM LICENSING AGREEMENT. IF YOU DO NOT FIND THE TEXT OF */
/* THIS AGREEMENT IN ANY OF THE AFOREMENTIONED FILES, OR IF YOU DO */
/* NOT HAVE THESE FILES, YOU SHOULD IMMEDIATELY CONTACT BIT BUCKET */
/* SOFTWARE CO. AT ONE OF THE ADDRESSES LISTED BELOW. IN NO EVENT */
/* SHOULD YOU PROCEED TO USE THIS FILE WITHOUT HAVING ACCEPTED THE */
/* TERMS OF THE BINKLEYTERM LICENSING AGREEMENT, OR SUCH OTHER */
/* AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO. */
/* */
/* */
/* You can contact Bit Bucket Software Co. at any one of the following */
/* addresses: */
/* */
/* Bit Bucket Software Co. FidoNet 1:104/501, 1:132/491, 1:141/491 */
/* P.O. Box 460398 AlterNet 7:491/0 */
/* Aurora, CO 80046 BBS-Net 86:2030/1 */
/* Internet f491.n132.z1.fidonet.org */
/* */
/* Please feel free to contact us at any time to share your comments about */
/* our software and/or licensing policies. */
/* */
/*--------------------------------------------------------------------------*/
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <dos.h>
#include <sys\types.h>
#include <sys\stat.h>
#ifdef OS_2
#define INCL_DOS
#include <os2.h>
#endif
#ifdef __TURBOC__
#include <dir.h>
#include <alloc.h>
#else
#include <malloc.h>
#endif
#include "com.h"
#include "xfer.h"
#include "zmodem.h"
#include "keybd.h"
#include "sbuf.h"
#include "sched.h"
#include "externs.h"
#include "prototyp.h"
static char *ctl_slash_string (char *);
static int Zone = 1;
void parse_config (config_file)
char *config_file;
{
FILE *stream;
char temp[256];
#ifdef Snoop
char temp2[80];
#endif
char *c;
int i;
unsigned temp_num;
char *p, *p1, *p2;
PN_TRNS *tpn;
MDM_TRNS *tmm;
J_TYPES *tjt;
(void) sprintf (temp, "%s%s", BINKpath, config_file);
if ((stream = fopen (temp, "rt")) == NULL) /* OK, let's open the file */
return; /* no file, no work to do */
while ((fgets (temp, 255, stream)) != NULL) /* Now we parse the file ... */
{
c = temp; /* Check out the first char */
if ((*c == '%') || (*c == ';')) /* See if it's a comment
* line */
continue;
i = (int) strlen (temp); /* how long this line is */
if (i < 3)
continue; /* If too short, ignore it */
c = &temp[--i]; /* point at last character */
if (*c == '\n') /* if it's a newline, */
*c = '\0'; /* strip it off */
switch (parse (temp, config_lines))
{
case 1: /* "SameRing" */
modemring = 1;
break;
case 2: /* "NewNodeList" */
newnodelist = 1;
break;
case 3: /* "QuickNodeList" */
nodefunc = QuickLookup;
break;
case 4: /* "Answerback" */
answerback = ctl_string (&temp[10]);
break;
case 5: /* "Macro" */
c = skip_blanks (&temp[5]);
i = atoi (c);
if ((i <= 0) || (i > 9))
{
(void) printf ("%s %d %s\n", msgtxt[M_MACRO_NUMBER], i, msgtxt[M_OUT_OF_RANGE]);
break;
}
c = skip_to_blank (c);
c = skip_blanks (c);
keys[i - 1] = malloc (strlen (c) + 1);
p = keys[i - 1];
while (*c && (*c != '\n'))
{
if (*c == '|')
*p++ = '\r';
else *p++ = *c;
++c;
}
*p = '\0';
break;
case 6: /* "Shell" */
c = skip_blanks (&temp[5]);
i = atoi (c);
if ((i <= 0) || (i > 9))
{
(void) printf ("%s %d %s\n", msgtxt[M_SHELL_NUMBER], i, msgtxt[M_OUT_OF_RANGE]);
break;
}
c = skip_to_blank (c);
c = skip_blanks (c);
shells[i - 1] = malloc (strlen (c) + 1);
(void) strcpy (shells[i - 1], c);
(void) strupr (shells[i - 1]);
break;
case 7: /* "Dial" */
p = &temp[4];
while ((*p) && (isspace (*p)))
++p;
if ((*p == ';') || (*p == '\0'))
{
break;
}
tpn = (PN_TRNS *) malloc (sizeof (PN_TRNS));
p1 = tpn->num;
while ((*p) && (!isspace (*p)))
{
*p1++ = *p++;
}
*p1 = '\0';
while ((*p) && (isspace (*p)))
{
++p;
}
p1 = tpn->pre;
while ((*p) && (*p != '/') && (!isspace (*p)))
{
*p1++ = *p++;
}
*p1 = '\0';
p1 = tpn->suf;
if ((*p == '\0') || (isspace (*p)))
{
*p1 = '\0';
}
else
{
++p;
while ((*p) && (!isspace (*p)))
{
*p1++ = *p++;
}
*p1 = '\0';
}
tpn->len = (int) strlen (tpn->num);
tpn->next = NULL;
if (pn_head == NULL)
{
pn_head = tpn;
}
else
{
pn->next = tpn;
}
pn = tpn;
break;
case 8: /* "Event" */
c = skip_blanks (&temp[5]);
(void) parse_event (c);
break;
case 9: /* "Zone" */
c = skip_blanks (&temp[4]);
Zone = atoi (c);
if (!Zone) /* if we didn't find a zone */
(void) printf (msgtxt[M_ILLEGAL_ZONE], &temp[4]);
break;
case 10: /* "MaxReq" */
c = skip_blanks (&temp[6]);
DEFAULT.rq_Limit = atoi (c);
if (!DEFAULT.rq_Limit) /* No requests??? */
(void) printf ("0 %s\n", msgtxt[M_REQUESTS_ALLOWED]);
break;
case 11: /* "LogLevel" */
c = skip_blanks (&temp[8]);
i = atoi (c);
if ((i <= 5) && (i > 0))
{
loglevel = i;
}
else
{
(void) printf (msgtxt[M_BAD_LOGLEVEL], &temp[8]);
}
break;
case 12: /* "Baud" */
temp_num = (unsigned int) atoi (&temp[4]);
max_baud.rate_value = 0;
for (i = 0; btypes[i].rate_value; i++)
{
if (btypes[i].rate_value == temp_num)
{
max_baud.rate_mask = btypes[i].rate_mask;
max_baud.rate_value = temp_num;
break;
}
}
if (!max_baud.rate_value)
goto bad_line;
break;
case 13: /* "MaxPort" */
c = skip_blanks (&temp[7]);
i = atoi (c); /* make it binary */
if ((i > 0) && (i < 33)) /* if range is reasonable, */
MAXport = i; /* Make it the max value */
else
(void) printf (msgtxt[M_BAD_MAXPORT], &temp[7]);
break;
case 14: /* "Port" */
c = skip_blanks (&temp[4]);
i = atoi (c); /* make it binary */
if ((i > 0) || (i < 33)) /* see if it's OK */
{
port_ptr = i - 1; /* store it if so */
if (MAXport < i) /* See if MAXport is less */
MAXport = i; /* If so, increase MAXport */
original_port = port_ptr;
}
else
(void) printf (msgtxt[M_ILLEGAL_PORT], &temp[4]);
break;
case 15: /* "Carrier" */
c = skip_blanks (&temp[7]);
i = 0;
(void) sscanf (c, "%x", &i); /* convert it to binary */
if (i != 0) /* if we got anything */
carrier_mask = (unsigned int) i;
else
(void) printf (msgtxt[M_ILLEGAL_CARRIER], &temp[7]);
break;
case 16: /* "StatusLog" */
log_name = ctl_string (&temp[9]);
if ((status_log = fopen (log_name, "at")) == NULL)
{
free (log_name);
log_name = NULL;
}
else
{
(void) fprintf (status_log, "\n");
(void) fflush (status_log);
(void) real_flush (fileno (status_log));
}
break;
case 17: /* "Reader" */
BBSreader = ctl_string (&temp[6]);
break;
case 18: /* "BossPhone" */
BOSSphone = ctl_string (&temp[9]);
break;
case 19: /* "BossPwd" */
BOSSpwd = ctl_string (&temp[7]);
break;
case 20: /* "Protocol" */
if (extern_index == 5)
break;
protocols[extern_index++] = ctl_string (&temp[8]);
break;
case 21: /* "System" */
system_name = ctl_string (&temp[6]);
break;
case 22: /* "Sysop" */
sysop = ctl_string (&temp[5]);
break;
case 23: /* "Boss" */
c = skip_blanks (&temp[4]);
(void) parse_address (c, &boss_addr);
break;
case 24: /* "Point" */
i = 5;
goto address;
case 25: /* "Aka" */
i = 3;
goto address;
case 94: /* "Address" */
i = 7;
address:
c = skip_blanks (&temp[i]);
if (num_addrs == 0)
alias[0].Zone = Zone;
(void) parse_address (c, &(alias[num_addrs]));
Zone = (int) alias[0].Zone; /* First is real default */
++num_addrs;
break;
case 26: /* "Hold" */
hold_area = ctl_slash_string (&temp[4]);
domain_area = strdup (hold_area);
domain_area[strlen (domain_area) - 1] = '\0';
p = strrchr (domain_area, '\\');
if (p == NULL)
{
p = strrchr (domain_area, '/');
if (p == NULL)
{
p = strrchr (domain_area, ':');
if (p == NULL)
p = domain_area;
}
}
if (p != domain_area)
++p;
domain_loc = p;
*p = '\0';
break;
case 27: /* "DownLoads" */
download_path = ctl_slash_string (&temp[9]);
break;
case 28: /* "NetFile" */
DEFAULT.sc_Inbound = ctl_slash_string (&temp[7]);
break;
case 29: /* "Init" */
modem_init = ctl_string (&temp[4]);
break;
case 30: /* "Busy" */
modem_busy = ctl_string (&temp[4]);
break;
case 31: /* "Prefix" */
predial = ctl_string (&temp[6]);
normprefix = predial;
break;
case 32: /* "NodeList" */
net_info = ctl_slash_string (&temp[8]);
break;
case 33: /* "Avail" */
DEFAULT.rq_FILES = ctl_string (&temp[5]);
break;
case 34: /* "OKFile" */
DEFAULT.rq_OKFile = ctl_string (&temp[6]);
break;
case 35: /* "About" */
DEFAULT.rq_About = ctl_string (&temp[5]);
break;
case 36: /* "MAILnote" */
MAILnote = ctl_string (&temp[8]);
break;
case 37: /* "Banner" */
BBSbanner = ctl_string (&temp[6]);
break;
case 38: /* "UnAttended" */
un_attended = 1;
command_line_un = 1;
break;
case 39: /* "OverWrite" */
overwrite = 1;
break;
case 40: /* "Rev3" */
rev3 = 1;
break;
case 41: /* "ReqOnUs" */
on_our_nickel = 1;
break;
case 42: /* "LockBaud" */
c = skip_blanks (&temp[8]); /* Skip to baud */
if (*c)
lock_baud = (unsigned) (atoi (c));
if (!lock_baud) /* If none, */
lock_baud = 1; /* Use a small no.*/
break;
case 43: /* "TimeOut" */
c = skip_blanks (&temp[7]);
BBStimeout = (unsigned) (atoi (c) * 100);
if (BBStimeout < 2000)
BBStimeout = 2000;
break;
case 44: /* "NoSLO" */
no_overdrive = 1;
break;
case 45: /* "SlowModem" */
slowmodem = 1;
break;
case 46: /* "SmallWindow" */
small_window = 1;
break;
case 47: /* "NoPickup" */
no_pickup = 1;
break;
case 48: /* "NoRequests" */
no_requests = 1;
break;
case 49: /* "NetMail" */
break; /* for BTCTL & MAIL.SYS */
case 50: /* "Suffix" */
postdial = ctl_string (&temp[6]);
normsuffix = postdial;
break;
case 51: /* "NoFullScreen" */
fullscreen = 0;
break;
case 52: /* "AutoBaud" */
autobaud = 1;
break;
case 53: /* "Gong" */
gong_allowed = 1;
break;
case 54: /* "NoCollide" */
no_collide = 1;
break;
case 55: /* "TBBSlist" */
nodefunc = TBBSLookup;
break;
case 56: /* "TaskView" */
case 57: /* "TopView" */
have_tv = 1;
break;
case 58: /* "ExtrnMail" */
c = skip_blanks (&temp[9]);
if (isdigit (*c))
{
lev_ext_mail[num_ext_mail] = atoi (c);
while ((*c) && (!isspace (*c)))
++c;
}
else
{
lev_ext_mail[num_ext_mail] = 99;
}
ext_mail_string[num_ext_mail++] = ctl_string (c);
break;
case 59: /* "BBSnote" */
BBSnote = ctl_string (&temp[7]);
break;
case 60: /* "BBS" */
BBSopt = ctl_string (&temp[3]);
break;
case 61: /* "ScriptPath" */
script_path = ctl_slash_string (&temp[10]);
break;
case 62: /* "BoxType" */
c = skip_blanks (&temp[7]);
boxtype = atoi (c);
if ((boxtype > 4) || (boxtype < 0))
boxtype = 1;
break;
case 63: /* "MultiLink" */
have_ml = 1;
break;
case 64: /* "Include" */
c = skip_blanks (&temp[7]);
parse_config (c);
break;
case 65: /* "CaptureFile" */
logptr = ctl_string (&temp[11]);
break;
case 66: /* "CursorCol" */
c = skip_blanks (&temp[9]);
cursor_col = atoi (c) - 1;
if ((cursor_col < 0) || (cursor_col > 79))
cursor_col = 79;
break;
case 67: /* "CursorRow" */
c = skip_blanks (&temp[9]);
cursor_row = atoi (c) - 1;
if ((cursor_row < 0) || (cursor_row > 23))
cursor_row = 22;
break;
case 68: /* "DoingMail" */
c = skip_blanks (&temp[9]);
(void) sprintf (junk, "\r\r%s\r\r", c);
noBBS = malloc (strlen (junk) + 1);
(void) strcpy (noBBS, junk);
break;
case 69: /* "EnterBBS" */
c = skip_blanks (&temp[8]);
(void) sprintf (junk, "\r%s\r", c);
BBSesc = malloc (strlen (junk) + 1);
(void) strcpy (BBSesc, junk);
break;
case 70: /* "PrivateNet" */
c = skip_blanks (&temp[10]);
pvtnet = atoi (c);
break;
case 71: /* "Packer" */
packer = ctl_string (&temp[6]);
break;
case 72: /* "Cleanup" */
cleanup = ctl_string (&temp[7]);
break;
case 73: /* "AfterMail" */
aftermail = ctl_string (&temp[9]);
break;
case 74: /* "Colors" */
c = skip_blanks (&temp[6]);
colors.background = (unsigned char) (atoi (c) & 0xff);
c = skip_to_blank (c);
colors.settings = (unsigned char) (atoi (c) & 0xff);
c = skip_blanks (c);
c = skip_to_blank (c);
colors.history = (unsigned char) (atoi (c) & 0xff);
c = skip_blanks (c);
c = skip_to_blank (c);
colors.hold = (unsigned char) (atoi (c) & 0xff);
c = skip_blanks (c);
c = skip_to_blank (c);
colors.call = (unsigned char) (atoi (c) & 0xff);
c = skip_blanks (c);
c = skip_to_blank (c);
colors.file = (unsigned char) (atoi (c) & 0xff);
c = skip_blanks (c);
c = skip_to_blank (c);
colors.calling = (unsigned char) (atoi (c) & 0xff);
c = skip_blanks (c);
c = skip_to_blank (c);
colors.popup = (unsigned char) (atoi (c) & 0xff);
break;
case 75: /* "JanusBaud" */
c = skip_blanks (&temp[9]);
janus_baud = (unsigned) atoi(c);
break;
case 76: /* "ReqTemplate" */
DEFAULT.rq_Template = ctl_string (&temp[11]);
break;
case 77: /* "KnownAvail" */
KNOWN.rq_FILES = ctl_string(&temp[10]);
break;
case 78: /* "KnownReqList" */
KNOWN.rq_OKFile = ctl_string(&temp[12]);
break;
case 79: /* "KnownAbout" */
KNOWN.rq_About = ctl_string (&temp[10]);
break;
case 80: /* "KnownInbound" */
KNOWN.sc_Inbound = ctl_slash_string (&temp[12]);
break;
case 81: /* "KnownReqLim" */
c = skip_blanks (&temp[11]);
KNOWN.rq_Limit = atoi (c);
break;
case 82: /* "KnownReqTpl" */
KNOWN.rq_Template = ctl_string (&temp[11]);
break;
case 83: /* "ProtAvail" */
PROT.rq_FILES = ctl_string(&temp[9]);
break;
case 84: /* "ProtReqList" */
PROT.rq_OKFile = ctl_string(&temp[11]);
break;
case 85: /* "ProtAbout" */
PROT.rq_About = ctl_string (&temp[9]);
break;
case 86: /* "ProtInbound" */
PROT.sc_Inbound = ctl_slash_string (&temp[11]);
break;
case 87: /* "ProtReqLim" */
c = skip_blanks (&temp[10]);
PROT.rq_Limit = atoi (c);
break;
case 88: /* "ProtReqTpl" */
PROT.rq_Template = ctl_string (&temp[10]);
break;
case 89: /* "Application" */
break;
case 90: /* "NoZones" */
no_zones = 1;
break;
case 91: /* "Answer" */
ans_str = ctl_string (&temp[6]);
break;
case 92: /* "PollTries" */
c = skip_blanks (&temp[9]);
poll_tries = atoi (c);
break;
case 93: /* "SwapDir" */
c = skip_blanks (&temp[7]);
i = (int) strlen (c);
swapdir = malloc ((unsigned int) (i + 15));
(void) strcpy (swapdir, c);
(void) add_backslash (swapdir);
(void) strcat (swapdir, "BTXXXXXX");
(void) mktemp (swapdir);
break;
case 95: /* "Curmudgeon" */
++curmudgeon; /* Do it like Randy */
break;
case 96: /* "NoWaZOO" */
++no_WaZOO; /* FTSC sessions */
break;
case 97: /* "ScreenBlank" */
do_screen_blank = 1;
p = skip_blanks (&temp[11]);
if (strnicmp (p, msgtxt[M_KEY], 3) == 0)
{
blank_on_key = 1;
}
else if (strnicmp (p, msgtxt[M_CALL], 4) == 0)
{
blank_on_key = 0;
}
break;
case 98: /* "Mark_Kromm" */
/* These colors from Mark Kromm, Fidonet 1:261/1034 */
colors.background = 112; /* The */
colors.settings = 9; /* Great */
colors.history = 10; /* BinkleyTerm */
colors.hold = 11; /* Colors */
colors.call = 14; /* Contest */
colors.file = 12; /* Winner!!!! */
colors.calling = 56;
colors.popup = 15;
break;
case 99: /* "Server" */
server_mode = 1;
break;
case 100: /* "ModemTrans" */
p = &temp[10];
while ((*p) && (isspace (*p)))
++p;
if ((*p == ';') || (*p == '\0'))
{
break;
}
tmm = (MDM_TRNS *) malloc (sizeof (MDM_TRNS));
tmm->mdm = (byte) atoi (p);
while ((*p) && (!isspace (*p)))
{
p++;
}
while ((*p) && (isspace (*p)))
{
++p;
}
p1 = tmm->pre;
while ((*p) && (*p != '/') && (!isspace (*p)))
{
*p1++ = *p++;
}
*p1 = '\0';
p1 = tmm->suf;
if ((*p == '\0') || (isspace (*p)))
{
*p1 = '\0';
}
else
{
++p;
while ((*p) && (!isspace (*p)))
{
*p1++ = *p++;
}
*p1 = '\0';
}
tmm->next = NULL;
if (mm_head == NULL)
{
mm_head = tmm;
}
else
{
mm->next = tmm;
}
mm = tmm;
break;
case 101: /* "PreDial" */
dial_setup = ctl_string (&temp[7]);
break;
case 102: /* "PreInit" */
init_setup = ctl_string (&temp[7]);
break;
case 103: /* "DTRHigh" */
leave_dtr_high = 1;
break;
case 104: /* "Debug" */
debugging_log = !debugging_log;
break;
case 105: /* "NoZedZap" */
no_zapzed = !no_zapzed;
break;
case 106: /* "NoResync" */
no_resync = !no_resync;
break;
case 107: /* "NoSEAlink" */
no_sealink = !no_sealink;
break;
case 108: /* "FTS-0001" */
no_sealink = 1;
no_resync = 1;
no_overdrive = 1;
++no_WaZOO; /* FTSC sessions */
break;
case 109: /* "LineUpdate" */
immed_update = !immed_update;
break;
case 110: /* "JanusOK" */
p = &temp[7];
while ((*p) && (isspace (*p)))
++p;
if ((*p == ';') || (*p == '\0'))
{
break;
}
tjt = (J_TYPES *) malloc (sizeof (J_TYPES));
p1 = tjt->j_match;
while ((*p) && (!isspace (*p)))
{
*p1++ = *p++;
}
*p1 = '\0';
tjt->next = NULL;
if (j_top == NULL)
{
j_top = tjt;
}
else
{
j_next->next = tjt;
}
j_next = tjt;
break;
case 111: /* "TermInit" */
term_init = ctl_string (&temp[8]);
break;
case 112: /* "Domain" */
p = skip_blanks (&temp[6]);
p = strtok (p, "; \t\r\n");
if (p != NULL)
{
/* Have the domain name, now get the abbreviated name */
p2 = strtok (NULL, "; \t\r\n");
if (strlen (p2) > 8)
*(p2 + 8) = '\0';
if (p2 != NULL)
{
/* Have the domain name and abbreviated, now get the list name */
p1 = strtok (NULL, "; \t\r\n");
if (p1 == NULL)
p1 = p2;
/* Have the list name and the domain name, now use them */
for (i = 0; domain_name[i] != NULL; i++)
{
if (strnicmp (domain_name[i], p, strlen (domain_name[i])) == 0)
{
domain_nodelist[i] = strdup (p1);
domain_abbrev[i] = strdup (p2);
break;
}
}
if ((domain_name[i] == NULL) && (i < 49))
{
domain_name[i] = strdup (p);
domain_abbrev[i] = strdup (p2);
domain_nodelist[i] = strdup (p1);
}
}
}
break;
case 113: /* "Snoop" */
#ifdef Snoop
if (getenv("SNOOPPIPE") == NULL)
{
snoop_open(skip_blanks(&temp[5]));
strcpy(temp2, "SNOOPPIPE=");
strcat(temp2, skip_blanks(&temp[5]));
putenv(strdup(temp2));
}
else
snoop_open(getenv("SNOOPPIPE"));
#endif /* Snoop */
break;
case 114: /* "Flags" */
flag_dir = ctl_slash_string (&temp[5]);
break;
case 115: /* "Tasknumber" */
c = skip_blanks (&temp[10]);
TaskNumber = atoi (c);
break;
case 116: /* "MaxBytes" */
c = skip_blanks (&temp[8]);
DEFAULT.byte_Limit = atol (c);
break;
case 117: /* "KnownMaxBytes"*/
c = skip_blanks (&temp[13]);
KNOWN.byte_Limit = atol (c);
break;
case 118: /* "ProtMaxBytes" */
c = skip_blanks (&temp[12]);
PROT.byte_Limit = atol (c);
break;
case 119: /* CML - "LimitBaud" */
c = skip_blanks(&temp[9]);
limit_baud = (unsigned int)atol(c);
break;
bad_line:
default:
(void) printf (msgtxt[M_UNKNOWN_LINE], temp);
}
}
(void) fclose (stream); /* close input file */
if (debugging_log)
loglevel = 6;
}
char *ctl_string (source) /* malloc & copy to ctl */
char *source;
{
char *dest, *c;
int i;
c = skip_blanks (source); /* get over the blanks */
i = (int) strlen (c); /* get length of remainder */
if (i < 1) /* must have at least 1 */
return (NULL); /* if not, return NULL */
dest = malloc ((unsigned int) (++i)); /* allocate space for string */
if (dest == NULL) /* If we failed to get it, */
return (NULL); /* Just return NULL */
(void) strcpy (dest, c); /* copy the stuff over */
return (dest); /* and return the address */
}
static char *ctl_slash_string (source) /* malloc & copy to ctl */
char *source;
{
char *dest, *c;
int i;
struct stat buffer;
c = skip_blanks (source); /* get over the blanks */
i = (int) strlen (c); /* get length of remainder */
if (i < 1) /* must have at least 1 */
return (NULL); /* if not, return NULL */
dest = malloc ((unsigned int) (i+2)); /* allocate space for string */
if (dest == NULL) /* If we failed to get it, */
return (NULL); /* Just return NULL */
(void) strcpy (dest, c); /* copy the stuff over */
(void) delete_backslash (dest); /* get rid of trailing stuff */
/* Check to see if the directory exists */
i = stat (dest, &buffer);
if (i || (!(buffer.st_mode & S_IFDIR)))
{
(void) printf (msgtxt[M_BAD_DIR], dest);
(void) printf (msgtxt[M_FAIL_EXEC]);
return(NULL);
}
(void) add_backslash (dest); /* add the backslash */
return (dest); /* return the directory name */
}
char *add_backslash (str)
char *str;
{
char *p;
p = str + strlen (str) - 1;
if (p >= str)
{
/* Strip off the trailing blanks */
while ((p >= str) && (isspace (*p)))
{
*p = '\0';
--p;
}
/* Put a backslash if there isn't one */
if ((p >=str) && (*p != '\\') && (*p != '/'))
{
*(++p) = '\\';
*(++p) = '\0';
}
}
return (fancy_str (str));
}
char *delete_backslash (str)
char *str;
{
char *p;
p = str + strlen (str) - 1;
if (p >= str)
{
/* Strip off the trailing blanks */
while ((p >= str) && (isspace (*p)))
{
*p = '\0';
--p;
}
/* Get rid of backslash if there is one */
if ((p >=str) && ((*p == '\\') || (*p == '/')))
{
if ((p > str) && (*(p-1) != ':')) /* Don't delete on root */
*p = '\0';
}
}
return (fancy_str (str));
}