Транклюкатор
Удаленький,
Сквозь землю прошёл,
Красную шапочку нашёл».
Загадка принцессы из к/ф
«Старая, старая сказка»
Много лет назад (в начале 90-х годов прошлого века) я написал маленькую программку на «Си», а потом сжал её PKLITE-ом. И у меня вышла моя CUTGLU утилитка. Уже давно затерялся листинг исходного файла. Уже вышли из употребления дискетки. Уже DOS-режим канул в прошлое. Уже с трудом найдёшь на компьютере DEBUG-ер. Но пока ещё есть командная строка в Windows. И ещё не сошли на нет 32-х разрядные приложения. Поэтому Cutglu.exe ещё способна выручить в тупиковой ситуации.
Первоначально я написал эту крохотную утилиту в качестве внешней команды DOS для разрезания длинных файлов, которые не лезли на дискеты. Уже позже появились архиваторы. А потом они научились сами разделять длинные архивы на тома. И всё равно! Часто нужна была команда, которая бы смогла «отрезать кусочек от файла здесь» и «приклеить его к другому месту». Эту операцию запросто можно выполнить из отладчика (Debug.exe), но кто же его знает настолько хорошо? В нём все размеры и смещения будут представлены в шестнадцатиричных. А когда сидишь постоянно в обнимку с синими панелями Нортона, то шеснадцатиричный счёт становится обузой. И ведь видишь постоянно и имена файлов, и их размеры в байтах. И по F3 запросто можешь посмотреть содержимое любого из файлов даже в виде DUMP-а памяти. Найти нужное место. И уже готов сказать «режь вот тут». А ухватиться нечем! Транклюкатора нет. Что делать?
Вот я и написал такой Транклюкатор. Но ещё заложил в него способность «клеить», сваривать файлы. Вот поэтому собственно программа и носит название Cut – резать, и Glue – клеить.
Работает она очень просто. Даешь команду: Отрезать от файла с именем Faile1.bin начиная с такого-то номера байта n, кусок размером в m байт, и дописать его в конец файла File2.bin – всё! Больше она ничего не понимает, и ничего не делает. Всё остальное вы делаете сами! Этого оказалось достаточно. И эта удаленькая программулька выручает меня в самых неожиданных местах.
Cutglu File1.bin n m File2.bin
Если второго файла нет, то он создаётся заново. Если параметры указаны вне пределов первого файла, то команда ничего не делает. Нумерация байт в первом файле начинается с нуля. А размер блока всегда больше нуля. Программа работает в самых жёстких условиях, даже при минимальном объёме памяти. Но, конечно, за счёт быстродействия. Промежуточный буфер становится крохотным и копирование в выходной файл может затянуться. А если вы начнёте копировать файлы с лазерного диска, то эта песня может не кончится и за сутки! Учтите это.
Зато!
Однажды, при помощи неё я сумел обойти «дырку» на лазерном диске! И в результате скопировать файл с него. То ли это был запорченный диск, то ли это была такая защита? Я так и не понял. Но нужный файл с диска скопировал. А «дырку» заполнил нулями. И на удивление всё работало!
Правда, тогда файлы длиннее 2 147 483 647 байт невозможно было создать. А Cutglu как раз оперировала длинными целыми. И ограничений для неё не было. Теперь же появились 64-х разрядные операционки. Значит и файлы станут во много раз длиннее. А 32-х разрядные приложения для DOS под такими операционками уже не работают. Эх! Найти бы в старых бумагах листинг на Си этой утилитки. Да откопать транслятор для Си под 64-х разрядную систему. Вот тогда можно снова жить. Но!
Ко всему прочему тут вмешивается ещё и ИДЕОЛОГИЯ. Это же она считает «создание файла» юридическим актом! И тут же «защищает» эту «единую и неделимую» совокупность байт, от всякого посягательства из вне.
А если у вас старая дискета не читается? И вообще флоппи привод «дуру гонит». А образ этой дискеты лежит на лазерном диске! И вы видите место, где надо «отрезать» и забрать нужный «кусок» в файл. А чем вы это сделаете? – Нечем. И, следовательно, накрылась ваша работа медным тазом. Потому как техника старая отказала. И все образы дискет нафиг ни кому не нужны. Хотя и всё прекрасно читается и пишется на жёсткий диск с болванок.
Ну ладно. С образами дискет ещё куда ни шло. Они относительно маленькие. Можно и Debug-ером обойтись на крайний случай. А если это образ лазерного диска? Дорожки, например. Тогда чем?
Нет. Господа-товарищи. Такая команда должна быть внутри командного интерпретатора. Иначе не логично получается. Ведь команда Copy умеет клеить файлы один к другому в двоичном режиме!
Copy /b file1.bin + file2.bin + file3.bin . . . и т.д. itogo.bin
В результате все файлы будут собраны в указанной последовательности в один файл с именем itogo.bin
Видите как? А почему же разрезать нельзя? Это неправильно. «Неправильно ты ешь бутерброды, дядя Фёдор!»
Раньше, вообще, Лексикон текстовый файл больше 360 килобайт не мог обработать. Память кончалась. И система висла. А работали иногда с огромными файлами документации. И чтобы не плодить огромную тучу мелких файлов с разными именами, собирали их командой Copy в один текстовый файл. Но когда потом надо было поработать с каким-то куском и внести изменения, то начинались проблемы.
А я подходил со своей утилиткой. И все проблемы тут же исчезали. Потом уже появился Multi-Edit, который мог работать с длиннющими файлами, организую свопинг на жёстком диске. Но это было потом.
А как показала практика, разные задачи решаются специальными программами. Но польза от моей команды Cutglu от этого меньше не становится. Постоянно возникают какие-то затыки, которые невозможно быстро решить без моей команды.
Поэтому, я считаю, что такая команда должна быть в каждой операционной системе. Не взирая ни на разрядность, ни на операционную систему, ни на систему команд центрального процессора. Этот ваш «юридический акт» создания файла – это исторический нонсенс. Как огромный булыжник на дороге прогресса. И пора его просто «закопать в землю», чтобы он не мешал движению вперёд.
Cutglu Булыжник 0 N Земля
Отрезать файл Булыжник от нуля до N-последнего и дописать в конец файла Земля.
Del Булыжник
А Булыжник стереть.
Вот и всё.
22:54:51 15.02.2021 458D771F8610
Свидетельство о публикации №221030600899