Compare commits

..

No commits in common. "0ffd302de6b1fb560f5147385fdde5217e4958d3" and "b98ded7ca320e4dd2c6fefb3d65d63115d60e099" have entirely different histories.

16 changed files with 588 additions and 99 deletions

View file

@ -20,7 +20,7 @@ std::vector<char> ChunkManager::chunked(const std::vector<char>& 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<char> compressedBlocks;
for (size_t offset = 0; offset < rawSize; offset += maxBlockSize)
@ -45,8 +45,8 @@ std::vector<char> ChunkManager::chunked(const std::vector<char>& raw, const bool
// Zmiana rozmiaru do faktycznego rozmiaru po kompresji
zipChunk.resize(zipSize);
uint32_t chs = static_cast<uint32_t>(chunk.size());
uint32_t zch = static_cast<uint32_t>(outChunk.size());
uint32_t chs = chunk.size();
uint32_t zch = outChunk.size();
//addIntToVector<uint32_t>(compressedBlocks, chs);
lastChunkRawSize = chs;
@ -60,7 +60,7 @@ std::vector<char> ChunkManager::chunked(const std::vector<char>& 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<uint32_t>(zip, blockLen);
addIntToVector<uint16_t>(zip, blockLen);
addIntToVector<uint32_t>(zip, maxBlockSize);
addIntToVector<uint32_t>(zip, lastChunkRawSize);
@ -78,7 +78,7 @@ std::vector<char> ChunkManager::chunked(const std::vector<char>& raw, const bool
std::vector<char> ChunkManager::dechunked(const std::vector<char>& zip, const bool& compress, const bool& encrypt)
{
size_t offset = 0;
const uint32_t chunkLen = getIntFromVector<uint32_t>(zip, offset);
const uint16_t chunkLen = getIntFromVector<uint16_t>(zip, offset);
const uint32_t chunkBeforeSize = getIntFromVector<uint32_t>(zip, offset);
const uint32_t chunkLastSize = getIntFromVector<uint32_t>(zip, offset);

View file

@ -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<char>& input, std::vector<char>& output)
void CreateCargo::computingBytes(const int8_t& flag, std::vector<char>& input, std::vector<char>& 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<char>& 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<FilesTable> 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<const char*>(&cargoHead.table), sizeof(cargoHead.table));
cargo.write(reinterpret_cast<const char*>(&cargoHead.version), sizeof(cargoHead.version));
cargo.write(reinterpret_cast<const char*>(&cargoHead.files), sizeof(cargoHead.files));
cargo.write(reinterpret_cast<const char*>(&cargoHead.table), sizeof(cargoHead.table));
std::vector<FilesTable> filesTable;
@ -263,14 +269,13 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
std::vector<char> pakBuffer;
computingBytes(file.parameter, buffer, pakBuffer);
std::cout << static_cast<int>(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<int8_t>(file.parameter);
ft.crc = crc;
cargo.write(reinterpret_cast<const char*>(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<const char*>(&head.nameLen), sizeof(head.nameLen));
cargo.write(head.nameFile.data(), head.nameLen);
cargo.write(reinterpret_cast<const char*>(&head.hashName), sizeof(head.hashName));
cargo.write(reinterpret_cast<const char*>(&head.offset), sizeof(head.offset));
cargo.write(reinterpret_cast<const char*>(&head.size), sizeof(head.size));
cargo.write(reinterpret_cast<const char*>(&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<const char*>(&cargoHead.table), sizeof(cargoHead.table));
cargo.write(reinterpret_cast<const char*>(&cargoHead.version), sizeof(cargoHead.version));
cargo.write(reinterpret_cast<const char*>(&cargoHead.files), sizeof(cargoHead.files));
cargo.write(reinterpret_cast<const char*>(&cargoHead.table), sizeof(cargoHead.table));
cargo.close();

View file

@ -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<std::string> 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<char>&, std::vector<char>&);
void computingBytes(const int8_t&, std::vector<char>&, std::vector<char>&);
// Sprawdzanie rozsze¿eñ plików
bool CheckFileExtension(const std::string&, const std::vector<std::string>&);
@ -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<std::string>&, const std::string&);
};

View file

@ -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;
};

View file

@ -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<char*>(&tablePosition), sizeof(tablePosition));
cargoFile.read(reinterpret_cast<char*>(&cargoVer), sizeof(cargoVer));
cargoFile.read(reinterpret_cast<char*>(&filesLen), sizeof(filesLen));
cargoFile.read(reinterpret_cast<char*>(&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,12 +137,10 @@ bool ExtractCargo::HashValid(const std::vector<char>& data, const uint64_t& crc)
//-----------------------------------------------------------------------------
// Magiczna funkcja do dekompresji i deszyfracji danych
//-----------------------------------------------------------------------------
void ExtractCargo::computingBytes(const std::vector<char>& input, std::vector<char>& output, const uint8_t& flag)
void ExtractCargo::computingBytes(const std::vector<char>& input, std::vector<char>& output, const int8_t& flag)
{
ChunkManager cm(eman);
std::cout << static_cast<int>(flag) << std::endl;
switch (flag)
{
case FILE_FLAG_COMPRESS:
@ -150,7 +153,10 @@ void ExtractCargo::computingBytes(const std::vector<char>& input, std::vector<ch
case FILE_FLAG_ZIPENC:
output = cm.dechunked(input, true, true);
std::cout << "DENC" << std::endl;
break;
case FILE_FLAG_CHUNK:
output = cm.dechunked(input, false, false);
break;
default:
@ -174,6 +180,7 @@ void ExtractCargo::LoadFilesTable()
cargoFile.read(nameBuffor.data(), fhTmp.nameLen);
fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end());
cargoFile.read(reinterpret_cast<char*>(&fhTmp.hashName), sizeof(fhTmp.hashName));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.offset), sizeof(fhTmp.offset));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.size), sizeof(fhTmp.size));
cargoFile.read(reinterpret_cast<char*>(&fhTmp.crc), sizeof(fhTmp.crc));

View file

@ -76,6 +76,6 @@ private:
void CreateDirections(std::filesystem::path);
// Magiczna funkcja do dekompresji i deszyfracji danych
void computingBytes(const std::vector<char>&, std::vector<char>&, const uint8_t&);
void computingBytes(const std::vector<char>&, std::vector<char>&, const int8_t&);
};

View file

@ -20,7 +20,14 @@
#include "ViewCargo.h"
ViewCargo::ViewCargo()
{}
:signature(SIGNATURE)
, version(VERSION)
, filesLen(0)
, tablePos(0)
{
std::vector<std::string> 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<char> 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<char*>(&tabPos), sizeof(tabPos));
cargo.read(reinterpret_cast<char*>(&tabSize), sizeof(tabSize));
cargo.read(reinterpret_cast<char*>(&cargoVer), sizeof(cargoVer));
cargo.read(reinterpret_cast<char*>(&filesLen), sizeof(filesLen));
cargo.read(reinterpret_cast<char*>(&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<char*>(&fhTmp.nameLen), sizeof(fhTmp.nameLen));
std::vector<char> nameBuffor(fhTmp.nameLen);
cargo.read(nameBuffor.data(), fhTmp.nameLen);
fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end());
cargo.read(reinterpret_cast<char*>(&fhTmp.offset), sizeof(fhTmp.offset));
cargo.read(reinterpret_cast<char*>(&fhTmp.size), sizeof(fhTmp.size));
cargo.read(reinterpret_cast<char*>(&fhTmp.crc), sizeof(fhTmp.crc));
cargo.read(reinterpret_cast<char*>(&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<char*>(&fhTmp.nameLen), sizeof(fhTmp.nameLen));
std::vector<char> nameBuffor(fhTmp.nameLen);
cargo.read(nameBuffor.data(), fhTmp.nameLen);
fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end());
cargo.read(reinterpret_cast<char*>(&fhTmp.hashName), sizeof(fhTmp.hashName));
cargo.read(reinterpret_cast<char*>(&fhTmp.offset), sizeof(fhTmp.offset));
cargo.read(reinterpret_cast<char*>(&fhTmp.size), sizeof(fhTmp.size));
cargo.read(reinterpret_cast<char*>(&fhTmp.crc), sizeof(fhTmp.crc));
cargo.read(reinterpret_cast<char*>(&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<std::string> tmpList = { "[ ]", "[ ]", file, ss.str() };
std::vector<ftxui::Element> 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();
}

View file

@ -30,6 +30,7 @@
#include <ftxui/dom/table.hpp>
#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<ftxui::Element> filesList;
std::vector<std::vector<std::string>> list;
bool CheckCargoFile(const std::string&);
void GetFileList(const std::string&);
void RenderList();
void CreateTableRow(const std::string&, const uint8_t&, const uint64_t&);
};

View file

@ -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ę.

Binary file not shown.

After

Width:  |  Height:  |  Size: 851 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

BIN
testx2/mus_honkai_space.ogg Normal file

Binary file not shown.

251
testx2/text_file.txt Normal file
View file

@ -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ę.

View file

@ -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;
}

View file

@ -104,13 +104,13 @@
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions);SODIUM_STATIC</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rd\ftxui\include;3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include;3rd\xxhash\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>3rd\zstd\lib\Debug;3rd\xxhash\lib\Debug;3rd\libsodium\x64\Debug\v143\static</AdditionalLibraryDirectories>
<AdditionalDependencies>libsodium.lib;zstd_static.lib;xxhash.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>3rd\zstd\lib\Debug;3rd\ftxui\Debug;3rd\xxhash\lib\Debug;3rd\libsodium\x64\Debug\v143\static</AdditionalLibraryDirectories>
<AdditionalDependencies>ftxui-component.lib;ftxui-dom.lib;ftxui-screen.lib;libsodium.lib;zstd_static.lib;xxhash.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
@ -122,13 +122,13 @@
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions);SODIUM_STATIC</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
<AdditionalIncludeDirectories>3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>3rd\ftxui\include;3rd\libsodium\include;3rd\json\include;3rd\zstd\include;3rd\xxhash\include;</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>3rd\zstd\lib\Release;3rd\libsodium\x64\Release\v143\static;3rd\xxhash\lib\Release</AdditionalLibraryDirectories>
<AdditionalDependencies>libsodium.lib;zstd_static.lib;xxhash.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>3rd\zstd\lib\Release;3rd\libsodium\x64\Release\v143\static;3rd\xxhash\lib\Release;3rd\ftxui\Release</AdditionalLibraryDirectories>
<AdditionalDependencies>ftxui-component.lib;ftxui-dom.lib;ftxui-screen.lib;libsodium.lib;zstd_static.lib;xxhash.lib</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
@ -137,6 +137,7 @@
<ClCompile Include="CreateCargo.cpp" />
<ClCompile Include="EncryptionManager.cpp" />
<ClCompile Include="ExtractCargo.cpp" />
<ClCompile Include="Tui.cpp" />
<ClCompile Include="ViewCargo.cpp" />
<ClCompile Include="voidcmd.cpp" />
</ItemGroup>
@ -147,6 +148,7 @@
<ClInclude Include="DataStruct.h" />
<ClInclude Include="EncryptionManager.h" />
<ClInclude Include="ExtractCargo.h" />
<ClInclude Include="Tui.h" />
<ClInclude Include="ViewCargo.h" />
</ItemGroup>
<ItemGroup>

View file

@ -27,6 +27,9 @@
<ClCompile Include="ViewCargo.cpp">
<Filter>Pliki źródłowe</Filter>
</ClCompile>
<ClCompile Include="Interface.cpp">
<Filter>Pliki źródłowe</Filter>
</ClCompile>
<ClCompile Include="ChunkManager.cpp">
<Filter>Pliki źródłowe</Filter>
</ClCompile>
@ -50,6 +53,9 @@
<ClInclude Include="DataStruct.h">
<Filter>Pliki nagłówkowe</Filter>
</ClInclude>
<ClInclude Include="Interface.h">
<Filter>Pliki nagłówkowe</Filter>
</ClInclude>
<ClInclude Include="ChunkManager.h">
<Filter>Pliki nagłówkowe</Filter>
</ClInclude>