X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=zilasm%2Fmain.c;h=a6bfa68feeecca39c8f8cac8d89daa91ac61ba66;hb=96b70de7e75c4a903ee686385a101894403c99b0;hp=97c455863449914416a58eda9b9e4e124a2703db;hpb=11b23c19f71a1dd4ea9916e71632ce251213dbb4;p=zilutils.git diff --git a/zilasm/main.c b/zilasm/main.c index 97c4558..a6bfa68 100644 --- a/zilasm/main.c +++ b/zilasm/main.c @@ -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" - "\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" + "\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; }