Привет из восьмидесятых: пишем код в легендарном текстовом редакторе Edlin для DOS
Когда-то стандартным текстовым редактором в DOS был Edlin. Его создал Тим Патерсон — для первой версии DOS, которая тогда называлась 86-DOS, а позже получила название PC-DOS и MS-DOS. Патерсон говорил, что хотел со временем заменить этот редактор другим. И только десять лет спустя в MS-DOS 5 (1991) вместо Edlin появился Edit, полноэкранный текстовый редактор.
Здесь я буду использовать версию Edlin для FreeDOS. Это операционная система с открытым исходным кодом. Её можно использовать для игры в классические игры DOS, запуска старого программного обеспечения или разработки встроенных систем. FreeDOS поддерживает совместимость с MS-DOS и включает утилиты и программы, созданные по образу и подобию своих аналогов из MS-DOS.
Одна из таких программ — это open source реализация легендарного редактора Edlin, которая распространяется под лицензией GNU General Public License v2. Портированием Edlin на FreeDOS занимался Грегори Питч. У него получился GPL-лицензированный клон Edlin, который, ко всему прочему, умеет работать с длинными файлами. Он поставляется вместе с дистрибутивом FreeDOS. Клон Edlin также можно установить в MS-DOS. При желании вы даже можете скомпилировать Edlin для Linux- и Unix-систем.
В своей книге 23 Years of FreeDOS Грегори писал, что у редактора трёхуровневая архитектура: верхний уровень анализирует ввод пользователя и вызывает средний уровень, библиотеку edlib, которая, в свою очередь, вызывает код обработки строк и массивов для выполнения всей грязной работы. Но помимо технических достоинств, Edlin гораздо приятнее использовать, чем другие подобные продукты. На мой субъективный взгляд, конечно.
В FreeDOS 1.3 RC4 установлен Edlin 2.18. Это не самая последняя версия. Вы можете загрузить Edlin 2.19 из архива файлов FreeDOS на Ibiblio. Вы найдёте там два файла: edlin-2.19.zip содержит исходный код, а edlin-219exe.zip — это исполняемый файл DOS. Загрузите файл edlin-219exe.zip и распакуйте его в свою систему FreeDOS. Я поместил свой экземпляр редактора в C:\EDLIN.
Нужно немного попрактиковаться, чтобы «въехать в тему» и прочувствовать всю прелесть работы с Edlin. Поэтому давайте создадим и отредактируем новый файл, выполнив ряд интересных манипуляций.
Основы работы с Edlin
Чтобы открыть файл для редактирования, нужно написать команду вида edlin <имя файла>. Например, для редактирования файла hello.c, введём следующую команду:
C:\EDLIN> edlin hello.c
Обратите внимание: здесь я ввёл команду FreeDOS в нижнем регистре. Но вообще FreeDOS нечувствительна к регистру, поэтому можно писать названия команд и имена файлов хоть в в верхнем, хоть в нижнем регистре — работать всё будет одинаково. Можете проверить это: введите edlin, EDLIN и Edlin. Во всех случаях ОС будет запускать редактор Edlin. Точно так же с именем файла: FreeDOS поймёт, какой файл вы имеете в виду, если вы напишете hello.c, HELLO.C или Hello.C.
C:\EDLIN> edlin hello.c
edlin 2.19, copyright © 2003 Gregory Pietsch
This program comes with ABSOLUTELY NO WARRANTY.
It is free software, and you are welcome to redistribute it
under the terms of the GNU General Public License — either
version 2 of the license, or, at your option, any later
version.
hello.c: 0 lines read
*
Когда редактор запустится и отработает введённую команду, он переведёт нас на новую строку. В начале этой строки будет стоять символ »*» (звёздочка). Интерфейс Edlin минималистичен: у него нет «меню» или поддержки мыши. Чтобы начать редактирование, изменить отдельные строки файла, выполнить поиск и замену, сохранить свою работу или выйти из редактора, просто введите соответствующие команды после звёздочки.
В данном случае сообщение hello.c: 0 lines read ожидаемо. Это новый файл, он пустой, нам нужно добавить туда новые строки. Мы сделаем это с помощью команды insert, набрав i. Знак »*» изменится на »: » после этого можно вводить новый текст. Для форматирования текста в процессе набора можно использовать перевод строки (ENTER). Когда закончите добавлять новый текст, введите точку (.) в отдельной строке.
*i
: #include
:
: int
: main()
: {
: puts(«Hello world»);
: }
: .
*
Чтобы просмотреть введённый вами текст, используйте команду list, введя l в приглашении *. Edlin будет отображать строки по одному экрану за раз, предполагая, что на дисплее будет 23–25 строк. Но для такой короткой программы, как Hello world исходный код тем более поместится на одном экране:
*l
1: #include
2:
3: int
4: main()
5: {
6: puts(«Hello world»);
7:*}
*
Вы заметили знак »*» в строке 7, перед закрывающей фигурной скобкой? Это специальная отметка, указывающая текущую позицию для вставки следующего текста. Если вы вставите новый текст в файл, Edlin добавит его на место строки 7, сместив её ниже.
Давайте обновим исходный код так, чтобы функция main () возвращала результат. Для этого нам нужно добавить строку »return 0; », начиная с текущей позиции. Мы вновь используем команду i. Не забудьте ввести точку на отдельной строке, чтобы прекратить ввод нового текста.
После повторного чтения содержимого файла вы увидите, что вставили новый текст в правильное место, а закрывающая фигурная скобка переместилась на строку 8.
*i
: return 0;
: .
*l
1: #include
2:
3: int
4: main()
5: {
6: puts(«Hello world»);
7: return 0;
8:*}
*
Но что, если вам нужно отредактировать отдельную строку с номером N? И тут проблем не будет: в командной строке после * просто введите номер строки, которую хотите отредактировать. Далее вам нужно будет повторно ввести всю строку с внесёнными изменениями.
К примеру, давайте обновим сигнатуру функции main (). Она находится на 4-й строке, поэтому после * введите 4 и затем полностью введите изменённую строку.
*4
4:*main()
4: main(void)
*l
1: #include
2:
3: int
4:*main(void)
5: {
6: puts(«Hello world»);
7: return 0;
8: }
*
После повторного чтения содержимого файла отображается обновлённая строка 4.
Когда вы внесёте все необходимые изменения, не забудьте сохранить файл. Для этого после * просто введите w. Чтобы выйти из Edlin, введите q.
*w
hello.c: 8 lines written
*q
C:\EDLIN>
Больше возможностей Edlin
Выше описаны основные команды для редактирования файлов. Но Edlin делает больше, чем просто «вставляет, редактирует и сохраняет». Вот удобная шпаргалка, расширенные возможности Edlin. В этой таблице text обозначает обычную текстовую строку, filename — имя файла вместе с путём, а num — число.
Бонус
В Edlin можно вводить специальные символы, используя соответствующие коды:
Выделенный сервер VDS с быстрыми NVMе-дисками и посуточной оплатой у хостинга Маклауд.