1: /* 2: * setfiles.c Program to set up all files for Phantasia 3: * 4: * This program tries to verify the parameters specified in 5: * the Makefile. Since Phantasia assumes its files exist, 6: * simple errors can result in core dumps. 7: * 8: * This program tries to check against this. 9: */ 10: 11: #include "phant.h" 12: #include <sys/types.h> 13: #include <sys/stat.h> 14: 15: main(argc,argv) /* program to init. files for Phantasia */ 16: int argc; 17: char **argv; 18: { 19: FILE *fp; 20: struct stats sbuf; 21: struct nrgvoid grail; 22: struct stat fbuf; 23: register int loop; 24: int foo; 25: char stbuf[128]; 26: 27: #ifdef notdef 28: srand((int) time(NULL)); /* prime random numbers */ 29: /* try to check RAND definition */ 30: for (loop = 1000; loop; loop--) 31: { 32: if ((foo = rand()) > ((int) RAND)) 33: { 34: sprintf(stbuf,"%f %f",(double) RAND, (double) foo); 35: Error("%s is a bad value for RAND.\n",stbuf); 36: } 37: } 38: #endif 39: umask(077); 40: /* check where Phantasia lives */ 41: if (stat(PATH",&fbuf) < 0) 42: { 43: perror(PATH"); 44: exit(1); 45: /*NOTREACHED*/ 46: } 47: if (fbuf.st_mode & S_IFDIR == 0) 48: Error("%s is not a directory.\n",PATH"); 49: /* try to create data files */ 50: if ((fp = fopen(goldfile,"w")) == NULL) 51: Error("cannot create %s.\n",goldfile); 52: else 53: fclose(fp); 54: if ((fp = fopen(motd,"w")) == NULL) 55: Error("cannot create %s.\n",motd); 56: else 57: fclose(fp); 58: if ((fp = fopen(messfile,"w")) == NULL) 59: Error("cannot create %s.\n",messfile); 60: else 61: fclose(fp); 62: /* do not reset character file if it already exists */ 63: if (stat(peoplefile,&fbuf) < 0) 64: { 65: buildchar(&sbuf); 66: strcpy(sbuf.name,"<null>"); 67: if ((fp = fopen(peoplefile,"w")) == NULL) 68: Error("cannot create %s.\n",peoplefile); 69: else 70: { 71: fwrite(&sbuf,sizeof(sbuf),1,fp); 72: fclose(fp); 73: } 74: } 75: grail.active = TRUE; 76: grail.x = roll(-1.0e6,2.0e6); 77: grail.y = roll(-1.0e6,2.0e6); 78: if ((fp = fopen(voidfile,"w")) == NULL) 79: Error("cannot create %s.\n",voidfile); 80: else 81: { 82: fwrite(&grail,sizeof(grail),1,fp); 83: fclose(fp); 84: } 85: if ((fp = fopen(lastdead,"w")) == NULL) 86: Error("cannot create %s.\n",lastdead); 87: else 88: { 89: fputs(" ",fp); 90: fclose(fp); 91: } 92: #ifdef ENEMY 93: if ((fp = fopen(enemyfile,"w")) == NULL) 94: Error("cannot create %s.\n",enemyfile); 95: else 96: { 97: /* comment this out for now 98: fprintf(fp,"# Use this file to restrict access from obnoxious users.\n"); 99: fprintf(fp,"# Just put the login names of those restricted, one per\n"); 100: fprintf(fp,"# line, below.\n"); 101: */ 102: fclose(fp); 103: } 104: #endif 105: if (getuid() != UID) 106: fprintf(stderr,"Warning: UID (%d) is not equal to current uid.\n",UID); 107: } 108: 109: buildchar(stat) /* put in some default values */ 110: /* Note that this function is almost the same as initchar(). 111: It is used to insure that unexpected values will not be found in a 112: new character file. */ 113: struct stats *stat; 114: { 115: stat->x = roll(-125,251); 116: stat->y = roll(-125,251); 117: stat->exp = stat->lvl = stat->sin = 0; 118: stat->crn = stat->psn = 0; 119: stat->rng.type = NONE; 120: stat->rng.duration = 0; 121: stat->pal = FALSE; 122: stat->hw = stat->amu = stat->bls = 0; 123: stat->chm = 0; 124: stat->gem = 0.1; 125: stat->gld = roll(25,50) + roll(0,25) + 0.1; 126: stat->quks = stat->swd = stat->shd = 0; 127: stat->vrg = FALSE; 128: stat->typ = 0; 129: } 130: 131: Error(str,file) /* print an error message, and exit */ 132: char *str, *file; 133: { 134: fprintf(stderr,"Error: "); 135: fprintf(stderr,str,file); 136: exit(1); 137: /*NOTREACHED*/ 138: }