From b4cb34dfb2619f594d82e512fd9ff7fc97400133 Mon Sep 17 00:00:00 2001
From: arcadia-devtools <arcadia-devtools@yandex-team.ru>
Date: Fri, 18 Feb 2022 15:49:59 +0300
Subject: intermediate changes ref:1a0585d83f27cb6fb5b9c4f68a08177e10faf3b3

---
 tools/rescompiler/main.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)
 create mode 100644 tools/rescompiler/main.cpp

(limited to 'tools/rescompiler/main.cpp')

diff --git a/tools/rescompiler/main.cpp b/tools/rescompiler/main.cpp
new file mode 100644
index 0000000000..b5f50cea2d
--- /dev/null
+++ b/tools/rescompiler/main.cpp
@@ -0,0 +1,56 @@
+#include <library/cpp/resource/registry.h>
+
+#include <util/stream/output.h>
+#include <util/stream/file.h>
+#include <util/digest/city.h>
+#include <util/string/cast.h>
+#include <util/string/hex.h>
+#include <util/string/vector.h>
+#include <util/string/split.h>
+
+using namespace NResource;
+
+static inline void GenOne(const TString& data, const TString& key, IOutputStream& out) {
+    const TString name = "name" + ToString(CityHash64(key.data(), key.size()));
+
+    out << "static const unsigned char " << name << "[] = {";
+
+    const TString c = Compress(data);
+    char buf[16];
+
+    for (size_t i = 0; i < c.size(); ++i) {
+        if ((i % 10) == 0) {
+            out << "\n    ";
+        }
+
+        const char ch = c[i];
+
+        out << "0x" << TStringBuf(buf, HexEncode(&ch, 1, buf)) << ", ";
+    }
+
+    out << "\n};\n\nstatic const NResource::TRegHelper REG_" << name << "(\"" << key << "\", TStringBuf((const char*)" << name << ", sizeof(" << name << ")));\n";
+}
+
+int main(int argc, char** argv) {
+    if ((argc < 4) || (argc % 2)) {
+        Cerr << "usage: " << argv[0] << " outfile [infile path]+ [- key=value]+" << Endl;
+
+        return 1;
+    }
+
+    TFixedBufferFileOutput out(argv[1]);
+
+    argv = argv + 2;
+
+    out << "#include <library/cpp/resource/registry.h>\n\n";
+
+    while (*argv) {
+        if ("-"sv == *argv) {
+            TVector<TString> items = StringSplitter(TString(*(argv + 1))).Split('=').Limit(2).ToList<TString>();
+            GenOne(TString(items[1]), TString(items[0]), out);
+        } else {
+            GenOne(TUnbufferedFileInput(*argv).ReadAll(), *(argv + 1), out);
+        }
+        argv += 2;
+    }
+}
-- 
cgit v1.2.3