123 lines
1.5 KiB
C
123 lines
1.5 KiB
C
/* @(#)utils.c 1.1 94/10/31 SMI */
|
|
/*
|
|
* hold various utilies
|
|
*/
|
|
|
|
#include "colldef.h"
|
|
#include "y.tab.h"
|
|
#include "extern.h"
|
|
|
|
panic(s, d, form)
|
|
char *s;
|
|
int d;
|
|
int form;
|
|
{
|
|
if (form)
|
|
fprintf(stderr, "panic:(0x%x) %s\n",d, s);
|
|
else
|
|
fprintf(stderr, "panic:(%d) %s\n",d, s);
|
|
exit(1);
|
|
}
|
|
|
|
ipanic(s)
|
|
char *s;
|
|
{
|
|
fprintf(stderr, "%s\n", s);
|
|
}
|
|
|
|
ierror(s)
|
|
char *s;
|
|
{
|
|
fprintf(stderr, "%s\n", s);
|
|
}
|
|
|
|
get_type(s)
|
|
register char *s;
|
|
{
|
|
while (*s) {
|
|
if (ME_HEX(*s) || *s == 'x')
|
|
return(H_NUM);
|
|
s++;
|
|
}
|
|
return(O_NUM);
|
|
}
|
|
|
|
|
|
/*
|
|
* I assume that the first character here is digit.
|
|
*/
|
|
getnum(fp, val)
|
|
FILE *fp;
|
|
unsigned int *val;
|
|
{
|
|
char nbuf[IDSIZE];
|
|
register char *p = nbuf;
|
|
int hflag = 0;
|
|
int c;
|
|
|
|
c = getc(fp);
|
|
while (isdigit(c) || ME_HEX(c) || c == 'x') {
|
|
*p++ = c;
|
|
if (ME_HEX(c) || c == 'x')
|
|
++hflag;
|
|
c = getc(fp);
|
|
}
|
|
*p = '\0';
|
|
ungetc(c, fp);
|
|
if (!hflag)
|
|
*val = atoi(nbuf);
|
|
else
|
|
*val = axtoi(nbuf);
|
|
return(hflag ? H_NUM : O_NUM);
|
|
}
|
|
|
|
extern long strtol();
|
|
/*
|
|
* ascii hex. to integer
|
|
*/
|
|
axtoi(p)
|
|
register char *p;
|
|
{
|
|
return strtol(p, (char **)NULL,16);
|
|
}
|
|
|
|
/*
|
|
* ascii octal. to integer
|
|
*/
|
|
aotoi(p)
|
|
register char *p;
|
|
{
|
|
return strtol(p, (char **)NULL,8);
|
|
}
|
|
|
|
|
|
/*
|
|
* string save
|
|
*/
|
|
char *
|
|
strsave(s)
|
|
char *s;
|
|
{
|
|
char *sp;
|
|
|
|
if (s == NULL)
|
|
return(NULL);
|
|
sp = (char *)malloc(strlen(s) + 1);
|
|
if (sp == NULL)
|
|
ipanic("strsave: can't allocate memory");
|
|
strcpy(sp, s);
|
|
return(sp);
|
|
}
|
|
|
|
/*
|
|
* free's
|
|
*/
|
|
free_type_var(t)
|
|
struct type_var *t;
|
|
{
|
|
if (t->type == STRING || t->type == SYM_NAME)
|
|
free (t->type_val.str_val);
|
|
free(t);
|
|
}
|
|
|