home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / iolib / scan2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1975-05-13  |  1.6 KB  |  112 lines

  1. _Iint (iptr, length, numbase)
  2.     int *iptr, length;
  3. {
  4.     int n, minus, numdig;
  5.     extern int _Isfil, (*_Iungc)(), (*_Igetc)();
  6.     int c, dval;
  7.  
  8. n = minus = numdig = 0;
  9. switch ((c=_Inxch()))
  10.     {
  11.     case '-': minus = 1;
  12.     case '+': break;
  13.     default: (*_Iungc)(c,_Isfil);
  14.     }
  15. while ((dval=_Idigt(c=((*_Igetc)(_Isfil)), numbase ) ) >= 0 && numdig++ < length)
  16.     n = n*numbase + dval;
  17. (*_Iungc)(c,_Isfil);
  18. if (numdig == 0)
  19.     return (-1);
  20. if (iptr == 0)
  21.     return (0);
  22. *iptr = minus ? -n : n;
  23. return (1);
  24. }
  25.  
  26. _Idigt (x, base)
  27. {
  28. switch (x)
  29.     {
  30.     case '0':
  31.     case '1':
  32.     case '2':
  33.     case '3':
  34.     case '4':
  35.     case '5':
  36.     case '6':
  37.     case '7':
  38.         return(x-'0');
  39.     case '8':
  40.     case '9':
  41.         if (base > 8)
  42.             return(x - '0');
  43.     case 'a':
  44.     case 'b':
  45.     case 'c':
  46.     case 'd':
  47.     case 'e':
  48.     case 'f':
  49.         if (base >10)
  50.             return(x - 'a' + 10);
  51.     case 'A':
  52.     case 'B':
  53.     case 'C':
  54.     case 'D':
  55.     case 'E':
  56.     case 'F':
  57.         if (base > 10)
  58.             return(x-'A' + 10);
  59.     }
  60. return(-1);
  61. }
  62.  
  63. _Ilong (dptr, length)
  64.     double *dptr;
  65.     int length;
  66. {
  67.     char temp[75];
  68.     int _Inodg();
  69.     double x;
  70.     double atof();
  71.  
  72. if (_Isstr(temp, length, _Inodg) < 0)
  73.     return (-1);
  74. x = atof(temp);
  75. if (dptr == 0)
  76.     return (0);
  77. *dptr = x;
  78. return (1);
  79. }
  80.  
  81. _Isstr (sptr, length, stopf)
  82.     char *sptr;
  83.     int length, (*stopf)();
  84. {
  85.     int ch, initlen, _Inxch();
  86.     extern int _Isfil, (*_Igetc)(), (*_Iungc)();
  87.  
  88. initlen = length;
  89. if ((ch=_Inxch()) < 0)
  90.     return (-1);
  91. (*_Iungc)(ch,_Isfil);
  92. while (!((*stopf)(ch=(*_Igetc)(_Isfil))) && length-- > 0)
  93.     if (sptr != 0)
  94.         *(sptr++) = ch;
  95. if (ch >= 0)
  96.     (*_Iungc)(ch,_Isfil);
  97. if (length == initlen)
  98.     return (-1);
  99. if (sptr == 0)
  100.     return (0);
  101. *sptr = '\0';
  102. return (1);
  103. }
  104.  
  105. _Iestr (c)
  106. char c;
  107. {
  108. if (_Ispce(c)) return (1);
  109. if (c == '\0') return (1);
  110. return (0);
  111. }
  112.