Subversion Repositories ipe_artfile_utils

Compare Revisions

No changes between revisions

Regard whitespace Rev 1 → Rev 2

/trunk/ipe_artfile_unpacker.c
0,0 → 1,87
/**
* ART file unpacker by Daniel Marschall, ViaThinkSoft (C) 2014-2018
* Supports:
* - Blown Away - The Interactive Game by Imagination Pilots
* - Panic in the Park - The Interactive Game by Imagination Pilots
* - Where's Waldo? At the Circus (Waldo1)
* - Where's Waldo? Exploring Geography
* - Eraser Turnabout by Imagination Pilots
* - Virtual K'Nex by Imagination Pilots
* Revision: 2018-02-15
**/
 
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <getopt.h>
 
#include "ipe16_artfile.h"
#include "ipe32_artfile.h"
 
#include "ipe_artfile_unpacker_ipe16.h"
#include "ipe_artfile_unpacker_ipe32.h"
 
#define VERSION "2018-02-15"
 
void print_syntax() {
fprintf(stderr, "Syntax: -v [-o <outputdir>] -i <artfile>\n");
fprintf(stderr, " -v : verbose output\n");
fprintf(stderr, "Runs in simulation mode if no output directory is defined.\n");
}
 
int main(int argc, char *argv[]) {
int verbosity = 0;
char* szOutputDir = "";
char* szArtFile = "";
int c;
 
#define PRINT_SYNTAX { print_syntax(); return 0; }
 
while ((c = getopt(argc, argv, "Vvi:o:")) != -1) {
switch (c) {
case 'v':
verbosity++;
break;
case 'V':
fprintf(stdout, "IPE Artfile unpacker, revision %s\n", VERSION);
return 0;
case 'i':
szArtFile = optarg;
break;
case 'o':
szOutputDir = optarg;
break;
case '?':
PRINT_SYNTAX;
break;
}
}
if (optind < argc) PRINT_SYNTAX;
 
if (strlen(szArtFile) == 0) PRINT_SYNTAX;
 
FILE* fibArt = fopen(szArtFile, "rb");
if (!fibArt) {
fprintf(stderr, "FATAL: Cannot open %s\n", szArtFile);
return 1;
}
 
char signature[9]={0};
if (fread(&signature, 8, 1, fibArt) != 1) {
fprintf(stderr, "FATAL: Cannot read signature of %s\n", szArtFile);
return 1;
}
if (strcmp(signature, IPE32_MAGIC_ART) == 0) {
if (verbosity >= 1) fprintf(stdout, "%s: Detected file as IPE32 (Waldo2/Eraser/K'Nex) art file\n", szArtFile);
return ipe32_extract_art_to_folder(fibArt, szOutputDir, verbosity) ? 0 : 1;
} else if (strcmp(signature, IPE16_MAGIC_ART) == 0) {
if (verbosity >= 1) fprintf(stdout, "%s: Detected file as IPE16 (BA/PiP/Waldo1) art file\n", szArtFile);
return ipe16_extract_art_to_folder(fibArt, szOutputDir, verbosity) ? 0 : 1;
} else {
fprintf(stderr, "FATAL: %s is not a valid ART file of Imagination Pilots!\n", szArtFile);
return 1;
}
 
fclose(fibArt);
}
Property changes:
Added: svn:mime-type
+text/x-csrc
\ No newline at end of property