Mercurial > msvpvf
comparison src/main.c @ 88:af4ed765c1ac
*: add IUP GUI
a lot simpler than win32, but I assume there's more going on in
the background that I don't know about :)
author | Paper <paper@tflc.us> |
---|---|
date | Mon, 14 Jul 2025 02:39:24 -0400 |
parents | 1acd477da42f |
children |
comparison
equal
deleted
inserted
replaced
87:2e819b84d7c0 | 88:af4ed765c1ac |
---|---|
7 #include <getopt.h> | 7 #include <getopt.h> |
8 #include <libgen.h> | 8 #include <libgen.h> |
9 | 9 |
10 #include "common.h" | 10 #include "common.h" |
11 | 11 |
12 /* non-portable functions */ | 12 static const char *type_extensions[] = { |
13 static char* msvpvf_internal_strdup(const char* str) { | |
14 size_t len = strlen(str) + 1; | |
15 | |
16 char* copy = malloc(len); | |
17 if (!copy) | |
18 return NULL; | |
19 | |
20 memcpy(copy, str, len); | |
21 return copy; | |
22 } | |
23 | |
24 static char *msvpvf_internal_asnprintf(const char *format, ...) { | |
25 va_list args; | |
26 int needed_size; | |
27 char *output = NULL; | |
28 | |
29 va_start(args, format); | |
30 | |
31 needed_size = vsnprintf(NULL, 0, format, args); | |
32 if (needed_size < 0) | |
33 return NULL; | |
34 | |
35 va_end(args); | |
36 | |
37 output = malloc((needed_size + 1) * sizeof(char)); | |
38 if (!output) | |
39 return NULL; | |
40 | |
41 va_start(args, format); | |
42 | |
43 needed_size = vsnprintf(output, needed_size + 1, format, args); | |
44 if (needed_size < 0) { | |
45 free(output); | |
46 return NULL; | |
47 } | |
48 | |
49 va_end(args); | |
50 | |
51 return output; | |
52 } | |
53 | |
54 /* source needs read permissions, target needs write permissions, both must be in binary mode */ | |
55 static int copy_file(FILE* source, FILE* target) { | |
56 char ch[4096]; | |
57 | |
58 while (!feof(source)) { | |
59 size_t b = fread(ch, 1, sizeof(ch), source); | |
60 if (b) | |
61 fwrite(ch, 1, b, target); | |
62 } | |
63 | |
64 return 0; | |
65 } | |
66 | |
67 static const char* type_names[] = { | |
68 [TYPES_VF] = "Movie Studio", | |
69 [TYPES_VEG] = "Vegas Pro", | |
70 [TYPES_UNKNOWN] = "Unknown", | |
71 }; | |
72 | |
73 static const char* type_extensions[] = { | |
74 [TYPES_VF] = "vf", | 13 [TYPES_VF] = "vf", |
75 [TYPES_VEG] = "veg", | 14 [TYPES_VEG] = "veg", |
76 }; | 15 }; |
77 | 16 |
78 #ifndef ARRAYSIZE | |
79 #define ARRAYSIZE(x) (sizeof(x) / sizeof((x)[0])) | |
80 #endif | |
81 | |
82 static const char* help_text = | 17 static const char* help_text = |
83 "msvpvf help text\n" | 18 "msvpvf help text\n" |
84 "author: Paper <paper@paper.us.eu.org>\n" | 19 "author: Paper <paper@tflc.us>\n" |
85 "usage: %s <input>... (arguments)\n" | 20 "usage: %s <input>... (arguments)\n" |
86 "\n" | 21 "\n" |
87 "arguments:\n" | 22 "arguments:\n" |
88 " -t, --type one of [vf,veg] (required)\n" | 23 " -t, --type one of [vf,veg] (required)\n" |
89 " -v, --version version to convert to (required)\n" | 24 " -v, --version version to convert to (required)\n" |
166 printf("Input file version: %u\n", file_version); | 101 printf("Input file version: %u\n", file_version); |
167 printf("Input file type: %s\n\n", type_names[file_type]); | 102 printf("Input file type: %s\n\n", type_names[file_type]); |
168 | 103 |
169 { | 104 { |
170 /* open the output file... */ | 105 /* open the output file... */ |
171 char* basec = msvpvf_internal_strdup(input); | 106 char* basec = str_dup(input); |
172 char* bname = basename(basec); | 107 char* bname = basename(basec); |
173 int ext = strrchr(bname, '.') - bname; | 108 int ext = strrchr(bname, '.') - bname; |
174 | 109 |
175 char *output = msvpvf_internal_asnprintf("V%u_%.*s.%s", version, ext, bname, type_extensions[type]); | 110 char *output = msvpvf_asprintf("V%u_%.*s.%s", version, ext, bname, type_extensions[type]); |
176 if (!output) { | 111 if (!output) { |
177 fprintf(stderr, "[ERROR]: msvpvf_internal_asnprintf failed!\n"); | 112 fprintf(stderr, "[ERROR]: msvpvf_asprintf failed!\n"); |
178 free(basec); | 113 free(basec); |
179 free(output); | 114 free(output); |
180 fclose(input_file); | 115 fclose(input_file); |
181 continue; | 116 continue; |
182 } | 117 } |