DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦c25aa6841⟧ TextFile

    Length: 1905 (0x771)
    Types: TextFile
    Names: »parser.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Abermud/parser.c« 

TextFile

/*
 *    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;
}