|
Часть 8
Глава 5
Словарь-справочник ТУРБО-БЕЙСИКА
200 с лишним команд ТУРБО-БЕЙСИКА можно сгруппировать
соответственно их синтаксическому классу в функции, операторы,
системные переменные и метаоператоры.
Функции (заранее определенные в отличие от определяемых
пользователем) возвращают значение и потому должны использоваться
внутри выражений. Для большинства из них требуются один или более
аргументов; например:
t=cos(3.1) -числовая функция с 1 числовым аргументом
t$=left$("cat",2) -строчная функция с 1 строчным и одним
числовым аргументами
Операторы-это неделимые строительные блоки, образующие
программы. Операторы должны появлятся в строке, занимая ее
целиком, или с разделяющими смежные операторы двоеточиями,
например:
CIRCLE (160,100),50 -чертить окружность
CALL Mysub(x,y,z) -вызвать процедуру
a=a+1 -присвоение (см. оператор LET)
Системные переменные являются заранее определенными
идентификаторами для доступа и управления определенной системой
информации, например:
a$=DATE$ -считать системную дату
TIME$="00:00" -установить системное время
Метаоператоры представляют собой директивы компилятору. Если
быть точными, они не являются частью языка, но вместо этого
работают на другом уровне, управляя поведением компилятора,
например:
$INCLUDE "module1.tbs"-загрузка и обработка включаемого файла
$STACK &H1000 -см. размер стека
Метаоператоры, подобно субменю опций компилятора, управляют
компилятором во время компиляции, а не компьютером во время
прогона. Метаоператорам предшествует знак доллара ($) для отличия
их от обычных операторов. В строке может быть только один
метаоператор и, в отличии от некоторых других компилированных
Бейсиков, они не помещаются внутрь REMARKS (замечаний).
Формат справочника
-------------------
Каждый вход справочника содержит описание, синтаксис, общие
замечания и пример использования оператора, функции или
процедуры. Где это приемлемо, связанные входы снабжены
перекресными ссылками, оговорены любые ограничения применения, а
также отмечены любые различия в использовании их в Турбо-Бей-
сике и интерпретаторе Бейсика.
Ниже приведены соглашения, касающиеся синтаксического
описания, используемого в алфавитном порядке команд.
Числовое выражения
-------------------
Числовая константа, числовая функция или числовая переменная,
либо их комбинация, в которой используются арифметические,
логические операторы и операторы отношения. Иногда
специфицируется тип числового выражения, например целое
выражение:
16
X
16^X
SIN(3.14159)
SIN(X/(16*X))
Строковое выражение
--------------------
Строковая константа, строковая переменная или строковая
функция, либо их комбинация, опционально включающая в себя
оператор сцепления, знак плюс (+). Например:
"CAT"
a$+"CAT"
LEFT$(a$+"CAT$",4)
Спецификация файла
-------------------
Строчное выражение описывающее имя файла MS-DOS (восемь литер
с опциональным трехлитерным расширением, которому предшествует
точка, регистр безразличен), возможно включающее в себя
спецификацию привода и/или прохода. За исключением случаев
снабженных замечаниями, имена файлов должны выражаться как
строчные переменные, либо заключаться в двойные кавычки,
например:
"MAYFIRST.BAS"
"turbobas\myfirst.bas"
"a:\turbobas\myfirst.bas"
Проход
-------
Строчное выражение, описывающее законный субсправочник на
зарегистрированном приводе. Например:
"\TURBOBAS"
"GAMES"
LPR
----
"Точка последней ссылки" (LPR) используется как неявное
координатное значение в некоторых графических операциях и
устанавливается большинством операторов графики .
Метка
------
Метка представляет собой либо алфавитно-цифровую метку, либо
номер строки, идентифицирующие программную строку. Номера строк и
метки более или менее взаимозаменяемы в синтаксисе Турбо-Бейсика,
за исключением того, что метки должны появляться в строке сами по
себе, как таковые.
Типографические особенности
----------------------------
Курсивом указывают зоны команд, подлежащие заполнению
специальной информацией области применения, например:
REG register,value
Текстом в литерах верхнего регистра обозначается часть
команды, которая должна присутствовать дословно, например:
RESUME NEXT
Квадратные скобки ([]) обозначают, что заключенная в них
информация является опциональной, например:
OPEN filispec as [#]filenum
означает, что вы можете включать знак номера (#) перед номером
файла в операторе OPEN (открыть), либо отказаться от него по
вашему выбору. Поэтому законны обе следущие команды:
OPEN "cust.dta" AS 1
OPEN "cust.dta" AS #1
Фигурными скобками ({}) указывается выбор двух или более
опций, одна из которых должна использоваться обязательно. Опции
разделяются вертикальной чертой. Например:
KEY {on!off}
означает, что законны оба заявления KEY ON и KEY OFF, а само по
себе KEY незаконно.
Многоточием (...)отмечается,что часть команды может повторится
столько раз,сколько необходимо.Например:
READ variable[,variable]...
означает, что одним оператором READ может отрабатываться
множество переменных, разделяемых запятыми:
READ a$
READ a$,b$,a,b,c
Три вертикально расположенные точки указывают на пропуск одной
или более строк программного текста:
FOR n=1 to 10
.
.
.
NEXT n
Метаоператор $COM
------------------
Функция $COM распределяет пространство для приемного
------- буфера последовательного входного устройства.
Синтаксис $COM n size
---------
Замечания n указывает коммуникационный адаптер (1 или 2), а size
--------- (размер) есть целая константа, определяющая емкость
буфера для этого адаптера (от 0 до 32767). По умолчанию-256.
Значение по умолчанию может устанавливаться и храниться в меню
опций. Значения по умолчанию могут изменяться метаоператорами в
программе.
Ограничения Размер буфера специфицируемый в операторе
----------- $COM, должен находиться в диапазоне от 0
до 32767. Интерпретаторный Бейсик будет располагать буфер одного
и того же размера для обоих коммуникационных входных устройств,
если они существуют. В Турбо-Бейсике размеры этих двух буферов
устанавливаются независимо.
Различия При возбуждении в интерпретаторном Бейсике
-------- эта функциональность доступна только через
параметры камандной строки.
Пример: 'оператор $COM используется для изменения
'пространства по умолчанию, распределяемого
'для буферов последовательных входных
'устройств. Настроить подпрограмму для
'обработки COM- ввода
$COM 1 1024 'настраивается буфер ввода 1 К
ON COM(1) GOSUB получить комввод
COM(1) ON 'включить обработку COM ввода
OPEN "COM1" AS #1 'oткрыть переменную файла как COM1
PRINT "Нажмите любую клавищу для завершения программы"
'пока клавиша еще не нажата
WHILE NOT INSTAT
LOCATE 2.1
PRINT TIME$ 'отобразить время
WEND
END 'конец программы
ПолучитьКомввод : 'обработать COM-порт прерывание
'считать ввод из буфера COM-порта
INPUT #1,КомПортВвод (заголовок %)
RETURN
КонецВвода: 'конец COM-порт ввода
PRINT "Достигнут конец ввода"
END 'конец программы
Метаоператор $DYNAMIC
----------------------
Функция $DYNAMIC заявляет ,что размещение массива по
------- умолчанию должно быть динамическим.
Синтаксис $DYNAMIC
---------
Замечания Метаоператор $DYNAMIC не имеет аргументов и
--------- заявляет, что тип размещения массивов по умолчанию
должен быть динамическим. Пространство для динамических массивов
распределяется во время прогона. Для ликвидации массива
используйте оператор ERASE. Динамические массивы дают более
эфективное использование памяти. Массивы можно заявлять как
динамические с помощью ключевого слова DYNAMIC или аргументов
выражениа в операторе DIM. Массивы с переменными размера- ми,
которые заявляются как общие или локальные в процедуре, либо
функции, всегда динамические.
СМ.также DIM
-------- ERASE
FRE
$STATIC
Пример 'настроить обработчик ошибок
------- ON ERROR GOTO ОшибокОбработчик
'отобразить память,имеющуюся в массивном пространстве
PRINT FRE(-1)
DIM БольшойМассив(10000) 'заявить дин.массив
БольшойМассив(6666)=66
PRINT FRE(-1)
PRINT БольшойМассив(6666)
END 'конец прогона
Ошибкообработчик:
PRINT "ошибка типа " ERR;
PRINT "произошла по адресу" ERADR
END
Метаоператор $EVENT
--------------------
Функция $EVEN управляет генерированием кода отслеживания
------- событий.
Синтаксис $EVEN {ON!OFF}
---------
Замечания Если ваша программа содержит какое-либо
--------- средство захвата событий определенного сорта
(например, ON KEY, ON COM), то $EVENT по умолчанию ON (вкл.), что
приводит к генерированию компилятором кода проверки события между
всеми операторами вашей прграммы. Если в программе не
предусмотрено отслеживание, то $EVENT находится в состоянии OFF
(выкл.) и код события не генерируется.
$EVENT дает вам возможность управлять тем, какие части
программы будут проходить без проверки событий. Если существует
какая-то зона, где максимальная скорость важнее ответа на
случайное событие, то заключайте эту часть программного кода в
скобки, образуемые метаоператорами $EVENT OFF и $EVENT ON.
Пример: 'пример события
ON TIMER(1) gosub ПотеряВремени
timer on
print "Медленный цикл"
x=таймер
for i=1 to 10000
i=i+i-i
next i
y=таймер
print "Время цикла есть" y-x
$event off
print "быстрый цикл"
x=таймер
for i=1 to 10000
i=i+i-i
next i
y=таймер
print "время цикла естьЭ" y-x
end
ПотеряВремени:
for j=1 to 1000:j=j+j-j:next j:print
return
Метаоператоры $IF/$ELSE/$ENDIF
------------------------------
Функция $IF,$ELSE и $ENDIF определяют части программы,
------- подлежащие компилированию или
от него уклоняющиеся (часто этот способ называют условным
компилированием).
Синтаксис $IF константа
--------- .
.операторы
.
[$else
.
.операторы]
.
$ENDIF
Замечания Константа-это именованная константа или
--------- постоянное значение. Если константа не нулевая
(TRUE), то операторы между $IF и $ELSE компилируются, а операторы
между $ELSE и $ENDIF не компилируются. Если Константа нулевая
(FALSE), то операторы между $IF и $ELSE игнорируются, а
находящиеся между $ELSE и $ENDIF компилируюся. $ELSE
устанавливается опционально, но $ENDIF требуется всегда.
Операторы условной компиляции могут вкладываться до уровня
глубиной 256.
Пример %ЦветнойЭкран=1 'установка именованной константы на
'ненулевое значение указывает работу
'на цветном экране, установка нулевого значения указы -
'вает работу в монохромной системе
$if %ЦветнойЭкран
def seg=&HB800 'адрес памяти графического экрана
$else
def seg=&HB000 'адрес памяти монохромного экрана
for i%=0 to 4000 step 2
poke i%,asc("A") 'заполнить экран буквами "A"
next i%
'хранить все 4000 байтов видео-прогона
bsave "$if.dta",0,4000
end
Метаоператор $INCLUDE
---------------------
Функция $INCLUDE включает текстовый файл
-------
Синтаксис $INCLUDE файласпец.литерал
---------
Замечания Используйте $INCLUDE для компилирования текста
--------- другого файла вместе с текущим файлом.
ФайлаСпец.литерал это строчная константа, а представляемый его
файл должен следовать соглашениям DOS об имени файла и в то же
время представлять собой исходный файл Турбо Бейсика. Если для
включенного файла не специфицируется его имя, предполагается
расширение .BAS.
Механизм $INCLUDE вызывает трактовку компилятором
включаемого файла таким образом, как если бы он физически
существовал в первоначальном тексте в данной точке. Это дает вам
возможность разрывать вашу программу на управляемые куски.
Принцип рабочий файл/главный файл Турбо Бейсика относится к
$INCLUDE. В иллюстративных целях рассмотрим файлы CALCAREA.BAS и
CONST.BAS:
Файл CALCAREA.BAS
print "программа вычисления площади круга"
print "если бы вы находите эту программу полезной"
print "пожалуйста вышлите 3500 долларов"
print
print "Франк Борланд"
print "Скатте Валлей,СА95066"
print "-------------------------------------------------"
$include "CONST.BAS"
input "ввести радиус",r
print "площадь ="pi*r*r
Файл CONST.BAS
'общецелевые константы
pi=ANT(1)*4
%истинно=-1
%ложно=0
%максX=319
%максY=199
Чтобы компилировать эту программу CALCAREA должен быть сделан
"главным файлом", посколько это файл с оператором $INCLUDE.
Рабочий файл двигается туда и обратно по отношению к любому
другому, в зависимости от нужд редактирования (т.е если имеет
ошибки). Вне зависимости от текущего рабочего фай- ла,
компилирование всегда начинается с CALCAREA (главного файла).
(Более детально см. в разделе "Главное меню" гл.3).
Когда компилятор Турбо Бейсика встречает метаоператор $INCLUDE
в строке 7 файла CALCAREA, он загружает и начинает считывать из
CONST.BAS. Когда этот код исчерпывается, компилятор захватывает
оставленное им место в первоначальной программе.
$INCLUDE может вкладываться на глубину 5; т.е включаемый файл
может иметь свои $INCLUDE.
Пример 'хранить следущее в файле "example.inc"
------ sub СкажиАлло 'процедура вывод
print "Алло"
end sub
'далее следунт главная программа
$include "example.inc" 'включить исходный файл
call СкажиАлло
end
Метаоператор $INLINE
---------------------
Функция $INLINE заявляет внутристрочный машинный
код во внутристрочной субпроцедуре.
Синтаксис $INLINE [Список байтов][файлспец.литерал]
---------
Замечания $INLINE может быть только в пределах тела
--------- внутристрочной субпроцедуры.
Список байтов - это последовательность целых значений в
диапазоне от 0 до 255, подлежащих кодированию непосредственно в
обьектном коде в данной точке.
ФайлСпец.литерал - это имя файла,который содержит код, в
который вставляется внутристрочная. Этот код должен быть
переопределяем, а также должен защищать и восстанавливать
следующие регистры: стековый сегмент(SS), стековый указатель
(SP), базовый указатель (BP), сегмент данных (DS). Внутрист-
рочный код может иметь ссылку на пораметры с использованием
относительной адресации BP. Более подробная информация содержится
в приложении А "Числовые соображения" и приложении С "Интерфейс
языка ассемблера".
Пример sub визг inline
'$inline вызывает выдачу визга звуковым излучателем
$inline &HBA,&H00,&H07,&HE4,&H61,&H24,
$inline &HFC,&H34,&H02,&HE6,&H61,&HB9,
$inline &H40,&H01,&HE@,&HFE,&H4A,&H74
$inline &H02,&HF2
end sub
call визг
end
Метаоператор $SEGMENT
---------------------
Функция $SEGMENT заявляет новый кодовый сегмент.
--------
Синтаксис $SEGMENT
---------
Замечания Используйте "безаргументные" метаоператоры
--------- $SEGMENT для разрыва вашей исходной программы,
когда компилятор сообщает, что превышено ограничение 64К для
кодового сегмента: ERROR 409 segment overflow press
|