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