|
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 m
Length: 1696 (0x6a0) Types: TextFile Names: »makeops.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/asm/makeops.c«
#include <stdio.h> #include <ctype.h> #define iswhite(x) (x)==' '||(x)=='\t'||(x)==',' #define skipword while(isalnum(*pt)||*pt=='_')pt++; #define skipwhite while(iswhite(*pt))pt++; struct { char *name, *str; } entry[100]; int ep, entryn = 0; char buf[140], hold[2048]; char *pt, *pt2, *name, *arg1, *arg2; extern int strncmp(), strcmp(); main () { while (gets (buf) > 0) { if (strncmp (buf, "beginpattern", 12) == 0) { pt = buf; skipword; skipwhite; entry[entryn].name = (char *) malloc (strlen (pt) + 1); strcpy (entry[entryn].name, pt); pt = hold; while (gets (buf) > 0 && strncmp (buf, "endpattern", 10) != 0) { strcpy (pt, buf); pt += strlen (pt); *pt++ = '\n'; } *pt = '\0'; entry[entryn].str = (char *) malloc (strlen (hold) + 1); strcpy (entry[entryn].str, hold); entryn++; } else if (strncmp (buf, "pattern", 7) == 0) { pt = buf; skipword; skipwhite; name = pt; skipword; *pt++ = 0; skipwhite; arg1 = pt; skipword; *pt++ = 0; skipwhite; arg2 = pt; skipword; *pt = 0; for (ep = 0; ep < entryn; ep++) { if (strcmp (name, entry[ep].name) == 0) { for (pt = entry[ep].str; *pt; pt++) { if (*pt == '~') { switch (*(++pt)) { case '1': pt2 = arg1; goto argout; case '2': pt2 = arg2; argout: while (*pt2) { putchar (*pt2++); } break; default: putchar ('~'); putchar (*pt); } } else { putchar (*pt); } } goto nextch; } } fprintf (stderr, "makeops: can't find macro %s\n", name); nextch: ; } else { puts (buf); } } exit (0); }