|
|
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 s
Length: 3453 (0xd7d)
Types: TextFile
Names: »setup.c«
└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
└─⟦this⟧ »EUUGD18/General/Phantasia/setup.c«
/*
* setup.c Program to set up all files for Phantasia
*
* This program tries to verify the parameters specified in
* the Makefile. Since Phantasia assumes its files exist,
* simple errors can result in core dumps.
*
* This program tries to check against this.
*
* Note that this is not fool-proof, and that this could
* be much more clever in checking everything.
*/
#include "phant.h"
#include <sys/types.h>
#include <sys/stat.h>
main(argc,argv) /* program to init. files for Phantasia */
int argc;
char **argv;
{
FILE *fp;
struct stats sbuf;
struct nrgvoid grail;
struct stat fbuf;
register int loop;
char stbuf[128];
int randnum;
srand((int) time(NULL)); /* prime random numbers */
/* try to check RAND definition */
/* avoid problems on tahoe (bug?) DTW */
# ifndef TAHOE
for (loop = 1000; loop; loop--)
{
if ((randnum = rand()) > ((unsigned int) RAND))
{
sprintf(stbuf,"%.1f (< %d)",(double) RAND, randnum);
Error("%s is a bad value for RAND.\n",stbuf);
}
}
# endif
umask(077);
/* check where Phantasia lives */
if (stat(PATH",&fbuf) < 0)
{
perror(PATH");
exit(1);
/*NOTREACHED*/
}
if (fbuf.st_mode & S_IFDIR == 0)
Error("%s is not a directory.\n",PATH");
/* try to create data files */
if ((fp = fopen(goldfile,"w")) == NULL)
Error("cannot create %s.\n",goldfile);
else
fclose(fp);
if ((fp = fopen(motd,"w")) == NULL)
Error("cannot create %s.\n",motd);
else
fclose(fp);
if ((fp = fopen(messfile,"w")) == NULL)
Error("cannot create %s.\n",messfile);
else
fclose(fp);
/* do not reset character file if it already exists */
if (stat(peoplefile,&fbuf) < 0)
{
buildchar(&sbuf);
strcpy(sbuf.name,"<null>");
if ((fp = fopen(peoplefile,"w")) == NULL)
Error("cannot create %s.\n",peoplefile);
else
{
fwrite(&sbuf,sizeof(sbuf),1,fp);
fclose(fp);
}
}
grail.active = TRUE;
grail.x = roll(-1.0e6,2.0e6);
grail.y = roll(-1.0e6,2.0e6);
if ((fp = fopen(voidfile,"w")) == NULL)
Error("cannot create %s.\n",voidfile);
else
{
fwrite(&grail,sizeof(grail),1,fp);
fclose(fp);
}
if ((fp = fopen(lastdead,"w")) == NULL)
Error("cannot create %s.\n",lastdead);
else
{
fputs(" ",fp);
fclose(fp);
}
#ifdef ENEMY
if ((fp = fopen(enemyfile,"w")) == NULL)
Error("cannot create %s.\n",enemyfile);
else
fclose(fp);
#endif
if ((fp = fopen(sbfile,"w")) == NULL)
Error("cannot create %s.\n",sbfile);
else
fclose(fp);
if (getuid() != UID)
fprintf(stderr,"Warning: UID (%d) is not equal to current uid.\n",UID);
exit(0);
}
buildchar(stat) /* put in some default values */
/* Note that this function is almost the same as initchar().
It is used to insure that unexpected values will not be found in a
new character file. */
struct stats *stat;
{
stat->x = roll(-125,251);
stat->y = roll(-125,251);
stat->exp = stat->lvl = stat->sin = 0;
stat->crn = stat->psn = 0;
stat->rng.type = NONE;
stat->rng.duration = 0;
stat->pal = FALSE;
stat->hw = stat->amu = stat->bls = 0;
stat->chm = 0;
stat->gem = 0.1;
stat->gld = roll(25,50) + roll(0,25) + 0.1;
stat->quks = stat->swd = stat->shd = 0;
stat->vrg = FALSE;
stat->typ = 0;
}
Error(str,file) /* print an error message, and exit */
char *str, *file;
{
fprintf(stderr,"Error: ");
fprintf(stderr,str,file);
exit(1);
/*NOTREACHED*/
}