diff --git a/ChunkManager.cpp b/ChunkManager.cpp index 25b8065..bde4bc5 100644 --- a/ChunkManager.cpp +++ b/ChunkManager.cpp @@ -20,7 +20,7 @@ std::vector ChunkManager::chunked(const std::vector& raw, const bool const size_t maxBlockSize = BLOCK_SIZE; const size_t rawSize = raw.size(); - uint32_t blockLen = 0; + uint16_t blockLen = 0; uint32_t lastChunkRawSize; std::vector compressedBlocks; for (size_t offset = 0; offset < rawSize; offset += maxBlockSize) @@ -45,8 +45,8 @@ std::vector ChunkManager::chunked(const std::vector& raw, const bool // Zmiana rozmiaru do faktycznego rozmiaru po kompresji zipChunk.resize(zipSize); - uint32_t chs = static_cast(chunk.size()); - uint32_t zch = static_cast(outChunk.size()); + uint32_t chs = chunk.size(); + uint32_t zch = outChunk.size(); //addIntToVector(compressedBlocks, chs); lastChunkRawSize = chs; @@ -60,7 +60,7 @@ std::vector ChunkManager::chunked(const std::vector& raw, const bool // Wstaw liczbê o iloœci bloków do vectora; // Przekonpwertuj usigned int32 na ci¹g znkaów // uint16_t blockLen = blockSizes .size(); - addIntToVector(zip, blockLen); + addIntToVector(zip, blockLen); addIntToVector(zip, maxBlockSize); addIntToVector(zip, lastChunkRawSize); @@ -78,7 +78,7 @@ std::vector ChunkManager::chunked(const std::vector& raw, const bool std::vector ChunkManager::dechunked(const std::vector& zip, const bool& compress, const bool& encrypt) { size_t offset = 0; - const uint32_t chunkLen = getIntFromVector(zip, offset); + const uint16_t chunkLen = getIntFromVector(zip, offset); const uint32_t chunkBeforeSize = getIntFromVector(zip, offset); const uint32_t chunkLastSize = getIntFromVector(zip, offset); diff --git a/CreateCargo.cpp b/CreateCargo.cpp index 50dc8f9..6d22f0f 100644 --- a/CreateCargo.cpp +++ b/CreateCargo.cpp @@ -38,7 +38,7 @@ CreateCargo::~CreateCargo() { //----------------------------------------------------------------------------- // Punk wejœcia do tworzenia archivum //----------------------------------------------------------------------------- -bool CreateCargo::Create(const std::string& path, const uint8_t& flag) +bool CreateCargo::Create(const std::string& path, const short& flag) { cargoFile = path + "." + extension; catalogPath = path; @@ -88,9 +88,9 @@ bool CreateCargo::Create(const std::string& path, const uint8_t& flag) } // Zapisywanie klucza szyfruj¹cego - if (flag == FILE_FLAG_ENCRYPT || flag == FILE_FLAG_ZIPENC || encList.size() > 0) + if (flag == 2 || flag == 3 || encList.size() > 0) { - eman.saveKey(catalogPath, hppKey); + crypt.saveKey(catalogPath, hppKey); } return true; @@ -119,7 +119,7 @@ bool CreateCargo::GetFileList(const std::string& path) else { PathConf pc; - if (methodFlags != 0xAB) + if (methodFlags > -1) { pc.path = PathToUnixLike(tmpPath); pc.parameter = methodFlags; @@ -184,8 +184,9 @@ CargoHead CreateCargo::CreateCargoHead(const uint32_t& filesLen, const uint64_t& CargoHead ch; ch.signature = signature; - ch.table = table; + ch.version = version; ch.files = filesLen; + ch.table = table; return ch; } @@ -193,11 +194,11 @@ CargoHead CreateCargo::CreateCargoHead(const uint32_t& filesLen, const uint64_t& //----------------------------------------------------------------------------- // Sprawdza czy plik znajduje siê na liœcie //----------------------------------------------------------------------------- -void CreateCargo::computingBytes(const uint8_t& flag, std::vector& input, std::vector& output) +void CreateCargo::computingBytes(const int8_t& flag, std::vector& input, std::vector& output) { //Flaga aktywna sprawdza czy plik jest na liœcie. Jeœli jest to zwraca surowedane //Przeciwnie kompresuje dane - ChunkManager cm(eman); + ChunkManager cm(crypt); switch (flag) { @@ -213,6 +214,10 @@ void CreateCargo::computingBytes(const uint8_t& flag, std::vector& input, output = cm.chunked(input, true, true); break; + case FILE_FLAG_RAW: + output = cm.chunked(input, false, false); + break; + default: output = std::move(input); break; @@ -226,12 +231,13 @@ std::vector CreateCargo::ComputingHeadFiles() { //Utwórz header TMP. Zabezpiecza Pierwsze bajty na w³aœciwy nag³ówek CargoHead cargoHead = CreateCargoHead(0, 0); - offset += cargoHead.signature.length() + sizeof(cargoHead.files) + sizeof(cargoHead.table); + offset += cargoHead.signature.length() + sizeof(cargoHead.version) + sizeof(cargoHead.files) + sizeof(cargoHead.table); //Zapisanie tymczasowego nag³owka jako rezerwacja miejsca cargo.write(cargoHead.signature.data(), cargoHead.signature.length()); - cargo.write(reinterpret_cast(&cargoHead.table), sizeof(cargoHead.table)); + cargo.write(reinterpret_cast(&cargoHead.version), sizeof(cargoHead.version)); cargo.write(reinterpret_cast(&cargoHead.files), sizeof(cargoHead.files)); + cargo.write(reinterpret_cast(&cargoHead.table), sizeof(cargoHead.table)); std::vector filesTable; @@ -263,14 +269,13 @@ std::vector CreateCargo::ComputingHeadFiles() std::vector pakBuffer; computingBytes(file.parameter, buffer, pakBuffer); - std::cout << static_cast(file.parameter) << std::endl; - FilesTable ft; ft.nameFile = path; ft.nameLen = path.length(); + ft.hashName = fnv64(path); ft.offset = offset; ft.size = pakBuffer.size(); - ft.flag = file.parameter; + ft.flag = static_cast(file.parameter); ft.crc = crc; cargo.write(reinterpret_cast(pakBuffer.data()), pakBuffer.size()); @@ -353,6 +358,24 @@ std::string CreateCargo::UpperString(std::string s) { return s; } +//----------------------------------------------------------------------------- +// Wygenerój FNV-1a HASH +//----------------------------------------------------------------------------- +uint64_t CreateCargo::fnv64(const std::string& data) +{ + const uint64_t fnvOffset = 14695981039346656037u; + const uint64_t fnvPrime = 1099511628211u; + + uint64_t hash = fnvOffset; + for (unsigned char c : data) + { + hash ^= c; + hash *= fnvPrime; + } + + return hash; +} + //----------------------------------------------------------------------------- // Trworzenie archiwum //----------------------------------------------------------------------------- @@ -379,6 +402,7 @@ bool CreateCargo::WriteCargo() cargo.write(reinterpret_cast(&head.nameLen), sizeof(head.nameLen)); cargo.write(head.nameFile.data(), head.nameLen); + cargo.write(reinterpret_cast(&head.hashName), sizeof(head.hashName)); cargo.write(reinterpret_cast(&head.offset), sizeof(head.offset)); cargo.write(reinterpret_cast(&head.size), sizeof(head.size)); cargo.write(reinterpret_cast(&head.crc), sizeof(head.crc)); @@ -393,8 +417,9 @@ bool CreateCargo::WriteCargo() //Nadpisz tymczasowy nag³ówek cargo.write(cargoHead.signature.data(), cargoHead.signature.length()); - cargo.write(reinterpret_cast(&cargoHead.table), sizeof(cargoHead.table)); + cargo.write(reinterpret_cast(&cargoHead.version), sizeof(cargoHead.version)); cargo.write(reinterpret_cast(&cargoHead.files), sizeof(cargoHead.files)); + cargo.write(reinterpret_cast(&cargoHead.table), sizeof(cargoHead.table)); cargo.close(); diff --git a/CreateCargo.h b/CreateCargo.h index a870d6d..c0d1d95 100644 --- a/CreateCargo.h +++ b/CreateCargo.h @@ -47,7 +47,7 @@ struct PathConf { std::string path; - uint8_t parameter; + int8_t parameter; }; class CreateCargo { @@ -56,14 +56,14 @@ public: virtual ~CreateCargo(); // Punk wejœcia do tworzenia archivum - bool Create(const std::string&, const uint8_t&); + bool Create(const std::string&, const short&); private: const std::string signature; const std::string extension; const signed char version; - uint8_t methodFlags; + short methodFlags; std::string catalogPath; @@ -72,7 +72,7 @@ private: std::vector filesList; - EncryptionManager eman; + EncryptionManager crypt; bool hppKey; // listy wyj¹tków @@ -110,7 +110,7 @@ private: void GetFilters(const std::string&); // Sprawdza czy plik znajduje siê na liœcie - void computingBytes(const uint8_t&, std::vector&, std::vector&); + void computingBytes(const int8_t&, std::vector&, std::vector&); // Sprawdzanie rozsze¿eñ plików bool CheckFileExtension(const std::string&, const std::vector&); @@ -118,6 +118,9 @@ private: // Zamieñ ca³y ci¹g na du¿e litery std::string UpperString(std::string); + // Wygenerój FNV-1a HASH + uint64_t fnv64(const std::string& data); + // ZnajdŸ wskazany element na liœcie bool FindOnTheList(const std::vector&, const std::string&); }; diff --git a/DataStruct.h b/DataStruct.h index c4113c6..2e75f30 100644 --- a/DataStruct.h +++ b/DataStruct.h @@ -34,19 +34,27 @@ #define CHUNK_STREAM_16MB 16777216 // 16MB #define CHUNK_STREAM_256MB 268435456 // 256MB -#define FILE_FLAG_RAW 0x00 -#define FILE_FLAG_COMPRESS 0x0F -#define FILE_FLAG_ENCRYPT 0xF0 -#define FILE_FLAG_ZIPENC 0xFF +enum StoreMethod +{ + FILTERING = -1, + RAW = 0, + COMPRESS = 1, + ENCRYPT = 2, + COMPRESSxENCRYPT = 3 +}; -#define FILE_FLAG_FILTERING 0xAB +#define FILE_FLAG_RAW 0x00 +#define FILE_FLAG_COMPRESS 0x01 +#define FILE_FLAG_ENCRYPT 0x02 +#define FILE_FLAG_ZIPENC 0x03 +#define FILE_FLAG_CHUNK 0x04 //Prgoram title #define PROGRAM_TITLE "eXtendet PAK" -#define PROGRAM_VERSION "v0.5" +#define PROGRAM_VERSION "v0.4" #define PROGRAM_AUTHOR "Yanczi" -#define PROGRAM_COMPILING "19 December 2025" +#define PROGRAM_COMPILING "12 December 2025" #define PROGRAM_LICENSE "GNU LGPL v3" //Limity @@ -56,17 +64,18 @@ struct CargoHead { std::string signature; - uint8_t version; - uint64_t table; + int8_t version; uint32_t files; + uint64_t table; }; struct FilesTable { uint8_t nameLen; std::string nameFile; + uint64_t hashName; uint64_t offset; uint64_t size; uint64_t crc; - uint8_t flag; + int8_t flag; }; \ No newline at end of file diff --git a/ExtractCargo.cpp b/ExtractCargo.cpp index 6006138..c5ca9d0 100644 --- a/ExtractCargo.cpp +++ b/ExtractCargo.cpp @@ -98,10 +98,9 @@ bool ExtractCargo::CheckCargoFile() } cargoFile.read(magic.data(), magic.size()); - - // Pobierz pozycjê tablicy plików i jej rozmiar - cargoFile.read(reinterpret_cast(&tablePosition), sizeof(tablePosition)); + cargoFile.read(reinterpret_cast(&cargoVer), sizeof(cargoVer)); cargoFile.read(reinterpret_cast(&filesLen), sizeof(filesLen)); + cargoFile.read(reinterpret_cast(&tablePosition), sizeof(tablePosition)); if (std::string(magic.begin(), magic.end()) != signature) { @@ -109,6 +108,12 @@ bool ExtractCargo::CheckCargoFile() return false; } + if (cargoVer != version) + { + std::cerr << "Error: Wrong cargo version" << std::endl; + return false; + } + filesHeadsOffset = signature.length() + sizeof(cargoVer) + sizeof(filesLen); return true; @@ -132,11 +137,9 @@ bool ExtractCargo::HashValid(const std::vector& data, const uint64_t& crc) //----------------------------------------------------------------------------- // Magiczna funkcja do dekompresji i deszyfracji danych //----------------------------------------------------------------------------- -void ExtractCargo::computingBytes(const std::vector& input, std::vector& output, const uint8_t& flag) +void ExtractCargo::computingBytes(const std::vector& input, std::vector& output, const int8_t& flag) { ChunkManager cm(eman); - - std::cout << static_cast(flag) << std::endl; switch (flag) { @@ -150,7 +153,10 @@ void ExtractCargo::computingBytes(const std::vector& input, std::vector(&fhTmp.hashName), sizeof(fhTmp.hashName)); cargoFile.read(reinterpret_cast(&fhTmp.offset), sizeof(fhTmp.offset)); cargoFile.read(reinterpret_cast(&fhTmp.size), sizeof(fhTmp.size)); cargoFile.read(reinterpret_cast(&fhTmp.crc), sizeof(fhTmp.crc)); diff --git a/ExtractCargo.h b/ExtractCargo.h index e5cc23c..f04effb 100644 --- a/ExtractCargo.h +++ b/ExtractCargo.h @@ -76,6 +76,6 @@ private: void CreateDirections(std::filesystem::path); // Magiczna funkcja do dekompresji i deszyfracji danych - void computingBytes(const std::vector&, std::vector&, const uint8_t&); + void computingBytes(const std::vector&, std::vector&, const int8_t&); }; diff --git a/ViewCargo.cpp b/ViewCargo.cpp index ed04866..6dcdbd2 100644 --- a/ViewCargo.cpp +++ b/ViewCargo.cpp @@ -20,7 +20,14 @@ #include "ViewCargo.h" ViewCargo::ViewCargo() -{} + :signature(SIGNATURE) + , version(VERSION) + , filesLen(0) + , tablePos(0) +{ + std::vector header = {"Comress", "Encrypt", "Path", "RefHASH"}; + list.push_back(header); +} //----------------------------------------------------------------------------- // Wywo³ywanie @@ -42,24 +49,26 @@ bool ViewCargo::View(const std::string& path) } //SprawdŸ czy kontener jest prawid³owy - if (!ViewFiles(path)) + if (!CheckCargoFile(path)) { std::cerr << "Nie prawidlowa struktura kontenera Void" << std::endl; return false; } + //Pobieranie listy plików + GetFileList(path); + + //Renderowanie listy plików + RenderList(); + return true; } //----------------------------------------------------------------------------- // Sprawdzenie poprawnoœci kontenera //----------------------------------------------------------------------------- -bool ViewCargo::ViewFiles(const std::string& path) +bool ViewCargo::CheckCargoFile(const std::string& path) { - uint64_t tabPos = 0; - uint32_t tabSize = 0; - - const std::string signature = SIGNATURE; std::vector magic(signature.length()); int8_t cargoVer = 0; @@ -72,14 +81,15 @@ bool ViewCargo::ViewFiles(const std::string& path) } //--------------------------------------------------------------- - // Odczytywanie pierwszych 16 bajtów nag³ówka pliku - // 4 Sygnatura kontenera XPAK - // 8 Offset tablicy plików - // 4 Rozmiar tablicy plików + // Odczytywanie pierwszych 11 bajtów nag³ówka pliku + // 6 pierwszych to sygnatura + // 1 wersja kontenera + // 4 iloœæ plików w kontenerze //--------------------------------------------------------------- cargo.read(magic.data(), magic.size()); - cargo.read(reinterpret_cast(&tabPos), sizeof(tabPos)); - cargo.read(reinterpret_cast(&tabSize), sizeof(tabSize)); + cargo.read(reinterpret_cast(&cargoVer), sizeof(cargoVer)); + cargo.read(reinterpret_cast(&filesLen), sizeof(filesLen)); + cargo.read(reinterpret_cast(&tablePos), sizeof(tablePos)); //SprawdŸ czy kontener ma poprawn¹ sygnature if (std::string(magic.begin(), magic.end()) != signature) @@ -89,28 +99,12 @@ bool ViewCargo::ViewFiles(const std::string& path) return false; } - std::cout << "ZIP" << " " << "ENC" << " " << "Path" << std::endl; - - // Przeskocz do tablicy plików - cargo.seekg(tabPos); - - // Za³aduj dane o plikach - for (uint32_t i = 0; i < tabSize; ++i) + //SprawdŸ spójnoœæ wersji kontenera + if (cargoVer != version) { - FilesTable fhTmp; - cargo.read(reinterpret_cast(&fhTmp.nameLen), sizeof(fhTmp.nameLen)); - - std::vector nameBuffor(fhTmp.nameLen); - cargo.read(nameBuffor.data(), fhTmp.nameLen); - fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end()); - - cargo.read(reinterpret_cast(&fhTmp.offset), sizeof(fhTmp.offset)); - cargo.read(reinterpret_cast(&fhTmp.size), sizeof(fhTmp.size)); - cargo.read(reinterpret_cast(&fhTmp.crc), sizeof(fhTmp.crc)); - cargo.read(reinterpret_cast(&fhTmp.flag), sizeof(fhTmp.flag)); - - //Tworzenie wierszy tabeli - ShowFile(fhTmp.nameFile, fhTmp.flag); + std::cerr << "Error: Wrong cargo version" << std::endl; + cargo.close(); + return false; } cargo.close(); @@ -118,36 +112,91 @@ bool ViewCargo::ViewFiles(const std::string& path) return true; } +//----------------------------------------------------------------------------- +// Pobieranie listy plików z kontenera +//----------------------------------------------------------------------------- +void ViewCargo::GetFileList(const std::string& path) +{ + std::ifstream cargo(path, std::ios::binary); + cargo.seekg(tablePos); + + for (uint32_t i = 0; i < filesLen; ++i) + { + FilesTable fhTmp; + cargo.read(reinterpret_cast(&fhTmp.nameLen), sizeof(fhTmp.nameLen)); + + std::vector nameBuffor(fhTmp.nameLen); + cargo.read(nameBuffor.data(), fhTmp.nameLen); + fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end()); + + cargo.read(reinterpret_cast(&fhTmp.hashName), sizeof(fhTmp.hashName)); + cargo.read(reinterpret_cast(&fhTmp.offset), sizeof(fhTmp.offset)); + cargo.read(reinterpret_cast(&fhTmp.size), sizeof(fhTmp.size)); + cargo.read(reinterpret_cast(&fhTmp.crc), sizeof(fhTmp.crc)); + cargo.read(reinterpret_cast(&fhTmp.flag), sizeof(fhTmp.flag)); + + //Tworzenie wierszy tabeli + CreateTableRow(fhTmp.nameFile, fhTmp.flag, fhTmp.hashName); + } + + cargo.close(); + tui.table(list); +} + //----------------------------------------------------------------------------- // Generowanie wierszy do tabeli //----------------------------------------------------------------------------- -void ViewCargo::ShowFile(const std::string& file, const uint8_t& flag) +void ViewCargo::CreateTableRow(const std::string& file, const uint8_t& flag, const uint64_t& hash) { - std::string compresedCheck = "[ ]"; - std::string encryptedCheck = "[ ]"; + //Zamiania crc liczbowej na hex string + std::stringstream ss; + ss << "0x" << std::hex << std::uppercase << hash; + + //Lista + std::vector tmpList = { "[ ]", "[ ]", file, ss.str() }; + + std::vector cell; + + ftxui::Element eZip; + ftxui::Element eEnc; // Ustawianie checkboxów switch (flag) { case FILE_FLAG_COMPRESS: - compresedCheck = "[x]"; + //eZip = ftxui::text(" [x] ") | ftxui::color(ftxui::Color::Cyan); + //eEnc = ftxui::text(" [ ] ") | ftxui::color(ftxui::Color::White); + tmpList[0] = "[x]"; break; case FILE_FLAG_ENCRYPT: - encryptedCheck = "[x]"; + tmpList[1] = "[x]"; break; case FILE_FLAG_ZIPENC: - compresedCheck = "[x]"; - encryptedCheck = "[x]"; + tmpList[0] = "[x]"; + tmpList[1] = "[x]"; break; default: - compresedCheck = "[ ]"; - encryptedCheck = "[ ]"; + tmpList[0] = "[ ]"; + tmpList[1] = "[ ]"; break; } - // Wyœwietlanie - std::cout << compresedCheck << " " << encryptedCheck << " " << file << std::endl; + //Dodanie wiersza do listy + list.push_back(tmpList); +} + +//----------------------------------------------------------------------------- +// Renderowanie listy plików +//----------------------------------------------------------------------------- +void ViewCargo::RenderList() +{ + //Dodawanie wierszy do kolumn + ftxui::Element table = ftxui::vbox(std::move(filesList)); + + auto screen = ftxui::Screen::Create(ftxui::Dimension::Fit(table)); + ftxui::Render(screen, table); + screen.Print(); } diff --git a/ViewCargo.h b/ViewCargo.h index 576b336..1ab452e 100644 --- a/ViewCargo.h +++ b/ViewCargo.h @@ -30,6 +30,7 @@ #include #include "DataStruct.h" +#include "Tui.h" class ViewCargo { public: @@ -39,8 +40,19 @@ public: bool View(const std::string&); private: - bool ViewFiles(const std::string&); - void ShowFile(const std::string&, const uint8_t&); + Tui tui; + const std::string signature; + const uint16_t version; + + uint32_t filesLen; + uint64_t tablePos; + std::vector filesList; + std::vector> list; + + bool CheckCargoFile(const std::string&); + void GetFileList(const std::string&); + void RenderList(); + void CreateTableRow(const std::string&, const uint8_t&, const uint64_t&); }; diff --git a/testx/text_file.txt b/testx/text_file.txt index 02a2623..ed2b7f7 100644 --- a/testx/text_file.txt +++ b/testx/text_file.txt @@ -1,126 +1,251 @@ Nam strzelać nie kazano. - WstÄ…piÅ‚em na dziaÅ‚o + I spójrzaÅ‚em na pole; dwieÅ›cie armat grzmiaÅ‚o. + Artyleryi ruskiej ciÄ…gnÄ… siÄ™ szeregi, + Prosto, dÅ‚ugo, daleko, jako morza brzegi; + I widziaÅ‚em ich wodza: przybiegÅ‚, mieczem skinÄ…Å‚ + I jak ptak jedno skrzydÅ‚o wojska swego zwinÄ…Å‚; + Wylewa siÄ™ spod skrzydÅ‚a Å›ciÅ›niona piechota + DÅ‚ugÄ… czarnÄ… kolumnÄ…, jako lawa bÅ‚ota, + Nasypana iskrami bagnetów. Jak sÄ™py + Czarne chorÄ…gwie na Å›mierć prowadzÄ… zastÄ™py. + + Przeciw nim sterczy biaÅ‚a, wÄ…ska, zaostrzona, + Jak gÅ‚az bodzÄ…cy morze, reduta Ordona. + Sześć tylko miaÅ‚a armat; wciąż dymiÄ… i Å›wiecÄ…; + I nie tyle prÄ™dkich słów gniewne usta miecÄ…, + Nie tyle przejdzie uczuć przez duszÄ™ w rozpaczy, + Ile z tych dziaÅ‚ leciaÅ‚o bomb, kul i kartaczy. + Patrz, tam granat w sam Å›rodek kolumny siÄ™ nurza, + Jak w fale bryÅ‚a lawy, puÅ‚k dymem zachmurza; + PÄ™ka Å›ród dymu granat, szyk pod niebo leci + I ogromna Å‚ysina Å›ród kolumny Å›wieci. + + Tam kula, lecÄ…c, z dala grozi, szumi, wyje. + Ryczy jak byk przed bitwÄ…, miota siÄ™, grunt ryje; - + Już dopadÅ‚a; jak boa Å›ród kolumn siÄ™ zwija, + Pali piersiÄ…, rwie zÄ™bem, oddechem zabija. + Najstraszniejszej nie widać, lecz sÅ‚ychać po dźwiÄ™ku, + Po waleniu siÄ™ trupów, po ranionych jÄ™ku: + Gdy kolumnÄ™ od koÅ„ca do koÅ„ca przewierci, + Jak gdyby Å›rodkiem wojska przeszedÅ‚ anioÅ‚ Å›mierci. + + Gdzież jest król, co na rzezie tÅ‚umy te wyprawia? + Czy dzieli ich odwagÄ™, czy pierÅ› sam nadstawia? + Nie, on siedzi o pięćset mil na swej stolicy, + Król wielki, samowÅ‚adnik Å›wiata poÅ‚owicy; + ZmarszczyÅ‚ brwi, - i tysiÄ…ce kibitek wnet leci; + PodpisaÅ‚, - tysiÄ…c matek opÅ‚akuje dzieci; + SkinÄ…Å‚, - padajÄ… knuty od Niemna do Chiwy. + Mocarzu, jak Bóg silny, jak szatan zÅ‚oÅ›liwy, + Gdy Turków za BaÅ‚kanem twoje straszÄ… spiże, + Gdy poselstwo paryskie twoje stopy liże, - + Warszawa jedna twojej mocy siÄ™ urÄ…ga, + Podnosi na ciÄ™ rÄ™kÄ™ i koronÄ™ Å›ciÄ…ga, + KoronÄ™ Kazimierzów, Chrobrych z twojej gÅ‚owy, + BoÅ› jÄ… ukradÅ‚ i skrwawiÅ‚, synu Wasilowy! + + Car dziwi siÄ™ - ze strachu. drzÄ… Petersburczany, + Car gniewa siÄ™ - ze strachu mrÄ… jego dworzany; + Ale sypiÄ… siÄ™ wojska, których Bóg i wiara + Jest Car. - Car gniewny: umrzem, rozweselim Cara. + PosÅ‚any wódz kaukaski z siÅ‚ami pół-Å›wiata, + Wierny, czynny i sprawny - jak knut w rÄ™ku kata. + + Ura! ura! Patrz, blisko reduty, już w rowy + WalÄ… siÄ™, na faszynÄ™ kÅ‚adÄ…c swe tuÅ‚owy; + Już czerniÄ… siÄ™ na biaÅ‚ych palisadach wałów. + Jeszcze reduta w Å›rodku, jasna od wystrzałów, + Czerwieni siÄ™ nad czerniÄ…: jak w Å›rodek mrowiaka + Wrzucony motyl bÅ‚yska, - mrowie go naciska, - + ZgasÅ‚ - tak zgasÅ‚a reduta. Czyż ostatnie dziaÅ‚o + StrÄ…cone z Å‚oża w piasku paszczÄ™ zagrzebaÅ‚o? + Czy zapaÅ‚ krwiÄ… ostatni bombardyjer zalaÅ‚? + ZgasnÄ…Å‚ ogieÅ„. - Już Moskal rogatki wywalaÅ‚. + + Gdzież rÄ™czna broÅ„? - Ach, dzisiaj pracowaÅ‚a wiÄ™cej + Niż na wszystkich przeglÄ…dach za wÅ‚adzy książęcej; + ZgadÅ‚em, dlaczego milczy, - bo nieraz widziaÅ‚em + GarstkÄ™ naszych walczÄ…cÄ… z Moskali nawaÅ‚em. + Gdy godzinÄ™ woÅ‚ano dwa sÅ‚owa: pal, nabij; + Gdy oddechy dym tÅ‚umi, trud ramiona sÅ‚abi; + A wciąż grzmi rozkaz wodzów, wre żoÅ‚nierza czynność; + Na koniec bez rozkazu peÅ‚niÄ… swÄ… powinność, + Na koniec bez rozwagi, bez czucia, pamiÄ™ci, + Å»oÅ‚nierz jako mÅ‚yn palny nabija - grzmi - krÄ™ci + BroÅ„ od oka do nogi, od nogi na oko: + Aż rÄ™ka w Å‚adownicy dÅ‚ugo i głęboko + SzukaÅ‚a, nie znalazÅ‚a - i żoÅ‚nierz pobladnÄ…Å‚, + Nie znalazÅ‚szy Å‚adunku, już broniÄ… nie wÅ‚adnÄ…Å‚; + I uczuÅ‚, że go pali strzelba rozogniona; + UpuÅ›ciÅ‚ jÄ… i upadÅ‚; - nim dobijÄ…, skona. + Takem myÅ›liÅ‚, - a w szaniec nieprzyjaciół kupa + Już Å‚azÅ‚a, jak robactwo na Å›wieżego trupa. + + PociemniaÅ‚o mi w oczach - a gdym Å‚zy ocieraÅ‚, + SÅ‚yszaÅ‚em, że coÅ› do mnie mówiÅ‚ mój JeneraÅ‚. + On przez lunetÄ™ wspartÄ… na moim ramieniu + DÅ‚ugo na szturm i szaniec poglÄ…daÅ‚ w milczeniu. + Na koniec rzekÅ‚; "Stracona". - Spod lunety jego + Wymknęło siÄ™ Å‚ez kilka, - rzekÅ‚ do mnie: "Kolego, + Wzrok mÅ‚ody od szkieÅ‚ lepszy; patrzaj, tam na wale, + Znasz Ordona, czy widzisz, gdzie jest?" - "Jenerale, + Czy go znam? - Tam staÅ‚ zawsze, to dziaÅ‚o kierowaÅ‚. + Nie widzÄ™ - znajdÄ™ - dojrzÄ™! - Å›ród dymu siÄ™ schowaÅ‚: + Lecz Å›ród najgÄ™stszych kłębów dymu ileż razy + WidziaÅ‚em rÄ™kÄ™ jego, dajÄ…cÄ… rozkazy. - + WidzÄ™ go znowu, - widzÄ™ rÄ™kÄ™ - bÅ‚yskawicÄ™, + Wywija, grozi wrogom, trzyma palnÄ… Å›wiécÄ™, + BiorÄ… go - zginÄ…Å‚ - o nie, - skoczyÅ‚ w dół, - do lochów"! + "Dobrze - rzecze JeneraÅ‚ - nie odda im prochów". + + Tu blask - dym - chwila cicho - i huk jak stu gromów. + ZaćmiÅ‚o siÄ™ powietrze od ziemi wylomów, + Harmaty podskoczyÅ‚y i jak wystrzelone + ToczyÅ‚y siÄ™ na koÅ‚ach - lonty zapalone + Nie trafiÅ‚y do swoich panew. I dym wionÄ…Å‚ + Prosto ku nam; i w gÄ™stej chmurze nas ochÅ‚onÄ…Å‚. -I nie byÅ‚o nic widać prócz granatów blasku + +I nie byÅ‚o nic widać prócz granatów blasku, + I powoli dym rzedniaÅ‚, opadaÅ‚ deszcz piasku. + SpojrzaÅ‚em na redutÄ™; - waÅ‚y, palisady, + DziaÅ‚a i naszych garstka, i wrogów gromady; + Wszystko jako sen znikÅ‚o. - Tylko czarna bryÅ‚a + Ziemi nieksztaÅ‚tnej leży - rozjemcza mogiÅ‚a. + Tam i ci, co bronili, -i ci, co siÄ™ wdarli, + Pierwszy raz pokój szczery i wieczny zawarli. + Choćby cesarz Moskalom kazaÅ‚ wstać, już dusza + Moskiewska. tam raz pierwszy, cesarza nie sÅ‚usza. + Tam zagrzebane tylu set ciaÅ‚a, imiona: + Dusze gdzie? nie wiem; lecz wiem, gdzie dusza Ordona. + On bÄ™dzie Patron szaÅ„ców! - Bo dzieÅ‚o zniszczenia + W dobrej sprawie jest Å›wiÄ™te, Jak dzieÅ‚o tworzenia; + Bóg wyrzekÅ‚ sÅ‚owo staÅ„ siÄ™, Bóg i zgiÅ„ wyrzecze. + Kiedy od ludzi wiara i wolność uciecze, + Kiedy ziemiÄ™ despotyzm i duma szalona + OblejÄ…, jak Moskale redutÄ™ Ordona - + KarzÄ…c plemiÄ™ zwyciężców zbrodniami zatrute, + Bóg wysadzi tÄ™ ziemiÄ™, jak on swÄ… redutÄ™. \ No newline at end of file diff --git a/testx2/herrsher-of-the-void.png b/testx2/herrsher-of-the-void.png new file mode 100644 index 0000000..d6dfc12 Binary files /dev/null and b/testx2/herrsher-of-the-void.png differ diff --git a/testx2/herrsher-of-the-void.tga b/testx2/herrsher-of-the-void.tga new file mode 100644 index 0000000..8a60e54 Binary files /dev/null and b/testx2/herrsher-of-the-void.tga differ diff --git a/testx2/mus_honkai_space.ogg b/testx2/mus_honkai_space.ogg new file mode 100644 index 0000000..136cba5 Binary files /dev/null and b/testx2/mus_honkai_space.ogg differ diff --git a/testx2/text_file.txt b/testx2/text_file.txt new file mode 100644 index 0000000..ed2b7f7 --- /dev/null +++ b/testx2/text_file.txt @@ -0,0 +1,251 @@ +Nam strzelać nie kazano. - WstÄ…piÅ‚em na dziaÅ‚o + +I spójrzaÅ‚em na pole; dwieÅ›cie armat grzmiaÅ‚o. + +Artyleryi ruskiej ciÄ…gnÄ… siÄ™ szeregi, + +Prosto, dÅ‚ugo, daleko, jako morza brzegi; + +I widziaÅ‚em ich wodza: przybiegÅ‚, mieczem skinÄ…Å‚ + +I jak ptak jedno skrzydÅ‚o wojska swego zwinÄ…Å‚; + +Wylewa siÄ™ spod skrzydÅ‚a Å›ciÅ›niona piechota + +DÅ‚ugÄ… czarnÄ… kolumnÄ…, jako lawa bÅ‚ota, + +Nasypana iskrami bagnetów. Jak sÄ™py + +Czarne chorÄ…gwie na Å›mierć prowadzÄ… zastÄ™py. + + + +Przeciw nim sterczy biaÅ‚a, wÄ…ska, zaostrzona, + +Jak gÅ‚az bodzÄ…cy morze, reduta Ordona. + +Sześć tylko miaÅ‚a armat; wciąż dymiÄ… i Å›wiecÄ…; + +I nie tyle prÄ™dkich słów gniewne usta miecÄ…, + +Nie tyle przejdzie uczuć przez duszÄ™ w rozpaczy, + +Ile z tych dziaÅ‚ leciaÅ‚o bomb, kul i kartaczy. + +Patrz, tam granat w sam Å›rodek kolumny siÄ™ nurza, + +Jak w fale bryÅ‚a lawy, puÅ‚k dymem zachmurza; + +PÄ™ka Å›ród dymu granat, szyk pod niebo leci + +I ogromna Å‚ysina Å›ród kolumny Å›wieci. + + + +Tam kula, lecÄ…c, z dala grozi, szumi, wyje. + +Ryczy jak byk przed bitwÄ…, miota siÄ™, grunt ryje; - + +Już dopadÅ‚a; jak boa Å›ród kolumn siÄ™ zwija, + +Pali piersiÄ…, rwie zÄ™bem, oddechem zabija. + +Najstraszniejszej nie widać, lecz sÅ‚ychać po dźwiÄ™ku, + +Po waleniu siÄ™ trupów, po ranionych jÄ™ku: + +Gdy kolumnÄ™ od koÅ„ca do koÅ„ca przewierci, + +Jak gdyby Å›rodkiem wojska przeszedÅ‚ anioÅ‚ Å›mierci. + + + +Gdzież jest król, co na rzezie tÅ‚umy te wyprawia? + +Czy dzieli ich odwagÄ™, czy pierÅ› sam nadstawia? + +Nie, on siedzi o pięćset mil na swej stolicy, + +Król wielki, samowÅ‚adnik Å›wiata poÅ‚owicy; + +ZmarszczyÅ‚ brwi, - i tysiÄ…ce kibitek wnet leci; + +PodpisaÅ‚, - tysiÄ…c matek opÅ‚akuje dzieci; + +SkinÄ…Å‚, - padajÄ… knuty od Niemna do Chiwy. + +Mocarzu, jak Bóg silny, jak szatan zÅ‚oÅ›liwy, + +Gdy Turków za BaÅ‚kanem twoje straszÄ… spiże, + +Gdy poselstwo paryskie twoje stopy liże, - + +Warszawa jedna twojej mocy siÄ™ urÄ…ga, + +Podnosi na ciÄ™ rÄ™kÄ™ i koronÄ™ Å›ciÄ…ga, + +KoronÄ™ Kazimierzów, Chrobrych z twojej gÅ‚owy, + +BoÅ› jÄ… ukradÅ‚ i skrwawiÅ‚, synu Wasilowy! + + + +Car dziwi siÄ™ - ze strachu. drzÄ… Petersburczany, + +Car gniewa siÄ™ - ze strachu mrÄ… jego dworzany; + +Ale sypiÄ… siÄ™ wojska, których Bóg i wiara + +Jest Car. - Car gniewny: umrzem, rozweselim Cara. + +PosÅ‚any wódz kaukaski z siÅ‚ami pół-Å›wiata, + +Wierny, czynny i sprawny - jak knut w rÄ™ku kata. + + + +Ura! ura! Patrz, blisko reduty, już w rowy + +WalÄ… siÄ™, na faszynÄ™ kÅ‚adÄ…c swe tuÅ‚owy; + +Już czerniÄ… siÄ™ na biaÅ‚ych palisadach wałów. + +Jeszcze reduta w Å›rodku, jasna od wystrzałów, + +Czerwieni siÄ™ nad czerniÄ…: jak w Å›rodek mrowiaka + +Wrzucony motyl bÅ‚yska, - mrowie go naciska, - + +ZgasÅ‚ - tak zgasÅ‚a reduta. Czyż ostatnie dziaÅ‚o + +StrÄ…cone z Å‚oża w piasku paszczÄ™ zagrzebaÅ‚o? + +Czy zapaÅ‚ krwiÄ… ostatni bombardyjer zalaÅ‚? + +ZgasnÄ…Å‚ ogieÅ„. - Już Moskal rogatki wywalaÅ‚. + + + +Gdzież rÄ™czna broÅ„? - Ach, dzisiaj pracowaÅ‚a wiÄ™cej + +Niż na wszystkich przeglÄ…dach za wÅ‚adzy książęcej; + +ZgadÅ‚em, dlaczego milczy, - bo nieraz widziaÅ‚em + +GarstkÄ™ naszych walczÄ…cÄ… z Moskali nawaÅ‚em. + +Gdy godzinÄ™ woÅ‚ano dwa sÅ‚owa: pal, nabij; + +Gdy oddechy dym tÅ‚umi, trud ramiona sÅ‚abi; + +A wciąż grzmi rozkaz wodzów, wre żoÅ‚nierza czynność; + +Na koniec bez rozkazu peÅ‚niÄ… swÄ… powinność, + +Na koniec bez rozwagi, bez czucia, pamiÄ™ci, + +Å»oÅ‚nierz jako mÅ‚yn palny nabija - grzmi - krÄ™ci + +BroÅ„ od oka do nogi, od nogi na oko: + +Aż rÄ™ka w Å‚adownicy dÅ‚ugo i głęboko + +SzukaÅ‚a, nie znalazÅ‚a - i żoÅ‚nierz pobladnÄ…Å‚, + +Nie znalazÅ‚szy Å‚adunku, już broniÄ… nie wÅ‚adnÄ…Å‚; + +I uczuÅ‚, że go pali strzelba rozogniona; + +UpuÅ›ciÅ‚ jÄ… i upadÅ‚; - nim dobijÄ…, skona. + +Takem myÅ›liÅ‚, - a w szaniec nieprzyjaciół kupa + +Już Å‚azÅ‚a, jak robactwo na Å›wieżego trupa. + + + +PociemniaÅ‚o mi w oczach - a gdym Å‚zy ocieraÅ‚, + +SÅ‚yszaÅ‚em, że coÅ› do mnie mówiÅ‚ mój JeneraÅ‚. + +On przez lunetÄ™ wspartÄ… na moim ramieniu + +DÅ‚ugo na szturm i szaniec poglÄ…daÅ‚ w milczeniu. + +Na koniec rzekÅ‚; "Stracona". - Spod lunety jego + +Wymknęło siÄ™ Å‚ez kilka, - rzekÅ‚ do mnie: "Kolego, + +Wzrok mÅ‚ody od szkieÅ‚ lepszy; patrzaj, tam na wale, + +Znasz Ordona, czy widzisz, gdzie jest?" - "Jenerale, + +Czy go znam? - Tam staÅ‚ zawsze, to dziaÅ‚o kierowaÅ‚. + +Nie widzÄ™ - znajdÄ™ - dojrzÄ™! - Å›ród dymu siÄ™ schowaÅ‚: + +Lecz Å›ród najgÄ™stszych kłębów dymu ileż razy + +WidziaÅ‚em rÄ™kÄ™ jego, dajÄ…cÄ… rozkazy. - + +WidzÄ™ go znowu, - widzÄ™ rÄ™kÄ™ - bÅ‚yskawicÄ™, + +Wywija, grozi wrogom, trzyma palnÄ… Å›wiécÄ™, + +BiorÄ… go - zginÄ…Å‚ - o nie, - skoczyÅ‚ w dół, - do lochów"! + +"Dobrze - rzecze JeneraÅ‚ - nie odda im prochów". + + + +Tu blask - dym - chwila cicho - i huk jak stu gromów. + +ZaćmiÅ‚o siÄ™ powietrze od ziemi wylomów, + +Harmaty podskoczyÅ‚y i jak wystrzelone + +ToczyÅ‚y siÄ™ na koÅ‚ach - lonty zapalone + +Nie trafiÅ‚y do swoich panew. I dym wionÄ…Å‚ + +Prosto ku nam; i w gÄ™stej chmurze nas ochÅ‚onÄ…Å‚. + +I nie byÅ‚o nic widać prócz granatów blasku, + +I powoli dym rzedniaÅ‚, opadaÅ‚ deszcz piasku. + +SpojrzaÅ‚em na redutÄ™; - waÅ‚y, palisady, + +DziaÅ‚a i naszych garstka, i wrogów gromady; + +Wszystko jako sen znikÅ‚o. - Tylko czarna bryÅ‚a + +Ziemi nieksztaÅ‚tnej leży - rozjemcza mogiÅ‚a. + +Tam i ci, co bronili, -i ci, co siÄ™ wdarli, + +Pierwszy raz pokój szczery i wieczny zawarli. + +Choćby cesarz Moskalom kazaÅ‚ wstać, już dusza + +Moskiewska. tam raz pierwszy, cesarza nie sÅ‚usza. + +Tam zagrzebane tylu set ciaÅ‚a, imiona: + +Dusze gdzie? nie wiem; lecz wiem, gdzie dusza Ordona. + +On bÄ™dzie Patron szaÅ„ców! - Bo dzieÅ‚o zniszczenia + +W dobrej sprawie jest Å›wiÄ™te, Jak dzieÅ‚o tworzenia; + +Bóg wyrzekÅ‚ sÅ‚owo staÅ„ siÄ™, Bóg i zgiÅ„ wyrzecze. + +Kiedy od ludzi wiara i wolność uciecze, + +Kiedy ziemiÄ™ despotyzm i duma szalona + +OblejÄ…, jak Moskale redutÄ™ Ordona - + +KarzÄ…c plemiÄ™ zwyciężców zbrodniami zatrute, + +Bóg wysadzi tÄ™ ziemiÄ™, jak on swÄ… redutÄ™. \ No newline at end of file diff --git a/voidcmd.cpp b/voidcmd.cpp index 1ba9020..ba0e200 100644 --- a/voidcmd.cpp +++ b/voidcmd.cpp @@ -110,7 +110,7 @@ int main(int argc, char* argv[]) { if (!EmptyPath(path)) { return 1; } - if (!cargo.Create(path, 0x0F)) + if (!cargo.Create(path, 0x01)) { return 1; } @@ -130,7 +130,7 @@ int main(int argc, char* argv[]) { if (arg == "-e" && i + 1 < argc) { path = argv[i + 1]; - if (!cargo.Create(path, 0xF0)) + if (!cargo.Create(path, 0x02)) { return 1; } @@ -140,7 +140,7 @@ int main(int argc, char* argv[]) { if (arg == "-s" && i + 1 < argc) { path = argv[i + 1]; - if (!cargo.Create(path, 0xFF)) + if (!cargo.Create(path, 0x03)) { return 1; } @@ -151,7 +151,7 @@ int main(int argc, char* argv[]) { { path = argv[i + 1]; if (!EmptyPath(path)) { return 1; } - if (!cargo.Create(path, 0xAB)) + if (!cargo.Create(path, 0xFF)) { return 1; } diff --git a/voidcmd.vcxproj b/voidcmd.vcxproj index dcc841e..119342f 100644 --- a/voidcmd.vcxproj +++ b/voidcmd.vcxproj @@ -104,13 +104,13 @@ _DEBUG;_CONSOLE;%(PreprocessorDefinitions);SODIUM_STATIC true stdcpp17 - 3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include + 3rd\ftxui\include;3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include;3rd\xxhash\include Console true - 3rd\zstd\lib\Debug;3rd\xxhash\lib\Debug;3rd\libsodium\x64\Debug\v143\static - libsodium.lib;zstd_static.lib;xxhash.lib + 3rd\zstd\lib\Debug;3rd\ftxui\Debug;3rd\xxhash\lib\Debug;3rd\libsodium\x64\Debug\v143\static + ftxui-component.lib;ftxui-dom.lib;ftxui-screen.lib;libsodium.lib;zstd_static.lib;xxhash.lib @@ -122,13 +122,13 @@ NDEBUG;_CONSOLE;%(PreprocessorDefinitions);SODIUM_STATIC true stdcpp17 - 3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include + 3rd\ftxui\include;3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include; Console true - 3rd\zstd\lib\Release;3rd\libsodium\x64\Release\v143\static;3rd\xxhash\lib\Release - libsodium.lib;zstd_static.lib;xxhash.lib + 3rd\zstd\lib\Release;3rd\libsodium\x64\Release\v143\static;3rd\xxhash\lib\Release;3rd\ftxui\Release + ftxui-component.lib;ftxui-dom.lib;ftxui-screen.lib;libsodium.lib;zstd_static.lib;xxhash.lib @@ -137,6 +137,7 @@ + @@ -147,6 +148,7 @@ + diff --git a/voidcmd.vcxproj.filters b/voidcmd.vcxproj.filters index 563ca03..d4a64b3 100644 --- a/voidcmd.vcxproj.filters +++ b/voidcmd.vcxproj.filters @@ -27,6 +27,9 @@ Pliki źródÅ‚owe + + Pliki źródÅ‚owe + Pliki źródÅ‚owe @@ -50,6 +53,9 @@ Pliki nagłówkowe + + Pliki nagłówkowe + Pliki nagłówkowe