112 lines
1.6 KiB
C
112 lines
1.6 KiB
C
_Iint (iptr, length, numbase)
|
|
int *iptr, length;
|
|
{
|
|
int n, minus, numdig;
|
|
extern int _Isfil, (*_Iungc)(), (*_Igetc)();
|
|
int c, dval;
|
|
|
|
n = minus = numdig = 0;
|
|
switch ((c=_Inxch()))
|
|
{
|
|
case '-': minus = 1;
|
|
case '+': break;
|
|
default: (*_Iungc)(c,_Isfil);
|
|
}
|
|
while ((dval=_Idigt(c=((*_Igetc)(_Isfil)), numbase ) ) >= 0 && numdig++ < length)
|
|
n = n*numbase + dval;
|
|
(*_Iungc)(c,_Isfil);
|
|
if (numdig == 0)
|
|
return (-1);
|
|
if (iptr == 0)
|
|
return (0);
|
|
*iptr = minus ? -n : n;
|
|
return (1);
|
|
}
|
|
|
|
_Idigt (x, base)
|
|
{
|
|
switch (x)
|
|
{
|
|
case '0':
|
|
case '1':
|
|
case '2':
|
|
case '3':
|
|
case '4':
|
|
case '5':
|
|
case '6':
|
|
case '7':
|
|
return(x-'0');
|
|
case '8':
|
|
case '9':
|
|
if (base > 8)
|
|
return(x - '0');
|
|
case 'a':
|
|
case 'b':
|
|
case 'c':
|
|
case 'd':
|
|
case 'e':
|
|
case 'f':
|
|
if (base >10)
|
|
return(x - 'a' + 10);
|
|
case 'A':
|
|
case 'B':
|
|
case 'C':
|
|
case 'D':
|
|
case 'E':
|
|
case 'F':
|
|
if (base > 10)
|
|
return(x-'A' + 10);
|
|
}
|
|
return(-1);
|
|
}
|
|
|
|
_Ilong (dptr, length)
|
|
double *dptr;
|
|
int length;
|
|
{
|
|
char temp[75];
|
|
int _Inodg();
|
|
double x;
|
|
double atof();
|
|
|
|
if (_Isstr(temp, length, _Inodg) < 0)
|
|
return (-1);
|
|
x = atof(temp);
|
|
if (dptr == 0)
|
|
return (0);
|
|
*dptr = x;
|
|
return (1);
|
|
}
|
|
|
|
_Isstr (sptr, length, stopf)
|
|
char *sptr;
|
|
int length, (*stopf)();
|
|
{
|
|
int ch, initlen, _Inxch();
|
|
extern int _Isfil, (*_Igetc)(), (*_Iungc)();
|
|
|
|
initlen = length;
|
|
if ((ch=_Inxch()) < 0)
|
|
return (-1);
|
|
(*_Iungc)(ch,_Isfil);
|
|
while (!((*stopf)(ch=(*_Igetc)(_Isfil))) && length-- > 0)
|
|
if (sptr != 0)
|
|
*(sptr++) = ch;
|
|
if (ch >= 0)
|
|
(*_Iungc)(ch,_Isfil);
|
|
if (length == initlen)
|
|
return (-1);
|
|
if (sptr == 0)
|
|
return (0);
|
|
*sptr = '\0';
|
|
return (1);
|
|
}
|
|
|
|
_Iestr (c)
|
|
char c;
|
|
{
|
|
if (_Ispce(c)) return (1);
|
|
if (c == '\0') return (1);
|
|
return (0);
|
|
}
|