ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 апреля
1168897
Mahagam (28.01.2022 17:59 - 20:22, просмотров: 2361)
<СКРЫПТЫ> возникла простая задача по очень простой но частой обработке текста. а именно: 

вот выдаёт ЙАР прошивку для мсп430 в виде

@F002
73 61 6D 70 6C 65 20 73 74 72 69 6E 67 0A 00 00
31 40 E0 FF B0 12 32 F0 0C 93 06 24 3C 40 00 F0
3D 40 02 00 B0 12 B2 F1 B0 12 8E F1 B0 12 CE F1
@FFFC
C8 F1 12 F0
q

а мне надо поменять немножко расширение, убрать стартовое смещение по границе блока памяти, и скучковать байты в слова, ну и убрать "q" в конце.

то есть так:

@0002
6173 706D 656C 7320 7274 6E69 0A67 0000
4031 FFE0 12B0 F032 930C 2406 403C F000
403D 0002 12B0 F1B2 12B0 F18E 12B0 F1CE
@0FFС
F1C8 F012

долго думал чем получить такой выхлоп. вариантов весьма много. можно и на сях написать прогу (а чо, я ж умею), можно и на питоне, да вообще на чём угодно.

но у компилированной версии недостаток: если чо меняется в условии задачи - иди ищи исходник, открывай родную IDE, пересобирай прилажку, тести.

питон всем хорош, кроме того что его тоже надо ставить. а я не люблю ставить софт ради мелкой задачи.


надумалось мне, что JScript будет в самый раз. винда в него умеет с древнейших времён. нихера ставить не надо, основу (JS) я более-менее знаю, поправить исходник можно будет в любой момент.

итого (недоделка):

// cscript.exe $PROJ_DIR$\convert.js $TARGET_DIR$ $TARGET_BNAME$
var baseaddr = 0xF000; var fso = new ActiveXObject("Scripting.FileSystemObject"); var objArgs = WScript.Arguments; var fname = objArgs(0) + "\\" + objArgs(1); WScript.Echo("FILE: " + fname); var inFile = fso.OpenTextFile(fname + ".txt", 1, false); var outFile= fso.CreateTextFile(fname + ".mem", true); var ss = /\b([0-9a-fA-F]+) \b([0-9a-fA-F]+)/gi while (!inFile.AtEndOfStream) { s = inFile.ReadLine(); switch (s.charAt(0)) { case "@" : var addr = Number("0x" + s.slice(1, 5)); addr -= baseaddr; s = "@" + ("000" + addr.toString(16).toUpperCase()).slice(-4); outFile.WriteLine(s); break; case "q" : continue; default : var o = s.replace(ss, "$2$1"); outFile.WriteLine(o); } } inFile.Close(); outFile.Close();

строка из комента в самом начале вставляется в post-build step внутри ЙАРа, и он после сборки запускает скрыпт.

осталось только доточить скрипт чтобы смещение ещё подтягивалось из исходников...


вопрос - а есть что лучше чем WSH JScript ??


сцуко!!! JScript не умеет работать с бинарными файлами от слова совсем!