]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - phantasia/setup.c
Build the data files in the obj/compile directory and install them with
[bsdgames-darwin.git] / phantasia / setup.c
index f916727fb6943323e0798379b86dea6bfbd95048..6a1d4c0edf4e8110ce3286daabedf3d5a1f9eb91 100644 (file)
@@ -1,10 +1,17 @@
+/*     $NetBSD: setup.c,v 1.11 2001/03/27 02:23:28 simonb Exp $        */
+
 /*
  * setup.c - set up all files for Phantasia
  */
-#include "include.h"
-#include <sys/types.h>
+#include <sys/param.h>
 #include <sys/stat.h>
-#include <stdlib.h>
+#include <fcntl.h>
+#include "include.h"
+
+int main __P((int, char *[]));
+void Error __P((const char *, const char *)) __attribute__((__noreturn__));
+double drandom __P((void));
+
 /*\f*/
 /************************************************************************
 /
@@ -35,9 +42,9 @@
 /      put in these files.
 /      Also, the monster binary data base is created here.
 /
-/************************************************************************/
+/ ************************************************************************/
 
-static char *files[] = {               /* all files to create */
+static const char *const files[] = {           /* all files to create */
        _PATH_MONST,
        _PATH_PEOPLE,
        _PATH_MESS,
@@ -49,20 +56,21 @@ static char *files[] = {            /* all files to create */
        NULL,
 };
 
-char *monsterfile="monsters.asc";
+const char *monsterfile = "monsters.asc";
 
 int
 main(argc, argv)
        int argc;
        char *argv[];
 {
-       register char   **filename;     /* for pointing to file names */
-       register int    fd;             /* file descriptor */
-       FILE    *fp;                    /* for opening files */
+       const char *const *filename; /* for pointing to file names */
+       int             fd;             /* file descriptor */
+       FILE            *fp;                    /* for opening files */
        struct stat     fbuf;           /* for getting files statistics */
        int ch;
+       char *path;
 
-       while ((ch = getopt(argc, argv, "m:")) != EOF)
+       while ((ch = getopt(argc, argv, "m:")) != -1)
                switch(ch) {
                case 'm':
                        monsterfile = optarg;
@@ -74,7 +82,7 @@ main(argc, argv)
        argc -= optind;
        argv += optind;
 
-    srandom((unsigned) time((long *) NULL));   /* prime random numbers */
+    srandom((unsigned) time(NULL));    /* prime random numbers */
 
     umask(0117);               /* only owner can read/write created files */
 
@@ -83,23 +91,17 @@ main(argc, argv)
     while (*filename != NULL)
        /* create each file */
        {
-       if (stat(*filename, &fbuf) == 0)
+       path = strrchr(*filename, '/') + 1;
+       if (stat(path, &fbuf) == 0)
            /* file exists; remove it */
            {
-           if (!strcmp(*filename, _PATH_PEOPLE))
-               /* do not reset character file if it already exists */
-               {
-               ++filename;
-               continue;
-               }
-
-           if (unlink(*filename) < 0)
-               Error("Cannot unlink %s.\n", *filename);
+           if (unlink(path) < 0)
+               Error("Cannot unlink %s.\n", path);
                /*NOTREACHED*/
            }
 
-       if ((fd = creat(*filename, 0660)) < 0)
-           Error("Cannot create %s.\n", *filename);
+       if ((fd = creat(path, 0660)) < 0)
+           Error("Cannot create %s.\n", path);
            /*NOTREACHED*/
 
        close(fd);                      /* close newly created file */
@@ -111,17 +113,22 @@ main(argc, argv)
     Enrgyvoid.ev_active = TRUE;
     Enrgyvoid.ev_x = ROLL(-1.0e6, 2.0e6);
     Enrgyvoid.ev_y = ROLL(-1.0e6, 2.0e6);
-    if ((fp = fopen(_PATH_VOID, "w")) == NULL)
-       Error("Cannot update %s.\n", _PATH_VOID);
+    path = strrchr(_PATH_VOID, '/') + 1;
+    if ((fp = fopen(path, "w")) == NULL)
+       Error("Cannot update %s.\n", path);
     else
        {
        fwrite(&Enrgyvoid, SZ_VOIDSTRUCT, 1, fp);
+       fflush(fp);
+       if (ferror(fp))
+           Error("Writing %s.\n", path);
        fclose(fp);
        }
 
     /* create binary monster data base */
-    if ((Monstfp = fopen(_PATH_MONST, "w")) == NULL)
-       Error("Cannot update %s.\n", _PATH_MONST);
+    path = strrchr(_PATH_MONST, '/') + 1;
+    if ((Monstfp = fopen(path, "w")) == NULL)
+       Error("Cannot update %s.\n", path);
     else
        {
        if ((fp = fopen(monsterfile, "r")) == NULL)
@@ -151,6 +158,9 @@ main(argc, argv)
                fwrite((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
                }
            fclose(fp);
+           fflush(Monstfp);
+           if (ferror(Monstfp))
+               Error("Writing %s.\n", path);
            fclose(Monstfp);
            }
        }
@@ -160,8 +170,9 @@ main(argc, argv)
     printf("One line 'motd' ? ");
     if (fgets(Databuf, SZ_DATABUF, stdin) == NULL)
        Databuf[0] = '\0';
-    if ((fp = fopen(_PATH_MOTD, "w")) == NULL)
-       Error("Cannot update %s.\n", _PATH_MOTD);
+    path = strrchr(_PATH_MOTD, '/') + 1;
+    if ((fp = fopen(path, "w")) == NULL)
+       Error("Cannot update %s.\n", path);
     else
        {
        fwrite(Databuf, sizeof(char), strlen(Databuf), fp);
@@ -217,10 +228,11 @@ main(argc, argv)
 / DESCRIPTION:
 /      Print an error message, then exit.
 /
-/************************************************************************/
+/ ************************************************************************/
 
+void
 Error(str, file)
-char   *str, *file;
+       const char      *str, *file;
 {
     fprintf(stderr, "Error: ");
     fprintf(stderr, str, file);
@@ -249,7 +261,7 @@ char        *str, *file;
 /
 / DESCRIPTION: 
 /
-/************************************************************************/
+/ ************************************************************************/
 
 double
 drandom()