|
Часть 9
Оператор CALL INTERRUPT
-----------------------
Функция CALL INTERRUPT вызывает системное прерывание
-------
Синтаксис CALL INTERRUPT n
---------
Замечания Целым выражением n представляется прерывание для
--------- вызова в диапазоне от 0 до 255. Как раз перед
получением управления обработчиком прерываний регистры процессора
загружаются значениями из буфера машинных регистров. При
возврате, осуществляемом обработчиком прерываний, буфер принимает
значения из процессорных регистров. В любое данное время буфер
содержит состояние регистров процессора в том виде, в котором
находились эти регистры при компилировании самого последнего
внешнего вызова или оператора REG.
В справочном руководстве по технике DOS содержится полная
информация о многих функциях, доступных через механизм CALL
INTERRUPT. Программист ответственнен за защиту регистров
стекового сегмента (SS) и стекового указателя (SP). Ограничения
Перед исполнением оператора CALL INTERRUPT подходящие регистры
центрального процессора должны быть возбуждены через оператор
REG. После исполнения оператора CALL INTERRUPT к значениям
процессорных регистров должен быть обеспечен доступ через функцию
REG.
см также CALL ABSOLUTE
REG
Пример: 'call interrupt исполняет обслуживание DOS прерываний
$include "regnames.inc"
reg %ax &H0200
'ah=02 шестнадцатиричная функция станд. DOS-вывода
'литерала
reg %ox,reg(%ox)and&HFF02
'DL=02 шестнадцатиричное DH остается тем же
'DL:=литера для вывода
call interrupt &H21 'вызов прерывания 21
Функция CDBL
------------
Функция CDBL преобразует число в формат двойной точности
-------
Синтаксис y=CDBL(числовое выражение)
---------
Замечания CDBL преобразует числовыю переменную или
--------- числовое выражение в формат двойной точности.
Используйте CDBL для исключения случаев переполнения целых в
выражениях, где комбинируются целые операнды и операнды с
плавающей точкой, например: y#=(z%+x%)/a#.
Это выражение будет приводить к переполнению, если (z%+x%)
больше 32767. Чтобы избежать этого, используйте CDBL для
принудительного преобразования одной из целых переменных в форму
двойной точности. Это вызовет оценку всего выражения в двойной
точности.
y=(CDBL(z%)+X%)/a#
Ограничения Диапазон выражения, подаваемого в CDBL должен
----------- находится в пределах законного диапазона для
числа двойной точности.
см. также CINT
CLNG
CSNG
Пример: 'CDBL полезен для предотвращения ошибок периода прогона
x%=2000
y%=2000
z#=cdbl(x%)*y%
print x%,y%,z#
end
Функция CEIL
------------
Функция CEIL возвращает наименьшее целое, которое больше
------- или равно аргументу
Синтаксис y=CEIL(числовое выражение)
---------
Замечания Функция CEIL преобразует числовыю переменную
--------- или выражение в целое, возвращая наименьшее
целое, которое больше или равно аргументу.
Различия Этой функции в Интерпретаторном Бейсике нет.
--------
см. также CINT
FIX
INT
Пример: for i!=-2.5 to 2.5 step 0.5
print using "CEIL-значение ### есть ###":i!,ceil(i!)
next i!
end
Оператор CHAIN
--------------
Функция CHAIN возбуждает модуль цепочек Турбо Бейсика
------- (создаваемой как .TBC или .EXE-файл)
Синтаксис CHAIN файласпец
---------
Замечания Файласпец-это строчное выражение, которое
--------- следует стандартным DOS-соглашениям об
наименовании файлов, и представляет модуль цепочек Турбо Бейсика
(расширение .TBC). Если расширение опускается, предполагается
.TBC. Поэтому, если вы хотите специфицировать .EXE-файл, к имени
файла необходимо добавить .EXE. Переменные перечисляемые как
COMMON (общие), подаются и текущей программой, и программой
назначения в программу назначения.
В фазе тестирования вызывающая программа должна
компилироваться в .EXE -файл, так как вы не можете реализовать
цепочку из самого Турбо- Бейсика. Вызываемая программа должна
компилироваться на диск как модуль цепочек (.EXE или .TBC-файл) .
Если аргументы в операторе COMMON в вызывающей и вызываемой
программах не совпадают (например, переменные с плавающей точкой
в одном месте и целые в другом), возникает ошибка периода
прогона. Турбо-Бейсик не поддерживает опции CHAIN
Интерпретаторного Бейсика, ориентированные на нумерацию строк,
включая DELETE (стереть), MERGE (соединить) и CHAIN (цепочка)
номер строки. Поскольку вы не можете специфицировать номер строки
в модуле цепочек назначения, исполнение начинатися всегда от
начала. При трансляции обработанной CHAIN системы программ
Интерпретаторного Бейсика на Турбо-Бейсик, вы можете обнаружить,
что расширенное использование памяти Турбо-Бейсиком позволяет
консолидировать отдельные модули в единую программу, исключая
необходимость реализации цепочек.
Ограничения Образование цепочек возможно, только когда
----------- программа используется из DOS; т.е. из
.EXE-файла. MERGE, DELETE, ALL и CHAIN по номеру строки не
поддерживаются.
Различия В Турбо-Бейсике образование цепочек делается из
-------- одной компилирующей программы в другую, которая
уже компилирована в .TBC или .EXE-файл.
см. также COMMON
Пример: 'рассмотрим PROG1 ,которая образует цепочку к PROG2:
prog1.bas
'заявить переменные, подлежащие подаче в организуемую
'цепочкой программу: скалярные переменные единичной
'точности a и b и целый массив с%
dim c%(3000)
a=65:b=13:c%(2000)=12
common a,b,c%(1)
'специфицировать #размеров в массиве
chain "prog2"
'заявить переменные, подлежащие приему из возбуждающей
'программы. Они должны быть в том же порядке, иметь
'тот же тип, но не обязательно то же имя
common x,y,z%(2000)
когда prog1.exe возбуждается из DOS, она будет
автоматически вводить модуль prog2.tbc и исполнять его,
распечатывая значения, назначенные в prog1. Когда prog2
оканчивается, возврат осуществляется в DOS, а не в prog1.
Оператор CHDIR
--------------
Функция CHDIR изменяет текущий справочник (DOS-команда
CHDIR или CD)
Синтаксис CHDIR проход
---------
Замечания Проход-это строчное выражение, соответствующее
DOS -соглашениям о проходах (описанных в разделе
"Файлы" глава 4).
Если проход не указывает какой-то законный справочник,
возникает ошибка 76 периода прогона, "Проход не найден". Оператор
CHDIR изменяет текущий (задействованный по умолчанию справочник).
Это аналогично действию команды CHDIR из DOS, за исключением
того, что невозможна аббревиатура, подобная CD. Прогоном
программы, которая меняет справочник, из Турбо-Бейсика также
меняет задействованный справочник Турбо-Бейсика.
Пример: INPUT "Новый справочник :",Проход$
CHDIR Проход$
end
Функция CHR$
------------
Функция CHR$ преобразует ASCII-код в однолитерную строку
-------
Синтаксис s$=CHR$(целое выражение)
---------
Замечания CHR$ возвращает однолитерную строку,единственная
--------- литера которой имеет целое выражение в
ASCII-коде со значением от 0 до 255. CHR$ дополняет функцию ASC,
которая возвращает ASCII -код первой литеры строки. CHR$ удобна
для создания литер, которые трудно ввести с клавиатуры, таких как
графические литеры экранного вывода и управляющие
последовательности для вывода на печать. Значение целого
выражения, подаваемое в CHR$, должно лежать в диапазоне от 0 до
255. Использование аргумента вне этого диапазона вызывает ошибку
5 периода прогона, вызов незаконной функции.
см. также ASC
Пример: 'CHR$ отображает на экране литерный набор ASCII
for i%=0 to 255
print using "i":chr$(i%):
'отобразить ascii литеру ,представляемую i%
next i%
end
Функция CINT
------------
Функция CINT преобразует свой аргумент в целое
-------
Синтаксис y=cint(числовое выражение)
---------
Замечания Функция CINT преобразует числовую переменную
--------- или выражение в целое, округляя дробную часть
числового выражения. Если числовое выражение находится вне
диапазона от -32768 до 32767, то возникает ошибка переполнения
(ошибка 6 периода прогона). Это преобразование выполняется
косвенным путем, посредством назначения целой переменной или
вызовом процедуры, либо функции, которая принимает целый
аргумент.
Различия В отличии от Интерпретаторного Бейсика, Турбо-
-------- Бейсик не всегда округляет дробную часть числа в
сторону увеличения. Если дробная часть числа равна 0.5,
округление осуществляется в сторону четного числа.
см. также CDBL
CEIL
CLNG
CSNG
Пример: for i!=0.0 to 5.0 step 0.2
print using "cint числа #.#=#":i!,cint(i!)
next i!
end
Оператор CIRCLE
---------------
Функция CIRCLE обеспечивает вычерчивание окружности или
------- части окружности.
Синтаксис CIRCLE (x,y),радиус[,цвет[,начало,конец[,вид]]]
---------
Замечания (x,y)-координаты центра окружности, которые
--------- могут специфицироваться в абсолютной или
относительной форме (с использованием STEP.). (Более детальную
информацию об абсолютных и относительных координатах см. в
разделе о графике Главы 3 ).
Радиус -это числовое выражение, задающее размер окружности.
Цвет - целое выражение, определяющее цвет окружности.
Приемлемыми значениями являются 0-3 в графике средней разрешающей
способности (по умолчанию - 3) и 0 - 1 в графике с высокой
разрешающей способностью (по умолчанию - 1). Цветом по умолчанию
является наивысший возможный цвет того режима, в котором вы
находитесь. Использование цветового аргумента вне этих диапазонов
дает ошибку 5 периода прогона, вызов незаконной функции. (Более
подробную информацию о выборе цветов см. в описании оператора
COLOR).
Начало и конец являются опциональными числовыми параметрами,
определяющими начальную и концевую точки подлежащей вычерчиванию
дуги, которые специфицируются в радианах (см. описание радианов в
описании оператора ATN). Используйте их, когда желаете вычертить
только часть окружности. Если начало и конец опускаются,
вычерчивается целая окружность . Например:
SCREEN 1:pi=4*atn(1)
CIRCLE (160,100),50,3,0,pi
обеспечивает вычерчивание белого полукруга от 0 радиан до п
радиан.
Отрицательные значения начало и конец вызывают вычерчивание
торто-образных; т.е. кромки дуги автоматически соединяются с
центральной точкой. Например :
SCREEN 1:pi=4*atn(1)
CIRCLE (160,100)50,,-pi/4,-pi/2
обеспечивает вычерчивание 45-градусного куска торта от п/4
радиан до п/2 рад. Чтобы начать клин на положительной X-оси,
используется отрицательное число, несколько меньше нуля, а не
просто -0 (например ..0001).
Вид - это числовое выражение, управляюшее тем, насколько
круглой или овальной будет окружность. По умолчанию в средней
разрешающей способности его значение равно 5/6 (0.833333), а в
зависимости от вышей конкретной комбинации дисплейной
платы/видео-монитора, вам может потребоваться повозиться с этими
значениями (либо отрегулировать ваш монитор) для получения
круглых окружностей. LPR после вычерчмвания окружности находится
в ее центре.
Пример: 'Эта программа демонстрирует возможности CIRCLE
'изменение местоположения радиуса, цвета, видового
'отношения. С помощью CIRCLE можно также вычерчивать
'дуги и клинья, полезные для игр "пак-ман"
pi#=4*atn(1)
screen 1
for радиус%=1 to 20 'увеличивать размер окружности
колер%=радиус%mod4 'рассчитать цвет изображения
circle (250,150),радиус%,колер% 'центр в 250,150
next радиус%
circle (220,60),50,1,-(pi#*5/4),-pi#*3/4) 'тело
'пак-ман и глаз
circle step (-5,-25),5,1
радиус%=50
'эллипс может давать иллюзию сферы ...
for вид=0 to 2.0 step 0.09
circle (90,100),радиус%,,,,вид
next вид
end
Оператор CLEAR
--------------
Функция CLEAR очищает переменную память
-------
Синтаксис CLEAR
---------
Замечания CLEAR - это команда без параметров, которая
--------- устанавливает числовые переменные в ноль, а
строчные переменные в нуль-строку. CLEAR выключает любое
отслеживание событий, которое находтся во включенном состоянии
(такие как музыка, которая может быть задействована оператором
PLAY) и повторно возбуждает массивную и строчную память.
Примечание: Оператор CLEAR внутри цикла будет очищать
счетчик, вызывая бесконечный цикл.
Для выборочного освобождения массивов в памяти пользуйтесь
оператором ERASE.
Ограничения Турбо-Бейсик не поддерживает динамическую
----------- установку стека и сегментов данных; в этом
операторе нет поэтому соответствующих параметров.
Различия Различия между операторами CLEAR Интерпрета-
торного Бейсика и Турбо-Бейсика происходит,
главным образом , из различий между компиляторами и
интерпретаторами. Интерпретаторный Бейсик дает вам возможность
динамически устанавливать пространство стека и данных там, где
пространство стека и данных Турбо-Бейсика фиксируется во время
компилирования.
см. также ERASE
$STACK
Пример: 'эта программа демонстрирует что может делать CLEAR
dim массив$(1) 'заявить массив строк
play "mb l1 efgabcdef" 'играть музыку в фоне
on pen gosub ПераДержатель 'настроить отслеживание
'светового пера
on strig(0) gosub КнопкиДержатель 'настроить отсле-
'живатель ручки управления
'возбудить строчные данные
Массив$(0)="это строка в Массиве$(0)"
Массив$(1)="это строка в Массиве$(1)"
'отобразить строчные данные
print using "Массивный элемент 1:&":Mассив;(0)
print using "Массивный элемент 2&":Массив$(1)
print
input "нажмите (ввод)для исполнения оператора
CLEAR": Пусто$
clear 'делается очистка
print
'существующие строчные данные более не отображаются
print using "Массивный элемент 1:&":Массив$(0)
print using "Массивный элемент 2:&":Массив$(1)
print
print "строчные переменные теперь пусты"
end
ПераДержатель:'определить пустую метку для ловушки
'светового пера
return
КнопкиДержатель :'определить пустую метку для
'ручки управления
return
Функция CLNG
------------
Функция CLNG обеспечивает преобразование в длинное целое
--------
Синтаксис y=CLNG(числовое выражение)
---------
Замечания CLNG преобразует числовую переменную или выра-
--------- жение в длинное целое посредством округления
дробной части ее аргумента. Если числовое выражение находится вне
диапазона от -2в степени 31 до (2 в степени 31)-1 (приблизительно
от -2 до 2 биллионов), возникает ошибка 6 периода прогона,
Переполнение.
Ограничения Числовое выражение, подаваемое в функцию CLNG
----------- должно находится в законном диапазоне длинных
целых.
Различия Этой функции нет в больщинстве Интерпре-
-------- таторных Бейсиков, поскольку они не поддерживают
длинные целые.
см. также CDBL
CINT
CSNG
FIX
INT
Пример: print clng(2.0E9),clng(33.4),clng(-121.9),clng(100251.6)
------ end
Функция CLOSE
-------------
Функция CLOSE закрывает файл или устройство
-------
Синтаксис CLOSE[[#]файлнам[,[#]файлнам]...]
---------
Замечания CLOSE оканчивает взаимосвязь номера файла и
--------- файла, установленного в операторе OPEN
(открыть), и закнчивает ввод/вывод в этот файл. Буфер файла
наполняется и, если файлнам представляет файл, а не устройство,
командой DOS CLOSE выполняется на нем для обновления справочника.
Хороша привычка периодически закрывать файлы, которыe
записываются программой. Это дает уверенность в том, что
записывается вся информация, а вход этого файла в справочнике
операционной системы правильно обновляется в случае последующего
сбоя питания или какого-то другого затруднения. CLOSE без
спецификации номера файла закрывает все открытые устройства и
файлы (то же самое делают RESET, END, STOP и RUN).
см.также END
OPEN
STOP
Пример:
'открыть файл назначенный печатающему устройству
open "lpt1:" as#1
print#1,"это тест"
close#1
open "закрыть Ф.ОДН" as#1
open "закрыть Ф.ДВА" as#2
print#1 "это тест"
print#2 "это тест"
close
end
Оператор CLS
------------
Функция CLS очищает экран
-------
Синтаксис В текстовом режиме CLS очишает экран до цвета
--------- фона и обеспечивает позиционирование курсора в
исходном положении в левом верхнем углу (ряд 1, колонка 1). CLS в
графическом режиме очищает экран до фонового цвета. LPR
оказывается в центре экрана, либо (160,100), либо (320,100), в
зависимости от того, является текущий режим средней или высокой
разрешающей способности, соответственно.
Если уже был исполнен оператор VIEW, CLS очищает только
обзорно-приемное окно. Чтобы стереть весь экран, сначала
воспользуйтесь VIEW без аргументов для выключения обзорного окна,
а затем CLS-для очистки экрана.
см. также COLOR
SCREEN
VIEW
Пример:
'cls очищает экран до фонового цвета
print "Это тест оператора CLS"
input "Нажать для очистки экрана...",Пусто$
color 10,1
cls
end
Оператор COLOR (графический режим)
----------------------------------
Функция COLOR устанавливает цвета для графических операций
-------
Синтаксис Для SCREEN 1:COLOR[задний фон][,(палитра)]
--------- Для SCREEN 7,8,9,10:COLOR[передний фон][,[задний фон]]
Замечания Задний фон - это целое выражение от 0 до
--------- 63, специфицирующее цвет фона. Палитра-это целое
выражение от 0 до 1, обеспечивающее выбор двухцветной палитры.
Передний фон целое выражение от 1 до 15. Аргументы этой команды
определяют фоновый цвет экрана и палитру из четырех цветов,
которые будут использоваться в последующих чертежных операторах.
После того, как вы уже определили палитру и цвет фона с помощью
оператора COLOR, цвет отдельных обьектов попадает под управление
различных команд графики (CIRCLE,LINE и т.д.). В режиме высокой
разрешающей способности на Цветном Графическом Адаптере
единственными возможными цветами являются черный и белый.
Следовательно опе- ратор COLOR не имеет значения в этом режиме и
попытка его использования приводит к ошибке 5 периода прогона,
Вызов незаконной функции.
SCREEN 1
Фон 0-255:фактически используемый цвет фона есть фон
MOD16. Следовательно фон 1 и 16 дают один и тот же результат.
Палитра 0-255: выбирается заранее определенная палитра, как
показано на ниже
-----------------------------------------------
цвет палитра 0 палитра 1
-----------------------------------------------
1 зеленый цинковый
2 красный анилиновый
3 коричневый белый
-----------------------------------------------
Четными числами обеспечивается выбор палитры 0, а нечетными
-палитры 1 по умолчанию. Палитра 0 дает вашей программе
возможность создавать обьекты в зеленом, красном, коричневом
цветах. Палитрой 2 предлагаются цвета цинковый, анилиновый и
белый.
SCREEN 7 и 8
Только EGA(усовершенствованный графический адаптер): цвета
зависят от текущей палитры. Передний фон 1-15: выбираемый цвет
используется как для записи литер, так и для чертежной графики.
Задний фон 0-15: выбирает цвет фона.
SCREEN 9
Передний фон 1-15: выбранный цвет используется для записи
литер и для чертежной графики. Если ваш EGA имеет память 64К,
можно использовать тоько значения из диапазона 103. Задний фон
0-63: выбирается фоновый цвет.
SCREEN 10
Передний фон 1-3: выбранный цвет используется и для записи
литер и для чертежной графики; 1=черный, 2=мерцание, 3=высокая
интенсивность. Цвет переднего фона 0 приводит к ошибке Вызов
незаконной функции.
Для изменения атрибутов умолчания используйте оператор
PALETTE: Задний фон 0-8: выбранный цвет используется в качестве
фона.
Примечание: Значение цвета 0 для любой палитры есть
---------- цвет фона, специфицируемого в этом операторе, а
цвет переднего фона по умолчанию определяется максимальным
атрибутом.
Ограничения В экране режима 2 оператор COLOR возвращает
----------- ошибку 5 периода прогона, Вызов незаконной
функции.
Пример:
'эта программа демонстрирует оператор COLOR в графическом
'режиме
'переключить на граф. режим средней разрешающей способности
'установить палитру 0
screen 1
color .0
for радиус%=1 to 20 'увеличить размер окружности
колер%=радиус%MOD4 'расчет цвета изображения
circle (160,100),радиус%,колер% 'отобразить окружность
next радиус%
delay 2
color .1 'изменить палитру
delay 2
'установить палитру и цвет фона и очистить экран
color 6,0:cls
'вычертить красную окружность в середине экрана
circle (160,100),50,2
delay 2
end
Оператор COLOR (текстовый режим)
--------------------------------
Функция COLOR устанавливает цвет текста
-------
Синтаксис COLOR[передний фон][,[задний фон][,бордюр]]
---------
Замечания передний фон - это целое выражение от 0 до
--------- 31, специфицирующее цвет литер. Задний фон - это
целое выражение от 0 до 7,специфицирующее цвет фона. Бордюр - это
целое выражение от 0 до 15, которое определяет цвет бордюра. Если
какой-то из этих параметров находится вне указанного диапазона то
возникает ошибка 5 периода прогона, вызов незаконной функции. Для
стандартных видео-плат Цвета/Графики в список выбора вашего фона
входят:
0 черный 8 серый
1 голубой 9 светло-голубой
2 зеленый 10 светло-зеленый
3 цинковый 11 светло-цинковый
4 красный 12 светло-красный
5 анилиновый 13 светло-анилиновый
6 коричневый 14 желтый
7 белый 15 белый высокой интенсивности
Литеры могут делаться мерцающими посредством установки
переднего фона в желаемый цвет плюс 16. Например, установка
переднего фона 22 (6+16) дает мерцающие коричневые литеры.
Адаптеры монохромного изображения не могут отображать цвет,
поэтому значения переднего фона интерпретируются следующим
образом:
0 черный
1 подчеркивание
2-7 белый
8 черный
9 подчеркивание высокой интенсивности
10-15 высокая интенсивность
16 черный
17 подчеркивание черным
18-23 мерцание
24 черный
25 высокая интенсивность, подчеркивание, мерцание
26-31 высокая интенсивность, мерцание
Значения заданного фона от 0 до 6 дают черный фон. Значение
7 соответствует белому фону.
Примечание: На любом Адаптере литеры становятся невидимыми,
---------- когда передний фон равен заднему фону.
Улучшенный графический Адаптер может отображать 16 цветов
из палитры, включающей в себя 64 цвета.
Ограничения параметр бордюра не оказывает влияния на
----------- EGA с улучшенным монитором.
Пример:
'Эта программа демонстрирует оператор COLOR
'в текстовом и графическом режимах
'отобразить таблицу атрибутов
for задний%=0 to 7
for передний%=0 to 15
color передний%,задний%
print using "###":задний%*16+передний%
next передний%
print
next задний%
print
for задний%=0 to 7 'отобразить таблицу всех атрибутов
for передний%=16 to 31 'с мерцанием
color передний%,задний%
print using "###":задний%*16+передний%-16
next передний%
print
next задний%
end
Оператор COM(n)
---------------
Функция COM(n) управляет отслеживанием событий на
последовательных входных устройствах.
Синтаксис COM(n){on!off!stop}
---------
Замечания n - число коммуникационных адаптеров,
--------- подлежащих отслеживанию (1 или 2). Оператор
COM(n) ON дает возможность отслеживания подпрограммой,
специфицированной в предыдущем операторе ON COM(n).
После COM(n) ON Турбо-Бейсик осуществляет проверку между
исполнением каждого оператора с целью просмотра поступления
каких-либо литер на специфицириванное входное устройство. Если
обнаруживается, что такое событие уже произошло, вызывается
подпрограмма, специфицированная в операторе ON COM(n).
Если COM(n) в режиме OFF, активность на последовательном
адаптере n игнорируется. Отслеживание коммуникаций прекращается
после оператора COM(n) STOP; однако любая активность
запоминается, так что когда исполняется оператор COM(n) ON,
происходит немедленный захват поступившего. Для увеличения или
уменьшения размера COM буфера используйте метаоператор $COM.
см. также ON COM(n)
Пример:
'Демонстрируется оператор COM(n). Эта программа не будет
'ничего отображать, если ваш адаптер COM1 не получает ввода
'Настроить подпрограмму для обработки COM-ввода
on com(1) gosub ПолучитьКомВвод
'разместить массив 5К для хранения ввода
dim КомПортВвод (5*1024)
'разместить указатель на следующем имеющемся буферном
'пространстве
ЗаголовокПрт%=0
'и следующий для печати
КонецПрт%=0
'включить обработку COM-ввода
com(1) on
'настроить буфер ввода 1К
$com1 1024
'открыть файловую переменную,как com1
open
open "com1" as#1
print 'нажать любую клавишу для прекращения программы"
'пока клавиша не нажата
while not instat
'если буфер не пуст
if КонецПрт%<>ЗаголовокПрт% then
'отобразить ввод
print "Ком-порт ввод:";КомПортВвод(КонецПрт%)
'шаг к следущему месту в буфере
КонецПрт%=КонецПрт%+1
end if
locate 2.1
print time$
wend
end
'обработать ком-порт прерывание
ПолучитьКомВвод:
'читать ввод из Ком-Порт буфера
input#1.КомПортВвод(ЗаголовокПрт%)
'указать следущее буферное пространство
ЗаголовокПрт%=ЗаголовокПрт%+1
return
КонецВвода:'окончить ком-порт ввод
print "Достигнут конец ввода ..."
end
Функция COMMAND$
----------------
Функция COMMAND$ возвращает командную строку, используемую
------- для запуска программы из DOS
Синтаксис s$=COMMAND$
---------
Замечания COMMAND$ возвращает все, что было набрано
--------- в DOS-подсказке, в процессе возбуждения
программы, за исключением имени самой программы (некоторые
руководства ссылаются на этот текст, называя его "трейледом").
Используйте COMMAND$ для накопления аргументов периода прогона,
таких как имена файлов и опции программы. Рассмотрим, например,
DOS-команду:
FASTSORT cust.dta cust.new
где FASTSORT (быстрая сортировка) есть созданная Турбо-Бейсиком
.EXE программа. Когда FASTSORT получает управление, COMMAND$
будет удерживать все, что было набрано в DOS подсказке после
имени самой программы, т.е. в данном случае строку "cust.dta
cust.new". Что делать с этой строкой (возможна разбивка COMMAND$
на файлаимя1 и файлаимя2 и сортировка содержимого файлаимя1 в
новый файл файлаимя2) остается для решения в соответствии с
определением FASTSORT.
Для тестирования программы, в которой используется
COMMAND$, в пределах Турбо-Бейсика, применяется опция строки
параметров из меню опций для установки возвращаемой COMMAND$
строки.
Ограничения Максимальная длина DOS-командной строки - 127 литер
-----------
Пример:
'Эта программа демонстрирует функцию COMMAND$
print "Параметром командной строки, подаваемой в эту
'программу являются
print command$
Компилируйте эту программу в память и прогоняйте дважды,
каждый раз меняя ввод параметров в меню опций.
Оператор COMMON
---------------
Функция COMMON заявляет одну или более переменных,
подлежащих подаче в соединенную цепочкой
программу.
Синтаксис COMMON переменная[,переменная]...
---------
Замечания Переменная - это массивная или скалярная
--------- переменная, которая должна быть сделана
доступной следующей соединяемой цепочкой программе. Массивы
специфицируйте посредством включения числа размеров в скобках
после имени переменной. Операторы COMMON могут подаваться в любом
месте программы и их может быть более одного, но данная
переменная может появляться только один раз. Совпадающие
операторы COMMON должны появляться в программе, к которой
привязывается цепочка.Имена переменных, используемых в операторе
COMMON не имеют значения, но их количество и тип важны. Если
переменные, заявленные как общие в возбуждающей программе, не
совпадают по типу и количеству с переменными, заявленными как
общие в принимающей программе, то генерируется ошибка периода
прогона.
Различия Турбо-Бейсик не поддерживает параметр CHAIN
-------- ALL, обеспечиваемый Интерпретаторным Бейсиком.
Каждую переменную, общий доступ к которой должны иметь
связываемые в цепочку программы, вы должны заявлять
непосредственно. При специфицировании в Турбо-Бейсике в качестве
общей переменной массива, необходимо специфицировать число
измерений этого массива. В Интерпретаторном Бейсике совпадающие
COMMON не требуется, поскольку COMMON в нем необходимы только из
CHAIN, а внутри CHAIN в них нет необходимости. С другой стороны
Турбо-Бейсик требует, чтобы переменные в каждом операторе COMMON
были правильно упорядочены. Другими словами, имена переменных в
главной программе и программе-цепочке могут отличаться, но типы
переменных должны совпадать. Правильным является следущее
употребление COMMON :
'Главная программа
COMMON i%,Массив(1),j#
'Цепная программа
COMMON Цел%,ДействМасс(11),Двтчн#
Ограничения Турбо-Бейсик не поддерживает преодолеваемое
----------- CHAIN ALL COMMON Интерпретаторного Бейсика.
Пример:
'Эта программа демонстрирует оператор COMMON
'Чтобы исполнить эти программы выполняйте следущее
'(1) компилировать первую программу в .EXE-файл
'(2)компилировать вторую программу в .TBC-файл
'(3) при DOS подсказке исполнить первую программу
'Программа хозяин.Компилировать эту программу в .EXE-файл
dim СтарыйМассив$(1) 'заявить двустрочный массив
СтарыйМассив$(0)="Это первая строка массива"
СтарыйМассив$(1)="Это вторая строка массива"
СтароеЦелое%=12345
СтароеДлинноеЦелое&=123450000
СароеЕдиничнойТочности!=12345.12345
СтароеДвойнойТочности#=1.0E+300
'специфицировать переменные, которые являются общими для
'программ хозяин и слуга
common СтарыйМассив(),СтароеЦелое%,СтароеДлинноеЦелое&,
СтароеДвойнойТочности#
chain "Слуга.TBC" 'цепочка для программы слуга
end
'Программа Слуга.Компилировать эту цепочку в .TBC-файл
common НовыйМассив(),НовоеЦелое%,НовоеДлинноеЦелое&,Новое-
ЕдиничнойТочности!,НовоеДвойнойТочности#
print НовыйМассив(0)
print НовыйМассив(1)
print НовоеЦелое%,НовоеДлинноеЦелое&,НовоеЕдиничнойТочности!,Ново-
сти!,НовоеДвойнойТочности#
Функция COS
-----------
Функция COS возвращает тригонометрический косинус
-------
Синтаксис y=COS(числовое выражение)
---------
Замечание Числовое выражение - это угол, специфицируемый
--------- в радианах. Чтобы преобразовать радианы в
градусы, умножайте на 180/n. Для преобразования градусов в
радианы умножайте на n/180 (См. обсуждение радианов в описании
функции ATN). COS возвращает значение двойной точности.
См.также ATN
SIN
TAN
Пример:
pi=atn(1)*4
for i%=0 to 360 step 45
print using "Косинус ### градусов=##.##":i%,cos(pi#/180*i%)
next i%
end
Функция CSNG
------------
Функция CSNG преобразует числовое выражение в его
------- эквивалент единичной точности.
Синтаксис y=CSNG(числовое выражение)
---------
Замечания CSNG преобразует числовое выражение или
--------- переменную в форму с плавающей точкой единичной
точности. CSNG обычно используется для предотвращения
промежуточного переполнения при обработке целых операндов.
См.также CDBL
CINT
CLNG
Пример: print csng (&HFFF),csng(12345.1234),csng(&HF000)
Функция CSRLIN
--------------
Функция CSRLIN возвращает текущее положение курсора по
------- вертикали (номер ряда)
Синтаксис y=csrlin
---------
Замечания CSRLIN возвращает целое от 1 до 25,
--------- представляющее текущее положение по вертикали
(номер ряда) курсора. Для считывания курсорного положения по
горизонтали (номер колонки) используйте функцию POS.
Оператором LOCATE курсор перемещается в специфицируемые
строку и колонку.
См.также LOCATE
POS
Пример:
Кол=pos 'сохранить ряд курсора
Ряд=csrlin 'сохранить колонку курсора
cls
locate Ряд,Кол 'восстанавливается курсорная позиция
end
Функции CVI,CVL,CVS,CVD
-----------------------
Функции CVI,CVL,CVS,CVD преобразуют строчные данные,
считываемые из произвольных файлов,
в числовую форму.
Синтаксис y%=cvi(2байтовая строка)
--------- y&=cvl(4 байтовая строка)
y!=cvs(4 байтовая строка)
y#=cvd(8 байтовая строка)
Замечания CVI преобразует 2-байтовую строку в целое.
--------- CVL преобразует 4-байтовую строку в длинное
целое. CVS преобразует 4-байтовую строку в значение единичной
точности. CVD преобразует 8-байтовую строку в значение двойной
точности. Применительно к способу обработки Турбо-Бейсиком произ-
вольных файлов, числовые значения должны перед их записью на диск
транслироваться в строку, а при считывании файла - обратно в
числа. Не путайте эти функции (предназначенные только для
обработки произвольных файлов ) с функцией VAL, которая принимает
строку вроде "3.7" и превращает ее в число.
См.также MKD$
MKI$
MKL$
MKS$
Пример:
'Эта программа создает файл данных произвольного доступа и
записывает в него некоторые данные. Затем эти данные считываются
обратно с преобразованием в приемлемую форму с использованием
описанных выше функций
'открыть файл произвольного доступа
open "r",#1,"cvsld.dta",18
field #1,2 as Целое$,4 as ДлинноеЦелое$,4 as ЕдиничнаяТочно-
сть$,8 as ДвойнаяТочность$
МаксЦелое%=32767
'записать данные в файл,преобразовать их и назначить в буфер
'перед записью в файл данных
for i%=1 to 5
lset Целое$=mki$(i%)
lset ДлинноеЦелое$=mkl$(i%+clng(МаксЦелое%))
lset ЕдиничнаяТочность$=mks$(csng(i%*csng(МаксЦелое%)))
lset ДвойнаяТочность$=mkd$(МаксЦелое%^i%)
put #1,i%
next i%
for i%=1 to 5 'считать данные из файла
get #1,i% 'отобразить их на экране
print cvi(Целое$),cvl(ДлинноеЦелое$),cvs(ЕдиничнаяТоч-
ность$),cvd(ДвойнаяТочность$)
next i%
clise#1
end
|
|