]> git.pond.sub.org Git - empserver/blobdiff - src/util/fairland.c
Update copyright notice.
[empserver] / src / util / fairland.c
index d11ac43bf431048bb439e95de059c5ddd71d3991..58ad7c563791eff5c005143820c6880aab088864 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2006, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                           Ken Stevens, Steve McClure
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -19,9 +19,9 @@
  *
  *  ---
  *
- *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- *  related information and legal notices. It is expected that any future
- *  projects/authors will amend these files as needed.
+ *  See files README, COPYING and CREDITS in the root of the source
+ *  tree for related information and legal notices.  It is expected
+ *  that future projects/authors will amend these files as needed.
  *
  *  ---
  *
@@ -68,21 +68,23 @@ static int quiet = 0;
 
 #if defined(_WIN32)
 #include "../lib/gen/getopt.h"
+#else
+#include <unistd.h>
 #endif
 
 #include <errno.h>
 #include <stdarg.h>
 #include <stdio.h>
-#include <stdlib.h>
 #include <fcntl.h>
+#include "file.h"
 #include "misc.h"
-#include "power.h"
 #include "nat.h"
-#include "sect.h"
-#include "file.h"
-#include "xy.h"
 #include "optlist.h"
+#include "power.h"
 #include "prototypes.h"
+#include "sect.h"
+#include "version.h"
+#include "xy.h"
 
 /* do not change these 4 defines */
 #define LANDMIN                1       /* plate altitude for normal land */
@@ -124,9 +126,6 @@ static char *program_name;
 
 #define new_x(newx) (((newx) + WORLD_X) % WORLD_X)
 #define new_y(newy) (((newy) + WORLD_Y) % WORLD_Y)
-#if !defined(_WIN32)
-#define max(a,b) (a>b?a:b)
-#endif
 #define rnd(x) (random() % (x))
 
 int secs;                      /* number of sectors grown */
@@ -177,8 +176,7 @@ static int stable(void);
 static void elevate_land(void);
 static void elevate_sea(void);
 static int map_symbol(int x, int y);
-static void fl_sct_init(coord x, coord y, s_char *ptr,
-                       time_t timestamp);
+static void fl_sct_init(coord, coord, struct sctstr *, time_t timestamp);
 static void set_coastal_flags(void);
 
 static void print_vars(void);
@@ -200,32 +198,35 @@ main(int argc, char *argv[])
     program_name = argv[0];
     rnd_seed = time(NULL);
 
-    while ((opt = getopt(argc, argv, "ae:hioqs:R:")) != EOF) {
+    while ((opt = getopt(argc, argv, "ae:hioqR:s:v")) != EOF) {
        switch (opt) {
        case 'a':
            AIRPORT_MARKER = 1;
            break;
-       case 'i':
-           DISTINCT_ISLANDS = 0;
-           break;
        case 'e':
            config_file = optarg;
            break;
+       case 'i':
+           DISTINCT_ISLANDS = 0;
+           break;
        case 'o':
            ORE = 0;
            break;
        case 'q':
            quiet = 1;
            break;
-       case 's':
-           outfile = optarg;
-           break;
        case 'R':
            rnd_seed = strtoul(optarg, NULL, 10);
            break;
+       case 's':
+           outfile = optarg;
+           break;
        case 'h':
            usage();
-           return 0;
+           exit(0);
+       case 'v':
+           printf("%s\n\n%s", version, legal);
+           exit(0);
        default:
            help(NULL);
            exit(1);
@@ -317,24 +318,25 @@ help(char *complaint)
 static void
 usage(void)
 {
-    printf("Usage: %s [-e CONFIG] [-aiqo] [-s SCRIPT] [-R SEED] NC SC [NI] [IS] [SP] [PM] [DI] [ID]\n"
-          "  -q            quiet\n"
-          "  -o            don't set resources\n"
-          "  -a            airport marker for continents\n"
-          "  -i            islands may merge\n"
-          "  -R SEED       seed for random number generator\n"
-          "  -e CONFIG     configuration file\n"
-          "  -s SCRIPT     name of script to create (default %s)\n"
-          "  NC            number of continents\n"
-          "  SC            continent size\n"
-          "  NI            number of islands (default NC)\n"
-          "  IS            average island size (default SC/2)\n"
-          "  SP            spike percentage: 0 = round, 100 = snake\n"
-          "                (default = %d)\n"
-          "  PM            percentage of land that is mountain (default %d)\n"
-          "  DI            minimum distance between continents (default %d)\n"
-          "  ID            minimum distance from islands to continents (default %d)\n",
-          program_name, DEFAULT_OUTFILE_NAME,
+    printf("Usage: %s [OPTION]... NC SC [NI] [IS] [SP] [PM] [DI] [ID]\n"
+          "  -a              airport marker for continents\n"
+          "  -e CONFIG-FILE  configuration file\n"
+          "                  (default %s)\n"
+          "  -h              display this help and exit\n"
+          "  -i              islands may merge\n"
+          "  -o              don't set resources\n"
+          "  -q              quiet\n"
+          "  -R SEED         seed for random number generator\n"
+          "  -s SCRIPT       name of script to create (default %s)\n"
+          "  NC              number of continents\n"
+          "  SC              continent size\n"
+          "  NI              number of islands (default NC)\n"
+          "  IS              average island size (default SC/2)\n"
+          "  SP              spike percentage: 0 = round, 100 = snake (default %d)\n"
+          "  PM              percentage of land that is mountain (default %d)\n"
+          "  DI              minimum distance between continents (default %d)\n"
+          "  ID              minimum distance from islands to continents (default %d)\n",
+          program_name, dflt_econfig, DEFAULT_OUTFILE_NAME,
           DEFAULT_SPIKE, DEFAULT_MOUNTAIN, DEFAULT_CONTDIST, DEFAULT_ISLDIST);
 }
 
@@ -433,8 +435,8 @@ allocate_memory(void)
     int i;
     char *fname;
 
-    fname = malloc(strlen(datadir) + 1 + strlen(empfile[EF_SECTOR].file) + 1);
-    sprintf(fname, "%s/%s", datadir, empfile[EF_SECTOR].file);
+    fname = malloc(strlen(gamedir) + 1 + strlen(empfile[EF_SECTOR].file) + 1);
+    sprintf(fname, "%s/%s", gamedir, empfile[EF_SECTOR].file);
     sect_fptr = fopen(fname, "wb");
     if (sect_fptr == NULL) {
        perror(fname);
@@ -459,9 +461,9 @@ allocate_memory(void)
     secty = calloc(nc + ni, sizeof(int *));
     sectc = calloc(nc + ni, sizeof(int *));
     isecs = calloc(nc + ni, sizeof(int));
-    weight = calloc(max(sc, is * 2), sizeof(int));
-    dsea = calloc(max(sc, is * 2), sizeof(int));
-    dmoun = calloc(max(sc, is * 2), sizeof(int));
+    weight = calloc(MAX(sc, is * 2), sizeof(int));
+    dsea = calloc(MAX(sc, is * 2), sizeof(int));
+    dmoun = calloc(MAX(sc, is * 2), sizeof(int));
     for (i = 0; i < nc; ++i) {
        sectx[i] = calloc(sc, sizeof(int));
        secty[i] = calloc(sc, sizeof(int));
@@ -806,7 +808,7 @@ place_island(int c, int *xp, int *yp)
        for (*yp = sy; *xp != sx || *yp != sy; *xp += 2) {
            if (*xp >= WORLD_X) {
                *yp = new_y(*yp + 1);
-               *xp = (*yp) % 2;
+               *xp = *yp % 2;
                if (*xp == sx && *yp == sy)
                    break;
            }
@@ -1089,7 +1091,7 @@ write_sects(void)
     sct = sectsbuf;
     for (y = 0; y < YSIZE; y++) {
        for (x = 0; x < XSIZE; x++, sct++) {
-           fl_sct_init(x * 2 + (y & 01), y, (s_char *)sct, current_time);
+           fl_sct_init(x * 2 + (y & 1), y, sct, current_time);
            total = elev[sct->sct_x][y];
            if (total < LANDMIN) {
                sct->sct_type = SCT_WATER;
@@ -1217,10 +1219,8 @@ qprint(const char * const fmt, ...)
 }
 
 static void
-fl_sct_init(coord x, coord y, s_char *ptr, time_t timestamp)
+fl_sct_init(coord x, coord y, struct sctstr *sp, time_t timestamp)
 {
-    struct sctstr *sp = (struct sctstr *)ptr;
-
     sp->ef_type = EF_SECTOR;
     sp->sct_x = x;
     sp->sct_y = y;