Программируем на Бейсике BBC Basic

Программируем на Бейсике BBC Basic

  

 

BBC BASIC — язык программирования семейства BASIC, созданный в 1981 году как встроенный интерпретатор Basic для компьютера BBC Micro компании Acorn. В последствии его адаптировали на таких известных и распространенных компьютерах, как ZX-Spectrum.

 

BBC Micro был специально создан по заказу британской компании BBC, за что и получил своё название.

BBC BASIC основан на более старом Atom BASIC, имевший возможности работы с процедурами и функциями, а также со структурами IF-THEN-ELSE. Кроме того, он имел широкие возможности по работе со звуком и поддерживал графику с высоким разрешением.
Одной из уникальных особенностей BBC BASIС была поддержка элементов ассемблера и возможность писать на нём программы для MOS Technology 6502. Ассемблер был полностью встроен в BBC Basic - компиляция ассемблерной программы происходила во время интерпретации программы, откомпилированный код размещался в оперативной памяти (обычно для этого надо было заранее зарезервировать соответствующий кусок памяти), а потом двоичный код можно было записать на диск или вызвать прямо из программы. Это позволяло использовать при компиляции выражения с переменными языка и даже вызывать функции, существенно увеличивая функциональность компилятора.

 

 

 

Программируем на Бейсике BBC Basic . Описание и примеры программирования

 

 


 

Номера строк

 

Номера строк не являются обязательными в BBC BASIC для Windows , . Строки должны быть пронумерованы (или обозначены меткой ) , если на них ссылаются операторы GOTO , GOSUB или RESTORE , в противном случае нумерация строк может быть опущена. Нумерация также может быть полезна при отладке программы, так как сообщения об ошибках могут содержать номер строки , в которой произошла ошибка.

 


 

Разделители операторов

 


Если вы хотите написать более одного оператора в строке, операторы должны быть разделены двоеточием (:).

BBC BASIC для Windows , будет иногда терпеть отстутствие двоеточия, если это не приводит к двусмысленности, но безопаснее ставить его, программу при этом легче читать.

 

Например:


FOR I = 1 TO 5 PRINT I: NEXT
но лучше включить двоеточие:

 

FOR I = 1 TO 5: PRINT I: NEXT

 

Вы можете предпочесть писать каждый оператор в отдельной строке. Это не приведет к ухудшению производительности скомпилированной программы до тех пор ,пока вы выбираете функцию 'Соединить строки " Crunch вариант.

 

 


 

Продолжение строки

 

 

В языке программирования BBC BASIC (tokenised) количество символов в строке программы ограничено до 251 символов, за исключением номеров строк. Несмотря на то, что это обычно достаточно, время от времени вы можете использовать более длинные строки или разбить строку программы на несколько строк на экране для удобства чтения. Вы можете сделать это с помощью символа продолжения строки \ (обратный слэш) следующим образом:

 

 

PROC_render(pdev%, \ pointer to Direct3D device
\ nobj%, \ число объектов
\ yaw(), \ массив углов рысканья
\ pitch(),\ массив углов тангажа

\ roll() \ массив углов крена

\ )

 

 

Вот, например, как один вызов процедуры был разделен между несколькими линиями для лучшего восприяти и чтения комментариев. Все, что находится после, символа продолжения строки, игнорируется BASIC, когда программа построена таким образом, там можно и удобно поставить комментарии. Обратите внимание, что продолжение самих строк должны начинаться с другого символа \.

Вы можете использовать символ продолжения строки практически в любом месте , где позволяет вам пространство, но не :

 

в кавычках (постоянной) строки
в star command (используйте OSCLI вместо этого)

в REM операторе
в DATA операторе
сразу после первого ключевого слова оператора
когда однострочный IF и многострочный IF объединяются.


Вы можете использовать символ продолжения в одной строке IF оператора или в операторе ON (например , ON GOSUB, ON SYS) , но вы не должны ничего размещать (даже не комментарий) после символа продолжения. Если оператор IF или ON имеет ELSE оператор, символ продолжения может быть использован только после ELSE.

 

 


 

 

 

Приоритеты выражений

 

Порядок оценки


Различные математические и логические операторы имеют определенный порядок приоритета. BBC BASIC для Windows, будет оценивать выражение , принимая этот приоритетный порядок во внимание. Операторы с одинаковым приоритетом будут оцениваться слева направо. Например, в строке , содержащей умножение и вычитание, умножения будут выполнены до того , как будут выполнены вычитания. Различные операторы перечислены ниже в порядке приоритета (наивысший приоритет в верхней части):


переменные функции () ! ? & % unary+ − NOT

^
* / MOD DIV
+ -
= <> <=> => < << >> >>>
AND

EOR OR

 

 


Примеры


Ниже приведены некоторые примеры приоритета выражений, которые могут быть использованы. Скобки, даже если они не являются необходимыми, могут сделать выражение более понятным, но будут немного замедлять выполнение программы.

 

 

IF A=2 AND B=3 THEN
IF ((A=2)AND(B=3))THEN
IF A=1 OR C=2 AND B=3 THEN
IF((A=1)OR((C=2)AND(B=3)))THEN
IF NOT(A=1 AND B=2) THEN
IF(NOT((A=1)AND(B=2)))THEN
N=A+B/C-D
N=A+(B/C)-D
N=A/B+C/D
N=(A/B)+(C/D)

 

 

 


 

Арифметические массивы

 

 

Арифметические и логические операции , которым доступны операции с целыми массивами , а не только с отдельными значениями, довольно ограничены.

Это сложение (+), вычитание (-), умножение (*), деление (/), логическое ИЛИ -OR , логическое И - AND , логическое исключающее или ( EOR), целое частное ( DIV), целый остаток ( MOD ) и операции с десятичной точкой (.).

 

Например:

 

C%() = A%() * B%() + C%()
B() = A() - PI
A() = B() . C()
A$() = B$() + C$() + D$()
A() = B() * 2 / C() + 3 - A()

 


Выражения с массивами вычисляются строго слева-направо, поэтому операторы с более высоким приоритетом должны быть на первом месте.Скобки не могут быть использованы, чтобы переопределить порядок выполнения:

 

С% () = С% () + В% () * A% (): REM не допускается
С% () = A (%) * (B% () + C% ()): REM не допускаются

 


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

 

-Оба массива- источника должны быть 1-мерными или 2-мерными.
-Если первый массив является 1-мерным он обрабатывается как одна строка.
-Если второй массив является 1-мерным он обрабатывается как один столбец.
-Число столбцов в первом массиве должно быть равно числу строк во втором массиве.
-Общее количество элементов в массиве назначения должно быть равно произведению числа строк в первом массиве на количество столбцов во втором массиве.


MOD функция возвращает модуль (квадратный корень из суммы квадратов всех элементов) числового массива, так что массив может быть нормализован следующим образом :

 

А () = A () / MOD (А ())


Не следует путать это с MOD оператором , который возвращает целый остаток после деления. Вы можете использовать операторы присваивания с массивами (например , + = , - = , * = или / = ) , но есть важное ограничение. Если массив является целым числом (или байтовым) выражение в правой стороне оператора массива преобразуется в целое число до того , как выполнится операция . Так что заявление:

 

A% () * = 2,5

 

будет умножать все элементы массива A (%) на 2 , а не на 2,5.

 

 


Инициализация массива


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

 

A% () = 1, 2, 3, 4, 5
Б $ () = "Альфа", "Бета", "Гамма", "Дельта"
С () = Pi

 

 

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

 

 


Переменные,

 

 

имена переменных

 

 

Имена переменных могут быть любой длины,они ограничиваются только максимальной длиной строки, и все символы имеют большое значение. Они должны начинаться с букв (a..z, A..Z) подчеркивания (_) или символома `(CHR $ 96). Остальные символы должны быть a..z, A..Z, 0..9, подчеркивание или `(CHR $ 96). Имена переменных чувствительны к регистру ( 'number', 'Number' и 'NUMBER' являются различными переменными). Имена переменных не должны начинаться с ключевого слова BASIC (кроме некоторых исключений). Использование длинных, значащих имен переменных, сделает вашу программу проще для понимания и отладки, и не будет влиять на производительность.

 

соглашения о присвоении имен переменным


В BBC Basic приняты следующие соглашения об именах переменных:

 

  • Локальные переменные (например , переменные с ограниченными возможностями, формальные параметры функций и процедур, а также переменные , объявленные как LOCAL или PRIVATE )
  • Имена должны быть полностью в нижнем регистре (за исключением статических целочисленных переменных ). Например number%, text$ .
  • Глобальные переменные (т.е. тех , которые объявлены и используются всей вашей основной программой, и имеют возможность , получить доступ в функции или процедуры)
  • Следует использовать комбинацию строчных и прописных букв.
  • Например: Click%, Title$ .
  •  
  • Константы (т.е. переменные, которым присвоено постоянное значение при инициализации и которое никогда никогда не менятся ) должны быть все прописные.

Например: MAXFILES, VERSION$ .

 

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

 

 

Типы переменных

 

BBC BASIC для Windows , использует следующие типы переменных:

 

 

  • Статические переменные
  • Целые числовые переменные
  • 64-разрядные целые числовые переменные
  • Byte числовые переменные
  • Вариантные числовые переменные
  • 64-разрядные с плавающей запятой числовые переменные
  • Строковые переменные
  • Массивы
  • Структуры
  • Псевдопеременные
  • Системные переменные
  •  

Обратите внимание , что в BBC BASIC различные типы переменных полностью независимы.

 

Например, целая переменная list% , цифровая переменная list, строковая переменная list$ и массивы list%() , list() и list$() все совершенно независимы друг от друга.

 

Статические переменные

 

Переменные A% .. Z% включительно, называются статическими переменными . Они представляют собой особый тип цело численной переменной , которые не сбрасываются командами RUN, CHAIN или CLEAR . Таким образом , эти переменные могут быть полезны для передачи значений между программами или для хранения информации , которая должна быть сохранена , когда остальные переменные очищаются или меняются. Они также доступны немного быстрее , чем другие переменные. Кроме того переменные A%, B%, C%, D%, F%, X% и Y% имеют особые случаи применения в CALL и USR вызовах подпрограмм, а также L%, O% и Р% имеют особое значение в ассемблере .

 

Статические переменные занимают 32 бита и могут содержать любое целое число от -2147483648 до +2147483647.


Целые числовые переменные

 

Целые числовые переменные имеют имена, которые заканчиваются знаком процента (%). Они занимают 32 бита и могут содержать любое целое число в диапазоне от -2147483648 до +2147483647.

Не нужно объявлять переменную как целое число для применения быстрой целочисленной арифметики. Например, FOR ... NEXT цикл выполняют при использовании быстрой целочисленной арифметики без объявления типа 'целой переменной' (% ), так долго, пока это имеет целочисленное значение.

 

64-разрядные целые числовые переменные

 

BBC BASIC для Windows , версии 6.00a или более поздней версии имеют имена 64-битных целых числовых переменных, которые заканчиваются парой знаков (%%) процентов. Они могут содержать любое целое число в диапазоне от -9223372036854775808 до +9223372036854775807.

 

Byte числовые переменные


Байт числовые переменные имеют имена , которые заканчиваются знаком амперсанд (&). Они хранятся в 8 битах и могут содержать любое целое число в диапазоне от 0 до +255 (байт переменные без знака ). Байт переменные являются особенно полезными в качестве структуры членов, так как они могут быть использованы в качестве строительных блоков для создания структуры данных любого размера.

 

Variant  числовые переменные

 

Variant  числовые переменные не имеют суффикса характера и могут  содержать либо целые либо действительные значения (с плавающей запятой). В  BBC BASIC для Windows , версии 6.00a или более поздней  версии только  Variant числовые переменные могут содержать либо 64-битное целое значение либо  80-разрядное  (10-байт) значение с плавающей запятой , состоящее из 64-разрядной мантиссы и 16-разрядной экспоненту . Они имеют диапазон приблизительно ± 3.4E-4932 до ± 1.1E4932 и точность около 19 значимых разрядов.

В  BBC BASIC для Windows   версии 5.95a и ранее только  Variant числовые переменные представлены в двух формах, в зависимости от * Float режима . В * Float 40 режиме они могут содержать либо 32-битное целое значение либо 40-разрядное (5 байт) значение с плавающей запятой , состоящий из 32-битной мантиссы и 8-битного  показателя степени. Они имеют диапазон приблизительно ± 5.9E-39 до ± 3.4e38 и точность приблизительно 9 значащих цифр. В * Float 64 режиме они могут содержать либо 32-битное целое значение либо  64 - битное (8 байт) значение с плавающей точкой , состоящее из 53-битной мантиссы и 11-разрядной экспоненты. Они имеют диапазон приблизительно ± 2.3E-308 до ± 1.7E308 и точность приблизительно 15 значащих цифр.Объяснение того , как задается формат записи данных  Variant числовых переменных  в памяти раздела.

 

64-разрядные ( 'двойные') переменные с плавающей точкой

Двойные числовые переменные имеют имена, которые заканчиваются диез (#); они содержат 64 бита (8 байт) значение с плавающей запятой, состоящий из 53-битной мантиссы и 11-разрядную экспоненту. Они имеют диапазон приблизительно ± 2.3E-308 до ± 1.7E308 и точность приблизительно 15 значащих цифр.

 

Строковые переменные

 

Строковые переменные имеют имена , которые заканчиваются в знак доллара ($). В BBC BASIC для Windows , версии 5.95a или более ранней версии их максимальная длина составляет 65535 символов; в BBC BASIC для Windows , версии 6.00a или более поздней версии их длина ограничена только объемом доступной памяти. Объяснение того , как строковые переменные хранятся задается в формате данных в памяти раздела. Массивы Variant  , дважды, целыми, байт и строк типов допускается. Все массивы должны иметь такие размеры, перед использованием. Вариант ЦИФРЫ, удваивается, целые числа, байты и строки не могут быть смешаны в многомерном массиве; вы должны использовать один массив для каждого типа переменной вам нужно. Двойной массив обозначается именем, заканчивающимся на диез (#), целое число массива по имени, заканчивающегося в знак процента (% или %%), массив байтов по имени, заканчивающегося в амперсандом (&) и строка массива по имени, заканчивающегося в знак доллара ($).Значение дается, когда объявляется массив является максимальным значением, что индекс может занять. Так как минимальное значение для подстрочный индекс равен нулю, то общее число элементов в этой плоскости равно заданному значению плюс один. Например, двумерный массив, объявленный с:

  • DIM знаки% (10,5)  имеет в общей сложности 66 элементов (10 + 1 строк по 5 + 1 столбцов).Псевдопеременных
  • Псевдо-переменные являются ключевыми словами , которые ведут себя как переменные. Они LOMEM , HIMEM , СТР , PTR и TIME / TIME $ . Их значения могут быть записаны (например , время = 0) или чтения (например , T = TIME) в зависимости от контекста. Псевдо-переменные не могут быть использованы в качестве формальных параметров функций или процедур, не могут быть сделаны LOCAL , не может быть использован в качестве переменной контролем FOR заявления, не может быть передан в качестве параметра для ЗВОНИТЕ и не могут быть назначены в ВХОДА , МЫШЬ , READ или SYS заявления.Системные переменные
  • Системные переменные имеют имена, начинающиеся с символа "@". Имена переменных системы предопределены: вы не можете создать свой собственный. Самая известная переменная система - и единственный в оригинальной версии BBC BASIC - это @%. Эта переменная форматирования управления печати; см описание PRINT заявление для деталей.Другие переменные системы следующие. Они в основном использования при доступе к функциям Windows API , из BASIC (смотрите раздел Доступ к Windows API , для получения дополнительной информации).

 

  • имяСтоимость@ HWND%        'Дескриптор окна' для окна Basic в программе (выход)
  • @ Memhdc%                              'Контекст устройства' для экранной памяти BASIC в
  • @ Prthdc%
  • 'Контекст устройства' для текущего принтера (если таковые имеются)
  • @ Hcsr%
  • Ручка для указателя мыши (курсор)
  • @ HPAL%
  • Ручка для цветовой палитры
  • @ Тзд%
  • Значение MSG (для использования с левой кнопки мыши , по Движению и ПО SYS )
  • @ WPARAM%
  • Значение WPARAM (для использования с по щелчку , по Движению и ПО SYS )
  • @ LPARAM%
  • Значение LPARAM (для использования с по щелчку , по Движению и ПО SYS )
  • @ Миди%
  • MIDI идентификатор устройства (не ноль, если MIDI воспроизведения файла)
  • @ Ispal%
  • Логическое которая отлична от нуля, если дисплей палитрой
  • @ Hfile% (п)
  • Массив дескрипторов файлов индексируется по номеру канала
  • @ ВДУ%
  • Указатель параметров текста и графических BASIC (см ниже)
  • @ $ CMD
  • Командная строка программы 'скомпилированных'
  • @ $ Реж
  • Каталог (папка), из которого была загружена программа
  • @ HMDI%
  • Multiple дескриптор окна интерфейса документа (если таковые имеются)
  • @ Флаги%
  • Целое включения флаги управления BASIC в. Старший бит, если он установлен, указывает на то, что существует в ожидании условие побег
  • @ $ Lib
  • Каталог (папка), содержащий файлы библиотеки BBC BASIC
  • @ Вола%
  • Горизонтальное смещение (в пикселях) между выходным битовой карты и содержимого окна. Должен быть равен нулю или положительным
  • @ Оу%
  • Вертикальное смещение (в пикселях) между выходным битовой карты и содержимого окна. Должен быть равен нулю или положительным
  • @ HWO%
  • Ручка устройства WAVEOUTPUT
  • @ Hevent%
  • Ручка события используется для предотвращения блокировки в последовательных и параллельных операций ввода / вывода
  • @ $ TMP
  • Временная директория (папка)
  • @ $ USR
  • Каталог документов пользователя (папка)
  • @vdu {}
  • Структура , содержащая основные переменные ВДУ
  • @ Haccel%
  • Ручка клавиатуры акселератора, если он используется
  • @ Hwacc%

Дескриптор окна, к которому команды акселераторов клавиатуры должны быть отправлены
@ CMD переменная $
Переменная @ CMD $ позволяет исполняемый файл , созданный с помощью компилирующем утилиты для доступа к командной строке , с которой она была выполнена. @ $ CMD пусто в случае программы запуска из интерактивной среде.@ $ Реж и @ Lib $ переменных
Переменные @ реж $ и @ $ Lib полезны при УСТАНОВИТЕ ИНГ библиотек или при загрузке любых других ресурсов файлов (изображения, файлы данных и т.д.) , необходимые программы. Если вы убедитесь , что эти файлы хранятся либо в библиотечном каталоге или в том же каталоге, что и сама программа , вы можете просто префикс их имена файлов с @ Lib $ или @ реж $ соответственно:УСТАНОВИТЬ @lib $ + "MyLib"
OSCLI "DISPLAY" + @ реж $ + "MYIMAGE"
SYS "PlaySound", @dir $ + "MySound", 0, & 20001
Файлы , указанные таким образом , автоматически включаются в исполняемый файл , созданный компилирующем командой.В @ TMP $ и @ USR $ переменных
Переменные @ TMP $ и @ $ USR полезны при хранении файлов данных. Первый может быть использован для временных файлов , которые могут быть отброшены , как только программа завершена, а вторая для файлов , содержащих информацию , относящуюся к текущему пользователю, например, сохраненным выход из программы. В отличие от @ $ Dir, эти места гарантированно будут доступны для записи (в нормальных условиях).VDU переменные
Переменная @ ВДУ% позволяет получить доступ к значениям ряда внутренних параметров текста и графических BASIC в. Некоторые из наиболее полезных из них перечислены ниже; в общем , вы должны толькопрочитать эти значения (они должны быть написаны с использованием связанных с ними основные положения).Основные переменные VDU могут в качестве альтернативы быть доступны через @vdu {} структуры, как показано ниже:
Стоимостьальтернатива параметр@ ВДУ%! 0
@ Vdu.ox%
Горизонтальная графика происхождения (в графических единицах BBC BASIC), как установлено ПРОИСХОЖДЕНИЯ или ВДУ 29 .
@ ВДУ%! 4
@ Vdu.oy%
Вертикальная графика происхождения (в графических единицах BBC BASIC), как установлено ПРОИСХОЖДЕНИЯ или ВДУ 29 .
@ ВДУ%! 8
@ Vdu.lx%
Горизонтальная координата (в пикселях) последней точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 12
@ Vdu.ly%
Вертикальная координата (в пикселях) последней точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 16
@ Vdu.px%
Горизонтальная координата (в пикселях) предыдущей точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 20
@ Vdu.py%
Вертикальная координата (в пикселях) предыдущей точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 24
@ Vdu.tl%
Левый край текста видового экрана (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 28
@ Vdu.tr%
Правый край текста видового экрана (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 32
@ Vdu.tt%
В верхней части текстового окна просмотра (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 36
@ Vdu.tb%
В нижней части окна просмотра текста (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 40
@ Vdu.dx%
Ширина графика "точка", в пикселях.
@ ВДУ%! 44
@ Vdu.dy%
Высота графика "точка", в пикселях.
@ ВДУ%! 48
@ Vdu.cx%
Горизонтальное положение текстового курсора в пикселях.
@ ВДУ%! 52
@ Vdu.cy%
Вертикальное положение текстового курсора в пикселях.
@ ВДУ%! 56
@ Vdu.hf%
Ручка текущего шрифта, как установлено * FONT .
@ ВДУ%! 60
@ Vdu.hr%
Ручка текущего графического отсекающего прямоугольника, как установлено ВДУ 24 .
@ ВДУ%? 64
@ Vdu.ga &
Действие переднего плана текущие графики (ROP2 код), как установлено GCOL .
@ ВДУ%? 65
@ Vdu.gb &
Текущий цвет графики на первом плане, как установлено GCOL .
@ ВДУ%? 66
@ Vdu.gc &
Текущие графики фон действия (ROP2 код), как установлено GCOL .
@ ВДУ%? 67
@ Vdu.gd &
Текущий цвет фона графика, как установлено GCOL .
@ ВДУ%? 68
@ Vdu.ta &
В верхней строке текстового курсора (каретки), как установлено ВДУ 23,0,10 .
@ ВДУ%? 69
@ Vdu.tb &
В нижней строке текстового курсора (каретки), как установлено ВДУ 23,0,11 .
@ ВДУ%? 70
@ Vdu.tc &
Цвет текста на первом плане, как установлено ЦВЕТА .
@ ВДУ%? 71
@ Vdu.td &
Цвет фона текста, как установлено ЦВЕТА .
@ ВДУ%? 72
@ Vdu.ma &
Тока РЕЖИМ номер (255 для режима определяемого пользователем).
@ ВДУ%? 73
@ Vdu.mb &
Цветовая маска для текущего РЕЖИМЕ (количество цветов-1).
@ ВДУ%? 74
@ Vdu.mc &
ВДУ эмуляторные флаги байт (8 бит).
@ ВДУ%? 75
@ Vdu.md &
Счетчик прокрутки в ВДУ 14 режим выгружаемого.
@ ВДУ%! 208
Ширина, в пикселях, 'экрана' BASIC в выходной, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 212
Высота, в пикселях, 'экрана' BASIC в выходной, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 216
Ширина, в пикселях, одного символа ячейки, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 220
Высота в пикселях, одного символа ячейки, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 224
Ширина символов ячейки на принтере, как установлено * PRINTERFONT .
@ ВДУ%! 228
Высота символов ячейки на принтере, как установлено * PRINTERFONT .
@ ВДУ%! 232
Левый край печатной страницы (левое поле), как установлено * ПОЛЯХ .
@ ВДУ%! 236
Правый край печатной страницы, как установлено * ПОЛЯХ .
@ ВДУ%! 240
Верхний край печатной страницы (верхнее поле), как установлено * ПОЛЯХ .
@ ВДУ%! 244
Нижний край печатной страницы, как установлено * ПОЛЯХ .
@ ВДУ%! 248
Толщина в пикселях (твердых) прямых и контурных форм, как установлено АВТ 23,23 .
@ ВДУ%! 252
Ширина, в пикселях, текстового курсора (каретки) как установлено ВДУ 23,0,18 .
@vdu% - 12
Горизонтальная координата определения, где текст будет отображаться на странице при отправке на принтер.
@vdu% - 8
Вертикальная координата определения, где текст будет отображаться на странице при отправке на принтер.
@vdu% - 4
Текущее задание принтера ID (если таковая имеется).
Создание переменных
Переменные могут быть созданы в несколькими способами:В результате оператора присваивания:Count% = 0
имя $ = ""
Значение + 1 =
Делая их местных или индивидуальных переменных в функции или процедуры. В этом случае их значения инициализируются на ноль или пустая строка (в случае PRIVATE, при первом использовании только):DEF PROC1: МЕСТНОЕ Count%, имя $
DEF PROC2: PRIVATE Граф%, имя $
При использовании их в качестве формальных параметров в функции или процедуры:DEF PROC1 (Count%, имя $)
Включая их в списке параметров CALL - заявления:ВЫЗОВ код, Count%, имя $
Назначив им значения с ВХОДА , МЫШЬ , READ или SYS заявление:ВХОД Граф%
МЫШЬ х, у, б
имя ЧТЕНИЕ $
SYS "GetTickCount" сосчитать%
Передавая их в качестве ссылки на функцию или процедуру:PROC1 (Count%)
DEF PROC1 (ВОЗВРАТ C%)
Используя адрес оператора:SYS "GetFileSize", @ hfile% (F%), ^ sizehigh%переменные
имена переменных
Имена переменных могут быть любой длины, ограниченной только максимальной длины строки, и все символы имеют большое значение. Они должны начинаться с буквы (a..z, A..Z) подчеркивание (_) или символом `(CHR $ 96). Остальные символы должны быть a..z, A..Z, 0..9, подчеркивание или `(CHR $ 96). Имена переменных чувствительны к регистру ( 'число', 'Число' и 'NUMBER' являются различными переменными). Имена переменных не должны начинаться с ключевого слова BASIC (с некоторыми исключениями).Используя длинные, значащие имена переменных сделает вашу программу проще для понимания и отладки, и не будет влиять на производительность, пока программа скомпилирована с именами сокращайте хруставариант.
соглашения об именовании
Вам рекомендуется принять следующие соглашения об именах переменных:Локальные переменные (например , переменные с лишь ограниченные возможности, формальные параметры функций и процедур, а также переменные , объявленные в МЕСТНОГО или PRIVATE заявление) должно быть полностью в нижнем регистре (за исключением статических целочисленных переменных ). Например число% , текст $ .
Глобальные переменные (т.е. тех , которые объявлены и используются всей вашей основной программы, и , возможно , получить доступ в функции или процедуры) следует использовать смесь из строчных и прописных букв. Например Нажмите% , Title $ .
Константы (т.е. переменные не установлены на постоянное значение при инициализации и никогда не изменилось снова) должны быть в всех столицах . Например MAXFILES , версия $ .
Следуя этим рекомендациям сделает ваши программы легче понять и избежать проблем , таких как программа обработки прерывания по ошибке доступа к локальной переменной вместо глобальной переменной.типы переменных
BBC BASIC для Windows , использует следующие типы переменных:
Статические переменные
Целые числовые переменные
64-разрядные целые числовые переменные
Byte числовые переменные
Вариант числовые переменные
64-разрядные с плавающей запятой числовые переменные
Строковые переменные
Массивы
сооружения
Псевдопеременных
Системные переменные
Обратите внимание , что в BBC BASIC различные типы переменных полностью независимы. Например, целая переменная список% , цифровая переменная список , строка переменной список $ и массивы список% () , список () и список $ () все совершенно отдельно.Статические переменные
Переменные A% .. Z% включительно, называются статическими переменными . Они представляют собой особый тип целого числовой переменной , которые не сбрасываются заявлений RUN , ЦЕПЬ или СБРОС . Таким образом , эти переменные могут быть полезны для передачи значений между программами или для хранения информации , которая должна быть сохранена , когда остальные переменные очищаются. Они также доступны немного быстрее , чем другие переменные.Кроме того переменные A%, B%, C%, D%, F%, X% и Y% имеют особые случаи применения в ВЫЗОВ и USR подпрограмм, а также L%, O% и Р% имеют особое значение в ассемблере .
Статические переменные хранятся в 32 битах и может содержать любое целое число от -2147483648 до +2147483647.
Целые числовые переменные
Целые числовые переменные имеют имена, которые заканчиваются знаком процента (%). Они хранятся в 32 битах и может содержать любое целое число в диапазоне от -2147483648 до +2147483647. Не нужно объявить переменную как целое число для преимуществ, которые необходимо принять быстрой целочисленной арифметики. Например, FOR ... NEXT петли выполняют при скорости целочисленном или нет управляющей переменной является 'целой переменной' (% тип), так долго, как это имеет целочисленное значение.64-разрядные целые числовые переменные
BBC BASIC для Windows , версии 6.00a или более поздней версии только
64-битное целое числовые переменные имеют имена , которые заканчиваются парой знаков (%%) процентов. Они могут содержать любое целое число в диапазоне от -9223372036854775808 до +9223372036854775807.Byte числовые переменные
Байт числовые переменные имеют имена , которые заканчиваются знаком амперсанд (&). Они хранятся в 8 бит и может содержать любое целое число в диапазоне от 0 до +255 (байт переменные без знака ). Байт переменные являются особенно полезными в качестве структуры членов, так как они могут быть использованы в качестве строительных блоков для создания структуры данных любого размера.Вариант числовые переменные
Вариант числовые переменные не имеют суффикс характер и может содержать либо целые или действительные значения (с плавающей запятой).BBC BASIC для Windows , версии 6.00a или более поздняя версия только
Variant числовые переменные могут содержать либо 64-битное целое значение или 80-разрядный (10-байт) значение с плавающей запятой , состоящий из 64-разрядной мантиссы и 16-разрядную экспоненту , Они имеют диапазон приблизительно ± 3.4E-4932 до ± 1.1E4932 и точность около 19 значимых фигур.
BBC BASIC для Windows , версии 5.95a и ранее только
Variant числовые переменные в двух формах, в зависимости от * Float режима в действие. В * Float 40 режиме они могут содержать либо 32-битное целое значение или 40-разрядный (5 байт) значение с плавающей запятой , состоящий из 32-битной мантиссы и 8-битный показатель степени. Они имеют диапазон приблизительно ± 5.9E-39 до ± 3.4e38 и точность приблизительно 9 значащих цифр.
В * Float 64 режиме они могут содержать либо 32-битное целое значение или 64 - битный (8 байт) значение с плавающей точкой , состоящий из 53-битной мантиссы и 11-разрядную экспоненту. Они имеют диапазон приблизительно ± 2.3E-308 до ± 1.7E308 и точность приблизительно 15 значащих цифр.
Объяснение того , как варианта числовых переменных сохраняются задается в формате данных в памяти раздела.
64-разрядные ( 'двойные') переменные с плавающей точкой
Двойные числовые переменные имеют имена, которые заканчиваются диез (#); они содержат 64 бита (8 байт) значение с плавающей запятой, состоящий из 53-битной мантиссы и 11-разрядную экспоненту. Они имеют диапазон приблизительно ± 2.3E-308 до ± 1.7E308 и точность приблизительно 15 значащих цифр.Строковые переменные
Строковые переменные имеют имена , которые заканчиваются в знак доллара ($). В BBC BASIC для Windows , версии 5.95a или более ранней версии их максимальная длина составляет 65535 символов; в BBC BASIC для Windows , версии 6.00a или более поздней версии их длина ограничена только объемом доступной памяти. Объяснение того , как строковые переменные хранятся задается в формате данных в памяти раздела.Массивы
Массивы вариант числовых, дважды, целыми, байт и строк типов допускается. Все массивы должны иметь такие размеры, перед использованием. Вариант ЦИФРЫ, удваивается, целые числа, байты и строки не могут быть смешаны в многомерном массиве; вы должны использовать один массив для каждого типа переменной вам нужно. Двойной массив обозначается именем, заканчивающимся на диез (#), целое число массива по имени, заканчивающегося в знак процента (% или %%), массив байтов по имени, заканчивающегося в амперсандом (&) и строка массива по имени, заканчивающегося в знак доллара ($).Значение дается, когда объявляется массив является максимальным значением, что индекс может занять. Так как минимальное значение для подстрочный индекс равен нулю, то общее число элементов в этой плоскости равно заданному значению плюс один. Например, двумерный массив, объявленный с:
DIM знаки% (10,5)
имеет в общей сложности 66 элементов (10 + 1 строк по 5 + 1 столбцов).Псевдопеременных
Псевдо-переменные являются ключевыми словами , которые ведут себя как переменные. Они LOMEM , HIMEM , СТР , PTR и TIME / TIME $ . Их значения могут быть записаны (например , время = 0) или чтения (например , T = TIME) в зависимости от контекста. Псевдо-переменные не могут быть использованы в качестве формальных параметров функций или процедур, не могут быть сделаны LOCAL , не может быть использован в качестве переменной контролем FOR заявления, не может быть передан в качестве параметра для ЗВОНИТЕ и не могут быть назначены в ВХОДА , МЫШЬ , READ или SYS заявления.Системные переменные
Системные переменные имеют имена, начинающиеся с символа "@". Имена переменных системы предопределены: вы не можете создать свой собственный. Самая известная переменная система - и единственный в оригинальной версии BBC BASIC - это @%. Эта переменная форматирования управления печати; см описание PRINT заявление для деталей.Другие переменные системы следующие. Они в основном использования при доступе к функциям Windows API , из BASIC (смотрите раздел Доступ к Windows API , для получения дополнительной информации).
имяСтоимость@ HWND%
'Дескриптор окна' для окна Basic в программе (выход)
@ Memhdc%
'Контекст устройства' для экранной памяти BASIC в
@ Prthdc%
'Контекст устройства' для текущего принтера (если таковые имеются)
@ Hcsr%
Ручка для указателя мыши (курсор)
@ HPAL%
Ручка для цветовой палитры
@ Тзд%
Значение MSG (для использования с левой кнопки мыши , по Движению и ПО SYS )
@ WPARAM%
Значение WPARAM (для использования с по щелчку , по Движению и ПО SYS )
@ LPARAM%
Значение LPARAM (для использования с по щелчку , по Движению и ПО SYS )
@ Миди%
MIDI идентификатор устройства (не ноль, если MIDI воспроизведения файла)
@ Ispal%
Логическое которая отлична от нуля, если дисплей палитрой
@ Hfile% (п)
Массив дескрипторов файлов индексируется по номеру канала
@ ВДУ%
Указатель параметров текста и графических BASIC (см ниже)
@ $ CMD
Командная строка программы 'скомпилированных'
@ $ Реж
Каталог (папка), из которого была загружена программа
@ HMDI%
Multiple дескриптор окна интерфейса документа (если таковые имеются)
@ Флаги%
Целое включения флаги управления BASIC в. Старший бит, если он установлен, указывает на то, что существует в ожидании условие побег
@ $ Lib
Каталог (папка), содержащий файлы библиотеки BBC BASIC
@ Вола%
Горизонтальное смещение (в пикселях) между выходным битовой карты и содержимого окна. Должен быть равен нулю или положительным
@ Оу%
Вертикальное смещение (в пикселях) между выходным битовой карты и содержимого окна. Должен быть равен нулю или положительным
@ HWO%
Ручка устройства WAVEOUTPUT
@ Hevent%
Ручка события используется для предотвращения блокировки в последовательных и параллельных операций ввода / вывода
@ $ TMP
Временная директория (папка)
@ $ USR
Каталог документов пользователя (папка)
@vdu {}
Структура , содержащая основные переменные ВДУ
@ Haccel%
Ручка клавиатуры акселератора, если он используется
@ Hwacc%
Дескриптор окна, к которому команды акселераторов клавиатуры должны быть отправлены
@ CMD переменная $
Переменная @ CMD $ позволяет исполняемый файл , созданный с помощью компилирующем утилиты для доступа к командной строке , с которой она была выполнена. @ $ CMD пусто в случае программы запуска из интерактивной среде.@ $ Реж и @ Lib $ переменных
Переменные @ реж $ и @ $ Lib полезны при УСТАНОВИТЕ ИНГ библиотек или при загрузке любых других ресурсов файлов (изображения, файлы данных и т.д.) , необходимые программы. Если вы убедитесь , что эти файлы хранятся либо в библиотечном каталоге или в том же каталоге, что и сама программа , вы можете просто префикс их имена файлов с @ Lib $ или @ реж $ соответственно:УСТАНОВИТЬ @lib $ + "MyLib"
OSCLI "DISPLAY" + @ реж $ + "MYIMAGE"
SYS "PlaySound", @dir $ + "MySound", 0, & 20001
Файлы , указанные таким образом , автоматически включаются в исполняемый файл , созданный компилирующем командой.В @ TMP $ и @ USR $ переменных
Переменные @ TMP $ и @ $ USR полезны при хранении файлов данных. Первый может быть использован для временных файлов , которые могут быть отброшены , как только программа завершена, а вторая для файлов , содержащих информацию , относящуюся к текущему пользователю, например, сохраненным выход из программы. В отличие от @ $ Dir, эти места гарантированно будут доступны для записи (в нормальных условиях).VDU переменные
Переменная @ ВДУ% позволяет получить доступ к значениям ряда внутренних параметров текста и графических BASIC в. Некоторые из наиболее полезных из них перечислены ниже; в общем , вы должны толькопрочитать эти значения (они должны быть написаны с использованием связанных с ними основные положения).Основные переменные VDU могут в качестве альтернативы быть доступны через @vdu {} структуры, как показано ниже:
Стоимостьальтернатива параметр@ ВДУ%! 0
@ Vdu.ox%
Горизонтальная графика происхождения (в графических единицах BBC BASIC), как установлено ПРОИСХОЖДЕНИЯ или ВДУ 29 .
@ ВДУ%! 4
@ Vdu.oy%
Вертикальная графика происхождения (в графических единицах BBC BASIC), как установлено ПРОИСХОЖДЕНИЯ или ВДУ 29 .
@ ВДУ%! 8
@ Vdu.lx%
Горизонтальная координата (в пикселях) последней точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 12
@ Vdu.ly%
Вертикальная координата (в пикселях) последней точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 16
@ Vdu.px%
Горизонтальная координата (в пикселях) предыдущей точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 20
@ Vdu.py%
Вертикальная координата (в пикселях) предыдущей точки "посетили", как установлено MOVE , СЮЖЕТ и т.д.
@ ВДУ%! 24
@ Vdu.tl%
Левый край текста видового экрана (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 28
@ Vdu.tr%
Правый край текста видового экрана (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 32
@ Vdu.tt%
В верхней части текстового окна просмотра (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 36
@ Vdu.tb%
В нижней части окна просмотра текста (в пикселях), как установлено ВДУ 28 .
@ ВДУ%! 40
@ Vdu.dx%
Ширина графика "точка", в пикселях.
@ ВДУ%! 44
@ Vdu.dy%
Высота графика "точка", в пикселях.
@ ВДУ%! 48
@ Vdu.cx%
Горизонтальное положение текстового курсора в пикселях.
@ ВДУ%! 52
@ Vdu.cy%
Вертикальное положение текстового курсора в пикселях.
@ ВДУ%! 56
@ Vdu.hf%
Ручка текущего шрифта, как установлено * FONT .
@ ВДУ%! 60
@ Vdu.hr%
Ручка текущего графического отсекающего прямоугольника, как установлено ВДУ 24 .
@ ВДУ%? 64
@ Vdu.ga &
Действие переднего плана текущие графики (ROP2 код), как установлено GCOL .
@ ВДУ%? 65
@ Vdu.gb &
Текущий цвет графики на первом плане, как установлено GCOL .
@ ВДУ%? 66
@ Vdu.gc &
Текущие графики фон действия (ROP2 код), как установлено GCOL .
@ ВДУ%? 67
@ Vdu.gd &
Текущий цвет фона графика, как установлено GCOL .
@ ВДУ%? 68
@ Vdu.ta &
В верхней строке текстового курсора (каретки), как установлено ВДУ 23,0,10 .
@ ВДУ%? 69
@ Vdu.tb &
В нижней строке текстового курсора (каретки), как установлено ВДУ 23,0,11 .
@ ВДУ%? 70
@ Vdu.tc &
Цвет текста на первом плане, как установлено ЦВЕТА .
@ ВДУ%? 71
@ Vdu.td &
Цвет фона текста, как установлено ЦВЕТА .
@ ВДУ%? 72
@ Vdu.ma &
Тока РЕЖИМ номер (255 для режима определяемого пользователем).
@ ВДУ%? 73
@ Vdu.mb &
Цветовая маска для текущего РЕЖИМЕ (количество цветов-1).
@ ВДУ%? 74
@ Vdu.mc &
ВДУ эмуляторные флаги байт (8 бит).
@ ВДУ%? 75
@ Vdu.md &
Счетчик прокрутки в ВДУ 14 режим выгружаемого.
@ ВДУ%! 208
Ширина, в пикселях, 'экрана' BASIC в выходной, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 212
Высота, в пикселях, 'экрана' BASIC в выходной, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 216
Ширина, в пикселях, одного символа ячейки, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 220
Высота в пикселях, одного символа ячейки, как установлено РЕЖИМЕ или ВДУ 23,22 .
@ ВДУ%! 224
Ширина символов ячейки на принтере, как установлено * PRINTERFONT .
@ ВДУ%! 228
Высота символов ячейки на принтере, как установлено * PRINTERFONT .
@ ВДУ%! 232
Левый край печатной страницы (левое поле), как установлено * ПОЛЯХ .
@ ВДУ%! 236
Правый край печатной страницы, как установлено * ПОЛЯХ .
@ ВДУ%! 240
Верхний край печатной страницы (верхнее поле), как установлено * ПОЛЯХ .
@ ВДУ%! 244
Нижний край печатной страницы, как установлено * ПОЛЯХ .
@ ВДУ%! 248
Толщина в пикселях (твердых) прямых и контурных форм, как установлено АВТ 23,23 .
@ ВДУ%! 252
Ширина, в пикселях, текстового курсора (каретки) как установлено ВДУ 23,0,18 .
@vdu% - 12
Горизонтальная координата определения, где текст будет отображаться на странице при отправке на принтер.
@vdu% - 8
Вертикальная координата определения, где текст будет отображаться на странице при отправке на принтер.
@vdu% - 4
Текущее задание принтера ID (если таковая имеется).
Создание переменных
Переменные могут быть созданы в несколькими способами:В результате оператора присваивания:Count% = 0
имя $ = ""
Значение + 1 =
Делая их местных или индивидуальных переменных в функции или процедуры. В этом случае их значения инициализируются на ноль или пустая строка (в случае PRIVATE, при первом использовании только):DEF PROC1: МЕСТНОЕ Count%, имя $
DEF PROC2: PRIVATE Граф%, имя $
При использовании их в качестве формальных параметров в функции или процедуры:DEF PROC1 (Count%, имя $)
Включая их в списке параметров CALL - заявления:ВЫЗОВ код, Count%, имя $
Назначив им значения с ВХОДА , МЫШЬ , READ или SYS заявление:ВХОД Граф%
МЫШЬ х, у, б
имя ЧТЕНИЕ $
SYS "GetTickCount" сосчитать%
Передавая их в качестве ссылки на функцию или процедуру:PROC1 (Count%)
DEF PROC1 (ВОЗВРАТ C%)
Используя адрес оператора:SYS "GetFileSize", @ hfile% (F%), ^ sizehigh%

Написать:
02:49
1874
13:06
Да, интересный язык программирования, напомнило мне старые добрые времена, когда на Спектруме программировали.
Кстати, сейчас этот Бейсик может стать популарным, как платформа для нижнего и верхнего уровня
программирования микроконтроллеров.