|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 3605 (0xe15) Types: TextFile Names: »pseudos.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/asm/pseudos.c«
#include "asm.h" int do_incl () { if (pass == 1) { char *ip; if (++currinput > INCLSTACK) reporterr (E_INCL); opd++; if ((ip = index (opd, '"')) == 0) reporterr (E_INCLSYN); *ip = 0; if ((input[currinput] = fopen (opd, "r")) == NULL) reporterr (E_INPUT); filename[currinput] = strcpy (malloc ((unsigned) strlen (opd) + 1), opd); lineno[currinput] = 0; } return (0); } int do_org () { if (label && *label) insert (label, (long) lc, &o_none, curseg, NO); if (pass == 2) listit (linecopy, lc, dummy, 0); lc = (Memad) expr (&opd, &ignerr, NO); return (0); } int do_loff () { liston = NO; return (0); } int do_lon () { liston = YES; return (0); } int do_equ () { long eqtemp; eqtemp = expr (&opd, &ignerr, NO); if (label && *label) insert (label, eqtemp, &o_none, exprseg, NO); if (pass == 2) listit (linecopy, eqtemp, dummy, 0); return (0); } int do_seg () { segmnt *sp, *osp; curseg->lc = lc; if (opd && *opd) { for (sp = seghd; sp; osp = sp, sp = sp->next) { if (strcmp (sp->name, opd) == 0) { lc = sp->lc; curseg = sp; goto fin_seg; } } } else { lc = seghd->lc; curseg = seghd; } curseg = osp->next = (segmnt *) malloc ((unsigned) sizeof (segmnt)); curseg->name = strcpy (malloc ((unsigned) strlen (opd) + 1), opd); curseg->lc = lc = 0; curseg->next = (segmnt *) 0; fin_seg: if (pass == 2) listit (linecopy, lc, dummy, 0); return (0); } int do_set () { long eqtemp; eqtemp = expr (&opd, &ignerr, NO); if (label && *label) insert (label, eqtemp, &o_none, exprseg, YES); if (pass == 2) listit (linecopy, eqtemp, dummy, 0); return (0); } int do_bss () { if (label && *label) insert (label, (long) lc, &o_none, curseg, NO); if (pass == 2) listit (linecopy, lc, dummy, 0); lc += (Memad) expr (&opd, &ignerr, NO); return (0); } int do_end () { end_found ++; curseg->lc = lc; if (pass == 2) { listit (linecopy, lc, dummy, 0); lc = 0xffff; putoutbin (dummy, 0); } curseg = seghd; return (1); } int do_data () { Word temp, templist[MAXBYTPERINS]; char *tp; int count; if (label && *label) insert (label, (long) lc, &o_none, curseg, NO); tp = opd; count = 1; if (*opd == ':') { ++opd; count = expr (&opd, &ignerr, NO); if (*opd == ':') { opd ++; } else { reporterr (E_EXPR); count = 1; opd = tp; } } if (pass == 2) { int i, j; temp = (Word) expr (&opd, &ignerr, NO); for (i = 0; i < MAXBYTPERINS; i++) templist[i] = temp; listit (linecopy, lc, templist, count); for (i = 0; i < count; i++) putoutbin (&temp, 1); } lc += count; return (0); } int do_data2 () { Long temp; char *tp; int count; if (label && *label) insert (label, (long) lc, &o_none, curseg, NO); tp = opd; count = 1; if (*opd == ':') { ++opd; count = expr (&opd, &ignerr, NO); if (*opd == ':') { opd ++; } else { reporterr (E_EXPR); count = 1; opd = tp; } } if (pass == 2) { int i; temp = (Long) expr (&opd, &ignerr, NO); listit (linecopy, lc, (Word *)&temp, 2*count); for (i = 0; i < count; i++) { putoutbin ((Word *)&temp, 1); } } lc += (2 * count); return (0); } int do_string () { Word buf[120], *bp; Word delim; int len, i; if (label && *label) insert (label, (long) lc, &o_none, curseg, NO); delim = *opd++; bp = buf; while (*opd != delim) { if (*opd != '\\') *bp++ = *opd; else { ++opd; *bp++ = escape (&opd); } opd++; } *bp++ = '\0'; len = bp - buf; if (pass == 2) { listit (linecopy, lc, buf, len); putoutbin (buf, len); } lc += len; return (0); }