home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 292_01 / aslex.c < prev    next >
C/C++ Source or Header  |  1990-07-17  |  2KB  |  163 lines

  1. /* aslex.c */
  2.  
  3. /*
  4.  * (C) Copyright 1989,1990
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. #include <stdio.h>
  13. #include <setjmp.h>
  14. #include <string.h>
  15. #include <alloc.h>
  16. #include "asm.h"
  17.  
  18. VOID
  19. getid(id, c)
  20. register c;
  21. char *id;
  22. {
  23.     register char *p;
  24.  
  25.     if (c < 0) {
  26.         c = getnb();
  27.         if ((ctype[c] & LETTER) == 0)
  28.             qerr();
  29.     }
  30.     p = id;
  31.     do {
  32.         if (p < &id[NCPS])
  33.             *p++ = c;
  34.     } while (ctype[c=get()] & (LETTER|DIGIT));
  35.     unget(c);
  36.     while (p < &id[NCPS])
  37.         *p++ = 0;
  38. }
  39.  
  40. char
  41. getnb()
  42. {
  43.     register c;
  44.  
  45.     while ((c=get()) == ' ' || c == '\t')
  46.         ;
  47.     return (c);
  48. }
  49.  
  50. char
  51. get()
  52. {
  53.     register c;
  54.  
  55.     if ((c = *ip) != 0)
  56.         ++ip;
  57.     return (c);
  58. }
  59.  
  60. VOID
  61. unget(c)
  62. {
  63.     if (c)
  64.         --ip;
  65. }
  66.  
  67. char
  68. getmap(d)
  69. {
  70.     register c, n, v;
  71.  
  72.     if ((c=get()) == '\0')
  73.         qerr();
  74.     if (c == d)
  75.         return (-1);
  76.     if (c == '\\') {
  77.         c = get();
  78.         switch (c) {
  79.  
  80.         case 'b':
  81.             c = '\b';
  82.             break;
  83.  
  84.         case 'f':
  85.             c = '\f';
  86.             break;
  87.  
  88.         case 'n':
  89.             c = '\n';
  90.             break;
  91.  
  92.         case 'r':
  93.             c = '\r';
  94.             break;
  95.  
  96.         case 't':
  97.             c = '\t';
  98.             break;
  99.  
  100.         case '0':
  101.         case '1':
  102.         case '2':
  103.         case '3':
  104.         case '4':
  105.         case '5':
  106.         case '6':
  107.         case '7':
  108.             n = 0;
  109.             v = 0;
  110.             while (++n<=3 && c>='0' && c<='7') {
  111.                 v = (v<<3) + c - '0';
  112.                 c = get();
  113.             }
  114.             unget(c);
  115.             c = v;
  116.             break;
  117.         }
  118.     }
  119.     return (c);
  120. }
  121.  
  122. int
  123. getline()
  124. {
  125. register i;
  126.  
  127. loop:    if (incfil >= 0) {
  128.         if (fgets(ib, sizeof ib, ifp[incfil]) == NULL) {
  129.             fclose(ifp[incfil--]);
  130.             lop = NLPP;
  131.             goto loop;
  132.         }
  133.     } else
  134.     if (fgets(ib, sizeof ib, sfp[cfile]) == NULL) {
  135.         if (++cfile <= inpfil)
  136.             goto loop;
  137.         return (0);
  138.     }
  139.     i = strlen(ib) - 1;
  140.     if (ib[i] == '\n')
  141.         ib[i] = 0;
  142.     return (1);
  143. }
  144.  
  145. int
  146. more()
  147. {
  148.     register c;
  149.  
  150.     c = getnb();
  151.     unget(c);
  152.     return( (c == '\0' || c == ';') ? 0 : 1 );
  153. }
  154.  
  155. char
  156. endline()
  157. {
  158.     register c;
  159.  
  160.     c = getnb();
  161.     return( (c == '\0' || c == ';') ? 0 : c );
  162. }
  163.