Самопальная утилита для копирования

Всё, что касается программирования на старых языках или для старых систем

Самопальная утилита для копирования

Сообщение zhasmin2004 » 25 мар 2025, 04:06

Уважаемые друзья и любители Дос!
В последние годы мы видим, что утилиты для DOS, такие как LXPIC, SMOOTH, Z.COM, уже были приняты с большим энтузиазмом. Они показали, что даже такая старая система, как DOS, способна работать с графикой, большими текстами и изменять разрешение экрана практически на лету. Эти инструменты не только сохраняют дух старой системы, но и делают её более удобной для повседневного использования.
Почему я вспомнил про lxpic? Потому, что думаю она была написана позже, так как вряд ли в те времена были такие грандиозные переключения экрана на Vesa, да ещё и с высоким разрешением экрана. Да и z.com был написан Сергеем Чехута, когда уже на компьютеры ставили Windows.
Однако, как я заметил, новые программы вызывают у некоторых настороженность. Возможно, это связано с опасением, что такие разработки могут нарушить классический подход к работе в DOS. Я хотел бы поднять вопрос: действительно ли новые утилиты — это отход от классики? Или они могут быть логичным развитием системы, которой мы все увлекаемся?

О консольной утилите для быстрого копирования

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

В DOS нет аналогов, которые бы я знал- которые бы решали эту задачу эффективно.

Классическая команда:

copy F:\Films\Old.avi,.

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

Моя утилита:

pr.exe < F:\Films\Old.avi > .\Old.avi

— копирует файл с отображением бегущих мегабайтов в одной строке, используя возврат каретки для обновления данных на месте. Это позволяет видеть скорость передачи и общий прогресс.

Также используется буферизация, что значительно ускоряет процесс по сравнению со стандартным COPY.

Почему это важно для сообщества DOS? Все такие инструменты делают работу в DOS комфортнее. Это не отход от классики, а развитие функциональности — как когда-то это сделали LXPIC и Z.COM.

Вопрос к сообществу:
Стоит ли опасаться таких утилит? Или они могут стать частью того самого живого DOS, который мы все хотим сохранить и развивать?

Буду признателен за ваши отзывы, мнения и обсуждение. Возможно, именно благодаря вам удастся сделать эту программу ещё лучше.

Я уже размещал на сайте свою утилиту форматирования текста с исходным кодом и это вызвало тогда неоднозначные мнения. Кто-то помню был не очень доволен, хотя я лично горжусь этой программой именно её простой и эффективностью и мечтаю сделать её более функциональной, но увы, не всё возможно сейчас.
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение zhasmin2004 » 26 мар 2025, 22:41

Ну ладно. Только не говорите потом что я не предупреждал :)
Я понимаю, что я тут выше немного так пафосно всё написал. Но это просто так получилось. Я как-то просматривал ленту новостей и столкнулся с тем, что возмущались что добавляются современные программы и задумался над этим. И думаю что это неправильно. Я например до сих пор использую DOS и очень рад, что написал для него несколько утилит для удобства работы. У меня подобная ситуация была в Unix. Я стал сидеть в нем и мне было не удобно. Первое время я не разбирался в этих иксах и долгое время сидел в консоли. И там мне хотелось почитать книжки после работы, но фиг.! Не все так просто и пришлось самому дописывать утилиты на С. Скрипты в папке Bin тоже писал. Читал советы в интернете и писал. Там можно написать такие скрипты, которые составляют файл ISO, закачивают целиком сайт на компьютер, находят на компьютере множество специализированных файлов и копируют их в домашний каталог, можно скриптом переименовать огромное множество файлов с корявыми, повреждёнными именами, создать в памяти большой диск и многое другое. А на С, я прочитал в книге Кернигана и Риччи, что если знать просто операции ввода вывода, можно писать интересные программы и я написал тогда .. тоже по совету. Всякие утилитки, которые удаляют нежелательный символ из текста, или меняют его на другой, форматируют текст. Поэтому хорошо, если для Дос также люди что-то дописывали. Можно было бы в итоге получить совершенную систему. Ведь Дос по своему очень удобный. Его не надо специально выключять, просто выдернул с розетки и всё . Уже для него написано множество хороших, качественных программ. Как-то так.
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение zhasmin2004 » 27 мар 2025, 00:11

Разместил здесь во вложении...
Если в программе есть какая-то ошибка, пишите или правте, код тут тоже выложен.
Вложения
pr.zip
(6.9 Кб) Скачиваний: 18
Последний раз редактировалось zhasmin2004 30 мар 2025, 10:29, всего редактировалось 2 раз(а).
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение oldpcfan82 » 27 мар 2025, 01:52

Интересно. Я вот тоже сейчас разрабатываю командный интерпретатор, и там будет работа с файлами и каталогами. Я написал первый командный интерпретатор примерно в конце 90х в начале 2000 гг., откомпилировал недавно, а там куча ошибок, и код нечитабельный, поэтому пишу с нуля.
Аватара пользователя
oldpcfan82
Мастер Даунгрейда
 
Сообщения: 277
Зарегистрирован: 01 окт 2023, 22:57

Re: Самопальная утилита для копирования

Сообщение uav » 27 мар 2025, 02:00

zhasmin2004, какое-то оно пока недоделанное...
При запуске без параметров просто виснет. При неправильных параметрах - тоже. Зачем-то эти знаки больше и меньше нужны в параметрах - неудобно.
Маски не поддерживаются - по одному файлу, что ли, копировать?
Это больше напоминает примеры из школьных учебников...
IMHO, в таком виде для сайта не годится - хотя можете тут (на форуме) в качестве вложения выложить, если хотите.

P.S. Ну и раздел форума тут больше подходит не "Программы для DOS", а "Программирование", потому что это именно тренировки в программировании...
Последний раз редактировалось uav 27 мар 2025, 02:11, всего редактировалось 3 раз(а).
Аватара пользователя
uav
Мастер Даунгрейда
 
Сообщения: 2431
Зарегистрирован: 22 дек 2008, 14:21

Re: Самопальная утилита для копирования

Сообщение zhasmin2004 » 27 мар 2025, 02:58

Видно uav, что Вы не находились долгое время в консоли DOS, Unix. Там есть такое понятие Stdin стандартный ввод, Stdout стандартный вывод и StdErr куда идёт вывод сообщений и ошибок. Если Вы введете в Дос или в Юникс, например команду cat < stdio.h Это означает что на команду cat то есть на программу cat направляется текст stdio.h через стандартный ввод, а чтобы продолжить при желании, то можно усовершенствовать команду cat < stdio.h > dort.h Тогда срабатывает команда что на программу cat направляется текст stdio.h, который она должна направить на стандартный вывод то есть в файл dort.h . Эта команда действует и в DOS и в Unix и является особенностью этих операционных систем, а не моими чудаковатыми параметрами. И зачем переносить в раздел программирования? Эта программа не для обучения программирования, а из практической жизни, где мне и другим приходилось заходить на чистый жёсткий диск и переносить туда образ диска для установки. Тогда такая программа становится просто бесценной! А то что Вы запустили её и она ничего не делает - это как раз и показывает, что она написала правильно! Так работают все программы, которые используют в своей работе Stdin и stdout! Например движки UCI. Если вы запускаете движок UCI в консоли, например Fruit, он тоже ничего не делает он не завис, он просто ждёт ваших команд. Так тестируются программы использующие Stdin, Stdout. Если бы вы ввели после запуска например: dfg. - программа бы вам ответила тоже dfg, хотя эта использует буфер она сразу не ответит. А знаменитый DD который делает чудеса! Я видел люди такие команды ему вводят! Например Dd if=/dev/urandom of=/dev/mem и всё! Компьютер улетел.!! Кстати DD написан и для Windows. Его бы вы тоже запустили и подумали бы что он завис. Команду cat из Unix, тоже запускаете и она ничего не делает так как предназначена больше для Stdin Stdout. А насчёт того что я выложил эту программу я же написал там целый эпитет. Там видно что я не восторженный мальчик занимающийся программированием, а просто предлагаю развивать дос разными утилитами .. Uav, помните сайт знаменитый где Давид Соломон писал всякие утилиты. Его потом купила Microsoft. Этот сайт. Так он писал что написать эти утилитки его вдохновила Unix. Так что если можно, не обижайте меня и оставьте эту программу. Узнайте в интернете что команды стандартных ввода вывода не изменить, они известные. Как-то так...
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение uav » 27 мар 2025, 03:40

zhasmin2004 писал(а): Если Вы введете в Дос или в Юникс, например команду cat < stdio.h

В DOS нет команды cat.

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

Ну и в целом, простите, уровень этой программы - "Hello, world".
Даже copy в DOS самой первой версии от 1982-го года умела копировать файлы по маске.
И метод реализации (stdin и stdout) не может быть оправданием отсутствия базового функционала.
Итого это выглядит именно как эксперименты по программированию - тема перенесена.
У нас достаточно строгие правила для самоделок, потому что основное назначение сайта - всё-таки сохранение исторически ценных программ.

Если выкладываете какие-то самоделки - будьте так любезны сделать им нормальный интерфейс, а также их функционал должен быть сравним с уже имеющимися для данной платформы.
Смотрите, например, уже имеющиеся у нас в соответствующем разделе копировщики, хотя бы этот:
http://old-dos.ru/index.php?page=files& ... ow&id=1751

P.S. Речь, естественно, про основной сайт, на форуме по этому поводу особых ограничений нет.
Последний раз редактировалось uav 27 мар 2025, 04:11, всего редактировалось 2 раз(а).
Аватара пользователя
uav
Мастер Даунгрейда
 
Сообщения: 2431
Зарегистрирован: 22 дек 2008, 14:21

Re: Самопальная утилита для копирования

Сообщение zhasmin2004 » 27 мар 2025, 04:13

Спасибо Вам за пояснения. Понял учту.
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение fDima » 31 мар 2025, 12:42

А вот интересно, как Ваша программа определяет есть ли ввод из пайпа, или через параметр (имя файла)? Я с Си под DOS не очень хорошо знаком, зато знаком с FreePascal под Linux. Так вот там, целый набор функций определяющий указаны ли в командной строке пайпы, переобозначение вывода и т.п. Очень удобно.

Обычно, под DOS на TurboPascal я указывал вручную наличие пайплайна у программы через параметр "/p". Там можно много чего через параметры накрутить, но вот хотелось бы узнать, может ли сама программа определить от куда она запускается?
Последний раз редактировалось fDima 31 мар 2025, 15:22, всего редактировалось 1 раз.
Аватара пользователя
fDima
Опытный даунгрейдер
 
Сообщения: 26
Зарегистрирован: 29 мар 2025, 14:36
Откуда: Северные земли за стеной, где вечная зима и царство белых ходоков.
Железо: (Core2DUO 2,8ГГц, 2GB RAM, WinXP/SP3) (Core2DUO 2,8ГГц, 2GB RAM, AltLinux/586)

Re: Самопальная утилита для копирования

Сообщение zhasmin2004 » 01 апр 2025, 00:29

Да в книге Боровского "Программирование для Linux" он открывает, что оказывается можно закодить так что программа узнает откуда её запускают. Но лично мне это не нужно было. Я хотел написать такую программу, которая заранее не знает откуда её запустят , что она будет принимать и что она будет передавать. В этом её красота, хотя концепция конечно не новая. Так например работает знаменитый gzip. Например, я так по памяти пишу:
dd if=/dev/rwd0d ibs=1m | gzip -d | dd of=./image.gz
То есть программа dd читает содержимое жёсткого диска wd0
rwd0d это означает что она читает его напрямую со всеми так выразится потрохами. Читает по одному мегабайту и передаёт данные на программу gzip, которая летящие байты меняет на лету по алгоритму deflate и направляет их дальше на другую программу dd, которая полученные байты складывает в файл image.gz
Грубый немного пример, но он наглядно показывает, что программа gzip ничего не знает что она получает, вобще не знает и зачем ей это. Она пакует и передаёт дальше. Так и программа pr показаная в этом разделе для системы дос, она тоже не знает ничего. И нет так явно механизмов, чтобы точно узнать. Так как это Stdin.
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение fDima » 01 апр 2025, 12:23

В Линуксе, это конечно все отлично. Сам пайплайны делал и использую их постоянно.

Однако как быть в DOS?
"uav", да и я тоже (в комментариях на сайте) намекали что, "если программа, запускается без параметров и не в пайплайне: она должна выдавать сообщение со справкой о себе". Это даст ей некую законченность и понятность по местным меркам.

Как ловить такое состояние будете? Тут "материнского процесса" просто так словить не получиться. Надо как-то, что-то придумывать, или по памяти лазать, смотреть из чего он запустился. А еще pr может в BAT-файлах использоваться, так тут у меня ваще фантазия кончается.

----------------
Есть книжки "Библиотека системного программиста MS-DOS" от Фролова А.В и Фролова Г.В. Издавалась в "Диалог МИФИ" в середине 90х. Их там больше 20ти томов, и везде представлены примеры на Си. В 18м/19м томах например описан низкоуровневый доступ к диску. Может эти книги где-то есть в сети? На сайте их нет (только что смотрел).
----------------

В самом простом варианте есть ключи командной строки заставляющие программу работать в том или ином режиме. И это самое легкое и логичное в рамках правил программ работающих в DOS.

Кстати есть предложение, чтоб она работала самостоятельно используя только параметры:

C:\pr BigFile.DAT d:\BigFile.DAT

и вот она уже полетела копировать файл в двести мегов. Потом, можно еще сделать сравнение исходного и скопированного файлов, чтоб проверить результат работы (накопитель может быть поврежденным). А есть еще копирование в порт (на принтер например, и тут у нас появляются куча разных тонкостей).
Еще сразу-же надо будет проверять, а хватит ли места для копирования и т.д.
Кстати, накопитель с источником тоже может быть поврежден, отключен на горячую (флэшка например), и программа при этом, не должна крашиться с выводом RuntimeError..., а в подробностях выводить сообщение об произошедшей ошибке на человечьем языке.

Понимаю, что в процессе написания могут возникать "нежданчики". Сам сейчас потихоньку пишу программу по редактированию структуры DBF-файлов, и вижу кучу проблем с файлами мемополей - думаю, размышляю. А есть еще FoxPRO-формат отличающийся одним байтом где-то в заголовке DBFа (засада от "майков" чтоб никто открыть его не мог)... но это уже офтоп.
И мой случай куда проще чем Ваш. Несоизмеримо проще.
Аватара пользователя
fDima
Опытный даунгрейдер
 
Сообщения: 26
Зарегистрирован: 29 мар 2025, 14:36
Откуда: Северные земли за стеной, где вечная зима и царство белых ходоков.
Железо: (Core2DUO 2,8ГГц, 2GB RAM, WinXP/SP3) (Core2DUO 2,8ГГц, 2GB RAM, AltLinux/586)

Re: Самопальная утилита для копирования

Сообщение fDima » 01 апр 2025, 12:38

По поводу книжек Фроловых.
Нашел :D :D :D

http://old-dos.ru/index.php?page=lib&do=show&id=682

Не знаю есть ли там что?..

Можно еще вот это:

http://old-dos.ru/index.php?page=lib&do=show&id=46
Аватара пользователя
fDima
Опытный даунгрейдер
 
Сообщения: 26
Зарегистрирован: 29 мар 2025, 14:36
Откуда: Северные земли за стеной, где вечная зима и царство белых ходоков.
Железо: (Core2DUO 2,8ГГц, 2GB RAM, WinXP/SP3) (Core2DUO 2,8ГГц, 2GB RAM, AltLinux/586)

Re: Самопальная утилита для копирования

Сообщение zhasmin2004 » 01 апр 2025, 22:30

Спасибо за ссылки. Очень хочется правильно ответить Вам, чтобы это было то что Вы хотели бы прочитать. То что Вы говорите за параметры, это на самом деле очень легко. Программы на С знают количество аргументов данных программе и тут не заблудишься. Если пользователь программы даёт ей примерно:
pr /b5 < Film.avi. но это в том случае если я допишу параметры. То программа увидит, что ей даны два аргумента. Она проверит их и начнёт выполнение. То что вы видите как знак меньше - это уже не параметр. Это стандартное свойство командной строки. Вы это знаете, но я пишу, потому что вы написали что фантазия кончается. Если использовать ввод вывод то возможностей много. Программа может быть как текстовый редактор. Надо только написать в командной строке pr > doc.txt для завершения в каждой системе разные клавиши. Программа может прочитать текст из файла. Только теперь надо наоборот написать pr < doc.txt Смотрите, я в программу не закладывал такие возможности, она только вводит и выводит. Но она уже имеет две функции читать файлы и записывать в них. Она может быть копировщиком больших файлов я в неё тоже не закладывал такие возможности. Она может проверить не битый ли файл :
pr < Film.avi > NUL
А то что Вы пишите, что она может аварийно завершиться, это только в том случае если что-то с диском или что-то с файлом. Можно узнать таблицу номеров ошибок и ввести в код, но это только в случае какого то спец выпуска для коммерческого использования. А так вы просто будете знать, что это только что-то с файлом или диском. Я немного похожую программу много очень тестировал и она нигде не ошибалась. Но она побайтного копирования, а эта использует буфер 2 в 12й степени, поэтому может повести себя несколько по другому, не так как я описываю. Но я сейчас это все тщательно изучаю. Я уже написал код и пока тестирую его. Там открылось просто много других интересных вопросов.
Аватара пользователя
zhasmin2004
Мастер Даунгрейда
 
Сообщения: 165
Зарегистрирован: 31 авг 2014, 02:35
Откуда: Украина, Одесса

Re: Самопальная утилита для копирования

Сообщение fDima » 02 апр 2025, 11:55

Окей.
Я прочитал все очень вдумчиво, и в принципе: если она берет из Input и передает в Output, то такая программа очень даже безопасна. Неплоха для тех кто использует исключительно командную строку (в DOSе). Если бы она попалась мне лет эдак пятнадцать назад, я бы ее утянул себе и где-нибудь использовал. А лет за десять до этого использовал бы для копирования архивов на дискеты.

Возможно и сейчас есть люди использующие исключительно командною строку ДОСа, рыскающие по сетям в поисках аутентичных ей программ, и пишущие свои собственные программы (альтернативы полноэкранным).

Кстати, только вчера видел на old-dos набор юниксо-подобных программ в одном архиве. Наверняка если поскрести, то их на сайте окажется намного больше. Тот-же архиватор shar чего стоит, или tar, или gzip или язык awk/mAWK...

> Программы на С знают количество аргументов данных
> программе и тут не заблудишься.

Про это я знаю. Их берут через параметры функции main ().
И вроде для этого еще пара функций должна быть. В Си не селен :oops:

На стек-оферфлоу есть код, который может возвращать положение программы в командной строке.
В общем я тут положу вот такой адресочек, может понадобиться stackoverflow.com/...
Не знаю, работает-ли это в DOSовском Си, но... где-нибудь да пригодиться.
Последний раз редактировалось fDima 02 апр 2025, 12:04, всего редактировалось 2 раз(а).
Аватара пользователя
fDima
Опытный даунгрейдер
 
Сообщения: 26
Зарегистрирован: 29 мар 2025, 14:36
Откуда: Северные земли за стеной, где вечная зима и царство белых ходоков.
Железо: (Core2DUO 2,8ГГц, 2GB RAM, WinXP/SP3) (Core2DUO 2,8ГГц, 2GB RAM, AltLinux/586)

Re: Самопальная утилита для копирования

Сообщение uav » 02 апр 2025, 13:27

zhasmin2004 писал(а):Программа может быть как текстовый редактор. Надо только написать в командной строке pr > doc.txt для завершения в каждой системе разные клавиши. Программа может прочитать текст из файла. Только теперь надо наоборот написать pr < doc.txt

В общем-то, это всё умеет и стандартная команда COPY из DOS.
В первом случае COPY CON file.ext
Во втором - COPY file.ext CON
Аватара пользователя
uav
Мастер Даунгрейда
 
Сообщения: 2431
Зарегистрирован: 22 дек 2008, 14:21

След.

Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1