|
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: 1905 (0x771) Types: TextFile Names: »parser.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Abermud/parser.c«
/* * The Parser */ #include "kernel.h" #ifdef RCSID static char RCS[] = "$Header: parser.c,v 1.1 89/03/13 09:37:40 rsalz Exp $"; #endif /* RCSID */ char * markpos() { for (; strbuf[stp]; stp++) if (!isspace(strbuf[stp]) && strbuf[stp] != ',') break; return strbuf + stp; } parse_2(vb) int vb; { int savstp; if ((verbcode = vb) == -1) return; savstp = stp; txt1 = markpos(); strcpy(item1, ""); strcpy(item2, ""); if (brkword() == -1) { ob1 = -1; ob2 = -1; prep = 0; pl1 = -1; pl2 = -1; stp = savstp; return; } strcpy(item1, wordbuf); if (findprep(item1) != -1) { ob1 = -1; pl1 = -1; } else { txt2 = markpos(); pl1 = fpbn(item1); if ((ob1 = fobnc(item1)) == -1) ob1 = fobna(item1); if (pl1 != -1) setthem(pl1); if (ob1 != -1) strcpy(wd_it, oname(ob1)); if (brkword() == -1) { ob2 = -1; pl2 = -1; prep = 0; stp = savstp; return; } } if ((prep = findprep(wordbuf)) == -1) prep = 0; else if (brkword() == -1) { pl2 = -1; ob2 = -1; stp = savstp; return; } strcpy(item2, wordbuf); pl2 = fpbn(wordbuf); if ((ob2 = fobnc(wordbuf)) == -1) ob2 = fobna(wordbuf); if (pl2 != -1) setthem(pl2); if (ob2 != -1) strcpy(wd_it, oname(ob2)); if (txt2 == NULL) txt2 = markpos(); stp = savstp; } setthem(p) int p; { switch (psex(p)) { case 0: strcpy(wd_him, pname(p)); break; case 1: strcpy(wd_her, pname(p)); break; case 2: strcpy(wd_it, pname(p)); break; } strcpy(wd_them, pname(p)); } findprep(x) char *x; { if (EQ(x, "at")) return 1; if (EQ(x, "on")) return 2; if (EQ(x, "with")) return 3; if (EQ(x, "to")) return 4; if (EQ(x, "in")) return 5; if (EQ(x, "into")) return 5; if (EQ(x, "from")) return 6; if (EQ(x, "out")) return 7; return -1; }