Редактор строк в BASIC на ПЭВМ Корвет

от автора

Или почему на Корвете один из самых упоротых редакторов строк

BASIC в режиме редактирования введённой ранее строки

BASIC в режиме редактирования введённой ранее строки

Пролог

Я начинал своё знакомство с персональными компьютерами на ZX Spectrum 48. Он предоставлял довольно специфический, но вполне удобный и быстрый редактор програм. ZX Spectrum 128 уже имел полноценный полноэкранный редактор. На Commodore64 редактор тоже не заставлял чувствовать себя калекой. Даже на суровом отечественном БК0010-01, редактор позволяет вполне сносное редактирование и копирование ранее введённой строки. Что же касаемо BASIC`а Корвета

Особенности

Во-первых, я не нашёл способа как копировать строки. А это самый важный минус при экономии времени при написании многочисленных однотипных строк. Набирать вручную новую строку, лишь незначительно отличающуюся от предыдущей это тяжело и долго. Поправьте меня пожалуйста, если такой метод таки есть, я до сих пор не могу поверить в его отсутствие.

Во-вторых, редактор строк настолько уникален и курьёзен, что достоин отдельной статьи, без мануала с ним не разобраться, проще с нуля строку переписать, чем научиться редактировать методом тыка. Я использовал для ознакомления отличную книжку “Знакомьтесь персональная ЭВМ Корвет”. Там не даётся краткой справки, и нужно вдумчиво прочитать всю главу “Редактирование текста программы” на стр. 104.

Обложка книги Знакомьтесь персональная ЭВМ Корвет

Обложка книги Знакомьтесь персональная ЭВМ Корвет
Глава, без которой было бы сложно разобраться...

Глава, без которой было бы сложно разобраться…

Корвет, 8-разрядный компьютер под управлением OS CP/M выпускался серийно с 1988 года, а vi (предшественник текстового редактора vim) под Unix, написан в 1976 году. А ещё в 1987 году был написан клон vi под Atari ST, редактор Stevie. Казалось бы, какая между ними может быть связь?

Vi имеет два режима: командный и модальный, В первом вводятся команды, Во втором режиме правится текст по условиям выбранной команды. В редакторе строк Корвета такой же принцип. даже присутствуют цифровые модификаторы перед некоторыми командами. Если бы тут ещё было копирование строки через изменение её номера, и была копипаста через буфер обмена выделенных фрагментов внутри строки, я бы назвал это уникальным крутым редактором, освоив который, можно смело смотреть на другие реализации, как пользователи vim смотрят на пользователей nano.

Цитаты из книги

В книжке очень своеобразные картинки, это почти маскот Корвета, нужен такой мерч

В книжке очень своеобразные картинки, это почти маскот Корвета, нужен такой мерч

«Прежде чем переходить к редактированию, приготовьтесь к неожиданностям» — гласит начало главы книги про редактор строк BASIC на Корвете. Но vim`овода этим не испугаешь!

Редактор BASIC строк Корвета настолько суров, что «удаляемые символы отображаются на экране, чтобы вы точно видели, что вы стёрли».

Приступим к изучению редактирования

Даже тот функционал, что есть, представляет собой если не практический, то исторический интерес. Хотя лично я планирую писать на BASIC и интерес чисто практический, для повышения КПД работы.

Для редактирования строки надо ввести команду EDIT n, где n — это номер строки. Либо EDIT . — где точка означает редактирование последней исполненной строки.

После нажатия клавиши ВК появится номер редактируемой строки и BASIC перейдёт в командный режим, где ряд клавиш вызывает команды либо их модификаторы, а на все остальные пищит ошибка. Тыкаясь наугад можно безвозвратно испортить строку.

Кстати, интересны причины, почему для отечественного компьютера названия действий режимов брались из английского языка и почему нельзя вводить их в русской раскладке. Если бы я знал, что даже советский ПЭВМ в BASIC в режиме редактирования строк дискриминирует русскую раскладку, и редактируя строку на русском, для вызова управляющих команд необходимо каждый раз переключаться на LAT, я бы не так роптал о неудобности редактора текста vim в аналогичных ситуациях. Казалось бы, почему нельзя опрашивать или код самой клавиши, или оба символа на ней? В vim понятно почему, а почему на Корвете так не очень понятно.

Значения управляющих клавиш:

  • ВК (Возврат Каретки, она же Enter)

  • ПРФ/ESC (возврат в командный режим из модального)

  • ПРОБЕЛ (печать следующего символа в редактируемой строке)

  • L (LIST)

  • D (DELETE)

  • C (CHANGE)

  • I (INSERT)

  • X (без названия, назову eXPAND)

  • H (без названия, назову HALF)

  • S (SEARCH)

  • K (KILL)

  • A (ABORT)

  • Q (QUIT)

  • E (EXIT)

СОВЕТ: вводить команды следует строго только в английской раскладке клавиатуры! После выполнения команды, если это конец редактирования — жмите ВК, а если хотите применить ещё команды, то возвращайтесь в командный режим по клавише ПРФ/ESC. Её полезно жать как можно чаще для контроля командного режима, почти как Esc в vim =)

Разберём их подробно

ВК (Возврат Каретки, она же Enter) Завершает режим редактирования с сохранением изменений и возвратом в интерпретатор команд.

ПРФ/ESC (возврат в командный режим из модального) После применения ряда команд вы попадаете в модальный режим и все буквенно-алфавитные клавиши просто выводят свои символы на экран. Чтобы вернутся обратно в командный режим нужно нажать клавишу ПРФ/ESC.

ПРОБЕЛ (печать следующего символа в редактируемой строке) выводит содержимое строки, на каждое нажатие по одному символу. Если зажать, то посимвольно выведет всю строку. Но для этого лучше использовать следующую команду. Если перед пробелом ввести число nn, то курсор выведет и сместится сразу на nn символов.

L (LIST) Сначала показывается только номер редактируемой строки, чтобы увидеть её целиком надо нажать [L]. Курсор редактирования при этом сместится в начало. Если вместо этого на экране напечаталась “L”, то сотрите её и выйдите из модального режима по клавише ПРФ/ESC.

D (DELETE) Удалить символ под курсором. Если перед командой ввести число nn, то она применится nn раз. (Почти как в vi/vim) Удобное применение — вывести строку: [L], затем ПРОБЕЛОМ переместить курсор в начало удаляемого фрагмента, подсчитать количество удаляемых символов, ввести число и [D].

C (CHANGE) Заменить символ под курсором на символ введённый следующим. Если перед командой ввести число nn, то будет замена сразу nn символов. При переполнении указанного буфера на большинстве клавиш будет раздаваться звуковой сигнал и далее ничего не будет вводиться, пока не нажмёте возврат в командный режим по ПРФ/ESC или завершение по ВК. Но осторожно! При переполнении заданного буфера возможна потеря всего, что в строке правее. Меня удалось это с латинской буквой “H”.

I (INSERT) Вставить один или более символов. Простой ввод текста с вставкой его в позицию курсора (а двигать его вправо можно клавишей ПРОБЕЛ) Стирать лишнее введённое можно забоем (BackSpace, клавиша со стрелкой влево, выше клавиши ВК), по завершению либо выйти с сохранением по ВК, либо вернуться в командный режим по ПРФ/ESC и по клавише [L] посмотреть принятые изменения.

X (без названия, назову eXPAND) Вывести всю строку, поместить курсор в её конец и перейти в модальный режим ввода текста. Возврат в командный режим по ПРФ/ESC. Строка BASIC в Корвете может иметь длину 255 символов, но ввести при написании строки можно только 250. Чтобы ввести оставшиеся 5, как раз поможет этот режим. Например: [EDIT] nn, [X]12345[ВК]. Также можно использовать команду [I] (INSERT).

H (без названия, назову HALF) Стереть все символы справа от курсора и заменить их своей строкой или символом. Затем можно выйти по ВК или вернуться в командный режим по ПРФ/ESC.

S (SEARCH) Мощная команда, оправдывающая этот vim-like режим редактирования. Поиск в строке и переход к символу, который будет введён следующим. Если применить числовой модификатор перед [S], например 4S, то будет найдено 4-е появление искомого символа. Удобно для быстрого перемещения курсора при редактировании переменной в строке.

K (KILL) Удалить фрагмент строки от текущей позиции курсора до символа, который вводится после [K]. Если применить числовой модификатор перед [K] то как и при поиске, будет искаться не первый попавшийся, а n по счёту символ. Осторожно! Если соответствие не найдено, то злюка команда удаляет всю строку от позиции курсора и до конца.

A (ABORT) Отмена последнего редактирования, если ещё не нажали ВК. По сути это undo. Главное не забывайте вернуться в командный режим по ПРФ/ESC.

Q (QUIT) Отмена редактирования с возвратом в интерпретатор BASIC.

E (EXIT) Тоже самое, что и ВК, завершает редактирование с сохранением изменений и возвратом в интерпретатор команд.

ЭПИЛОГ

Вот и всё. Чтобы понять эту систему, было мало просто прочитать главу книги, даже сидя за компьютером и пробуя примеры. Слишком там по древу растеклись мыслею, теряется структура, сложно запоминать. Пришлось законспектировать ручкой на бумаге. Потом захотел причесать конспект и записать его в файл на ПК. И решил не мелочиться, а сразу написать статью и рассказать об этом, чтобы ещё лучше всё понять самому.

И главное, спасибо моему любимому редактору vim, ибо постигши его дао, я смог легче и без особой боли понять этот занимательный режим редактирования в BASIC и даже проникнуться им. Также интересно, его авторы сами это выдумали или пользовались vi? Или может просто эта командно-модальная концепция доминировала в 80е, что очень может быть в эпоху низких скоростей и частых ошибок передачи данных по телефонным линиям.

Придумывал тут шутку а ля vim: “Как в Корвете выйти из режима редактирования BASIC без сброса?” Хотя понял, это же просто — нажать ВК. Ведь он не настолько суров, как vim, и не стоит его бояться. Вполне можно пользоваться, лишь только остаётся открытым вопрос копирования строк программы.

Корвет ПК8010

Корвет ПК8010

ссылка на оригинал статьи https://habr.com/ru/articles/1030958/