home *** CD-ROM | disk | FTP | other *** search
- /* aslex.c */
-
- /*
- * (C) Copyright 1989
- * All Rights Reserved
- *
- * Alan R. Baldwin
- * 721 Berkeley St.
- * Kent, Ohio 44240
- */
-
- #include <stdio.h>
- #include <setjmp.h>
- #include "asm.h"
-
- VOID
- getid(id, c)
- register c;
- char *id;
- {
- register char *p;
-
- if (c < 0) {
- c = getnb();
- if (ctype[c] != LETTER)
- qerr();
- }
- 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;
- }
-
- char
- getnb()
- {
- register char c;
-
- while ((c=get()) == ' ' || c == '\t')
- ;
- return (c);
- }
-
- char
- get()
- {
- register char c;
-
- if (c = *ip)
- ++ip;
- return (c);
- }
-
- VOID
- unget(c)
- {
- if (c)
- --ip;
- }
-
- char
- getmap(d)
- {
- register char c, n, v;
-
- if ((c=get()) == '\0')
- qerr();
- 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()
- {
- loop: if (incfil >= 0) {
- if (fgets(ib, sizeof ib, ifp[incfil]) == NULL) {
- fclose(ifp[incfil--]);
- lop = NLPP;
- goto loop;
- }
- ib[strlen(ib) - 1] = 0;
- return(1);
- }
- if (fgets(ib, sizeof ib, sfp[cfile]) == NULL) {
- if (++cfile <= inpfil)
- goto loop;
- 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 char c;
-
- c = getnb();
- return( (c == '\0' || c == ';') ? 0 : c );
- }
-