Веб интерфейс в том проекте формируется в самом скетче, если не ошибаюсь, это первая версия JeeUIДа именно так и делал а потом что с этим .dat файлом делать дальше чтоб исходный код получился?...Просто есть несколько файлов проекта в такой форме..в каком то из них шаблон веб страницы сервера....хочу изменить кое что...подправить..и обратно запаковать..мне понравился этот проект...а как этим форматом работать не знаю...дошел до вот этого файла .dat. а дальше что с ним дел ааа ть х з...тут наткнулся на ваш диалог по такой же теме..вот и интересуюсь как действовать..кстати на скрине выше это весь файл или часть?
Почти также как посмотреть обычный текстовой файл командной строкой, только не cat-ом а zcat-омДа именно так и делал а потом что с этим .dat файлом делать дальше чтоб исходный код получился?
user@my-pc:~/Downloads zcat myfile.dat
</html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="theme-color" content="#007bff">
<title>Jee UI Framework</title>
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bubbly_bg.js"></script>
</head>
<body onload="onload(); ">
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-1967157221324951",
enable_page_level_ads: true
});
</script>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<a class="navbar-brand" href="/">
<img src="images/logo.svg" width="30" height="30" class="d-inline-block align-top" alt="">
JeeUI
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse show" id="menu">
</div>
</nav>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page" id="breadcrumb">Главная</li>
</ol>
</nav>
<div class="container">
<form action="" method="post" id="formMain" name="formMain">
<div id="blank">
</div>
</form>
</div>
<hr>
<footer class="text-center">
<div class="container">
<div class="row">
<div class="col-12">
<p>2019 © <a href="https://github.com/jeecrypt" target="_blank" style="color: #000" class="alert-link">Marsel
Akhkamov</a></p>
</div>
</div>
</div>
<div class="alert alert-primary" role="alert">
<a href="https://donatepay.ru/don/jeegit" class="alert-link" target="_blank">Donate</a>
</div>
</footer>
<script src="js/bootstrap.min.js"></script>
<canvas id="1" width="1" height="1"></canvas>
<script>bubbly({
colorStart: "#007bff",
colorStop: "#ffffff",
blur: 1,
compose: "source-over",
velocityFunc: () => 0.9 + Math.random() * 0.5,
});
</script>
<script>
function onload() {
page_update(0);
menu_update(0);
title_update(0);
};
function update(page) {
page_update(page);
menu_update(page);
title_update(page);
};
function page_update(page) {
var x = new XMLHttpRequest();
x.open("GET", "/echo?p=" + page, true);
x.onload = function () {
get("#blank").innerHTML = x.responseText;
}
x.send(null);
};
function menu_update(page) {
var x = new XMLHttpRequest();
x.open("GET", "/menu?p=" + page, true);
x.onload = function () {
get("#menu").innerHTML = x.responseText;
}
x.send(null);
};
function title_update(page) {
var x = new XMLHttpRequest();
x.open("GET", "/title?p=" + page, true);
x.onload = function () {
get("#breadcrumb").innerHTML = x.responseText;
}
x.send(null);
};
function reboot() {
document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-danger\" role=\"alert\">Внимание! Устройство перезагружается, пожалуйста подожите 10 секунд!</div>";
var x = new XMLHttpRequest();
x.open("GET", "/reboot", true);
x.send(null);
setTimeout(clear, 10000);
};
function clear() {
document.getElementById("messegeResult").innerHTML = "";
update(0)
};
function get(selector) {
if (typeof selector == 'object') { return selector; }
else { return document.querySelector(selector); }
};
function selssid(value) {
document.getElementById("ssid").value = value;
};
function updateTextInput(id, val) {
get('#' + id).innerHTML = val;
};
function AjaxFormRequest(formMain, url) {
jQuery.ajax({
url: url,
type: "POST",
dataType: "html",
data: jQuery("#" + formMain).serialize(),
success: function (response) {
var alert = "<div class=\"alert alert-success\" role=\"alert\">" + response + "</div>";
document.getElementById("messegeResult").innerHTML = alert;
},
error: function (response) {
document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-danger\" role=\"alert\">Ошибка сохранения! Поробуйте повторить!</div>";
}
});
setTimeout(clear, 2000);
function clear() {
document.getElementById("messegeResult").innerHTML = "";
};
}
function sendForm(formMain, url) {
var http = new XMLHttpRequest();
http.open("POST", url, true);
var formData = new FormData(document.forms.formMain);
http.send(formData);
http.onload = function() {
var response = http.responseText;
document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-success\" role=\"alert\">" + response + "</div>";
}
setTimeout(clear, 2000);
function clear() {
document.getElementById("messegeResult").innerHTML = "";
};
};
</script>
<script>
let collapseElements = document.querySelectorAll('[data-toggle="collapse"]');
const CLASS_SHOW = 'show';
const CLASS_COLLAPSE = 'collapse';
const CLASS_COLLAPSING = 'collapsing';
const CLASS_COLLAPSED = 'collapsed';
const ANIMATION_TIME = 350; // 0.35s
function handleCollapseElementClick(e) {
let el = e.currentTarget;
let collapseTargetId = el.dataset.target || el.href || null;
if (collapseTargetId) {
let targetEl = document.querySelector(collapseTargetId);
let isShown = targetEl.classList.contains(CLASS_SHOW) || targetEl.classList.contains(CLASS_COLLAPSING);
if(!isShown) {
targetEl.classList.remove(CLASS_COLLAPSE);
targetEl.classList.add(CLASS_COLLAPSING);
targetEl.style.height = 0
targetEl.classList.remove(CLASS_COLLAPSED);
setTimeout(() => {
targetEl.classList.remove(CLASS_COLLAPSING);
targetEl.classList.add(CLASS_COLLAPSE, CLASS_SHOW);
targetEl.style.height = '';
}, ANIMATION_TIME)
targetEl.style.height = targetEl.scrollHeight + 'px';
} else {
targetEl.style.height = `${targetEl.getBoundingClientRect().height}px`
targetEl.offsetHeight;
targetEl.classList.add(CLASS_COLLAPSING);
targetEl.classList.remove(CLASS_COLLAPSE, CLASS_SHOW);
targetEl.style.height = '';
setTimeout(() => {
targetEl.classList.remove(CLASS_COLLAPSING);
targetEl.classList.add(CLASS_COLLAPSE);
}, ANIMATION_TIME)
}
}
}
collapseElements.forEach((el) => {
el.addEventListener('click', handleCollapseElementClick)
})
</script>
</body>
</html>
Почти также как посмотреть обычный текстовой файл командной строкой, только не cat-ом а zcat-ом
Код:user@my-pc:~/Downloads zcat myfile.dat </html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <meta name="theme-color" content="#007bff"> <title>Jee UI Framework</title> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/bubbly_bg.js"></script> </head> <body onload="onload(); "> <script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <script> (adsbygoogle = window.adsbygoogle || []).push({ google_ad_client: "ca-pub-1967157221324951", enable_page_level_ads: true }); </script> <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> <a class="navbar-brand" href="/"> <img src="images/logo.svg" width="30" height="30" class="d-inline-block align-top" alt=""> JeeUI </a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse show" id="menu"> </div> </nav> <nav aria-label="breadcrumb"> <ol class="breadcrumb"> <li class="breadcrumb-item active" aria-current="page" id="breadcrumb">Главная</li> </ol> </nav> <div class="container"> <form action="" method="post" id="formMain" name="formMain"> <div id="blank"> </div> </form> </div> <hr> <footer class="text-center"> <div class="container"> <div class="row"> <div class="col-12"> <p>2019 © <a href="https://github.com/jeecrypt" target="_blank" style="color: #000" class="alert-link">Marsel Akhkamov</a></p> </div> </div> </div> <div class="alert alert-primary" role="alert"> <a href="https://donatepay.ru/don/jeegit" class="alert-link" target="_blank">Donate</a> </div> </footer> <script src="js/bootstrap.min.js"></script> <canvas id="1" width="1" height="1"></canvas> <script>bubbly({ colorStart: "#007bff", colorStop: "#ffffff", blur: 1, compose: "source-over", velocityFunc: () => 0.9 + Math.random() * 0.5, }); </script> <script> function onload() { page_update(0); menu_update(0); title_update(0); }; function update(page) { page_update(page); menu_update(page); title_update(page); }; function page_update(page) { var x = new XMLHttpRequest(); x.open("GET", "/echo?p=" + page, true); x.onload = function () { get("#blank").innerHTML = x.responseText; } x.send(null); }; function menu_update(page) { var x = new XMLHttpRequest(); x.open("GET", "/menu?p=" + page, true); x.onload = function () { get("#menu").innerHTML = x.responseText; } x.send(null); }; function title_update(page) { var x = new XMLHttpRequest(); x.open("GET", "/title?p=" + page, true); x.onload = function () { get("#breadcrumb").innerHTML = x.responseText; } x.send(null); }; function reboot() { document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-danger\" role=\"alert\">Внимание! Устройство перезагружается, пожалуйста подожите 10 секунд!</div>"; var x = new XMLHttpRequest(); x.open("GET", "/reboot", true); x.send(null); setTimeout(clear, 10000); }; function clear() { document.getElementById("messegeResult").innerHTML = ""; update(0) }; function get(selector) { if (typeof selector == 'object') { return selector; } else { return document.querySelector(selector); } }; function selssid(value) { document.getElementById("ssid").value = value; }; function updateTextInput(id, val) { get('#' + id).innerHTML = val; }; function AjaxFormRequest(formMain, url) { jQuery.ajax({ url: url, type: "POST", dataType: "html", data: jQuery("#" + formMain).serialize(), success: function (response) { var alert = "<div class=\"alert alert-success\" role=\"alert\">" + response + "</div>"; document.getElementById("messegeResult").innerHTML = alert; }, error: function (response) { document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-danger\" role=\"alert\">Ошибка сохранения! Поробуйте повторить!</div>"; } }); setTimeout(clear, 2000); function clear() { document.getElementById("messegeResult").innerHTML = ""; }; } function sendForm(formMain, url) { var http = new XMLHttpRequest(); http.open("POST", url, true); var formData = new FormData(document.forms.formMain); http.send(formData); http.onload = function() { var response = http.responseText; document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-success\" role=\"alert\">" + response + "</div>"; } setTimeout(clear, 2000); function clear() { document.getElementById("messegeResult").innerHTML = ""; }; }; </script> <script> let collapseElements = document.querySelectorAll('[data-toggle="collapse"]'); const CLASS_SHOW = 'show'; const CLASS_COLLAPSE = 'collapse'; const CLASS_COLLAPSING = 'collapsing'; const CLASS_COLLAPSED = 'collapsed'; const ANIMATION_TIME = 350; // 0.35s function handleCollapseElementClick(e) { let el = e.currentTarget; let collapseTargetId = el.dataset.target || el.href || null; if (collapseTargetId) { let targetEl = document.querySelector(collapseTargetId); let isShown = targetEl.classList.contains(CLASS_SHOW) || targetEl.classList.contains(CLASS_COLLAPSING); if(!isShown) { targetEl.classList.remove(CLASS_COLLAPSE); targetEl.classList.add(CLASS_COLLAPSING); targetEl.style.height = 0 targetEl.classList.remove(CLASS_COLLAPSED); setTimeout(() => { targetEl.classList.remove(CLASS_COLLAPSING); targetEl.classList.add(CLASS_COLLAPSE, CLASS_SHOW); targetEl.style.height = ''; }, ANIMATION_TIME) targetEl.style.height = targetEl.scrollHeight + 'px'; } else { targetEl.style.height = `${targetEl.getBoundingClientRect().height}px` targetEl.offsetHeight; targetEl.classList.add(CLASS_COLLAPSING); targetEl.classList.remove(CLASS_COLLAPSE, CLASS_SHOW); targetEl.style.height = ''; setTimeout(() => { targetEl.classList.remove(CLASS_COLLAPSING); targetEl.classList.add(CLASS_COLLAPSE); }, ANIMATION_TIME) } } } collapseElements.forEach((el) => { el.addEventListener('click', handleCollapseElementClick) }) </script> </body> </html>
а поподробне можно...простите за назойливость я просто новичек в этой теме?!Почти также как посмотреть обычный текстовой файл командной строкой, только не cat-ом а zcat-ом
да это JeeUI ....в нем элементы вебинтерфейса генерируются в скетче путем их добавления в файл html.h..а сам шаблон веб формы зашифрован в этом формате..А вытоже им занимаетесь?Веб интерфейс в том проекте формируется в самом скетче, если не ошибаюсь, это первая версия JeeUI
Куда подробнее?а поподробне можно...простите за назойливость я просто новичек в этой теме?!
Уже есть 2я версия. Не то что бы занимаюсь, сделал форк под себя.да это JeeUI ....в нем элементы вебинтерфейса генерируются в скетче путем их добавления в файл html.h..а сам шаблон веб формы зашифрован в этом формате..А вытоже им занимаетесь?
я пользуюсь виндой... я так понял нужно просто в командной строке ввести путь до папки (в которой файл) потом команда zcad и далее имя файла с расширением( в моем случае myfile.dat)? но вылетает ошибка что нет такой команды??Куда подробнее?
Я привел командную строку и её вывод.
Хотите получить файл для редактирования, так направьте вывод в файл. zcat myfile.dat >Template_default.html
Что вы хотите? Как командной строкой пользоваться думаю вы знаете.
JeeUI2 показал?... я знаю про вторую версию пробовал но там есть некоторые проблемы...поэтому разбираюсь с 1-ой ...давайте по почте перепишимся на эту тему...?Уже есть 2я версия. Не то что бы занимаюсь, сделал форк под себя.
Не простой выборя пользуюсь виндой...
D:\>copy myfile.dat Template_default.html.gz
Скопировано файлов: 1.
D:\>gzip -d Template_default.html.gz
D:\>type Template_default.html
</html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="theme-color" content="#007bff">
<title>Jee UI Framework</title>
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bubbly_bg.js"></script>
</head>
<body onload="onload(); ">
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<script>
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: "ca-pub-1967157221324951",
enable_page_level_ads: true
});
</script>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<a class="navbar-brand" href="/">
<img src="images/logo.svg" width="30" height="30" class="d-inline-block align-top" alt="">
JeeUI
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse show" id="menu">
</div>
</nav>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page" id="breadcrumb">╨У╨╗╨░╨▓╨╜╨░╤П</li>
</ol>
</nav>
<div class="container">
<form action="" method="post" id="formMain" name="formMain">
<div id="blank">
</div>
</form>
</div>
<hr>
<footer class="text-center">
<div class="container">
<div class="row">
<div class="col-12">
<p>2019 ┬й <a href="https://github.com/jeecrypt" target="_blank" style="color: #000" class="alert-link">Marsel
Akhkamov</a></p>
</div>
</div>
</div>
<div class="alert alert-primary" role="alert">
<a href="https://donatepay.ru/don/jeegit" class="alert-link" target="_blank">Donate</a>
</div>
</footer>
<script src="js/bootstrap.min.js"></script>
<canvas id="1" width="1" height="1"></canvas>
<script>bubbly({
colorStart: "#007bff",
colorStop: "#ffffff",
blur: 1,
compose: "source-over",
velocityFunc: () => 0.9 + Math.random() * 0.5,
});
</script>
<script>
function onload() {
page_update(0);
menu_update(0);
title_update(0);
};
function update(page) {
page_update(page);
menu_update(page);
title_update(page);
};
function page_update(page) {
var x = new XMLHttpRequest();
x.open("GET", "/echo?p=" + page, true);
x.onload = function () {
get("#blank").innerHTML = x.responseText;
}
x.send(null);
};
function menu_update(page) {
var x = new XMLHttpRequest();
x.open("GET", "/menu?p=" + page, true);
x.onload = function () {
get("#menu").innerHTML = x.responseText;
}
x.send(null);
};
function title_update(page) {
var x = new XMLHttpRequest();
x.open("GET", "/title?p=" + page, true);
x.onload = function () {
get("#breadcrumb").innerHTML = x.responseText;
}
x.send(null);
};
function reboot() {
document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-danger\" role=\"alert\">╨Т╨╜╨╕╨╝╨░╨╜╨╕╨╡! ╨г╤Б╤В╤А╨╛╨╣╤Б╤В╨▓╨╛ ╨┐╨╡╤А╨╡╨╖╨░╨│╤А╤Г╨╢╨░╨╡╤В╤Б╤П, ╨┐╨╛╨╢╨░╨╗╤Г╨╣╤Б╤В╨░ ╨┐╨╛╨┤╨╛╨╢╨╕╤В╨╡ 10 ╤Б╨╡╨║╤Г╨╜╨┤!</div>";
var x = new XMLHttpRequest();
x.open("GET", "/reboot", true);
x.send(null);
setTimeout(clear, 10000);
};
function clear() {
document.getElementById("messegeResult").innerHTML = "";
update(0)
};
function get(selector) {
if (typeof selector == 'object') { return selector; }
else { return document.querySelector(selector); }
};
function selssid(value) {
document.getElementById("ssid").value = value;
};
function updateTextInput(id, val) {
get('#' + id).innerHTML = val;
};
function AjaxFormRequest(formMain, url) {
jQuery.ajax({
url: url,
type: "POST",
dataType: "html",
data: jQuery("#" + formMain).serialize(),
success: function (response) {
var alert = "<div class=\"alert alert-success\" role=\"alert\">" + response + "</div>";
document.getElementById("messegeResult").innerHTML = alert;
},
error: function (response) {
document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-danger\" role=\"alert\">╨Ю╤И╨╕╨▒╨║╨░ ╤Б╨╛╤Е╤А╨░╨╜╨╡╨╜╨╕╤П! ╨Я╨╛╤А╨╛╨▒╤Г╨╣╤В╨╡ ╨┐╨╛╨▓╤В╨╛╤А╨╕╤В╤М!</div>";
}
});
setTimeout(clear, 2000);
function clear() {
document.getElementById("messegeResult").innerHTML = "";
};
}
function sendForm(formMain, url) {
var http = new XMLHttpRequest();
http.open("POST", url, true);
var formData = new FormData(document.forms.formMain);
http.send(formData);
http.onload = function() {
var response = http.responseText;
document.getElementById("messegeResult").innerHTML = "<div class=\"alert alert-success\" role=\"alert\">" + response + "</div>";
}
setTimeout(clear, 2000);
function clear() {
document.getElementById("messegeResult").innerHTML = "";
};
};
</script>
<script>
let collapseElements = document.querySelectorAll('[data-toggle="collapse"]');
const CLASS_SHOW = 'show';
const CLASS_COLLAPSE = 'collapse';
const CLASS_COLLAPSING = 'collapsing';
const CLASS_COLLAPSED = 'collapsed';
const ANIMATION_TIME = 350; // 0.35s
function handleCollapseElementClick(e) {
let el = e.currentTarget;
let collapseTargetId = el.dataset.target || el.href || null;
if (collapseTargetId) {
let targetEl = document.querySelector(collapseTargetId);
let isShown = targetEl.classList.contains(CLASS_SHOW) || targetEl.classList.contains(CLASS_COLLAPSING);
if(!isShown) {
targetEl.classList.remove(CLASS_COLLAPSE);
targetEl.classList.add(CLASS_COLLAPSING);
targetEl.style.height = 0
targetEl.classList.remove(CLASS_COLLAPSED);
setTimeout(() => {
targetEl.classList.remove(CLASS_COLLAPSING);
targetEl.classList.add(CLASS_COLLAPSE, CLASS_SHOW);
targetEl.style.height = '';
}, ANIMATION_TIME)
targetEl.style.height = targetEl.scrollHeight + 'px';
} else {
targetEl.style.height = `${targetEl.getBoundingClientRect().height}px`
targetEl.offsetHeight;
targetEl.classList.add(CLASS_COLLAPSING);
targetEl.classList.remove(CLASS_COLLAPSE, CLASS_SHOW);
targetEl.style.height = '';
setTimeout(() => {
targetEl.classList.remove(CLASS_COLLAPSING);
targetEl.classList.add(CLASS_COLLAPSE);
}, ANIMATION_TIME)
}
}
}
collapseElements.forEach((el) => {
el.addEventListener('click', handleCollapseElementClick)
})
</script>
</body>
</html>
Это форк 2й версии. Пишите в ТГ @User624JeeUI2 показал?... я знаю про вторую версию пробовал но там есть некоторые проблемы...поэтому разбираюсь с 1-ой ...давайте по почте перепишимся на эту тему...?
Для этой ОСДля этой ОС можно использовать gzip,
Function GUnZip-File{
$input = New-Object System.IO.FileStream $inFile, ([IO.FileMode]::Open), ([IO.FileAccess]::Read), ([IO.FileShare]::Read)
$output = New-Object System.IO.FileStream $outFile, ([IO.FileMode]::Create), ([IO.FileAccess]::Write), ([IO.FileShare]::None)
$gzipStream = New-Object System.IO.Compression.GzipStream $input, ([IO.Compression.CompressionMode]::Decompress)
$buffer = New-Object byte[](1024)
while($true){
$read = $gzipstream.Read($buffer, 0, 1024)
if ($read -le 0){break}
$output.Write($buffer, 0, $read)
}
$gzipStream.Close()
$output.Close()
$input.Close()
}
$inFile=$args[0]
$outFile=$args[1]
GUnZip-File $inFile $outFile
powershell.exe -file gz-unzip.ps1 D:\Template_default.html.gz D:\Template_default.html
Повер-шеллом, запаковывает без проблем, да ещё из архива исходник в виде хекс представления на том же повер-шеллекак бы опять запаковать обратно?
не могу до вас достучаться вот моя почта rodukoff.evgeny@yandex .ruЭто форк 2й версии. Пишите в ТГ @User624
$inFile=$args[0]
$outFile=$args[1]
# Строка - возврат каретки & перевод строки
[string]$crlf = "`r`n"
# Определяем переменную для хранения контента
[string]$content
# Функция сжатия данных gzip
function GZip-Data {
[cmdletBinding()]
param(
[parameter(Mandatory = $true, ValueFromPipeline = $false)]
[byte[]]$Data
)
Process {
$output = [System.IO.MemoryStream]::new()
$gzipStream = New-Object System.IO.Compression.GzipStream $output, ([IO.Compression.CompressionMode]::Compress)
$gzipStream.Write($Data, 0, $Data.Length)
$gzipStream.Close()
return $output.ToArray()
}
}
# Удаляем прежний файл, если он есть
if([System.IO.File]::Exists($outFile)) {
Remove-Item $outFile
}
# Загружаем файл
[byte[]]$bytes = [System.IO.File]::ReadAllBytes($inFile)
# Пережимаем байты
$bytes = GZip-Data -Data $bytes
# Сохраняем дату генерации файла
$content = '// File generated date: ' + $(Get-Date).ToString('ddd, dd MMM yyyy HH:mm:ss') + $crlf
# Сохраняем декларацию массива байтов
$content += '//############ ' + $inFile + ' ############' + $crlf
$content += 'static char _' + ($inFile -replace '[\W]', '_') +' [] PROGMEM = {' + $crlf
# Сохраняем шестнадцатиричное представление массива байтов
$hexBuilder = [System.Text.StringBuilder]::new(16 * 6)
for($i=0; $i -lt $bytes.Length; ) {
if (($i + 1) -lt $bytes.Length) {
$hexBuilder.AppendFormat("0x{0:x2},", $bytes[$i]) | Out-Null
} else {
$hexBuilder.AppendFormat("0x{0:x2}", $bytes[$i]) | Out-Null
}
$i++
if (($i % 16) -eq 0) {
$content += $hexBuilder.ToString() + $crlf
$hexBuilder = [System.Text.StringBuilder]::new(16 * 6)
}
}
$content += $hexBuilder.ToString() + '};' + $crlf
# Сохраняем файл
Set-Content -Path $outFile -Value $content
D:\>powershell.exe -file gz-zip.ps1 D:\Template_default.html D:\Template_default.html.h
D:\>chcp 1251
Текущая кодовая страница: 1251
D:\>type D:\Template_default.html.h
// File generated date: Чт, 24 окт 2019 18:30:38
//############ D:\Template_default.html ############
static char _D__Template_default_html [] PROGMEM = {
0x1f,0x8b,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xcd,0x59,0x5b,0x6f,0x1b,0xc7,
0x15,0x7e,0xa6,0x01,0xff,0x87,0xf1,0xba,0x00,0x57,0x0d,0x77,0x29,0xca,0x75,0x5d,
............
0xfe,0x3d,0xa6,0xff,0x2f,0xc3,0x3f,0x3a,0xff,0x03,0x37,0xa1,0x6e,0x0c,0xf0,0x1c,
0x00,0x00};
Спасибо огромное ребята ...разобрался дальше....!!!Повер-шеллом, запаковывает без проблем, да ещё из архива исходник в виде хекс представления на том же повер-шелле