home *** CD-ROM | disk | FTP | other *** search
/ Xentax forum attachments archive / xentax.7z / 7662 / gttool_src_bin.7z / gttool / src / main.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2014-08-01  |  1.3 KB  |  54 lines

  1. #include "volume.h"
  2. #include "path.h"
  3.  
  4. int main(int argc, char* argv[])
  5. {
  6.     if (argc < 4) {
  7.         printf("GTtool for Gran Turismo 5/6 (c) flatz, 2014\n");
  8.         printf("Usage: gttool <volume file> <GT5/GT6> <output directory>\n");
  9.         return 0;
  10.     }
  11.  
  12.     GameID game_id;
  13.     if (stricmp(argv[2], "GT5") == 0)
  14.         game_id = GameID::GT5;
  15.     else if (stricmp(argv[2], "GT6") == 0)
  16.         game_id = GameID::GT6;
  17.     else
  18.         game_id = GameID::UNKNOWN;
  19.     if (game_id == GameID::UNKNOWN) {
  20.         printf("Unsupported game ID.\n");
  21.         exit(1);
  22.     }
  23.  
  24.     char* const output_dir = static_cast<char*>(_alloca(_MAX_PATH));
  25.     memset(output_dir, 0, _MAX_PATH);
  26.     uint32_t output_dir_length = 0;
  27.     for (int i = 0; i < _MAX_PATH; ++i, ++output_dir_length)
  28.         output_dir[i] = output_dir[i] != '\\' ? argv[3][i] : '/';
  29.     if (output_dir_length > 0 && output_dir[output_dir_length - 1] != '/')
  30.         strcat(output_dir, "/");
  31.  
  32.     Volume volume;
  33.     if (!volume.open(argv[1], game_id)) {
  34.         printf("Unable to process volume file.\n");
  35.         exit(1);
  36.     }
  37.  
  38.     if (!directory_exists(output_dir)) {
  39.         if (!make_directories(output_dir)) {
  40.             printf("Unable to create output directory.\n");
  41.             exit(1);
  42.         }
  43.     }
  44.     if (!volume.extract(output_dir)) {
  45.         printf("Unable to extract volume files.\n");
  46.         exit(1);
  47.     }
  48.  
  49.     printf("All files have been extracted.\n");
  50.  
  51.     volume.close();
  52.  
  53.     return 0;
  54. }