Mercurial > msvpvf
annotate src/main.c @ 89:42a1f64eb4b5 default tip
gui: fix build fail
author | Paper <paper@tflc.us> |
---|---|
date | Mon, 14 Jul 2025 02:41:25 -0400 |
parents | af4ed765c1ac |
children |
rev | line source |
---|---|
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
1 #include <stdio.h> |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
2 #include <stdint.h> |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
3 #include <stdlib.h> |
85 | 4 #include <stdarg.h> |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
5 #include <string.h> |
81
c06dcab17923
*: change license to BSD, update README for Unicode
Paper <paper@paper.us.eu.org>
parents:
79
diff
changeset
|
6 |
13 | 7 #include <getopt.h> |
42
d873a04165f9
use basename() on cli version
Paper <37962225+mrpapersonic@users.noreply.github.com>
parents:
16
diff
changeset
|
8 #include <libgen.h> |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
9 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
10 #include "common.h" |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
11 |
88 | 12 static const char *type_extensions[] = { |
85 | 13 [TYPES_VF] = "vf", |
14 [TYPES_VEG] = "veg", | |
15 }; | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
16 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
17 static const char* help_text = |
85 | 18 "msvpvf help text\n" |
88 | 19 "author: Paper <paper@tflc.us>\n" |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
20 "usage: %s <input>... (arguments)\n" |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
21 "\n" |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
22 "arguments:\n" |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
23 " -t, --type one of [vf,veg] (required)\n" |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
24 " -v, --version version to convert to (required)\n" |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
25 " -h, --help show this screen (optional)\n"; |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
26 |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
27 static struct option options_long[] = { |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
28 {"version", required_argument, NULL, 'v'}, |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
29 {"type", required_argument, NULL, 't'}, |
85 | 30 {"help", 0, NULL, 'h'}, |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
31 }; |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
32 |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
33 int main(int argc, char *argv[]) { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
34 uint8_t version = 0; |
85 | 35 enum types type = TYPES_VEG; /* ...? */ |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
36 |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
37 int c; |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
38 int option_index = 0; |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
39 while ((c = getopt_long(argc, argv, "v:t:h", options_long, &option_index)) != -1) { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
40 /* option argument */ |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
41 switch (c) { |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
42 case 'v': |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
43 version = atoi(optarg); |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
44 break; |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
45 case 't': |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
46 if (!strcmp(optarg, "vf")) { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
47 type = TYPES_VF; |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
48 } else if (!strcmp(optarg, "veg")) { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
49 type = TYPES_VEG; |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
50 } else { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
51 fprintf(stderr, "[ERROR]: Received an invalid type parameter!\n"); |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
52 printf(help_text, argv[0]); |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
53 } |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
54 |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
55 break; |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
56 case 'h': |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
57 default: |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
58 printf(help_text, argv[0]); |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
59 break; |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
60 } |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
61 } |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
62 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
63 if (argc <= optind) { |
85 | 64 fprintf(stderr, "[ERROR]: Missing input file(s)!\n"); |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
65 printf(help_text, argv[0]); |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
66 return 1; |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
67 } |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
68 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
69 if (!version || !type) { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
70 printf(help_text, (argc > 0) ? argv[0] : "msvpvf"); |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
71 return 1; |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
72 } |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
73 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
74 while (optind < argc) { |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
75 const char* input = argv[optind++]; |
85 | 76 FILE *input_file, *output_file = NULL; |
77 uint8_t file_version = 0; | |
78 enum types file_type = TYPES_UNKNOWN; | |
79 | |
80 printf("Input file name: %s\n", input); | |
81 | |
82 /* print information about the input file */ | |
83 input_file = fopen(input, "rb"); | |
84 if (!input_file) { | |
85 fprintf(stderr, "[ERROR]: Error opening input file %s!\n\n", input); | |
86 continue; | |
87 } | |
88 | |
89 if (fgetc(input_file) == EOF) { | |
90 fprintf(stderr, "[ERROR]: Input file \"%s\" is empty.\n", input); | |
91 fclose(input_file); | |
92 continue; | |
93 } | |
94 | |
95 if (get_file_information(input_file, &file_version, &file_type)) { | |
96 fprintf(stderr, "[ERROR]: Failed to get file information for input file \"%s\"!\n", input); | |
97 fclose(input_file); | |
98 continue; | |
99 } | |
100 | |
101 printf("Input file version: %u\n", file_version); | |
102 printf("Input file type: %s\n\n", type_names[file_type]); | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
103 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
104 { |
85 | 105 /* open the output file... */ |
88 | 106 char* basec = str_dup(input); |
85 | 107 char* bname = basename(basec); |
108 int ext = strrchr(bname, '.') - bname; | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
109 |
88 | 110 char *output = msvpvf_asprintf("V%u_%.*s.%s", version, ext, bname, type_extensions[type]); |
85 | 111 if (!output) { |
88 | 112 fprintf(stderr, "[ERROR]: msvpvf_asprintf failed!\n"); |
85 | 113 free(basec); |
114 free(output); | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
115 fclose(input_file); |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
116 continue; |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
117 } |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
118 |
85 | 119 output_file = fopen(output, "w+b"); |
120 if (!output_file) { | |
121 fprintf(stderr, "[ERROR]: Failed to open output file %s! Do you have write permissions?\n", output); | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
122 free(basec); |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
123 free(output); |
85 | 124 fclose(input_file); |
125 continue; | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
126 } |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
127 |
85 | 128 free(basec); |
129 free(output); | |
130 } | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
131 |
85 | 132 copy_file(input_file, output_file); |
133 | |
134 fflush(stdout); | |
135 fclose(input_file); | |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
136 |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
137 set_file_information(output_file, version, type); |
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
138 fclose(output_file); |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
139 } |
79
8f90d5addda9
*: refactor... basically everything!
Paper <paper@paper.us.eu.org>
parents:
58
diff
changeset
|
140 |
6
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
141 return 0; |
d1e5b8390cd3
Add Windows GUI version and a multitude of other changes
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
142 } |