home *** CD-ROM | disk | FTP | other *** search
- /* lklex.c */
-
- /*
- * (C) Copyright 1989
- * All Rights Reserved
- *
- * Alan R. Baldwin
- * 721 Berkeley St.
- * Kent, Ohio 44240
- */
-
- #include <stdio.h>
- #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 );
- }
-