14 static void DisplayROMImgDetails(
const ROMIMG *ROMImg)
16 unsigned int i, TotalSize;
19 if (ROMImg->date != 0)
20 printf(
"ROM datestamp:\t%04x/%02x/%02x\n", ((
unsigned short int *)&ROMImg->date)[1], ((
unsigned char *)&ROMImg->date)[1], ((
unsigned char *)&ROMImg->date)[0]);
21 if (ROMImg->comment != NULL)
22 printf(
"ROM comment:\t%s\n", ROMImg->comment);
25 GREEN
"Name"DEFCOL
" \tSize\n"
26 "-----------------------------\n");
27 for (i = 0, file = ROMImg->files, TotalSize = 0; i < ROMImg->NumFiles; TotalSize += file->RomDir.size, i++, file++) {
28 snprintf(filename,
sizeof(filename),
"%.*s", (
int)
sizeof(file->RomDir.name), file->RomDir.name);
29 printf(GREEN
"%-10s"DEFCOL
"\t%u\n", filename, file->RomDir.size);
32 printf(
"\nTotal size: %u bytes.\n", TotalSize);
35 static void DisplaySyntaxHelp(
void)
38 "ROMIMG -c <ROM image> <files>\n\tCreate ROM image *\n"
39 "ROMIMG -l <ROM image>\n\tList files in ROM image\n"
40 "ROMIMG -a <ROM image> <file(s)>\n\tAdd file(s) to ROM image *\n"
41 "ROMIMG -d <ROM image> <file(s)>\n\tDelete file(s) from ROM image\n"
42 "ROMIMG -x <ROM image>\n\tExtract all files from ROM image\n"
43 "ROMIMG -x <ROM image> <file>\n\tExtract file from ROM image\n"
44 "\n note*: write the switch in uppercase to perform filename transformation (eg: 'ioman.irx' > 'IOMAN')\n"
48 static void DisplayAddDeleteOperationResult(
int result,
const char *InvolvedFile)
52 printf(GRNBOLD
"done!"DEFCOL
"\n");
55 printf(YELBOLD
"file not found."DEFCOL
"\n");
58 printf(REDBOLD
"Error writing to file: %s"DEFCOL
"\n", InvolvedFile);
61 printf(YELBOLD
"File already exists."DEFCOL
"\n");
64 printf(REDBOLD
"failed! code: %d"DEFCOL
"\n", result);
68 int main(
int argc,
char **argv)
73 unsigned int i, FilesAffected;
77 printf(
"PlayStation 2 ROM image generator v1.12\n"
78 "Compiled on " __DATE__
" - " __TIME__
"\n"
79 "---------------------------------------\n\n");
80 for (result = 0; result < argc; result++)
81 DPRINTF(
"\t -- argv[%d] = %s\n", result, argv[result]);
88 if (argc >= 4 && strcasecmp(argv[1],
"-c") == 0) {
89 if ((result = CreateBlankROMImg(argv[2], &ROMImg)) == 0) {
90 for (FilesAffected = 0, i = 0; i < argc - 3; i++) {
91 printf(
"Adding file '%s'", argv[3 + i]);
92 if ((result = AddFile(&ROMImg, argv[3 + i], isupper(argv[1][1]))) == 0)
94 printf(result == 0 ? GRNBOLD
" done!"DEFCOL
"\n" : REDBOLD
" failed!"DEFCOL
"\n");
97 if (FilesAffected > 0) {
98 printf(
"Writing image... ");
99 printf(
"%s", (result = WriteROMImg(argv[2], &ROMImg)) == 0 ? GRNBOLD
"done!"DEFCOL
"\n" : REDBOLD
"failed!"DEFCOL
"\n");
101 UnloadROMImg(&ROMImg);
103 ERROR(
"(Internal fault) Can't create blank image file: %d (%s). Please report.\n", result, strerror(result));
104 }
else if (argc >= 4 && strcasecmp(argv[1],
"-a") == 0) {
105 if ((result = LoadROMImg(&ROMImg, argv[2])) == 0) {
106 for (i = 0, FilesAffected = 0; i < argc - 3; i++) {
107 printf(
"Adding file '%s'", argv[3 + i]);
108 if ((result = AddFile(&ROMImg, argv[3 + i], isupper(argv[1][1]))) == 0)
110 DisplayAddDeleteOperationResult(result, argv[3 + i]);
113 if (FilesAffected > 0) {
114 printf(
"Writing image... ");
115 printf(
"%s", (result = WriteROMImg(argv[2], &ROMImg)) == 0 ? GRNBOLD
"done!"DEFCOL
"\n" : REDBOLD
"failed!"DEFCOL
"\n");
117 UnloadROMImg(&ROMImg);
119 ERROR(
"Can't load image file: %s\n", argv[2]);
120 }
else if (argc >= 4 && strcmp(argv[1],
"-d") == 0) {
121 if ((result = LoadROMImg(&ROMImg, argv[2])) == 0) {
122 for (i = 0, FilesAffected = 0; i < argc - 3; i++) {
123 printf(
"Removing file %s...", argv[3 + i]);
124 if ((result = DeleteFile(&ROMImg, argv[3 + i])) == 0)
126 DisplayAddDeleteOperationResult(result, argv[3 + i]);
129 if (FilesAffected > 0) {
130 printf(
"Writing image...");
131 printf(
"%s", (result = WriteROMImg(argv[2], &ROMImg)) == 0 ? GRNBOLD
"done!"DEFCOL
"\n" : REDBOLD
"failed!"DEFCOL
"\n");
133 UnloadROMImg(&ROMImg);
135 ERROR(
"Can't load image file: %s\n", argv[2]);
136 }
else if (argc == 3 && strcmp(argv[1],
"-l") == 0) {
137 if ((result = LoadROMImg(&ROMImg, argv[2])) == 0) {
138 DisplayROMImgDetails(&ROMImg);
139 UnloadROMImg(&ROMImg);
141 ERROR(
"Can't load image file: %s\n", argv[2]);
142 }
else if ((argc == 3 || argc == 4) && strcmp(argv[1],
"-x") == 0) {
143 if ((result = LoadROMImg(&ROMImg, argv[2])) == 0) {
146 snprintf(FOLDER,
sizeof(FOLDER),
"ext_%s", argv[2]);
147 #if defined(_WIN32) || defined(WIN32)
153 ERROR(
"Can't change directory to %s\n", FOLDER);
154 UnloadROMImg(&ROMImg);
158 printf(
"File list:\n"
159 GREEN
"Name"DEFCOL
" \tSize\n"
160 "-----------------------------\n");
161 for (i = 0, file = ROMImg.files; i < ROMImg.NumFiles; i++, file++) {
162 snprintf(filename,
sizeof(filename),
"%.*s", (
int)
sizeof(file->RomDir.name), file->RomDir.name);
163 printf(GREEN
"%-10s"DEFCOL
"\t%u\n", filename, file->RomDir.size);
165 if (file->RomDir.size > 0) {
166 if ((OutputFile = fopen(filename,
"wb")) != NULL) {
167 if (fwrite(file->FileData, 1, file->RomDir.size, OutputFile) != file->RomDir.size) {
168 ERROR(
"Error writing to file %s\n", filename);
172 ERROR(
"Can't create file: %s\n", filename);
177 printf(
"Extracting file %s...", argv[3]);
178 DisplayAddDeleteOperationResult(result = ExtractFile(&ROMImg, argv[3], argv[3]), argv[3]);
181 UnloadROMImg(&ROMImg);
183 ERROR(
"Can't load image file: %s\n", argv[2]);
185 WARNING(
"Unrecognized command or incorrect syntax: %s\n", argv[1]);