Annotation of 43BSDTahoe/games/phantasia/setup.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * setup.c - set up all files for Phantasia
                      3:  */
                      4: #include "include.h"
                      5: #include <sys/types.h>
                      6: #include <sys/stat.h>
                      7: /**/
                      8: /************************************************************************
                      9: /
                     10: / FUNCTION NAME: main()
                     11: /
                     12: / FUNCTION: setup files for Phantasia 3.3.2
                     13: /
                     14: / AUTHOR: E. A. Estes, 12/4/85
                     15: /
                     16: / ARGUMENTS: none
                     17: /
                     18: / RETURN VALUE: none
                     19: /
                     20: / MODULES CALLED: time(), exit(), stat(), Error(), creat(), close(), fopen(), 
                     21: /      fgets(), floor(), srandom(), umask(), drandom(), strcpy(), getuid(), 
                     22: /      unlink(), fwrite(), fclose(), sscanf(), printf(), strlen(), fprintf()
                     23: /
                     24: / GLOBAL INPUTS: Peoplefile[], Curmonster, _iob[], Databuf[], *Monstfp, 
                     25: /      Lastdead[], Goldfile[], Voidfile[], Motdfile[], Messfile[], Scorefile[], 
                     26: /      Enemyfile[], Monstfile[], Enrgyvoid
                     27: /
                     28: / GLOBAL OUTPUTS: Curmonster, Databuf[], *Monstfp, Enrgyvoid
                     29: /
                     30: / DESCRIPTION: 
                     31: /
                     32: /      This program tries to verify the parameters specified in
                     33: /      the Makefile.
                     34: /
                     35: /      Create all necessary files.  Note that nothing needs to be
                     36: /      put in these files.
                     37: /      Also, the monster binary data base is created here.
                     38: /
                     39: /************************************************************************/
                     40: 
                     41: main()
                     42: {
                     43: FILE   *fp;                    /* for opening files */
                     44: struct stat    fbuf;           /* for getting files statistics */
                     45: register char  **filename;     /* for pointing to file names */
                     46: register int   fd;             /* file descriptor */
                     47: static char *files[] =         /* all files to create */
                     48:        {
                     49:        Monstfile,
                     50:        Peoplefile,
                     51:        Messfile,
                     52:        Lastdead,
                     53:        Motdfile,
                     54:        Goldfile,
                     55:        Voidfile,
                     56:        Scorefile,
                     57: #ifdef ENEMY
                     58:        Enemyfile,
                     59: #endif
                     60:        (char *) NULL
                     61:        };
                     62: 
                     63:     srandom((unsigned) time((long *) NULL));   /* prime random numbers */
                     64: 
                     65:     umask(0117);               /* only owner can read/write created files */
                     66: 
                     67:     if (getuid() != UID)
                     68:        fprintf(stderr, "Warning: UID (%d) is not equal to current uid.\n", UID);
                     69: 
                     70:     /* check Phantasia destination directory */
                     71:     if (stat(DEST", &fbuf) < 0)
                     72:        /* not found */
                     73:        {
                     74:        Error("Cannot stat %s.\n", DEST");
                     75:        exit(1);
                     76:        /*NOTREACHED*/
                     77:        }
                     78: 
                     79:     if ((fbuf.st_mode & S_IFDIR) == 0)
                     80:        /* not a directory */
                     81:        Error("%s is not a directory.\n", DEST");
                     82:        /*NOTREACHED*/
                     83: 
                     84:     /* try to create data files */
                     85:     filename = &files[0];
                     86:     while (*filename != NULL)
                     87:        /* create each file */
                     88:        {
                     89:        if (stat(*filename, &fbuf) == 0)
                     90:            /* file exists; remove it */
                     91:            {
                     92:            if (*filename == Peoplefile)
                     93:                /* do not reset character file if it already exists */
                     94:                {
                     95:                ++filename;
                     96:                continue;
                     97:                }
                     98: 
                     99:            if (unlink(*filename) < 0)
                    100:                Error("Cannot unlink %s.\n", *filename);
                    101:                /*NOTREACHED*/
                    102:            }
                    103: 
                    104:        if ((fd = creat(*filename, 0660)) < 0)
                    105:            Error("Cannot create %s.\n", *filename);
                    106:            /*NOTREACHED*/
                    107: 
                    108:        close(fd);                      /* close newly created file */
                    109: 
                    110:        ++filename;                     /* process next file */
                    111:        }
                    112: 
                    113:     /* put holy grail info into energy void file */
                    114:     Enrgyvoid.ev_active = TRUE;
                    115:     Enrgyvoid.ev_x = ROLL(-1.0e6, 2.0e6);
                    116:     Enrgyvoid.ev_y = ROLL(-1.0e6, 2.0e6);
                    117:     if ((fp = fopen(Voidfile, "w")) == NULL)
                    118:        Error("Cannot update %s.\n", Voidfile);
                    119:     else
                    120:        {
                    121:        fwrite(&Enrgyvoid, SZ_VOIDSTRUCT, 1, fp);
                    122:        fclose(fp);
                    123:        }
                    124: 
                    125:     /* create binary monster data base */
                    126:     if ((Monstfp = fopen(Monstfile, "w")) == NULL)
                    127:        Error("Cannot update %s.\n", Monstfile);
                    128:     else
                    129:        {
                    130:        if ((fp = fopen("monsters.asc", "r")) == NULL)
                    131:            {
                    132:            fclose(Monstfp);
                    133:            Error("cannot open %s to create monster database.\n", "monsters.asc");
                    134:            }
                    135:        else
                    136:            {
                    137:            Curmonster.m_o_strength =
                    138:            Curmonster.m_o_speed =
                    139:            Curmonster.m_maxspeed =
                    140:            Curmonster.m_o_energy =
                    141:            Curmonster.m_melee =
                    142:            Curmonster.m_skirmish = 0.0;
                    143: 
                    144:            while (fgets(Databuf, SZ_DATABUF, fp) != NULL)
                    145:                /* read in text file, convert to binary */
                    146:                {
                    147:                sscanf(&Databuf[24], "%lf%lf%lf%lf%lf%d%d%lf",
                    148:                    &Curmonster.m_strength, &Curmonster.m_brains,
                    149:                    &Curmonster.m_speed, &Curmonster.m_energy,
                    150:                    &Curmonster.m_experience, &Curmonster.m_treasuretype,
                    151:                    &Curmonster.m_type, &Curmonster.m_flock);
                    152:                Databuf[24] = '\0';
                    153:                strcpy(Curmonster.m_name, Databuf);
                    154:                fwrite((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
                    155:                }
                    156:            fclose(fp);
                    157:            fclose(Monstfp);
                    158:            }
                    159:        }
                    160: 
                    161: #ifdef MAKE_INSTALLS_THIS_AND_DOESNT_ANSWER_QUESTIONS
                    162:     /* write to motd file */
                    163:     printf("One line 'motd' ? ");
                    164:     if (fgets(Databuf, SZ_DATABUF, stdin) == NULL)
                    165:        Databuf[0] = '\0';
                    166:     if ((fp = fopen(Motdfile, "w")) == NULL)
                    167:        Error("Cannot update %s.\n", Motdfile);
                    168:     else
                    169:        {
                    170:        fwrite(Databuf, sizeof(char), strlen(Databuf), fp);
                    171:        fclose(fp);
                    172:        }
                    173: #endif
                    174: 
                    175:     /* report compile-time options */
                    176:     printf("Compiled options:\n\n");
                    177:     printf("Phantasia destination directory:  %s\n", DEST");
                    178:     printf("Wizard:  %s   UID:  %d\n", WIZARD, UID);
                    179: 
                    180: #ifdef OK_TO_PLAY
                    181:     printf("Restricted playing enabled.\n");
                    182: #else
                    183:     printf("Playing unrestricted.\n");
                    184: #endif
                    185: 
                    186: #ifdef ENEMY
                    187:     printf("Enemy list enabled.\n");
                    188: #else
                    189:     printf("Enemy list disabled.\n");
                    190: #endif
                    191: 
                    192: #ifdef SHELL
                    193:     printf("Shell escapes enabled.  Default shell:  %s\n", SHELL);
                    194: #else
                    195:     printf("Shell escapes disabled.\n");
                    196: #endif
                    197: 
                    198: #ifdef BSD41
                    199:     printf("Compiled for BSD 4.1\n");
                    200: #endif
                    201: 
                    202: #ifdef BSD42
                    203:     printf("Compiled for BSD 4.2\n");
                    204: #endif
                    205: 
                    206: #ifdef SYS3
                    207:     printf("Compiled for System III\n");
                    208: #endif
                    209: 
                    210: #ifdef SYS5
                    211:     printf("Compiled for System V\n");
                    212: #endif
                    213: 
                    214:     exit(0);
                    215:     /*NOTREACHED*/
                    216: }
                    217: /**/
                    218: /************************************************************************
                    219: /
                    220: / FUNCTION NAME: Error()
                    221: /
                    222: / FUNCTION: print an error message, and exit
                    223: /
                    224: / AUTHOR: E. A. Estes, 12/4/85
                    225: /
                    226: / ARGUMENTS:
                    227: /      char *str - format string for printf()
                    228: /      char *file - file which caused error
                    229: /
                    230: / RETURN VALUE: none
                    231: /
                    232: / MODULES CALLED: exit(), perror(), fprintf()
                    233: /
                    234: / GLOBAL INPUTS: _iob[]
                    235: /
                    236: / GLOBAL OUTPUTS: none
                    237: /
                    238: / DESCRIPTION:
                    239: /      Print an error message, then exit.
                    240: /
                    241: /************************************************************************/
                    242: 
                    243: Error(str, file)
                    244: char   *str, *file;
                    245: {
                    246:     fprintf(stderr, "Error: ");
                    247:     fprintf(stderr, str, file);
                    248:     perror(file);
                    249:     exit(1);
                    250:     /*NOTREACHED*/
                    251: }
                    252: /**/
                    253: /************************************************************************
                    254: /
                    255: / FUNCTION NAME: drandom()
                    256: /
                    257: / FUNCTION: return a random number
                    258: /
                    259: / AUTHOR: E. A. Estes, 2/7/86
                    260: /
                    261: / ARGUMENTS: none
                    262: /
                    263: / RETURN VALUE: none
                    264: /
                    265: / MODULES CALLED: random()
                    266: /
                    267: / GLOBAL INPUTS: none
                    268: /
                    269: / GLOBAL OUTPUTS: none
                    270: /
                    271: / DESCRIPTION: 
                    272: /
                    273: /************************************************************************/
                    274: 
                    275: double
                    276: drandom()
                    277: {
                    278:     if (sizeof(int) != 2)
                    279:        return((double) (random() & 0x7fff) / 32768.0);
                    280:     else
                    281:        return((double) random() / 32768.0);
                    282: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.