-
Notifications
You must be signed in to change notification settings - Fork 0
/
database.c
139 lines (110 loc) · 3.03 KB
/
database.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
* 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);
}
}