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