MCPcopy Create free account
hub / github.com/Panzerschrek/Chasm-Reverse / main

Function main

ArchiveDepacker/main.cpp:45–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

43}
44
45int main(const int argc, const char* const argv[])
46{
47 const char* archive_file_name= "CSM.BIN";
48 const char* out_dir= "";
49
50 for( int i= 1; i < argc; i++ )
51 {
52 const char* const arg= argv[i];
53 if( std::strcmp( arg, "-i" ) == 0 )
54 {
55 if( i < argc - 1 )
56 archive_file_name= argv[ i + 1 ];
57 else
58 std::cout << "Error, expected file name, after -i" << std::endl;
59 }
60 else if( std::strcmp( arg, "-o" ) == 0 )
61 {
62 if( i < argc - 1 )
63 out_dir= argv[ i + 1 ];
64 else
65 std::cout << "Error, expected directory, after -o" << std::endl;
66 }
67 }
68
69 std::FILE* const file= std::fopen( archive_file_name, "rb" );
70 if( file == nullptr )
71 {
72 std::cout << "Could not read file \"" << archive_file_name << "\"" << std::endl;
73 return -1;
74 }
75
76 char header[4];
77 FileRead( file, header, sizeof(header) );
78 if( std::strncmp( header, "CSid", sizeof(header) ) != 0 )
79 {
80 std::cout << "File \"" << archive_file_name << "\" is not \"Chasm: The Rift\" archive" << std::endl;
81 return -1;
82 }
83
84 unsigned short files_in_archive_count;
85 FileRead( file, &files_in_archive_count, sizeof(files_in_archive_count) );
86 files_in_archive_count= LittleInt2(files_in_archive_count);
87
88 std::cout << "Files count: " << files_in_archive_count << std::endl << std::endl;
89
90 std::vector<FileInfoPacked> files_info_packed( files_in_archive_count );
91
92 FileRead( file, files_info_packed.data(), files_info_packed.size() * sizeof(FileInfoPacked ) );
93
94 std::vector<unsigned char> file_buffer;
95
96 for( const FileInfoPacked& file_info_packed : files_info_packed )
97 {
98 FileInfo file_info;
99 DepackFileInfo( file_info_packed, file_info );
100
101 file_buffer.resize( file_info.size );
102

Callers

nothing calls this directly

Calls 3

FileReadFunction · 0.85
DepackFileInfoFunction · 0.85
FileWriteFunction · 0.85

Tested by

no test coverage detected