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

  1. /* lklex.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 <string.h>
  14. #include <alloc.h>
  15. #include "aslink.h"
  16.  
  17. VOID
  18. getid(id, c)
  19. register c;
  20. char *id;
  21. {
  22.     register char *p;
  23.  
  24.     if (c < 0) {
  25.         c = getnb();
  26.     }
  27.     p = id;
  28.     do {
  29.         if (p < &id[NCPS])
  30.             *p++ = c;
  31.     } while (ctype[c=get()] & (LETTER|DIGIT));
  32.     unget(c);
  33.     while (p < &id[NCPS])
  34.         *p++ = 0;
  35. }
  36.  
  37. VOID
  38. getfid(str, c)
  39. register c;
  40. char *str;
  41. {
  42.     register char *p;
  43.  
  44.     if (c < 0)
  45.         c = getnb();
  46.     p = str;
  47.     while (ctype[c] & (LETTER|DIGIT) || c == FSEPX) {
  48.         if (p < &str[FILSPC-1])
  49.             *p++ = c;
  50.         c = get();
  51.     }
  52.     unget(c);
  53.     while (p < &str[FILSPC])
  54.         *p++ = 0;
  55. }
  56.  
  57. char
  58. getnb()
  59. {
  60.     register c;
  61.  
  62.     while ((c=get())==' ' || c=='\t')
  63.         ;
  64.     return (c);
  65. }
  66.  
  67. VOID
  68. skip(c)
  69. register c;
  70. {
  71.     if (c < 0)
  72.         c = getnb();
  73.     while (ctype[c=get()] & (LETTER|DIGIT)) { ; }
  74.     unget(c);
  75. }
  76.  
  77. char
  78. get()
  79. {
  80.     register c;
  81.  
  82.     if ((c = *ip) != 0)
  83.         ++ip;
  84.     return (c);
  85. }
  86.  
  87. VOID
  88. unget(c)
  89. {
  90.     if (c != 0)
  91.         --ip;
  92. }
  93.  
  94. char
  95. getmap(d)
  96. {
  97.     register c, n, v;
  98.  
  99.     if ((c = get()) == '\0')
  100.         return (-1);
  101.     if (c == d)
  102.         return (-1);
  103.     if (c == '\\') {
  104.         c = get();
  105.         switch (c) {
  106.  
  107.         case 'b':
  108.             c = '\b';
  109.             break;
  110.  
  111.         case 'f':
  112.             c = '\f';
  113.             break;
  114.  
  115.         case 'n':
  116.             c = '\n';
  117.             break;
  118.  
  119.         case 'r':
  120.             c = '\r';
  121.             break;
  122.  
  123.         case 't':
  124.             c = '\t';
  125.             break;
  126.  
  127.         case '0':
  128.         case '1':
  129.         case '2':
  130.         case '3':
  131.         case '4':
  132.         case '5':
  133.         case '6':
  134.         case '7':
  135.             n = 0;
  136.             v = 0;
  137.             while (++n<=3 && c>='0' && c<='7') {
  138.                 v = (v<<3) + c - '0';
  139.                 c = get();
  140.             }
  141.             unget(c);
  142.             c = v;
  143.             break;
  144.         }
  145.     }
  146.     return (c);
  147. }
  148.  
  149. int
  150. getline()
  151. {
  152.     register i, ftype;
  153.     register char *fid;
  154.  
  155. loop:    if (pflag && cfp && cfp->f_type == F_STD)
  156.         fprintf(stdout, "ASlink >> ");
  157.  
  158.     if (sfp == NULL || fgets(ib, sizeof ib, sfp) == NULL) {
  159.         if (sfp) {
  160.             fclose(sfp);
  161.         }
  162.         if (cfp == NULL) {
  163.             cfp = filep;
  164.         } else {
  165.             cfp = cfp->f_flp;
  166.         }
  167.         if (cfp) {
  168.             ftype = cfp->f_type;
  169.             fid = cfp->f_idp;
  170.             if (ftype == F_STD) {
  171.                 sfp = stdin;
  172.             } else
  173.             if (ftype == F_LNK) {
  174.                 sfp = afile(fid, "LNK", 0);
  175.             } else
  176.             if (ftype == F_REL) {
  177.                 sfp = afile(fid, "REL", 0);
  178.             } else {
  179.                 fprintf(stderr, "Invalid file type\n");
  180.                 exit(1);
  181.             }
  182.             goto loop;
  183.         } else {
  184.             filep = NULL;
  185.             return(0);
  186.         }
  187.     }
  188.     i = strlen(ib) - 1;
  189.     if (ib[i] == '\n')
  190.         ib[i] = 0;
  191.     return (1);
  192. }
  193.  
  194. int
  195. more()
  196. {
  197.     register c;
  198.  
  199.     c = getnb();
  200.     unget(c);
  201.     return( (c == '\0' || c == ';') ? 0 : 1 );
  202. }
  203.  
  204. char
  205. endline()
  206. {
  207.     register c;
  208.  
  209.     c = getnb();
  210.     return( (c == '\0' || c == ';') ? 0 : c );
  211. }
  212.