Poprawione flagowanie metody pakowania
This commit is contained in:
parent
66e776ee87
commit
31f08e52d0
10 changed files with 287 additions and 200 deletions
|
|
@ -75,6 +75,10 @@ bool CreateCargo::Create(const std::string& path, int8_t flag)
|
|||
}
|
||||
GetFilters(filterFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Dodaj tu coœ mordo
|
||||
}
|
||||
|
||||
// Utworzenie kontenera
|
||||
cargo.open(cargoFile, std::ios::binary);
|
||||
|
|
@ -105,12 +109,15 @@ bool CreateCargo::GetFileList(const std::string& path)
|
|||
{
|
||||
if (CheckIgnorePath(tmpPath))
|
||||
{
|
||||
filesList.push_back(PathToUnixLike(tmpPath));
|
||||
PathConf pc;
|
||||
pc.path = PathToUnixLike(tmpPath);
|
||||
pc.parameter = methodFlags;
|
||||
filesPaths.push_back(pc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return filesList.size() > 0 ? true : false;
|
||||
return filesPaths.size() > 0 ? true : false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -158,40 +165,36 @@ CargoHead CreateCargo::CreateCargoHead(const uint32_t& filesLen, const uint64_t&
|
|||
//-----------------------------------------------------------------------------
|
||||
// Sprawdza czy plik znajduje siê na liœcie
|
||||
//-----------------------------------------------------------------------------
|
||||
uint8_t CreateCargo::CheckFileOnTheList(const std::string& path, 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
|
||||
CompressingManager cm;
|
||||
|
||||
// Kompresja
|
||||
if (methodFlags == 1)
|
||||
if (flag == 1)
|
||||
{
|
||||
std::cout << "COMPRESSING" << std::endl;
|
||||
output = cm.compress(input);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Szyfrowanie
|
||||
if (methodFlags == 2)
|
||||
if (flag == 2)
|
||||
{
|
||||
std::cout << "ENCRYPTION" << std::endl;
|
||||
output = crypt.encrypt(input);
|
||||
return 2;
|
||||
}
|
||||
|
||||
// Kompresja i szyfrowanie
|
||||
if (methodFlags == 3)
|
||||
if (flag == 3)
|
||||
{
|
||||
std::cout << "ZIP ENC" << std::endl;
|
||||
output = crypt.encrypt(cm.compress(input));
|
||||
return 3;
|
||||
}
|
||||
|
||||
// Zwraca surowe dane
|
||||
std::cout << "RAW" << std::endl;
|
||||
output = std::move(input);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
|
@ -203,7 +206,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
|||
CargoHead cargoHead = CreateCargoHead(0, 0);
|
||||
offset += cargoHead.signature.length() + sizeof(cargoHead.version) + sizeof(cargoHead.files) + sizeof(cargoHead.table);
|
||||
|
||||
//Zapisanie TMP nag³owka do pliku
|
||||
//Zapisanie tymczasowego nag³owka jako rezerwacja miejsca
|
||||
cargo.write(cargoHead.signature.data(), cargoHead.signature.length());
|
||||
cargo.write(reinterpret_cast<const char*>(&cargoHead.version), sizeof(cargoHead.version));
|
||||
cargo.write(reinterpret_cast<const char*>(&cargoHead.files), sizeof(cargoHead.files));
|
||||
|
|
@ -211,11 +214,11 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
|||
|
||||
std::vector<FilesTable> filesTable;
|
||||
|
||||
//Tworzenie nag³ówków plików
|
||||
for (const auto& file : filesList)
|
||||
//Tworzenie nag³ówków plików jednoczeœnie zapisywanie plików
|
||||
for (const auto& file : filesPaths)
|
||||
{
|
||||
std::string path = PathToUnixLike(RemoveStartPath(file));
|
||||
std::ifstream f(file, std::ios::binary | std::ios::ate);
|
||||
std::string path = PathToUnixLike(RemoveStartPath(file.path));
|
||||
std::ifstream f(file.path, std::ios::binary | std::ios::ate);
|
||||
|
||||
//Obliczanie rozmiaru pliku
|
||||
size_t size = f.tellg();
|
||||
|
|
@ -231,7 +234,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
|||
|
||||
//Kompresjia
|
||||
std::vector<char> pakBuffer;
|
||||
uint8_t method = CheckFileOnTheList(path, buffer, pakBuffer);
|
||||
computingBytes(file.parameter, buffer, pakBuffer);
|
||||
|
||||
FilesTable ft;
|
||||
ft.nameFile = path;
|
||||
|
|
@ -239,7 +242,7 @@ std::vector<FilesTable> CreateCargo::ComputingHeadFiles()
|
|||
ft.hashName = fnv64(path);
|
||||
ft.offset = offset;
|
||||
ft.size = pakBuffer.size();
|
||||
ft.flag = method;
|
||||
ft.flag = file.parameter;
|
||||
ft.crc = crc;
|
||||
|
||||
cargo.write(reinterpret_cast<const char*>(pakBuffer.data()), pakBuffer.size());
|
||||
|
|
@ -435,7 +438,7 @@ bool CreateCargo::WriteCargo()
|
|||
{
|
||||
std::cout << "Packing files..." << std::endl;
|
||||
|
||||
uint32_t filesLen = filesList.size();
|
||||
uint32_t filesLen = filesPaths.size();
|
||||
|
||||
//Przygotowanie nag³ówków plików i przetworzenie danych
|
||||
std::vector<FilesTable> filesHead = ComputingHeadFiles();
|
||||
|
|
@ -458,7 +461,7 @@ bool CreateCargo::WriteCargo()
|
|||
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));
|
||||
cargo.write(reinterpret_cast<const char*>(&head.isZip), sizeof(head.isZip));
|
||||
cargo.write(reinterpret_cast<const char*>(&head.flag), sizeof(head.flag));
|
||||
}
|
||||
|
||||
//Cofnij siê na pocz¹tek pliku
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
#include <nlohmann/json.hpp>
|
||||
|
||||
#include "DataStruct.h"
|
||||
#include "Txtpp.h"
|
||||
#include "CompressingManager.h"
|
||||
#include "EncryptionManager.h"
|
||||
|
||||
|
|
@ -118,7 +117,7 @@ private:
|
|||
void GetFilters(const std::string&);
|
||||
|
||||
// Sprawdza czy plik znajduje siê na liœcie
|
||||
uint8_t CheckFileOnTheList(const std::string&, std::vector<char>&, std::vector<char>&);
|
||||
void computingBytes(const int8_t&, std::vector<char>&, std::vector<char>&);
|
||||
|
||||
// Kasowanie z listy plików ignorow
|
||||
bool CheckIgnorePath(const std::string&);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
#pragma once
|
||||
class CreateCargoEX
|
||||
{
|
||||
public:
|
||||
CreateCargoEX();
|
||||
~CreateCargoEX() = default;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,8 @@ bool ExtractCargo::Extract(const std::string& cFile)
|
|||
{
|
||||
cargoFileName = cFile;
|
||||
|
||||
std::cout << "START EXTRACT " << cFile << std::endl;
|
||||
|
||||
//SprawdŸ czy plik istnieje
|
||||
if (!std::filesystem::exists(cargoFileName))
|
||||
{
|
||||
|
|
@ -136,7 +138,7 @@ bool ExtractCargo::HashValid(const std::vector<char>& data, const uint64_t& crc)
|
|||
void ExtractCargo::LoadFilesTable()
|
||||
{
|
||||
cargoFile.seekg(tablePosition);
|
||||
|
||||
std::cout << "TU TABLICA" << std::endl;
|
||||
for (uint32_t i = 0; i < filesLen; ++i)
|
||||
{
|
||||
FilesTable fhTmp;
|
||||
|
|
@ -146,6 +148,8 @@ void ExtractCargo::LoadFilesTable()
|
|||
cargoFile.read(nameBuffor.data(), fhTmp.nameLen);
|
||||
fhTmp.nameFile = std::string(nameBuffor.begin(), nameBuffor.end());
|
||||
|
||||
std::cout << fhTmp.nameFile << std::endl;
|
||||
|
||||
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));
|
||||
|
|
@ -167,6 +171,8 @@ void ExtractCargo::ExtractingFilesFromCargo()
|
|||
{
|
||||
std::filesystem::path dir = cargoFileName.stem() / fh.nameFile;
|
||||
CreateDirections(dir);
|
||||
std::cout << "TU EXTRAT" << std::endl;
|
||||
std::cout << dir << std::endl;
|
||||
std::ofstream file(dir, std::ios::binary);
|
||||
|
||||
cargoFile.seekg(fh.offset);
|
||||
|
|
@ -174,7 +180,7 @@ void ExtractCargo::ExtractingFilesFromCargo()
|
|||
|
||||
cargoFile.read(buffor.data(), fh.size);
|
||||
|
||||
std::vector<char> rawBuffor = fh.flag ? cm.decompress(buffor) : eman.decrypt(buffor);
|
||||
std::vector<char> rawBuffor = fh.flag ? cm.decompress(buffor) : buffor;
|
||||
|
||||
if (!HashValid(rawBuffor, fh.crc))
|
||||
{
|
||||
|
|
|
|||
174
Txtpp.h
174
Txtpp.h
|
|
@ -1,174 +0,0 @@
|
|||
/*
|
||||
* This file is part of VoidArchiveTool.
|
||||
*
|
||||
* Copyright (C) 2025 Yanczi
|
||||
*
|
||||
* Void Archive Toolis free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <filesystem>
|
||||
#include <sstream>
|
||||
#include <algorithm>
|
||||
#include <cctype>
|
||||
|
||||
class Txtpp {
|
||||
public:
|
||||
Txtpp(const std::string& path = "")
|
||||
{
|
||||
if (path != "")
|
||||
{
|
||||
Load(path);
|
||||
}
|
||||
}
|
||||
|
||||
~Txtpp()
|
||||
{
|
||||
if (file.is_open())
|
||||
{
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
bool Load(const std::string& path)
|
||||
{
|
||||
if (!std::filesystem::exists(path))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
file.open(path);
|
||||
|
||||
return file.is_open();
|
||||
}
|
||||
|
||||
void Close()
|
||||
{
|
||||
file.close();
|
||||
}
|
||||
|
||||
std::vector<std::string> Get(const std::string& key)
|
||||
{
|
||||
std::vector<std::string> tmp;
|
||||
Parse(key, tmp);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
T getValue(const std::string& key, const std::string& val)
|
||||
{
|
||||
std::vector<std::string> tmp;
|
||||
Parse(key, tmp);
|
||||
|
||||
for (const auto& line : tmp)
|
||||
{
|
||||
std::string cleanLine = RemoveSpaces(line);
|
||||
std::string t;
|
||||
std::string v;
|
||||
|
||||
bool tv = false;
|
||||
|
||||
for (const char& c : cleanLine)
|
||||
{
|
||||
if (c != ":") {tv = true;}
|
||||
|
||||
if (!tv) { t += c; }
|
||||
else { v += c; }
|
||||
}
|
||||
}
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
private:
|
||||
const char sectionStart = '{';
|
||||
const char sectionEnd = '}';
|
||||
|
||||
std::ifstream file;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Wyszukiwanie danych po kluczu
|
||||
//-----------------------------------------------------------------------------
|
||||
void Parse(const std::string& key, std::vector<std::string>& data)
|
||||
{
|
||||
std::string fullkey = sectionStart + key + sectionEnd;
|
||||
std::string line;
|
||||
bool wr = false;
|
||||
|
||||
file.clear();
|
||||
file.seekg(std::ios::beg);
|
||||
|
||||
while (getline(file, line))
|
||||
{
|
||||
std::string tmp = RemoveSpaces(line);
|
||||
if (tmp != "")
|
||||
{
|
||||
if (CheckKey(tmp))
|
||||
{
|
||||
wr = UpperString(tmp) == fullkey ? true : false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wr) { data.push_back(tmp); }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Usuwa spacje
|
||||
//-----------------------------------------------------------------------------
|
||||
std::string RemoveSpaces(std::string _line)
|
||||
{
|
||||
std::stringstream ss(_line);
|
||||
char word;
|
||||
std::string tmp;
|
||||
std::string beforeWord = "";
|
||||
|
||||
while (ss >> word)
|
||||
{
|
||||
tmp += word;
|
||||
}
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Sprawdza czy dany ci¹g jest kluczem
|
||||
//-----------------------------------------------------------------------------
|
||||
bool CheckKey(std::string key)
|
||||
{
|
||||
if (key[0] == sectionStart && key[key.length() - 1])
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Zamieñ ca³y ci¹g na du¿e litery
|
||||
//-----------------------------------------------------------------------------
|
||||
std::string UpperString(std::string s) {
|
||||
std::transform(s.begin(), s.end(), s.begin(),
|
||||
[](unsigned char c) { return static_cast<char>(std::toupper(c)); });
|
||||
return s;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -143,10 +143,10 @@ void ViewCargo::GetFileList(const std::string& path)
|
|||
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.isZip), sizeof(fhTmp.isZip));
|
||||
cargo.read(reinterpret_cast<char*>(&fhTmp.flag), sizeof(fhTmp.flag));
|
||||
|
||||
//Tworzenie wierszy tabeli
|
||||
CreateTableRow(fhTmp.nameFile, fhTmp.isZip, fhTmp.hashName);
|
||||
CreateTableRow(fhTmp.nameFile, fhTmp.flag, fhTmp.hashName);
|
||||
}
|
||||
|
||||
cargo.close();
|
||||
|
|
|
|||
BIN
test3/herrsher-of-the-void.png
Normal file
BIN
test3/herrsher-of-the-void.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 851 KiB |
BIN
test3/mus_honkai_space.ogg
Normal file
BIN
test3/mus_honkai_space.ogg
Normal file
Binary file not shown.
251
test3/text_file.txt
Normal file
251
test3/text_file.txt
Normal 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ę.
|
||||
|
|
@ -149,7 +149,6 @@
|
|||
<ClInclude Include="EncryptionManager.h" />
|
||||
<ClInclude Include="ExtractCargo.h" />
|
||||
<ClInclude Include="Interface.h" />
|
||||
<ClInclude Include="Txtpp.h" />
|
||||
<ClInclude Include="ViewCargo.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue