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 b

⟦f08bc66e3⟧ TextFile

    Length: 4878 (0x130e)
    Types: TextFile
    Names: »bootstrap.c«

Derivation

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

TextFile

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