*val = 0;
ptr = curptr;
- if (!isdigit(*ptr)) /* should start with digit */
+ if (!sc_isdigit(*ptr)) /* should start with digit */
return 0;
- while (isdigit(*ptr) || *ptr == '_')
+ while (sc_isdigit(*ptr) || *ptr == '_')
{
if (*ptr != '_')
*val = (*val * 10) + (*ptr - '0');
} /* while */
if (alphanum(*ptr)) /* number must be delimited by non-alphanumerical */
return 0;
- if (*ptr == '.' && isdigit(*(ptr + 1)))
+ if (*ptr == '.' && sc_isdigit(*(ptr + 1)))
return 0; /* but a fractional part must not be present */
return (int)(ptr - curptr);
}
*val = 0;
ptr = curptr;
- if (!isdigit(*ptr)) /* should start with digit */
+ if (!sc_isdigit(*ptr)) /* should start with digit */
return 0;
if (*ptr == '0' && *(ptr + 1) == 'x')
{ /* C style hexadecimal notation */
ptr += 2;
- while (isxdigit(*ptr) || *ptr == '_')
+ while (sc_isxdigit(*ptr) || *ptr == '_')
{
if (*ptr != '_')
{
- assert(isxdigit(*ptr));
+ assert(sc_isxdigit(*ptr));
*val = *val << 4;
- if (isdigit(*ptr))
+ if (sc_isdigit(*ptr))
*val += (*ptr - '0');
else
*val += (tolower(*ptr) - 'a' + 10);
fnum = 0.0;
dnum = 0L;
ptr = curptr;
- if (!isdigit(*ptr)) /* should start with digit */
+ if (!sc_isdigit(*ptr)) /* should start with digit */
return 0;
- while (isdigit(*ptr) || *ptr == '_')
+ while (sc_isdigit(*ptr) || *ptr == '_')
{
if (*ptr != '_')
{
if (*ptr != '.')
return 0; /* there must be a period */
ptr++;
- if (!isdigit(*ptr)) /* there must be at least one digit after the dot */
+ if (!sc_isdigit(*ptr)) /* there must be at least one digit after the dot */
return 0;
ffrac = 0.0;
fmult = 1.0;
ignore = FALSE;
- while (isdigit(*ptr) || *ptr == '_')
+ while (sc_isdigit(*ptr) || *ptr == '_')
{
if (*ptr != '_')
{
{
sign = 1;
} /* if */
- if (!isdigit(*ptr)) /* 'e' should be followed by a digit */
+ if (!sc_isdigit(*ptr)) /* 'e' should be followed by a digit */
return 0;
exp = 0;
- while (isdigit(*ptr))
+ while (sc_isdigit(*ptr))
{
exp = (exp * 10) + (*ptr - '0');
ptr++;
preproc_expr(cell * val, int *tag)
{
int result;
- int index;
+ int idx;
cell code_index;
char *term;
* compilations. Reset the staging index, but keep the code
* index.
*/
- if (stgget(&index, &code_index))
+ if (stgget(&idx, &code_index))
{
error(57); /* unfinished expression */
stgdel(0, code_index);
int tok, ret;
cell val;
char *str;
- int index;
+ int idx;
cell code_index;
while (*lptr <= ' ' && *lptr != '\0')
/* on a pending expression, force to return a silent ';' token and force to
* re-read the line
*/
- if (!sc_needsemicolon && stgget(&index, &code_index))
+ if (!sc_needsemicolon && stgget(&idx, &code_index))
{
lptr = term_expr;
return CMD_TERM;
while ((*lptr <= ' ') && (*lptr != '\0'))
lptr++;
for (i = 0;
- (i < (int)(sizeof(name))) &&
+ (i < (int)(sizeof(name)) - 1) &&
(alphanum(*lptr));
i++, lptr++)
name[i] = *lptr;
while ((*lptr <= ' ') && (*lptr != '\0'))
lptr++;
for (i = 0;
- (i < (int)(sizeof(name))) &&
- (isalpha(*lptr));
+ (i < (int)(sizeof(name)) - 1) &&
+ (sc_isalpha(*lptr));
i++, lptr++)
name[i] = *lptr;
name[i] = '\0';
case tpEMIT:
{
/* write opcode to output file */
- char name[40];
+ char name[41];
int i;
while (*lptr <= ' ' && *lptr != '\0')
lptr++;
- for (i = 0; i < 40 && (isalpha(*lptr) || *lptr == '.'); i++, lptr++)
+ for (i = 0; i < 40 && (sc_isalpha(*lptr) || *lptr == '.'); i++, lptr++)
name[i] = (char)tolower(*lptr);
name[i] = '\0';
stgwrite("\t");
if (tok < 256)
sprintf(s2, "%c", (char)tok);
else
- strcpy(s2, sc_tokens[tok - tFIRST]);
+ {
+ strncpy(s2, sc_tokens[tok - tFIRST], 19);
+ s2[19] = 0;
+ }
error(1, sc_tokens[tSYMBOL - tFIRST], s2);
break;
} /* case */
} /* while */
end = lptr;
/* check pattern to match */
- if (!isalpha(*start) && *start != '_')
+ if (!sc_isalpha(*start) && *start != '_')
{
error(74); /* pattern must start with an alphabetic character */
break;
} /* while */
pattern[count] = '\0';
/* special case, erase trailing variable, because it could match anything */
- if (count >= 2 && isdigit(pattern[count - 1])
+ if (count >= 2 && sc_isdigit(pattern[count - 1])
&& pattern[count - 2] == '%')
pattern[count - 2] = '\0';
/* find substitution string */
substitution[count] = '\0';
/* check whether the definition already exists */
for (prefixlen = 0, start = pattern;
- isalpha(*start) || isdigit(*start) || *start == '_';
+ sc_isalpha(*start) || sc_isdigit(*start) || *start == '_';
prefixlen++, start++)
/* nothing */ ;
assert(prefixlen > 0);
memset(args, 0, sizeof args);
/* check the length of the prefix */
- for (prefixlen = 0, s = pattern; isalpha(*s) || isdigit(*s) || *s == '_';
+ for (prefixlen = 0, s = pattern; sc_isalpha(*s) || sc_isdigit(*s) || *s == '_';
prefixlen++, s++)
/* nothing */ ;
assert(prefixlen > 0);
if (*p == '%')
{
p++; /* skip '%' */
- if (isdigit(*p))
+ if (sc_isdigit(*p))
{
arg = *p - '0';
assert(arg >= 0 && arg <= 9);
/* calculate the length of the substituted string */
for (e = substitution, len = 0; *e != '\0'; e++)
{
- if (*e == '%' && isdigit(*(e + 1)))
+ if (*e == '%' && sc_isdigit(*(e + 1)))
{
arg = *(e + 1) - '0';
assert(arg >= 0 && arg <= 9);
strdel(line, (int)(s - line));
for (e = substitution, s = line; *e != '\0'; e++)
{
- if (*e == '%' && isdigit(*(e + 1)))
+ if (*e == '%' && sc_isdigit(*(e + 1)))
{
arg = *(e + 1) - '0';
assert(arg >= 0 && arg <= 9);
/* find the start of a prefix (skip all non-alphabetic characters),
* also skip strings
*/
- while (!isalpha(*start) && *start != '_' && *start != '\0')
+ while (!sc_isalpha(*start) && *start != '_' && *start != '\0')
{
/* skip strings */
if (is_startstring(start))
/* get the prefix (length), look for a matching definition */
prefixlen = 0;
end = start;
- while (isalpha(*end) || isdigit(*end) || *end == '_')
+ while (sc_isalpha(*end) || sc_isdigit(*end) || *end == '_')
{
prefixlen++;
end++;
if (token < 256)
sprintf(s1, "%c", (char)token); /* single character token */
else
- strcpy(s1, sc_tokens[token - tFIRST]); /* multi-character symbol */
+ {
+ strncpy(s1, sc_tokens[token - tFIRST], 19); /* multi-character symbol */
+ s1[19] = 0;
+ }
if (!freading)
strcpy(s2, "-end of file-");
else if (_lextok < 256)
sprintf(s2, "%c", (char)_lextok);
else
- strcpy(s2, sc_tokens[_lextok - tFIRST]);
+ {
+ strncpy(s2, sc_tokens[_lextok - tFIRST], 19);
+ s2[19] = 0;
+ }
error(1, s1, s2); /* expected ..., but found ... */
return FALSE;
} /* if */
cptr += 1;
break;
default:
- if (isdigit(*cptr))
+ if (sc_isdigit(*cptr))
{ /* \ddd */
c = 0;
while (*cptr >= '0' && *cptr <= '9') /* decimal! */
static int
alpha(char c)
{
- return (isalpha(c) || c == '_' || c == PUBLIC_CHAR);
+ return (sc_isalpha(c) || c == '_' || c == PUBLIC_CHAR);
}
/* alphanum
int
alphanum(char c)
{
- return (alpha(c) || isdigit(c));
+ return (alpha(c) || sc_isdigit(c));
}
/* The local variable table must be searched backwards, so that the deepest
/* for user defined operators, also remove the "prototyped" flag, as
* user-defined operators *must* be declared before use
*/
- if (sym->ident == iFUNCTN && !isalpha(*sym->name)
+ if (sym->ident == iFUNCTN && !sc_isalpha(*sym->name)
&& *sym->name != '_' && *sym->name != PUBLIC_CHAR)
sym->usage &= ~uPROTOTYPED;
root = sym; /* skip the symbol */
*refer = NULL;
/* first fill in the entry */
- strcpy(entry.name, name);
+ strncpy(entry.name, name, sizeof(entry.name) - 1);
+ entry.name[sizeof(entry.name) - 1] = 0;
entry.hash = namehash(name);
entry.addr = addr;
entry.vclass = (char)vclass;