|
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 n
Length: 3129 (0xc39) Types: TextFile Names: »newuaf.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987 └─⟦this⟧ »EUUGD18/General/Abermud/newuaf.c«
/* ** */ #include "kernel.h" #ifdef RCSID static char RCS[] = "$Header: newuaf.c,v 1.1 89/03/13 09:37:15 rsalz Exp $"; #endif /* RCSID */ #define PCTL_GET 0 #define PCTL_FIND 1 static FILE * openuaf(perm) char *perm; { FILE *i; if ((i = openlock(UAF_RAND, perm)) == NULL) crapup("Cannot access UAF\n"); return i; } static FILE * personactl(name, d, act) char *name; PERSONA *d; int act; { FILE *a; char c[32], e[32]; a = openuaf("r+"); lowercase(strcpy(e, name)); while (fread((char *)d, sizeof(PERSONA), 1, a) == 1) if (EQ(lowercase(strcpy(c, d->p_name)), e)) switch (act) { case PCTL_GET: closelock(a); /* Hack, return pointer to closed file. */ return a; case PCTL_FIND: fseek(a, ftell(a) - sizeof (PERSONA), 0); return a; } closelock(a); return NULL; } findpers(name, x) char *name; PERSONA *x; { return(personactl(name, x, PCTL_GET) != NULL); } delpers(name) char *name; { FILE *i; PERSONA x; /* Was while loop but something happened and this looped forever... */ if (i = personactl(name, &x, PCTL_FIND)) { mudlog("Deleted %s", lowercase(name)); if (!EQ(lowercase(x.p_name), name)) crapup("Panic: Invalid Persona Delete"); x.p_name[0] = '\0'; x.p_level = -1; fwrite((char *)&x, sizeof(PERSONA), 1, i); closelock(i); } } putpers(name, pers) char *name; PERSONA *pers; { FILE *i; off_t flen; PERSONA s; if ((i = personactl(name, &s, PCTL_FIND)) == NULL) { flen = -1; if ((i = personactl("", &s, PCTL_FIND)) == NULL) { i = openuaf("a"); flen = ftell(i); } if (fwrite((char *)pers, sizeof(PERSONA), 1, i) != 1) { bprintf("Save Failed - Device Full ?\n"); if (flen != -1) ftruncate(fileno(i), (off_t)flen); } closelock(i); return; } fwrite((char *)pers, sizeof(PERSONA), 1, i); closelock(i); } decpers(pers, name, str, score, lev, sex) PERSONA *pers; char *name; int *str, *score, *lev, *sex; { strcpy(name, pers->p_name); *str = pers->p_strength; *score = pers->p_score; *lev = pers->p_level; *sex = pers->p_sex; } initme() { PERSONA x; char s[32]; if (findpers(globme, &x)) { decpers(&x, s, &my_str, &my_sco, &my_lev, &my_sex); if (my_str >= 0) return; } x.p_score = 0; bprintf("Creating character....\n"); my_sco = 0; my_str = 40; my_lev = 1; for (my_sex = -1; my_sex < 0; ) { bprintf("\nSex (M/F) : "); pbfr(); key_input(">", 2); switch (key_buff[0]) { case 'M': case 'm': my_sex = 0; break; case 'F': case 'f': my_sex = 1; break; default: bprintf("M or F"); } } strcpy(x.p_name, globme); x.p_strength = my_str; x.p_level = my_lev; x.p_sex = my_sex; x.p_score = my_sco; putpers(globme, &x); } saveme() { PERSONA x; strcpy(x.p_name, globme); x.p_strength = pstr(mynum); x.p_level = plev(mynum); x.p_sex = psexall(mynum); x.p_score = pscore(mynum); if (!zapped) { bprintf("\nSaving %s\n", pname(mynum)); putpers(globme, &x); } }