|
|
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 g
Length: 3301 (0xce5)
Types: TextFile
Names: »generate.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Abermud/generate.c«
/*
** Utility program to build the data files.
*/
#include "kernel.h"
#ifdef RCSID
static char RCS[] =
"$Header: generate.c,v 1.1 89/03/13 09:36:24 rsalz Exp $";
#endif /* RCSID */
static int blob[10000];
crapup(p)
char *p;
{
perror(p);
exit(1);
}
/*
** Parse a flags line, a line like:
** int1:int2:bits
** and turn it into a four-byte int like:
** bits:int1:int2
*/
static int
flags(buff)
char *buff;
{
register char *p;
register int i;
register int b;
char save[120];
(void)strcpy(save, buff);
if (p = strchr(buff, ':')) {
*p++ = '\0';
i = atoi(buff) << 8;
buff = p;
if (p = strchr(buff, ':')) {
*p++ = '\0';
/* i |= atoi(p); */
i |= atoi(buff);
for (b = 0; *p && *p != '\n'; p++)
b = (b << 1) | (*p == '0' ? 0 : 1);
return i | (b << 16);
}
}
fprintf(stderr, "Badly-formed input line:\n\t%s\n", save);
exit(1);
/* NOTREACHED */
}
\f
/*
** Open file to write or die trying.
*/
static FILE *
Xfopen(p)
char *p;
{
FILE *F;
(void)unlink(p);
if ((F = fopen(p, "w")) == NULL) {
perror(p);
(void)fprintf(stderr, "Unable to create new version.\n");
exit(1);
}
return F;
}
/*
** Create world file.
*/
static void
make_world(ac, av)
int ac;
char *av[];
{
register FILE *F;
register int b;
int x[64];
F = Xfopen(ac == 2 ? av[1] : UNIVERSE);
x[0] = 1;
x[1] = 1;
sec_write(F, x, 0, sizeof x / sizeof x[0]);
for (b = 0; b < sizeof x / sizeof x[0]; )
x[b++] = 0;
for (b = 1; b < 600; b++, x[0] = 0)
sec_write(F, x, b, sizeof x / sizeof x[0]);
(void)fclose(F);
exit(0);
}
/*
** Create the user activity file.
*/
static void
make_uaf(ac, av)
int ac;
char *av[];
{
FILE *F;
PERSONA P;
F = Xfopen(ac == 2 ? av[1] : UAF_RAND);
P.p_sex = 0;
P.p_level = 10001;
P.p_score = 0;
P.p_strength = 100;
(void)strcpy(P.p_name, "Root");
(void)fwrite((char *)&P, 1, sizeof P, F);
/* Not legal name as endmark ie 2 in it */
(void)strcpy(P.p_name, "Debugger");
(void)fwrite((char *)&P, 1, sizeof P, F);
(void)fclose(F);
exit(0);
}
/*
** Make the data file that shows what starts where, and their states.
*/
static void
make_reset(ac, av)
int ac;
char *av[];
{
register FILE *In;
register FILE *Out;
register int *ip;
register int i;
char buff[128];
if (ac == 3) {
if ((In = fopen(av[1], "r")) == NULL) {
perror(av[1]);
(void)fprintf(stderr, "Can't open input file.");
}
Out = Xfopen(av[2]);
}
for (ip = blob, i = 0; fgets(buff, sizeof buff, In); i++)
*ip++ = ((i & 0x03) == 2) ? flags(buff) : (int) atoi(buff);
sec_write(Out, blob, 0, ip - blob);
(void)fclose(In);
(void)fclose(Out);
exit(0);
}
/*
** Make the user file.
*/
static void
make_user(ac, av)
int ac;
char *av[];
{
(void)fclose(Xfopen(ac == 2 ? av[1] : PASSWORDFILE));
exit(0);
}
main(ac, av)
int ac;
char *av[];
{
ac--;
av++;
if (EQ(*av, "world"))
make_world(ac, av);
if (EQ(*av, "uaf"))
make_uaf(ac, av);
if (EQ(*av, "reset"))
make_reset(ac, av);
if (EQ(*av, "userfile"))
make_user(ac, av);
(void)fprintf(stderr, "Usage error.\n");
exit(1);
}