Mercurial > msvpvf
comparison msvpvf.c @ 4:78a0ecd756da
Add automated output filename creation
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Fri, 21 Jan 2022 01:40:57 -0500 |
| parents | 87c7d43b03ff |
| children | 92ec47e63923 |
comparison
equal
deleted
inserted
replaced
| 3:87c7d43b03ff | 4:78a0ecd756da |
|---|---|
| 103 case 'h': | 103 case 'h': |
| 104 default: | 104 default: |
| 105 printf("msvpvf by Paper\nusage: %s (-i/--input) infile [(-o/--output) outfile] (-v/--version) version (-t/--type) [vf, veg]", argv[0]); | 105 printf("msvpvf by Paper\nusage: %s (-i/--input) infile [(-o/--output) outfile] (-v/--version) version (-t/--type) [vf, veg]", argv[0]); |
| 106 return 0; | 106 return 0; |
| 107 } | 107 } |
| 108 int* ptr = &args.version; | 108 if (strcmp(args.input, " ") == 0) { |
| 109 if (argc <= 5) { | 109 printf("Input file name?\n"); |
| 110 if (strcmp(args.input, " ") == 0) { | 110 fflush(stdout); |
| 111 printf("Input file name?\n"); | 111 fgets(args.input, sizeof(args.input)-1, stdin); |
| 112 fflush(stdout); | 112 args.input[strcspn(args.input, "\r\n")] = 0; |
| 113 fgets(args.input, sizeof(args.input)-1, stdin); | |
| 114 args.input[strcspn(args.input, "\r\n")] = 0; | |
| 115 } | |
| 116 if (strcmp(args.output, " ") == 0) { | |
| 117 char* temp; | |
| 118 temp = strncat(strncat("PRO_V", (char*)(intptr_t)args.version, 7), args.input, 127); | |
| 119 char* file_extension = strrchr(args.input, ('.')); /* this won't work if your path is /path.to/file but why would you do that in the first place */ | |
| 120 strncpy(args.output, strncat(strncat(strremove(temp, file_extension), ".", 127), args.type, 127), 127); | |
| 121 } | |
| 122 if (args.version == -1) { | |
| 123 printf("What version would you like to convert to?\n"); | |
| 124 fflush(stdout); | |
| 125 scanf("%d", ptr); | |
| 126 } | |
| 127 if (strcmp(args.type, " ") == 0) { | |
| 128 printf("Which type of project file would you like to use?[veg/vf]:\n"); | |
| 129 fflush(stdout); | |
| 130 fgets(args.type, sizeof(args.input)-1, stdin); | |
| 131 args.type[strcspn(args.type, "\r\n")] = 0; | |
| 132 } | |
| 133 if (argc == 1) { | |
| 134 printf("msvpvf by Paper\nusage: %s -i infile [-o outfile] -v version -t [vf, veg]", argv[0]); | |
| 135 return 0; | |
| 136 } | |
| 137 } | 113 } |
| 138 if (access(args.input, F_OK) != 0) { /* input file doesn't exist */ | 114 if (access(args.input, F_OK) != 0) { |
| 139 fprintf(stderr, "Input file %s doesn't exist! Exiting.", args.input); | 115 fprintf(stderr, "Input file \"%s\" doesn't exist! Exiting.", args.input); |
| 140 return 1; | 116 return 1; |
| 141 } | 117 } |
| 142 if (fgetc(fopen(args.input, "r")) == EOF) { /* input file is empty */ | 118 if (fgetc(fopen(args.input, "r")) == EOF) { |
| 143 fprintf(stderr, "Input file %s is empty.", args.input); | 119 fprintf(stderr, "Input file \"%s\" is empty.", args.input); |
| 144 return 1; | 120 return 1; |
| 121 } | |
| 122 FILE* input_file = fopen(args.input, "r"); | |
| 123 fseek(input_file, 0x46, SEEK_SET); | |
| 124 printf("Input file version: %d\n", fgetc(input_file)); | |
| 125 fseek(input_file, 0x18, SEEK_SET); | |
| 126 int file_version = fgetc(input_file); | |
| 127 printf("Input file type: "); | |
| 128 if (file_version == 0xEF) { | |
| 129 printf("VEGAS Pro\n\n"); | |
| 130 } else if (file_version == 0xF6) { | |
| 131 printf("Movie Studio\n\n"); | |
| 132 } else { | |
| 133 printf("Unknown\n\n"); | |
| 134 } | |
| 135 int* ptr = &args.version; | |
| 136 if (args.version == -1) { | |
| 137 printf("What version of VEGAS would you like to spoof to?: "); | |
| 138 fflush(stdout); | |
| 139 scanf("%d", ptr); | |
| 140 } | |
| 141 if (strcmp(args.type, " ") == 0) { | |
| 142 printf("Would you like it to be VEGAS Pro or Movie Studio? [veg/vf]: "); | |
| 143 fflush(stdout); | |
| 144 scanf("%3s", args.type); | |
| 145 } | |
| 146 fflush(stdout); | |
| 147 if (strcmp(args.output, " ") == 0) { /* string manipulation hell */ | |
| 148 char temp[128] = {'V'}; | |
| 149 char str_version[16] = {}; | |
| 150 sprintf(str_version, "%d", args.version); | |
| 151 strncat(temp, str_version, 2); | |
| 152 strncat(temp, "_", 1); | |
| 153 strncat(temp, args.input, 120); | |
| 154 strcpy(temp, strremove(temp, strrchr(args.input, ('.')))); /* remove file extension */ | |
| 155 strncat(temp, ".", 1); | |
| 156 strncat(temp, args.type, 3); | |
| 157 strncpy(args.output, temp, 127); | |
| 145 } | 158 } |
| 146 if (strcmp(args.type, "veg") == 0) { | 159 if (strcmp(args.type, "veg") == 0) { |
| 147 unsigned char T[] = {0xEF, 0x29, 0xC4, 0x46, 0x4A, 0x90, 0xD2, 0x11, 0x87, 0x22, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A}; | 160 unsigned char T[] = {0xEF, 0x29, 0xC4, 0x46, 0x4A, 0x90, 0xD2, 0x11, 0x87, 0x22, 0x00, 0xC0, 0x4F, 0x8E, 0xDB, 0x8A}; |
| 148 for (option_index = 0; option_index <= 15; option_index++) { | 161 for (option_index = 0; option_index <= 15; option_index++) { |
| 149 magic[option_index] = T[option_index]; | 162 magic[option_index] = T[option_index]; |
| 156 } else { | 169 } else { |
| 157 fprintf(stderr, "Type %s is invalid!", args.type); | 170 fprintf(stderr, "Type %s is invalid!", args.type); |
| 158 return 1; | 171 return 1; |
| 159 } | 172 } |
| 160 copy_file(args.input, args.output); | 173 copy_file(args.input, args.output); |
| 174 #ifdef _WIN32 | |
| 175 if (strcspn(args.input, "<>:\"/\\|?*") == strlen(args.input)+1) { | |
| 176 #elif defined(__unix__) | |
| 177 if (strcspn(args.input, "/") == strlen(args.input)+1) { | |
| 178 #else | |
| 179 if (NULL) { | |
| 180 #endif | |
| 181 fprintf(stderr, "Invalid output filename detected! Exiting...") | |
| 182 return 1; | |
| 183 } | |
| 161 outfile = fopen(args.output, "r+b"); | 184 outfile = fopen(args.output, "r+b"); |
| 185 if (outfile == NULL) { | |
| 186 fprintf(stderr, "Failed to open file %s! Is the filename invalid?", args.output); | |
| 187 return 1; | |
| 188 } | |
| 162 set_data(magic, args.version, outfile); | 189 set_data(magic, args.version, outfile); |
| 163 fclose(outfile); | 190 fclose(outfile); |
| 164 return 0; | 191 return 0; |
| 165 } | 192 } |
