zilasm/main: Default ZVersion changed from 1 to 6, ZorkID changed from byte to word.
[zilutils.git] / zilasm / main.c
index 97c455863449914416a58eda9b9e4e124a2703db..a6bfa68feeecca39c8f8cac8d89daa91ac61ba66 100644 (file)
@@ -37,13 +37,14 @@ static struct option const long_options[] =
     { "zorkid",   required_argument, NULL, ZORKID   },
     { "serial",   required_argument, NULL, ZSERIAL  },
     { NULL, 0, NULL, 0 }
+
 };
 
 struct
 {
-    int  zversion;     /* 0 - 8   */
-    int  zorkid;       /* 0 - 255 */
-    char zserial[7];   /* YYMMDD  */
+    int  zversion;     /* 0 - 8     */
+    int  zorkid;       /* 0 - 65535 */
+    char zserial[7];   /* YYMMDD    */
 } Config;
 
 void wrong_arg()
@@ -54,13 +55,12 @@ void wrong_arg()
 
 void print_version()
 {
-    printf(PACKAGE_STRING "\n"
-           "License AGPLv3+: GNU AGPL version 3 or later\n"
-           "<http://gnu.org/licenses/agpl.html>\n"
-           "This is free software: you are free to change and redistribute it.\n"
-           "There is NO WARRANTY, to the extent permitted by law.\n"
-    );
-
+    printf( PACKAGE_STRING "\n"
+            "License AGPLv3+: GNU AGPL version 3 or later\n"
+            "<http://gnu.org/licenses/agpl.html>\n"
+            "This is free software: you are free to change and redistribute it.\n"
+            "There is NO WARRANTY, to the extent permitted by law.\n"
+          );
     exit(0);
 }
 
@@ -72,11 +72,10 @@ void print_usage(int failed)
            "--help     Display this help\n"
            "\n"
            "--zversion (accepts numbers 1 - 8, defaults to 1 if not specified)\n"
-           "--zorkid   (accepts digits, defaults to 0 if not specified)\n"
+           "--zorkid   (integer between 0 and 65535, defaults to 0 if not specified)\n"
            "--serial   (six characters of ASCII, defaults to current date\n"
            "            in the form YYMMDD if not specified)\n"
-    );
-
+          );
     exit(failed);
 }
 
@@ -84,14 +83,14 @@ void fill_zserial(void)
 {
     time_t t;
     struct tm *timeinfo;
-    time(&t);
+    time (&t);
     timeinfo = localtime(&t);
-    strftime(Config.zserial, sizeof(Config.zserial), "%y%m%d", timeinfo);
+    strftime (Config.zserial, sizeof(Config.zserial), "%y%m%d", timeinfo);
 }
 
 void fill_config(void)
 {
-    Config.zversion = 1;
+    Config.zversion = 6;
     Config.zorkid   = 0;
     fill_zserial();
 }
@@ -103,14 +102,12 @@ void parse_intarg(int *dest, const char name[], int min, int max, int defval)
         *dest = defval;
         return;
     }
-
     int n = atoi(optarg);
     if (n >= min && n <= max)
     {
         *dest = n;
         return;
     }
-
     fprintf(stderr, "Wrong %s value %s, must be integer between %d and %d\n",
             name, optarg, min, max);
     wrong_arg();
@@ -123,21 +120,19 @@ void parse_zserial(void)
         fill_zserial();
         return;
     }
-
     size_t n = strlen(optarg);
     if (n == sizeof(Config.zserial) - 1)
     {
         char *p = optarg;
-        while (*p && isdigit(*p)) p++;
-
-        if (!*p) /* ..optarg contains digits only? */
+        while (*p && isalnum(*p))
+            p++;
+        if (!*p)    /* ..optarg contains alphanumeric only? */
         {
             strncpy(Config.zserial, optarg, sizeof(Config.zserial));
             return;
         }
     }
-
-    fprintf(stderr, "Wrong zserial value %s, must be 6 digits in yymmdd format\n", optarg);
+    fprintf(stderr, "Wrong zserial value %s, must be 6 ascii characters\n", optarg);
     wrong_arg();
 }
 
@@ -146,16 +141,25 @@ int main(int argc, char *argv[], char *envp[])
     fill_config();
 
     int opt = 0;
-    while ((opt = getopt_long(argc, argv, "hV", long_options, NULL)) != -1)
+    while ((opt = getopt_long (argc, argv, "hV", long_options, NULL)) != -1)
     {
-        switch (opt)
+        switch(opt)
         {
-            case 'h'     : print_usage(0);
-            case 'V'     : print_version();
-            case ZVERSION: parse_intarg(&Config.zversion, "zversion", 1, 8,   1); break;
-            case ZORKID  : parse_intarg(&Config.zorkid,   "zorkid",   0, 255, 0); break;
-            case ZSERIAL : parse_zserial();  break;
-            default      : wrong_arg();
+        case 'h'     :
+            print_usage(0);
+        case 'V'     :
+            print_version();
+        case ZVERSION:
+            parse_intarg(&Config.zversion, "zversion", 1, 8,      1);
+            break;
+        case ZORKID  :
+            parse_intarg(&Config.zorkid,   "zorkid",   0, 0xFFFF, 0);
+            break;
+        case ZSERIAL :
+            parse_zserial();
+            break;
+        default      :
+            wrong_arg();
         }
     }
 
@@ -166,7 +170,7 @@ int main(int argc, char *argv[], char *envp[])
            "- ZorkID:   %d\n"
            "- ZSerial:  %s\n",
            Config.zversion, Config.zorkid, Config.zserial
-    );
+          );
 
     return 0;
 }