|
|
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 b
Length: 4878 (0x130e)
Types: TextFile
Names: »bootstrap.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Abermud/bootstrap.c«
/*
** Read data files.
*/
#include "kernel.h"
#ifdef RCSID
static char RCS[] =
"$Header: bootstrap.c,v 1.1 89/03/13 09:35:38 rsalz Exp $";
#endif /* RCSID */
bootstrap()
{
register FILE *a;
register FILE *b;
int mused;
char x[128];
char *y;
if ((a = fopen(BOOTSTRAP, "r")) == NULL) {
fprintf(stderr, "Bootstrap failed\n");
exit(1);
}
while (fgets(x, sizeof x, a)) {
if (y = strchr(x, '\n'))
*y = '\0';
if (userid == sys_uid)
printf("Bootstrap... %s ", x);
if ((y = strchr(x, ':')) == NULL) {
fprintf(stderr, "Invalid bootstrap declaration\n");
exit(1);
}
y++;
if ((b = fopen(y, "r")) == NULL) {
printf("Can't open %c file %s.\n", x[0], y);
exit(1);
}
switch (x[0]) {
case 'C':
mused = bootmobiles(b);
break;
case 'L':
mused = bootlocations(b);
break;
case 'M':
mused = bootmessages(b);
break;
case 'O':
mused = bootobjects(b);
break;
case 'V':
mused = bootverbs(b);
break;
case 'Z':
mused = bootzones(b);
break;
}
fclose(b);
if (userid == sys_uid)
printf("used %d bytes\n", mused);
}
fclose(a);
}
static char *
getstring(file)
register FILE *file;
{
char x[1024];
register char *y;
for (y = x; (*y = fgetc(file)) != '^'; y++)
;
*y = 0;
fgetc(file);
return COPY(x);
}
bootmessages(a)
register FILE *a;
{
int v;
int mused;
int ct;
char x[32];
fgets(x, sizeof x, a);
if (!sscanf(x, "%d", &v)) {
fprintf(stderr, "Illegal message number\n");
exit(1);
}
messages = NEW(char*, v);
mused = v * sizeof (char *);
for (ct = 0; ct < v; ct++) {
messages[ct] = getstring(a);
mused += strlen(messages[ct]) + 1;
}
return mused;
}
bootobjects(a)
register FILE *a;
{
int s1, s2;
int v;
int ct;
char x[32], y[32];
int mused;
fscanf(a, "%d", &v);
fgetc(a);
objects = NEW(OBJECT, v);
objinfo = NEW(int, 4 * v);
mused = sizeof (OBJECT) * v;
mused += sizeof (int) * 4 * v;
numobs = v;
for (ct = 0; ct < v; ct++) {
fscanf(a, "%s %s %d %d %d %d %d",
x, y,
&objects[ct].o_maxstate, &objects[ct].o_value,
&objects[ct].o_flannel,
&s1, &s2);
objects[ct].o_name = COPY(x);
objects[ct].o_altname = COPY(y);
objects[ct].o_size = s1;
objects[ct].o_weight = s2;
mused += strlen(x) + strlen(y);
fgetc(a);
objects[ct].o_desc[0] = getstring(a);
mused += strlen(objects[ct].o_desc[0]);
objects[ct].o_desc[1] = getstring(a);
mused += strlen(objects[ct].o_desc[1]);
objects[ct].o_desc[2] = getstring(a);
mused += strlen(objects[ct].o_desc[2]);
objects[ct].o_desc[3] = getstring(a);
mused += strlen(objects[ct].o_desc[3]);
}
return mused;
}
bootmobiles(a)
register FILE *a;
{
char x[64];
int v, ct;
int mused;
fgets(x, sizeof x, a);
sscanf(x, "%d", &v);
pinit = NEW(PLAYER, v);
mused = sizeof (PLAYER) * v;
pftxt = NEW(char*, v);
mused += sizeof (char *) * v;
for (ct = 0; ct < v; ct++) {
pinit[ct].p_name = getstring(a);
fscanf(a, "%d %d %d %d",
&pinit[ct].p_loc, &pinit[ct].p_str,
&pinit[ct].p_sex, &pinit[ct].p_lev);
mused += strlen(pinit[ct].p_name) + 1;
fgetc(a);
pftxt[ct] = getstring(a);
mused += strlen(pftxt[ct]) + 1;
}
numchars = v + 16;
return mused;
}
bootlocations(a)
register FILE *a;
{
char x[64];
int v, ct;
int mused;
fgets(x, sizeof x, a);
sscanf(x, "%d", &v);
room_data = NEW(LOCDATA, v + 1);
mused = sizeof (LOCDATA) * (v + 1);
for (ct = 0; ct < v; ct++) {
fscanf(a, "%d %d %d %d %d %d %d",
&room_data[ct].r_code,
&room_data[ct].r_exit[0], &room_data[ct].r_exit[1],
&room_data[ct].r_exit[2], &room_data[ct].r_exit[3],
&room_data[ct].r_exit[4], &room_data[ct].r_exit[5]);
fgetc(a);
room_data[ct].r_short = getstring(a);
room_data[ct].r_long = getstring(a);
mused += strlen(room_data[ct].r_short) + strlen(room_data[ct].r_long) + 2;
}
room_data[ct].r_code = 0; /* END MARK */
return mused;
}
bootzones(a)
register FILE *a;
{
char x[64];
int ct;
int mused;
fgets(x, sizeof x, a);
sscanf(x, "%d", &numzon);
zoname = NEW(ZONE, numzon);
mused = sizeof (ZONE) * numzon;
for (ct = 0; ct < numzon; ct++) {
fscanf(a, "%s %d", x, &zoname[ct].z_loc);
zoname[ct].z_name = COPY(x);
mused += strlen(x) + 1;
}
return mused;
}
bootverbs(a)
register FILE *a;
{
int v, ct;
int mused;
char x[64];
fscanf(a, "%d", &v);
mused = sizeof (char *) * (v + 1);
mused += sizeof (int) * (v + 1);
verbtxt = NEW(char*, v + 1);
verbnum = NEW(int, v + 1);
for (ct = 0; ct < v; ct++) {
fscanf(a, "%s %d", x, &verbnum[ct]);
verbtxt[ct] = COPY(x);
mused += strlen(x) + 1;
}
verbtxt[ct] = NULL;
return mused;
}