Диалекты бейсика для ZX Spectrum 1992 г.

Beta Basic - Редактор.


BETA BASIC

Первая версия Beta Basic (v. 1.0) фирмы Betasoft появилась на свет в 1983 г. Она дополнила Spectrum-Бейсик более чем 20 новыми операторами и функциями. Потом была написана версия 1.8 (1984 г.) и, наконец, появились самые мощные версии — 3.0 и 3.1 (1985 г.)79» которые поддерживают более 40 новых операторов, расширяют возможности некоторых «базовых» операторов и вводят около 30 дополнительных функций. Мы будем описывать версию 3.180.

В основном, Beta Basic ориентирован на решение вычислительных задач и работу с данными и, пожалуй, представляет из себя наиболее мощную версию Бейсика для ZX Spectrum.

Beta Basic имеет развитые средства структурного программирования и управления программой (процедуры, циклы типа DO...LOOP, оператор варианта и т. п.), что заметно упрощает составление программ и сокращает время их разработки. Значительно расширен в нем арсенал средств работы с памятью и реализован принципиально новый подход к обработке массивов и строк символов: их копирование, склейка, сортировка, поиск по образцу в произвольном сечении и т. д.

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

Несмотря на то, что Beta, Basic не специализируется на работе с графикой, он, тем не менее, выполняет многие операции обработки изображения: работу со спрайтами, быструю замену цветовых атрибутов, скроллинг окна экрана, заливку замкнутого контура и т. д.

Beta Basic имеет встроенные часы, средства обработки ошибочных ситуаций и пошаговой отладки программ (трассировки).

Важным достоинством Beta Basic является наличие в нем удобного редактора программ, в котором реализованы автонумерация и перенумерация строк, поиск и замена по образцу, быстрое удаление фрагментов программы и многое другое.

Несмотря на значительное место, занимаемое в памяти интерпретатором Beta Basic (около 19 килобайт), его расширенные возможности с лихвой окупают этот недостаток и позволяют быстро разрабатывать эффективные и компактные программы.

РЕДАКТОР_

KEYWORDS, DEF KEY, AUTO, EDIT, REF, ALTER, JOIN, SPLIT, RENUM, DELETE, LIST, MEM()

Beta Basic, в отличие от своих собратьев — расширений Spectrum-Бейсика, в синтаксисе и способе ввода операторов целиком сохраняет верность традициям, принятым в базовой версии: в нем ключевые слова вводятся нажатием лишь одной-двух клавиш. Для реализации этого использован стандартный режим курсора [G] (Graphics), включаемый комбинацией клавиш CS/9. Например, после перехода в режим [G] нажатие клавиши 8 приведет к выводу в строку редактора ключевого слова KEYWORDS81.

Однако сказанное вовсе не означает, что в Beta Basic нельзя использовать псевдографику и символы, определяемые пользователем (UDG). Режиму Graphics всегда можно вернуть его старый, привычный смысл. Делается это с помощью уже упомянутой команды KEYWORDS. Она имеет один числовой параметр. KEYWORDS 1 переводит компьютер в режим ключевых слов Beta Basic, a KEYWORDS 0 — в режим вывода псевдографических символов и символов UDG, который отличается от стандартного синклеровского режима Graphics только тем, что-в нем для удобства за клавишей 8 закреплен не пробел, а ключевое слово KEYWORDS.

После загрузки Beta Basic устанавливается режим KEYWORDS 1.

Кроме синклеровского способа ввода ключевых слов, Beta Basic допускает и посимвольный их ввод, причем безразлично, прописными или строчными буквами (в режимах курсора [С] или [L]).

Редактор Spectrum-Бейсика — большой интеллектуал: он, исходя из контекста, знает, в каком месте вводимой строки должно появиться ключевое слово, и самостоятельно переводит курсор в режим [К]. Избавиться от этого в стандартном Бейсике невозможно. Зато Beta Basic это позволяет. Находясь в режиме ввода ключевых слов JK], стоит нажать клавишу Space, и курсор превращается в [С] или [L] (в зависимости от того, какой из этих режимов был установлен ранее). Для того чтобы вернуться к режиму [К], достаточно переместить курсор на прежнее место либо нажать клавиши SS/Enter. Таким образом можно выбирать способ набора текста программы: целиком ключевыми словами или посимвольно.

Закрепить способ ввода ключевых слов можно с помощью той же команды KEYWORDS: KEYWORDS 2 отключит возможность посимвольного ввода, KEYWORDS 4, наоборот, позволит набирать все ключевые слова только посимвольно, a KEYWORDS 3 вернет редактор в исходный режим «свободного выбора».

Посимвольно набранные операторы и функции после нажатия Enter (даже если ввод строки не завершен) заменяются соответствующими ключевыми словами. Этот эффект проявляется наглядно, если ключевые слова набирать строчными буквами — после нажатия Enter они заменятся на82 прописные. Если же редактор обнаружит ошибку и не захочет вводить строку, найти причину будет легко: неправильно набранное ключевое слово так и останется записанным строчными буквами. Отметим только, что ошибка может быть не только в пропущенной или неправильной букве, но и в отсутствии в нужном месте пробела. К примеру, запись CHR$A редактор не поймет.

Однако возможны ситуации, когда набранное с ошибкой ключевое слово будет интерпретировано как имя переменной и пропущено редактором. Так, например, если вместо строки LET A=COS Т набрать LET A=COST, то редактор сочтет это вполне приемлемым и спокойно «проглотит», хотя программа будет работать неправильно.

Все же редактор Beta Basic делает все возможное, чтобы обнаружить и исправить максимум ошибок. Например, если между именем функции (оператором, другим служебным словом) и аргументом отсутствует пробел, но аргумент не является именем переменной (то есть начинается не с буквы), «ошибка» будет исправлена.

Beta Basic значительно (ровно вдвое!) расширяет список функций языка. Разумеется, было бы бессмысленно пытаться каждой новой функции приписать «персональную» клавишу компьютера, и разработчики Beta Basic предложили оригинальный и по-своему удобный метод ввода имен функций. Сразу оговорим, что он не исключает возможность и посимвольного их ввода.

Все новые встроенные функции заданы с использованием инструмента описания функций, определяемых пользователем (DEF FN и FN)*. Соответственно, и обращаться к ним в тексте программы нужно тоже стандартным способом — через ключевое слово FN, добавляя однобуквенное имя функции. Таким образом, определенное число однобуквенных имен функций пользователя Beta Basic занимает под имена встроенных функций.

Для того чтобы в тексте программы встроенные функции отличались от функций, определенных пользователем, применен следующий прием: при наборе конструкции типа FN <имя функции), где <имя функции> — зарезервированная буква, редактор заменяет эту букву на полное название функции. Например, после ввода открывающей скобки в строке

LET a=FN i(

сочетание FN i будет заменено одним служебным словом — именем новой функции:

LET a=INSTRING(

Преобразование в развернутую форму имен символьных функций

происходит после ввода символа $83.

Редактор Beta Basic при выводе листинга на экран обеспечивает контекстное позиционирование программных строк, что делает тексты программ более удобочитаемыми (рис. 21). При этом на экран не выводятся двоеточия, разделяющие расположенные в одной строке операторы — каждый оператор печатается с новой строки84. Это свойство редактора, например, позволяет, набрав несколько двоеточий подряд, отделить друг от друга пустыми строками логически завершенные части программы (процедуры, DATA-списки и т. п.). Того же эффекта можно добиться, нажимая одновременно CS и Enter85.

В режиме редактирования строки нетрадиционно работают клавиши управления курсором. Если в Spectrum-Бейсике курсор мог двигаться только в горизонтальном направлении, а клавишами «курсор вверх» и «курсор вниз» перемещался указатель текущей строки в листинге программы, то редактор Beta Basic позволяет свободно «гулять» по редактируемой строке в любом из четырех направлений. При попытке переместить курсор выше либо ниже редактируемой строки он перебрасывается в ее конец. Управлять же указателем текущей строки можно только при условии, что строка редактора пуста и курсор находится в режиме [К].

Доступен в Beta Basic еще один способ набора программных строк — через программирование клавиатуры. Оператор

DEF KEY <"символ клавиши">[:<последовательность операторов>[:]]

DEF KEY < "символ клавиши">[;<строка символов[:]>]

приписывает любой клавише компьютера (кроме CS, SS, Space и Enter) < последовательность операторов > или < строку символов > — макроопределение. Макроопределение может быть задано как последовательностью операторов, и тогда оно вводится после двоеточия, так и символьной строкой, отделяемой от первого параметра оператора точкой с запятой.

После определения макрокоманды оператором DEF KEY она выполняется нажатием указанной клавиши в специальном режиме курсора [86], введенном в дополнение к стандартным режимам курсора. Включается режим [*] нажатием клавиш SS/Space.

Выполним строку:

DEF KEY "Р": PRINT "Hello!": PRINT "How do you do?"

Теперь, если в режиме курсора [*] нажать клавишу Р, на экране появится.

Hello!

How do you doi

Пример можно переписать и так:

10 LET a$="PRINT ""Hello"": PRINT ""How do you do?"""

20 DEF KEY "P";a$

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

Макроопределение можно «снять» с клавиши, выполнив оператор DEF KEY с символом данной клавиши без следующего за ним набора инструкций, например, DEF KEY "Р". Одновременно все макроопределения удаляются оператором DEF KEY ERASE.

Следует помнить, что, сохраняя в памяти созданные макроопределения, интерпретатор несколько опускает RAMTOP.

Beta Basic избавляет нас от необходимости при вводе программы каждый раз набирать номер очередной строки. Включается режим автонумерации командой

AUTO [<начальный номер> [,<шаг>]|

В ней параметр < начальный номер>* задает номер первой добавляемой к программе строки, а параметр <шаг> — шаг нумерации для последующих строк. Команда может не иметь ни одного параметра либо иметь только один. В первом случае по умолчанию предполагается, что оба параметра равны 10. Во втором — единственный параметр определяет номер первой «автонумеруемой» строки, а шаг также равен 10.

Отменить автонумерацию проще всего, нажав и удерживая клавишу Break (CS/Space) в течение секунды. В момент отключения режима AUTO появится сообщение 0 ОК: 0,1. Автонумерация сбросится и по команде AUTO 0 или после выполнения любого оператора в непосредственном режиме (для этого перед вводом оператора надо стереть появившийся в строке редактора очередной номер).

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

Продолжим рассмотрение команд редактора Beta Basic.

EDIT [ < номер строки > ]

Эта команда вызывает на редактирование строку программы с номером, заданным в параметре, независимо от положения указателя текущей строки. Если строки с заданным номером не существует, на редактирование будет вызвана строка с ближайшим большим номером. Набирается эта команда нетрадиционно, но просто: клавишей 0 после любого нажатия Enter. Команда EDIT без параметра вызывает на редактирование текущую строку программы. Впрочем, набрать EDIT можно и обычным способом — в режиме курсора [G] или посимвольно.

Мощная команда редактора Beta Basic

REF <ключ для поиска >

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

Если в качестве ключа необходимо использовать содержимое символьной переменной, а не ее имя, то последнюю необходимо взять в скобки: REF (а$).

В случае, если образцом является строка символов, на редактирование будут вызваны строки с любым включением указанного набора символов, в том числе с полностью или частично совпадающими именами переменных. Так, например, команда REF "org" вызовет одну за другой на редактирование строки

78 LET Orgss55679 80 LET Forgo=22.51

510 INPUT "Organization number "; Num 640 REM ORGANIC

По завершении редактирования очередной найденной строки и ввода ее в программу повторное нажатие клавиши Enter поместит в нижнюю часть экрана следующую строку, удовлетворяющую условию поиска. Если строка программы содержит искомую подстроку в нескольких экземплярах, она будет «вызвана на ковер» соответствующее количество раз.

Выход из этого режима осуществляется так же, как и из режима AUTO.

С помощью команды

ALTER <ключ для поиска > ТО < образец для замены >

можно осуществлять автоматический поиск и замену фрагментов текста программы. Для обоих параметров команды справедливы соглашения, принятые для параметра команды REF. Второй параметр может принимать значение «пустая строка».

Команда ALTER просматривает текст программы и все найденные включения последовательностей символов или имен переменных (массивов, процедур), заданные

< ключом для поиска>, заменяет на

< образец для замены >, указанный во втором параметре.

JOIN [ < номер строки > ]

Эта команда сцепляет через двоеточие две соседние строки программы: строку с номером, указанным в параметре, и следующую за ней. После выполнения команды номер присоединенной строки освобождается. К примеру, фрагмент программы

151 FOR i=1 ТО 1000

152 PRINT PEEK i

153 NEXT i

после выполнения команды JOIN 151 будет выглядеть так:

151 FOR i=1 ТО 1000: PRINT PEEK i 153 NEXT i

Команда JOIN без параметра соединит текущую строку и строку, следующую за ней.

SPLIT

Эта команда обратна по действию команде JOIN: она расщепляет строки, составленные из нескольких операторов. В отличие от других команд редактора, SPLIT выполняется не введением ключевого слова с параметрами, а совершением несложной операции в процессе редактирования строк. Разделение производится введением символа <> (клавиши SS/W) в следующую за «фантом-двоеточием»87 позицию редактируемой строки (в этой позиции курсор переходит в режим [К]). После нажатия Enter часть строки до курсора возвращается с прежним номером в текст программы, а остаток строки, словно хвост ящерицы, оказывается в наших руках. Оставшийся в редакторе «хвост» имеет тот же номер, что и его удравшая «хозяйка». Поэтому, если номер не сменить, то после нажатия Enter вторая часть строки перепишется в программу на место первой. Будьте внимательны!

Без следующей команды не может обойтись любая мало-мальски уважающая себя версия Бейсика:

RENUM {<начало>] [ТО <конец>] [LINE <нов. начало)] [STEP <шэг>]

Она перенумеровывает (перебрасывает с одного места программы в другое) блок строк, начиная с номера, заданного параметром <начало>, по номер <конец>. Новое место (номер, присваиваемый первой строке блока) и шаг перенумерации определяются параметрами <нов. начало> и <шаг>88.

По умолчанию параметр <начало> принимает значение номера первой строки программы, параметр <кснец> — номера последней строки, <ное. начало) — 10 и <шаг> — 10. Следовательно, использование команды RENUM без параметров приведет к перенумерации всех строк программы, начиная с номера 10 и с шагом 10.

Если при задании первых двух параметров будет указан номер не существующей в программе строки, действие команды прервется сообщением No such line — нет такой строки. В команде предусмотрена «защита от дурака»: если от нее потребуют присвоить строке уже существующий в программе номер, будет выдано сообщение No room for line (нет места для строки).

Конечно, изменить номера строк в программе — дело нехитрое, куда важнее другое: сохранить при этом правильность всех ссылок в операторах GO ТО, GO SUB и других, задающих переходы по номеру строки. В случае, если параметры в этих операторах заданы в явном виде (числом), команда RENUM выполняет перенумерацию этих параметров корректно. Номера строк, в которых содержатся операторы перехода с параметрами, заданными выражением, после отработки команды выводятся на экран в виде сообщений:

Failed at <номер строки>:<номер оператора в строке>

В этих операторах придется вручную откорректировать адреса переходов.

Для работы команды RENUM в качестве буфера используется экранная область памяти компьютера. Поэтому не пугайтесь, если

Значительно облегчает процесс редактирования программ команда

DELETE [< начало >] ТО [<конец>]

Она удаляет фрагмент программы со строки с номером <начало> по строку <конец> включительно. В редакторе Spectrum-Бейсик для этого пришлось бы вводить номер каждой подлежащей удалению строки. По умолчанию параметр <начало> принимает значение номера первой строки программы, <конец> — последней строки.

Как и RENUM, команда DELETE «не любит», когда в качестве параметров ей подставляют номера несуществующих строк. В таких ситуациях она выдает сообщение No such line (нет такой строки).

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

Команда DELETE О ТО 0 позволяет при необходимости избавиться от нулевой строки, в которой располагаются описания расширенных функций Beta Basic.

Beta Basic не только вводит новые команды, но и совершенствует уже существующие. Одной из таких команд является

LIST [< начало>] ТО [<конец>]

Она выводит на экран фрагмент программы, ограниченный строками с номерами, заданными значениями параметров < начало > и <конец>.

Команда LIST REF <ключ для поиска> выводит на экран список номеров строк, удовлетворяющих условию < ключа>. Команда LIST DATA распечатает все переменные программы; LIST VAL — только числовые, LIST VAL$ — символьные. Для массивов будут выведены только их размерности.

При помощи команды LIST DEF KEY можно просмотреть список клавиш с приписанными им макросами. Вот такая многоплановая команда!

Завершим рассказ о редакторе Beta Basfb описанием очень полезной функции

MEMO

С ее помощью можно определить объем памяти в байтах, доступный для бейсик-программ. Для иллюстрации работы функции выполним программку:

10 PRINT МЕМ(): DIM >4(10.100): PRINT МЕМ()

В результате получим два числа, первое из которых на 5008 больше второго. Это вполне естественно, ведь после резервирования места под массив А() объем памяти, доступный бейсик-прог-рамме, значительно уменьшится.

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




СОДЕРЖАНИЕ:
  1. Laser Basic - Вывод спрайтов на экран; Вывод на экран части спрайта; Перенос атрибутов; Преобразование окна экрана; Наборы переменных; Перемещение спрайтов; Наложение спрайтов; Копирование изображения с экрана в спрайт; Преобразование спрайтов; Скроллинг пейзажа; Изменение размеров области спрайт-файла; Вспомогательные графические операторы и функции; Определение столкновений спрайтов; Сервисные операторы и функции; Процедуры; Загрузка и запись программ.


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Necronomicon - Руны проклятия, вырезанные чьими-то забытыми руками, охраняют сумрачные врата.
Разное - Почтовый ящик.
Письмо №321 - Татарстан Респ, г Нурлат
Рассказ - Нетерпение сердца (продолжение).
Сплошные приколы - 3 анекдота. Сборник высказываний советских офицеров (продолжение).

В этот день...   28 марта