|
|
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 d
Length: 3103 (0xc1f)
Types: TextFile
Names: »database.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Rog-O-Matic/database.c«
/*
* database.c: Rog-O-Matic XIV (CMU) Fri Dec 28 23:26:25 1984 - mlm
* Copyright (C) 1985 by A. Appel, G. Jacobson, L. Hamey, and M. Mauldin
*
* This file contains the code which handles the database of objects which
* have been used, and what the real names of the items are. There are
* five functions:
*
* useobj (oldname) enter the object type into the database
* infername (oldname, name) make the real name of obj be name
* used (oldname) returns TRUE if we have entered obj
* know (name) returns TRUE if we have inferred name
* realname (oldname) returns the inferred name of obj
*/
# include <curses.h>
# include "types.h"
# include "globals.h"
# define TABLESIZE 101
# define NOTFOUND (-1)
struct { char fakename[64];
char roguenam[64]; } dbase[TABLESIZE];
int datalen = 0;
/*
* findentry: find the database entry for 'string'
*/
findentry (string)
char *string;
{ register int i;
for (i = 0; i < datalen; i++)
if (streq (dbase[i].fakename, string) ||
*dbase[i].roguenam && streq (dbase[i].roguenam, string))
return (i);
return (NOTFOUND);
}
/*
* useobj: Indicate that we have used (i.e. read, quaffed, or zapped) an
* object with name 'oldname'.
*/
useobj (oldname)
char *oldname;
{ if (findentry (oldname) == NOTFOUND)
{ strcpy (dbase[datalen].fakename, oldname);
strcpy (dbase[datalen++].roguenam, "");
}
}
/*
* infername: Note that we now think that the object named 'oldname' is
* really named 'name' (e.g. scroll 'google plex' is really a scroll of
* light).
*/
infername (oldname, name)
char *oldname;
char *name;
{ register int i;
i = findentry (oldname);
if (i == NOTFOUND)
{ strcpy (dbase[datalen].fakename, oldname);
strcpy (dbase[datalen++].roguenam, name);
}
else
{ if (*dbase[i].roguenam && strcmp (dbase[i].roguenam, name))
dwait (D_ERROR, "Inconsistent inference '%s', '%s'",
dbase[i].roguenam, name);
else
strcpy (dbase[i].roguenam, name);
}
}
/*
* used: Return true if we have marked 'oldname' as used.
*/
int used (oldname)
char *oldname;
{ register int i;
for (i = 0; i < datalen; i++)
if (streq (dbase[i].fakename, oldname))
return (TRUE);
return (FALSE);
}
/*
* know: Return true if we know what the fake name for 'name' is.
*/
int know (name)
char *name;
{ register int i;
for (i = 0; i < datalen; i++)
if (*dbase[i].roguenam && streq (dbase[i].roguenam, name))
return (TRUE);
return (FALSE);
}
/*
* realname: Returns the real name of an object nmed 'oldname'.
*/
char *realname (oldname)
char *oldname;
{ register int i;
for (i = 0; i < datalen; i++)
if (*dbase[i].roguenam && streq (dbase[i].fakename, oldname))
return (dbase[i].roguenam);
return ("");
}
/*
* dumpdatabase: Debugging, dump the database one the screen.
*/
dumpdatabase ()
{ register int i;
for (i = 0; i < datalen; i++)
{ at (i+1, 0);
printw ("%-32s '%s'", dbase[i].roguenam, dbase[i].fakename);
}
}