Files
Arquivotheca.SunOS-4.1.4/usr.lib/locale/LC_COLLATE/utils.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

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);
}