/* lklex.c */ /* * (C) Copyright 1989 * All Rights Reserved * * Alan R. Baldwin * 721 Berkeley St. * Kent, Ohio 44240 */ #include #include "aslink.h" VOID getid(id, c) register c; char *id; { register char *p; if (c < 0) { c = getnb(); } p = id; do { if (p < &id[NCPS]) *p++ = c; } while (ctype[c=get()]==LETTER || ctype[c]==DIGIT); unget(c); while (p < &id[NCPS]) *p++ = 0; } VOID getfid(str, c) register c; char *str; { register char *p; if (c < 0) c = getnb(); p = str; while (ctype[c] == LETTER || ctype[c] == DIGIT || c == ':') { if (p < &str[FILSPC-1]) *p++ = c; c = get(); } unget(c); while (p < &str[FILSPC]) *p++ = 0; } char getnb() { register c; while ((c=get())==' ' || c=='\t') ; return (c); } VOID skip(c) register c; { if (c < 0) c = getnb(); while (ctype[c=get()]==LETTER || ctype[c]==DIGIT); unget(c); } char get() { register c; if ((c = *ip) != 0) ++ip; return (c); } VOID unget(c) { if (c != 0) --ip; } char getmap(d) { register c, n, v; if ((c = get()) == '\0') return (-1); if (c == d) return (-1); if (c == '\\') { c = get(); switch (c) { case 'b': c = '\b'; break; case 'f': c = '\f'; break; case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': n = 0; v = 0; while (++n<=3 && c>='0' && c<='7') { v = (v<<3) + c - '0'; c = get(); } unget(c); c = v; break; } } return (c); } int getline() { register ftype; register char *fid; loop: if (pflag && cfp && cfp->f_type == F_STD) fprintf(stdout, "aslink >> "); if (sfp == NULL || fgets(ib, sizeof ib, sfp) == NULL) { if (sfp) { fclose(sfp); } if (cfp == NULL) { cfp = filep; } else { cfp = cfp->f_flp; } if (cfp) { ftype = cfp->f_type; fid = cfp->f_idp; if (ftype == F_STD) { sfp = stdin; } else if (ftype == F_LNK) { sfp = afile(fid, "lnk", 0); } else if (ftype == F_REL) { sfp = afile(fid, "rel", 0); } else { fprintf(stderr, "Invalid file type\n"); exit(1); } goto loop; } else { filep = NULL; return(0); } } ib[strlen(ib) - 1] = 0; return (1); } int more() { register c; c = getnb(); unget(c); return( (c == '\0' || c == ';') ? 0 : 1 ); } char endline() { register c; c = getnb(); return( (c == '\0' || c == ';') ? 0 : c ); }