AUSAM/source/mac/mac/mac42.c
#include "mac.h"
#include "mac.x"
getsym()
{
register int i;
register int j;
register char *s;
register char cc;
switch (cc = *p++) {
case ' ':
case '\t':
i=1;
while (*p == ' ' || *p == '\t') {
i++;
p++;
}
sym = SPA;
mem = i;
return;
case ',':
sym = DEL;
mem = ',';
return;
case '\n':
sym = EOL;
mem = NUL;
return;
case '\'':
sym = CON;
i = 0;
while ((cc = getch()) != '\'')
i = (i<<8) | cc;
mem = i;
return;
case '"':
s = clabel;
i = 0;
while ((cc = getch()) != '"') {
if (i++ > 30)
break;
*s++ = cc;
}
*s = '\0';
sym = STR;
mem = i;
return;
case ';':
s = clabel;
*s++ = cc;
while (*p != '\n') *s++ = *p++;
sym = COM;
mem = (s - clabel);
return;
case '\0':
sym = EOF;
mem = 0;
return;
}
if ((j = any(cc, alptab)) >= 0) {
s = clabel;
*s++ = cc;
i = 1;
while (any(*p, alptab) >= 0 || any(*p, dectab) >= 0) {
*s++ = *p++;
i++;
if (i > 8)
break;
}
*s++ = '\0';
/* check literal table */
for (i=0; i<head.h_literals; i++)
if (compar(literals+i*8, clabel)) {
sym = LIT;
mem = i;
return;
}
sym = LBL;
mem = j;
return;
}
if ((j = any(cc, dectab)) >= 0) {
p--;
sym = CON;
mem = argnum();
return;
}
if ((j = any(cc, oprtab)) >= 0) {
sym = OPR;
mem = j;
return;
}
sym = CHR;
mem = cc;
return;
}