Compare commits
No commits in common. "b98ded7ca320e4dd2c6fefb3d65d63115d60e099" and "6a07236b2ca5dbe84dae27b84ff5d89b5b81e2bd" have entirely different histories.
b98ded7ca3
...
6a07236b2c
13 changed files with 75 additions and 336 deletions
|
|
@ -18,10 +18,10 @@ public:
|
||||||
ChunkManager(EncryptionManager& em);
|
ChunkManager(EncryptionManager& em);
|
||||||
~ChunkManager();
|
~ChunkManager();
|
||||||
|
|
||||||
// Podział na chunki
|
// Kompresja danych
|
||||||
std::vector<char> chunked(const std::vector<char>&, const bool&, const bool&);
|
std::vector<char> chunked(const std::vector<char>&, const bool&, const bool&);
|
||||||
|
|
||||||
// Zcalanie chunków
|
// Dekompresja
|
||||||
std::vector<char> dechunked(const std::vector<char>&, const bool&, const bool&);
|
std::vector<char> dechunked(const std::vector<char>&, const bool&, const bool&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ CreateCargo::~CreateCargo() {
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Punk wejœcia do tworzenia archivum
|
// Punk wejœcia do tworzenia archivum
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
bool CreateCargo::Create(const std::string& path, const short& flag)
|
bool CreateCargo::Create(const std::string& path, const int16_t& flag)
|
||||||
{
|
{
|
||||||
cargoFile = path + "." + extension;
|
cargoFile = path + "." + extension;
|
||||||
catalogPath = path;
|
catalogPath = path;
|
||||||
|
|
@ -111,13 +111,6 @@ bool CreateCargo::GetFileList(const std::string& path)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::string fileRef = RemoveStartPath(PathToUnixLike(tmpPath));
|
std::string fileRef = RemoveStartPath(PathToUnixLike(tmpPath));
|
||||||
|
|
||||||
if (fileRef.length() > 255)
|
|
||||||
{
|
|
||||||
std::cerr << "The file path is too long. It exceeds 255 characters." << std::endl;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
PathConf pc;
|
PathConf pc;
|
||||||
if (methodFlags > -1)
|
if (methodFlags > -1)
|
||||||
{
|
{
|
||||||
|
|
@ -131,11 +124,11 @@ bool CreateCargo::GetFileList(const std::string& path)
|
||||||
{
|
{
|
||||||
if (FindOnTheList(zipList, fileRef) || CheckFileExtension(fileRef, zipList))
|
if (FindOnTheList(zipList, fileRef) || CheckFileExtension(fileRef, zipList))
|
||||||
{
|
{
|
||||||
pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? FILE_FLAG_ZIPENC : FILE_FLAG_COMPRESS;
|
pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? 3 : 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? FILE_FLAG_ENCRYPT : FILE_FLAG_RAW;
|
pc.parameter = FindOnTheList(encList, fileRef) || CheckFileExtension(fileRef, encList) ? 2 : 0;
|
||||||
}
|
}
|
||||||
pc.path = PathToUnixLike(tmpPath);
|
pc.path = PathToUnixLike(tmpPath);
|
||||||
std::cout << pc.path << " - " << pc.parameter << std::endl;
|
std::cout << pc.path << " - " << pc.parameter << std::endl;
|
||||||
|
|
@ -144,7 +137,6 @@ bool CreateCargo::GetFileList(const std::string& path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return filesPaths.size() > 0 ? true : false;
|
return filesPaths.size() > 0 ? true : false;
|
||||||
}
|
}
|
||||||
|
|
@ -194,7 +186,7 @@ CargoHead CreateCargo::CreateCargoHead(const uint32_t& filesLen, const uint64_t&
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Sprawdza czy plik znajduje siê na liœcie
|
// Sprawdza czy plik znajduje siê na liœcie
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void CreateCargo::computingBytes(const int8_t& flag, std::vector<char>& input, std::vector<char>& output)
|
void CreateCargo::computingBytes(const int16_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
|
//Flaga aktywna sprawdza czy plik jest na liœcie. Jeœli jest to zwraca surowedane
|
||||||
//Przeciwnie kompresuje dane
|
//Przeciwnie kompresuje dane
|
||||||
|
|
@ -202,19 +194,19 @@ void CreateCargo::computingBytes(const int8_t& flag, std::vector<char>& input, s
|
||||||
|
|
||||||
switch (flag)
|
switch (flag)
|
||||||
{
|
{
|
||||||
case FILE_FLAG_COMPRESS:
|
case 1:
|
||||||
output = cm.chunked(input, true, false);
|
output = cm.chunked(input, true, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_ENCRYPT:
|
case 2:
|
||||||
output = cm.chunked(input, false, true);
|
output = cm.chunked(input, false, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_ZIPENC:
|
case 3:
|
||||||
output = cm.chunked(input, true, true);
|
output = cm.chunked(input, true, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_RAW:
|
case 4:
|
||||||
output = cm.chunked(input, false, false);
|
output = cm.chunked(input, false, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -253,7 +245,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
|
|
||||||
if (size > MAX_FILE_SIZE)
|
if (size > MAX_FILE_SIZE)
|
||||||
{
|
{
|
||||||
std::cerr << path << " is too large. It exceeds " << MAX_FILE_SIZE / 1024 / 1024 / 1024 << "GB!" << std::endl;
|
std::cerr << path << " is too large. It exceeds 2GB!" << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -263,7 +255,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
f.close();
|
f.close();
|
||||||
|
|
||||||
//Tworzenie hashu CRC
|
//Tworzenie hashu CRC
|
||||||
const uint64_t crc = XXH64(buffer.data(), buffer.size(), 0);
|
const uint64_t crc = XXH64(buffer.data(), buffer.size(), VERSION);
|
||||||
|
|
||||||
//Kompresjia
|
//Kompresjia
|
||||||
std::vector<char> pakBuffer;
|
std::vector<char> pakBuffer;
|
||||||
|
|
@ -275,7 +267,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
||||||
ft.hashName = fnv64(path);
|
ft.hashName = fnv64(path);
|
||||||
ft.offset = offset;
|
ft.offset = offset;
|
||||||
ft.size = pakBuffer.size();
|
ft.size = pakBuffer.size();
|
||||||
ft.flag = static_cast<int8_t>(file.parameter);
|
ft.flag = file.parameter;
|
||||||
ft.crc = crc;
|
ft.crc = crc;
|
||||||
|
|
||||||
cargo.write(reinterpret_cast<const char*>(pakBuffer.data()), pakBuffer.size());
|
cargo.write(reinterpret_cast<const char*>(pakBuffer.data()), pakBuffer.size());
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@
|
||||||
struct PathConf
|
struct PathConf
|
||||||
{
|
{
|
||||||
std::string path;
|
std::string path;
|
||||||
int8_t parameter;
|
int16_t parameter;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CreateCargo {
|
class CreateCargo {
|
||||||
|
|
@ -56,12 +56,12 @@ public:
|
||||||
virtual ~CreateCargo();
|
virtual ~CreateCargo();
|
||||||
|
|
||||||
// Punk wejœcia do tworzenia archivum
|
// Punk wejœcia do tworzenia archivum
|
||||||
bool Create(const std::string&, const short&);
|
bool Create(const std::string&, const int16_t&);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string signature;
|
const std::string signature;
|
||||||
const std::string extension;
|
const std::string extension;
|
||||||
const signed char version;
|
const short version;
|
||||||
|
|
||||||
short methodFlags;
|
short methodFlags;
|
||||||
|
|
||||||
|
|
@ -87,6 +87,10 @@ private:
|
||||||
std::ofstream cargo;
|
std::ofstream cargo;
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
|
|
||||||
|
// Progress
|
||||||
|
std::atomic<uint64_t> progress;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Tworzenie listy plików do spakowania
|
// Tworzenie listy plików do spakowania
|
||||||
bool GetFileList(const std::string&);
|
bool GetFileList(const std::string&);
|
||||||
|
|
@ -110,7 +114,7 @@ private:
|
||||||
void GetFilters(const std::string&);
|
void GetFilters(const std::string&);
|
||||||
|
|
||||||
// Sprawdza czy plik znajduje siê na liœcie
|
// Sprawdza czy plik znajduje siê na liœcie
|
||||||
void computingBytes(const int8_t&, std::vector<char>&, std::vector<char>&);
|
void computingBytes(const int16_t&, std::vector<char>&, std::vector<char>&);
|
||||||
|
|
||||||
// Sprawdzanie rozsze¿eñ plików
|
// Sprawdzanie rozsze¿eñ plików
|
||||||
bool CheckFileExtension(const std::string&, const std::vector<std::string>&);
|
bool CheckFileExtension(const std::string&, const std::vector<std::string>&);
|
||||||
|
|
|
||||||
33
DataStruct.h
33
DataStruct.h
|
|
@ -25,14 +25,9 @@
|
||||||
#define EXTENSION "pak"
|
#define EXTENSION "pak"
|
||||||
#define SIGNATURE "XPAK"
|
#define SIGNATURE "XPAK"
|
||||||
|
|
||||||
#define SIGNATURE_KEY_FILE "XKEY"
|
#define SIGNATURE_KEY_FILE 1497713496 // XKEY
|
||||||
|
|
||||||
#define VERSION 0x03
|
#define VERSION 300
|
||||||
|
|
||||||
// WielkoϾ pojedynczego bloku strumienia
|
|
||||||
#define CHUNK_STREAM_512KB 524288 // 512KB
|
|
||||||
#define CHUNK_STREAM_16MB 16777216 // 16MB
|
|
||||||
#define CHUNK_STREAM_256MB 268435456 // 256MB
|
|
||||||
|
|
||||||
enum StoreMethod
|
enum StoreMethod
|
||||||
{
|
{
|
||||||
|
|
@ -43,39 +38,39 @@ enum StoreMethod
|
||||||
COMPRESSxENCRYPT = 3
|
COMPRESSxENCRYPT = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
#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
|
//Prgoram title
|
||||||
#define PROGRAM_TITLE "eXtendet PAK"
|
#define PROGRAM_TITLE "eXtendet PAK"
|
||||||
#define PROGRAM_VERSION "v0.4"
|
#define PROGRAM_VERSION "v1.3"
|
||||||
#define PROGRAM_AUTHOR "Yanczi"
|
#define PROGRAM_AUTHOR "Yanczi"
|
||||||
#define PROGRAM_COMPILING "12 December 2025"
|
#define PROGRAM_COMPILING "16 November 2025"
|
||||||
#define PROGRAM_LICENSE "GNU LGPL v3"
|
#define PROGRAM_LICENSE "GNU LGPL v3"
|
||||||
|
|
||||||
//Limity
|
//Limity
|
||||||
#define MAX_FILE_SIZE 8589934592 // 8GB
|
#define MAX_FILE_SIZE 2147483648 // 2GB
|
||||||
#define MAX_PAK_SIZE 8796093022208 // 8TB
|
#define MAX_PAK_SIZE 8796093022208 // 8TB
|
||||||
|
|
||||||
|
// Metody zapisania pliku
|
||||||
|
#define RAW_FILE 0
|
||||||
|
#define ZIP_FILE 1
|
||||||
|
#define CRYPT_FILE 2
|
||||||
|
#define CRYPT_ZIP 3
|
||||||
|
|
||||||
struct CargoHead
|
struct CargoHead
|
||||||
{
|
{
|
||||||
std::string signature;
|
std::string signature;
|
||||||
int8_t version;
|
int16_t version;
|
||||||
uint32_t files;
|
uint32_t files;
|
||||||
uint64_t table;
|
uint64_t table;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct FilesTable
|
struct FilesTable
|
||||||
{
|
{
|
||||||
uint8_t nameLen;
|
int16_t nameLen;
|
||||||
std::string nameFile;
|
std::string nameFile;
|
||||||
uint64_t hashName;
|
uint64_t hashName;
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
uint64_t size;
|
uint64_t size;
|
||||||
uint64_t crc;
|
uint64_t crc;
|
||||||
int8_t flag;
|
int16_t flag;
|
||||||
};
|
};
|
||||||
|
|
@ -67,8 +67,8 @@ void EncryptionManager::generateKeys()
|
||||||
|
|
||||||
void EncryptionManager::saveKey(const std::string& path, bool hpp)
|
void EncryptionManager::saveKey(const std::string& path, bool hpp)
|
||||||
{
|
{
|
||||||
const std::string sig = SIGNATURE_KEY_FILE;
|
const int sig = SIGNATURE_KEY_FILE;
|
||||||
const int8_t ver = VERSION;
|
const short ver = VERSION;
|
||||||
|
|
||||||
// Wygeneruj time stamp
|
// Wygeneruj time stamp
|
||||||
std::time_t now = std::time(nullptr);
|
std::time_t now = std::time(nullptr);
|
||||||
|
|
@ -84,7 +84,7 @@ void EncryptionManager::saveKey(const std::string& path, bool hpp)
|
||||||
std::ofstream file(path + ".key", std::ios::binary);
|
std::ofstream file(path + ".key", std::ios::binary);
|
||||||
if (!file) { std::cout << "Failed to save encryption key to file" << std::endl; }
|
if (!file) { std::cout << "Failed to save encryption key to file" << std::endl; }
|
||||||
|
|
||||||
file.write(sig.data(), sig.length());
|
file.write(reinterpret_cast<const char*>(&sig), sizeof(sig));
|
||||||
file.write(reinterpret_cast<const char*>(&ver), sizeof(ver));
|
file.write(reinterpret_cast<const char*>(&ver), sizeof(ver));
|
||||||
file.write(reinterpret_cast<const char*>(&time), sizeof(time));
|
file.write(reinterpret_cast<const char*>(&time), sizeof(time));
|
||||||
file.write(reinterpret_cast<const char*>(keyVec.data()), keyVec.size());
|
file.write(reinterpret_cast<const char*>(keyVec.data()), keyVec.size());
|
||||||
|
|
@ -138,17 +138,16 @@ void EncryptionManager::loadKey(const std::string& path)
|
||||||
{
|
{
|
||||||
std::ifstream file(path + ".key", std::ios::binary);
|
std::ifstream file(path + ".key", std::ios::binary);
|
||||||
|
|
||||||
const std::string signature = SIGNATURE_KEY_FILE;
|
int sig;
|
||||||
std::vector<char> sig(signature.size());
|
short ver;
|
||||||
int8_t ver;
|
|
||||||
int time;
|
int time;
|
||||||
|
|
||||||
// Wczytaj
|
// Wczytaj
|
||||||
file.read(sig.data(), sig.size());
|
file.read(reinterpret_cast<char*>(&sig), sizeof(sig));
|
||||||
file.read(reinterpret_cast<char*>(&ver), sizeof(ver));
|
file.read(reinterpret_cast<char*>(&ver), sizeof(ver));
|
||||||
|
|
||||||
// SprawdŸ czy plik klucza jest poprawny
|
// SprawdŸ czy plik klucza jest poprawny
|
||||||
if (std::string(sig.begin(), sig.end()) != signature || ver != VERSION)
|
if (sig != SIGNATURE_KEY_FILE || ver != VERSION)
|
||||||
{
|
{
|
||||||
throw std::runtime_error("Invalid key file!");
|
throw std::runtime_error("Invalid key file!");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ bool ExtractCargo::Extract(const std::string& cFile)
|
||||||
bool ExtractCargo::CheckCargoFile()
|
bool ExtractCargo::CheckCargoFile()
|
||||||
{
|
{
|
||||||
std::vector<char> magic(signature.size());
|
std::vector<char> magic(signature.size());
|
||||||
int8_t cargoVer = 0;
|
short cargoVer = 0;
|
||||||
|
|
||||||
if (!cargoFile.is_open())
|
if (!cargoFile.is_open())
|
||||||
{
|
{
|
||||||
|
|
@ -124,7 +124,7 @@ bool ExtractCargo::CheckCargoFile()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
bool ExtractCargo::HashValid(const std::vector<char>& data, const uint64_t& crc)
|
bool ExtractCargo::HashValid(const std::vector<char>& data, const uint64_t& crc)
|
||||||
{
|
{
|
||||||
uint64_t actualCrc = XXH64(data.data(), data.size(), 0);
|
uint64_t actualCrc = XXH64(data.data(), data.size(), VERSION);
|
||||||
|
|
||||||
if (actualCrc != crc)
|
if (actualCrc != crc)
|
||||||
{
|
{
|
||||||
|
|
@ -137,25 +137,25 @@ bool ExtractCargo::HashValid(const std::vector<char>& data, const uint64_t& crc)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Magiczna funkcja do dekompresji i deszyfracji danych
|
// Magiczna funkcja do dekompresji i deszyfracji danych
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void ExtractCargo::computingBytes(const std::vector<char>& input, std::vector<char>& output, const int8_t& flag)
|
void ExtractCargo::computingBytes(const std::vector<char>& input, std::vector<char>& output, const int16_t& flag)
|
||||||
{
|
{
|
||||||
ChunkManager cm(eman);
|
ChunkManager cm(eman);
|
||||||
|
|
||||||
switch (flag)
|
switch (flag)
|
||||||
{
|
{
|
||||||
case FILE_FLAG_COMPRESS:
|
case 1:
|
||||||
output = cm.dechunked(input, true, false);
|
output = cm.dechunked(input, true, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_ENCRYPT:
|
case 2:
|
||||||
output = cm.dechunked(input, false, true);
|
output = cm.dechunked(input, false, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_ZIPENC:
|
case 3:
|
||||||
output = cm.dechunked(input, true, true);
|
output = cm.dechunked(input, true, true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_CHUNK:
|
case 4:
|
||||||
output = cm.dechunked(input, false, false);
|
output = cm.dechunked(input, false, false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ private:
|
||||||
uint64_t tablePosition;
|
uint64_t tablePosition;
|
||||||
int filesHeadsOffset;
|
int filesHeadsOffset;
|
||||||
|
|
||||||
const int8_t version;
|
const short version;
|
||||||
const std::string signature;
|
const std::string signature;
|
||||||
|
|
||||||
std::vector<FilesTable> filesHeads;
|
std::vector<FilesTable> filesHeads;
|
||||||
|
|
@ -76,6 +76,6 @@ private:
|
||||||
void CreateDirections(std::filesystem::path);
|
void CreateDirections(std::filesystem::path);
|
||||||
|
|
||||||
// Magiczna funkcja do dekompresji i deszyfracji danych
|
// Magiczna funkcja do dekompresji i deszyfracji danych
|
||||||
void computingBytes(const std::vector<char>&, std::vector<char>&, const int8_t&);
|
void computingBytes(const std::vector<char>&, std::vector<char>&, const int16_t&);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ bool ViewCargo::View(const std::string& path)
|
||||||
bool ViewCargo::CheckCargoFile(const std::string& path)
|
bool ViewCargo::CheckCargoFile(const std::string& path)
|
||||||
{
|
{
|
||||||
std::vector<char> magic(signature.length());
|
std::vector<char> magic(signature.length());
|
||||||
int8_t cargoVer = 0;
|
short cargoVer = 0;
|
||||||
|
|
||||||
std::ifstream cargo(path, std::ios::binary);
|
std::ifstream cargo(path, std::ios::binary);
|
||||||
|
|
||||||
|
|
@ -146,7 +146,7 @@ void ViewCargo::GetFileList(const std::string& path)
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// Generowanie wierszy do tabeli
|
// Generowanie wierszy do tabeli
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void ViewCargo::CreateTableRow(const std::string& file, const uint8_t& flag, const uint64_t& hash)
|
void ViewCargo::CreateTableRow(const std::string& file, const uint8_t& zip, const uint64_t& hash)
|
||||||
{
|
{
|
||||||
//Zamiania crc liczbowej na hex string
|
//Zamiania crc liczbowej na hex string
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
|
|
@ -161,19 +161,19 @@ void ViewCargo::CreateTableRow(const std::string& file, const uint8_t& flag, con
|
||||||
ftxui::Element eEnc;
|
ftxui::Element eEnc;
|
||||||
|
|
||||||
// Ustawianie checkboxów
|
// Ustawianie checkboxów
|
||||||
switch (flag)
|
switch (zip)
|
||||||
{
|
{
|
||||||
case FILE_FLAG_COMPRESS:
|
case 1:
|
||||||
//eZip = ftxui::text(" [x] ") | ftxui::color(ftxui::Color::Cyan);
|
//eZip = ftxui::text(" [x] ") | ftxui::color(ftxui::Color::Cyan);
|
||||||
//eEnc = ftxui::text(" [ ] ") | ftxui::color(ftxui::Color::White);
|
//eEnc = ftxui::text(" [ ] ") | ftxui::color(ftxui::Color::White);
|
||||||
tmpList[0] = "[x]";
|
tmpList[0] = "[x]";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_ENCRYPT:
|
case 2:
|
||||||
tmpList[1] = "[x]";
|
tmpList[1] = "[x]";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FILE_FLAG_ZIPENC:
|
case 3:
|
||||||
tmpList[0] = "[x]";
|
tmpList[0] = "[x]";
|
||||||
tmpList[1] = "[x]";
|
tmpList[1] = "[x]";
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 851 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.6 MiB |
Binary file not shown.
|
|
@ -1,251 +0,0 @@
|
||||||
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ę.
|
|
||||||
10
voidcmd.cpp
10
voidcmd.cpp
|
|
@ -110,7 +110,7 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
if (!EmptyPath(path)) { return 1; }
|
if (!EmptyPath(path)) { return 1; }
|
||||||
|
|
||||||
if (!cargo.Create(path, 0x01))
|
if (!cargo.Create(path, 1))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -120,7 +120,7 @@ int main(int argc, char* argv[]) {
|
||||||
if (arg == "-r" && i + 1 < argc)
|
if (arg == "-r" && i + 1 < argc)
|
||||||
{
|
{
|
||||||
path = argv[i + 1];
|
path = argv[i + 1];
|
||||||
if (!cargo.Create(path, 0x00))
|
if (!cargo.Create(path, 0))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +130,7 @@ int main(int argc, char* argv[]) {
|
||||||
if (arg == "-e" && i + 1 < argc)
|
if (arg == "-e" && i + 1 < argc)
|
||||||
{
|
{
|
||||||
path = argv[i + 1];
|
path = argv[i + 1];
|
||||||
if (!cargo.Create(path, 0x02))
|
if (!cargo.Create(path, 2))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -140,7 +140,7 @@ int main(int argc, char* argv[]) {
|
||||||
if (arg == "-s" && i + 1 < argc)
|
if (arg == "-s" && i + 1 < argc)
|
||||||
{
|
{
|
||||||
path = argv[i + 1];
|
path = argv[i + 1];
|
||||||
if (!cargo.Create(path, 0x03))
|
if (!cargo.Create(path, 3))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -151,7 +151,7 @@ int main(int argc, char* argv[]) {
|
||||||
{
|
{
|
||||||
path = argv[i + 1];
|
path = argv[i + 1];
|
||||||
if (!EmptyPath(path)) { return 1; }
|
if (!EmptyPath(path)) { return 1; }
|
||||||
if (!cargo.Create(path, 0xFF))
|
if (!cargo.Create(path, -1))
|
||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue