bool ArchiveReader::ExtractSingleFile( const std::string& FName, const std::string& Password, int* AbortFlag, float* Progress, const clPtr<iOStream>& FOut ) { int err = UNZ_OK; std::string ZipName = FName; std::replace( ZipName.begin(), ZipName.end(), '\\', '/' ); clPtr<iIStream> TheSource = FSourceFile; FSourceFile->Seek( 0 ); /// Decompress the data zlib_filefunc64_def ffunc; fill_functions( TheSource.GetInternalPtr(), &ffunc ); unzFile uf = unzOpen2_64( "", &ffunc ); if ( unzLocateFile( uf, ZipName.c_str(), 0/*CASESENSITIVITY - insensitive*/ ) != UNZ_OK ) { // WARNING: "File %s not found in the zipfile\n", FName.c_str() return false; } err = ExtractCurrentFile_ZIP( uf, Password.empty() ? NULL : Password.c_str(), AbortFlag, Progress, FOut ); unzClose( uf ); return ( err == UNZ_OK ); }
bool ArchiveReader::Enumerate_ZIP() { clPtr<iIStream> TheSource = FSourceFile; FSourceFile->Seek( 0 ); zlib_filefunc64_def ffunc; fill_functions( TheSource.GetInternalPtr(), &ffunc ); unzFile uf = unzOpen2_64( "", &ffunc ); unz_global_info64 gi; int err = unzGetGlobalInfo64( uf, &gi ); for ( uLong i = 0; i < gi.number_entry; i++ ) { char filename_inzip[256]; unz_file_info64 file_info; err = unzGetCurrentFileInfo64( uf, &file_info, filename_inzip, sizeof( filename_inzip ), NULL, 0, NULL, 0 ); if ( err != UNZ_OK ) { break; } if ( ( i + 1 ) < gi.number_entry ) { err = unzGoToNextFile( uf ); // WARNING: "error %d with zipfile in unzGoToNextFile\n", err if ( err != UNZ_OK ) { break; } } sFileInfo Info; Info.FOffset = 0; Info.FCompressedSize = file_info.compressed_size; Info.FSize = file_info.uncompressed_size; FFileInfos.push_back( Info ); std::string TheName = Arch_FixFileName( filename_inzip ); FFileInfoIdx[TheName] = ( int )FFileNames.size(); FFileNames.push_back( TheName ); FRealFileNames.push_back( std::string( filename_inzip ) ); } unzClose( uf ); return true; }
int main(int argc , char * argv[]) { int generations = 44000 * 30; int radius = 1; int num_states = 1 << (2 * radius + 1); int (**functions)(int , int) = malloc(sizeof(int(*)(int , int)) * num_states); int (*default_function)(int , int) = rule_150; fill_functions(default_function , num_states , functions); uint8_t initial_state = 0xF0; uint8_t curr_state = initial_state; int i; for(i = 0; i < generations; i++) { curr_state = perform_evolution(curr_state , radius , functions); //printf("\n%d\n" , curr_state); putchar(curr_state); } }