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