ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 12 Оператор OPTION BASE ----------------------------------------------------------------- Назначение OPTION BASE устанавливает минимальное значение для индексов массивов Синтаксис OPTION BASE (целое выражение) Комментарий Целое выражение принимает значения от 0 до 32767. OPTION BASE задает значение индекса, которое ставится в соответствии первому элементу массива, например, если оно задано OPTION BASE 1, то декларативный оператор DIM x(20), определяющий массив x отводит для него в памяти место под 20 элементов (соответствующих значениям индекса от 1 до 20), тогда как по умолчанию был бы определен 21 элемент (от 0 до 20). Хотя для управления границами изменения индексов можно использовать OPTION BASE, ТУРБО БЕЙСИК дает для этого более мощную возможность через оператор DIM. См.также DIM Пример ' выделить массив из трех целых переменных DIM FirstArray%(2) ' установить начальное значение индекса во ' всех массивах OPTION BASE 1 ' выделить место в памяти для массива из двух целых ' переменных DIM SecndArray%=2 FOR I=0 TO 2 ' в массиве SecndArray% нет значения индекса, ' равного нулю IF I% > 0 THEN SecndArray%(I%)=I% END IF FirstArray%(I%)=I% NEXT I% FOR I% = 0 TO 2 ' в массиве нет значения индекса, равного 0 IF I% > 0 THEN PRINT SecndArray%(I%) END IF PRINT FirstArray%(I%) NEXT I% END 'конец программы Оператор OUT ----------------------------------------------------------------- Назначение OUT осуществляет вывод в порт ввода/вывода Синтаксис OUT номер порта, целое выражение Комментарий OUT посылает байтовую величину (от 0 до 255) в аппаратный выходной порт с заданным номером, где номер порта - целое выражение в диапазоне от 0 до 65535. Оператор OUT необходим для управления различными аппаратными подсистемами, как, например, адаптером связи или видео-адаптером. Неправильное исполь- зование оператора OUT может привести к краху системы. Пример 'Считывая биты состояния, подавляя и пропуская биты 'управления, программа порождает пронзительный зву- 'ковой сигнал в динамике 'из порта 61 (шестнадцатиричное) считывается значение StatusReg%=INP(&H61) StatusReg%=StatusReg% AND &H00FC 'на считанное значение накладывается маска удлинить звук, 'чтобы его можно было услышать FOR J = 1 TO 100 StatusReg%= StatusReg% XOR 2 OUT &H61,StatusReg% delay .001 NEXT J END Оператор PAINT ----------------------------------------------------------------- Назначение PAINT окрашивает ограниченную область на графичес- ком экране в выбраный цвет. Синтаксис PAINT (x,y) [[,цвет] [,граница] [,фон]] Комментарий (x,y) задают точку, определяющую, где должна ра- сполагаться краска. Если эта точка задана внутри ограниченной области, окрашивается эта область. Если точка находится вне границы, то будет окрашена внешняя по отношению к области часть экрана. Цвет задается числовым или символьным выражени- ем. Если это числовое выражение, оно определяет сплошной цвет. Если это символьное выражение, то оно содержит маску, по которой область заполняется некоторым шаблонным рисунком. Если цвет не задан, будет выбран цвет с наибольшим приоритетом. Граница дает цвет линии, ограничивающей закраши- ваемую фигуру. Окрашивание по оператору PAINT прекращается там, где встречается цвет границы. Фон - это необязательная символьная маска, ис- пользуемая в тех случаях, если требуется перекра- сить области. Фоновая маска описывает "слой" из- бранных клеток, которые следует пропустить когда проверяется, окрашена уже область или нет. С помощью оператора PAINT можно закрасить об- ласть любой формы, сколь угодно сложной. В ТУРБО БЕЙСИКЕ выбор байта для нанесения на экран осуществляется по формуле: y mod tile length y режим клетка длина Следует убедиться в том, что закрашиваемая об- ласть является полностью замкнутой, иначе "утечки" через границу могут полностью исказить рисунок. Усли аргумент "цвет" является числовым, то опе- ратор PAINT заполняет область заданным цветом, пре- кращая окраску при попадении на пикселы с атри- бутами "цвет" или "граница". Если "цвет" - это символьное выражение, то при- меняется разбиение на клетки; оно используется для создания шаблонного рисунка, которым закрашивается область. Шаблонный рисунок, задаваемый символьными аргументами цвета имеет ширину 1 байт (представля- ющий 4 пиксела при среднем разрешении и 8 пикселов в режиме высокого разрешения) и длину от 1 до 64 байтов (представляющих от 1 до 64 строк развертки по вертикали). При разбиении на клетки цвет должен иметь формат вида: CHR$(&Hnn) + CHR$(&Hnn)... Маска состоит из битовых значений "цвета", пер- вый ее символ представляет первую линию, второй символ - вторую, и т.д. Например, следующая маска задает шахматный рису- нок (50%-ный серый цвет) в режиме высокого разре- шения: 10101010 (первый байт) 01010101 (второй байт) Для того, чтобы заполнить область этим шахматным рисунком, следует построить строку с соответству- ющей маской. Сначала преобразовать из двоичной формы в шестнадцатеричную: 10101010=&HAA 01010101=&H55 Затем сконструировать с помощью CHR$ двухсим- вольную строку: pattern$ = CHR$(&HAA) + CHR$(&H55) После этого, с помощью оператора PAINT (50,50), pattern$ закрашивает весь экран серой (шахматной) краской. "Фон" используется для того, чтобы определить условия остановки при перекрашивании области, уже окрашенной с помощью шаблона. Если окрашивание до- ходит до пиксела, которому соответствует 1 в фоно- вой маске, окрашивание не прекращается, даже если этот пиксел имеет цвет "границы". При разбивке на клетки, задание шаблона зависит от количества цве- товых атрибутов в каждом режиме экрана. Следует помнить, что количество битов, приходящихся на один пиксел, связано с количеством цветовых атрибутов в каждом режиме экрана. Количество битов на пиксел можно вычислить по следующей формуле: LOG (X)=Y 2 где X- общее число цветовых атрибутов вашего экра- на, а Y- число битов на пиксел. Разбиение на клетки в режиме 1 --- -------------------------------------------------- При среднем разрешении, используя предыдущую формулу, получаем: X=4 пикселам (которые пред- ставляются одним клеточным байтом среднего разреше- ния) и, таким образом, Y равно двум битам на пик- сел. Поскольку для каждого пиксела имеется соответ- ствующий цветовой атрибут, потребуется два бита клеточного байта, чтобы описать один из четырех ат- рибутов. В следующей таблице приведены десятичные и шест- надцатричные значения, соответствующие каждому ат- рибуту: ---------------------------------------------------- цветовая атрибут в шаблон в шаблон в палитра двоичном двоичном HEX коде коде коде ---------------------------------------------------- 0 зеленый 01 01010101 &H55 красный 10 10101010 &HAA коричн. 11 11111111 &HFF ---------------------------------------------------- 1 цианит 01 01010101 &H55 фуксин 10 10101010 &HAA белый 11 11111111 &HAA ---------------------------------------------------- Разбиение на клетки в режиме 2. -------------------------------- При высоком разрешении пикселу соответствует 1 бит, что позволяет включить в одну клетку 8 пик- селов. Там, где в маске стоит 1, на экране будет точка. Строка может содержать до 64 байтов. Рисунок последовательно заполняет всю область, заключенную в границу. Если граница не определена, закрашивается весь экран. Разбиение на клетки в режимах 7,8,9,10,11 и 12 ---------------------------------------------- Для этих усиленных режимов клеточный рисунок за- дается с помощью метода, по которому строка хра- нится и интерпретируется как стек 8-битовых элемен- тов, известных в совокупности как битовая плос- кость. Во всех режимах экрана требуется 4 битовых плоскости, чтобы определить один клеточный байт, кроме режима 10, в котором требуется 2 битовых плоскости. Пример ' Использование клеточных рисунков SCREEN 1 : CLS ' Определение клеточного шаблона для диагоналей TIL$=CHR$(&H40)+CHR$(&H40)+CHR$(&H10)+CHR$(&H10)+_ CHR$(4)+CHR$(4)+CHR$(1)+CHR$(1) CIRCLE(100,100),50 PAINT (100,100),TIL$ ' определение клеточного шаблона для шахматного ' рисунка TIL2$=CHR$(&HAA)+CHR$(&HAA)+CHR$(&H80)+CHR$(&H80)+_ CHR$(&H80)+CHR$(&H80)+CHR$(&H80)+CHR$(&H80) CIRCLE(225,100),50 PAINT (225,100),TIL2$ Оператор PALETTE и PALETTE USING ----------------------------------------------------------------- Назначение PALETTE и PALETTE USING позволяют изменять один или несколько цветов палитры. (Для использования этих операторов необходимы Расширенный Графический Адаптер (EGA) или Видео Графический Комплексный Адаптер (VGA)). Синтаксис PALETTE [атрибут,цвет] PALETTE USING имя целого массива (индекс массива) Комментарий атрибут представляет цвет в палитре, цвет - дей- ствительный цвет экрана, заменяющий атрибут палит- ры. Цвет, выводимый на ваш экран, зависит от уста- новленного режима экрана и аппаратуры дисплея (см.оператор SCREEN). Оператор PALETTE позволяет изменять цвет текста или графики непосредственно на экране, заданные из- менения влияют на последующее воспроизведение тек- ста или графики. Это удобное свойство, которое поз- воляет не перепечатывать текст или перерисовывать графику, если вы хотите изменить цвет (см.пример). PALETTE также позволяет заносить в палитру номе- ра цветов, больше 15. Можно даже сделать текст не- видимым относительно фона, а затем, изменив в па- литре его цвет, "внезапно" высветить его. Если в операторе PALETTE не указаны аргументы, цвета в палитре устанавливаются по умолчанию в со- ответствии с определением. PALETTE USING позволяет задавать сразу несколько изменений цветов с помощью единственного оператора. Имя целочисленного массива задает массив данных для изменения цветов палитры. Индекс массива задает пе- рвый элемент массива (в большинстве случаев - 0). Размерность массива должна быть достаточно большой, чтобы его элементы, начиная с заданного индекса массива, могли вместить все 16 цветов палитры. Каждому атрибуту палитры поставлен в соответствие цвет, номер которого задан в целочисленном массиве. Значение цвета -1 в одном из элементов массива не влияет на соответствующий атрибут в палитре, од- нако, все остальные отрицательные значения цвета недопустимы. Ниже приведены диапазоны атрибутов и цветов для различных режимов экранов и мониторов: Таблица 5-1 Диапазоны цветов и атрибутов ------------------------------------------------- Режим Монитор Атрибуты Цвета ------------------------------------------------- 0 Моно/EGA 0-15 0-2 Цвет/EGA 0-31 0-15 1 Цвет/EGA 0-3 0-15 2 Цвет/EGA 0-1 0-15 7 Цвет/EGA 0-15 0-15 8 Цвет/EGA 0-15 0-15 9 EGA (64K) 0-3 0-15 EGA (>64K) 0-15 0-63 10 Моно/EGA 0-3 0-8 11 MCGA/VGA 0-1 0-1 12 VGA 0-15 0-15 ------------------------------------------------- Моно = Монохромный; EGA = IBM Enhanced Graphics Adapter Расширенный Графический Адаптер VGA = Video Graphics Array Adapter Видео-Графическийц Адаптер MCGA = Multi-Colors Graphics Array Adapter Многоцветный Графический Адаптер Ограничение Использование операторов PALETTE и PALETTE USING возможно если есть в наличии Расширенный Графичес- кий Адаптер. См.также COLOR DRAW SCREEN Пример ' в следующем примере показано, как использовать ' оператор PALETTE для того, чтобы изменить ' цвет графики (и текста) без повторного ' рисования или воспроизведения рисунка SCREEN 8 'установить для EGA режим 640x200, '16 цветов PALETTE 'устанавливает для EGA палитру цветов 'по умолчанию LINE (10,10)-(630,190),1,BF 'нарисовать прямоугольник 'закрасить его синим цветом DO FOR I% = 2 TO 14 PALETTE 1,I% 'заменить синий цвет DELAY .2 'установить задержку NEXT I% LOOP UNTIL INSTAT END Функция PEEK ----------------------------------------------------------------- Назначение PEEK возвращает байт, хранящийся в заданной ячейке памяти Синтаксис y = PEEK (смещение) Комментарий Смещение - это числовое выражение в диапазоне от 0 до 65535, которое представляет собой 16-битовое смещение от текущего элемента, установленного пос- ледним оператором DEF SEG. Возвращаемое значение может быть от 0 до 255. PEEK и дополняющий его оператор POKE осуществля- ют доступ к памяти на более низком уровне, чем ос- новные операции ТУРБО БЕЙСИКА. Одно из применений PEEK и POKE сотоит в создании массмвов из байтов для приложений, не требующих полного диапазона допустимых целых чисел (от -32768 до +32767). См.также DEF SEG POKE Пример DIM Array%(5) 'размещение массива из 6 целых 'элементов DEF SEG = VARSEG (Array%(0)) ' инициализация массива с помощью оператора POKE FOR I% = 0 TO 11 POKE I%, &HFF NEXT I% ' вывод содержимого массива с помощью оператора PEEK FOR I% = 0 TO 11 PRINT HEX$ (PEEK(I%)) NEXT I% END 'конец программы Функция PEN ----------------------------------------------------------------- Назначение PEN читает состояние светового пера Синтаксис y = PEN (вариант) Замечания Вариант - число, управляющее информацией, воз- вращаемой функцией PEN согласно следующей таблице: --------------------------------------------------- Вариант Значение --------------------------------------------------- 0 Перо опущено с момента последней проверки (-1 = да, 0 = нет) 1 X координата последней активизации пера 2 Y координата последней активизации пера 3 текущее положение переключателя (-1 = вниз, 0 = вверх) 4 последнее значение X координаты 5 последнее значение Y координаты 6 строка, где последний раз было активизировано перо (1-24) 7 колонка, где последний раз было активизировано перо (1-80) 8 последняя строка (1-24) 9 последняя колонка (1-80) -------------------------------------------------- Световое перо должно быть включено оператором PEN ON прежде, чем будут выполняться запросы функции PEN. Пример ON PEN GOSUB PenHandler 'задание подпрограммы 'обработки события PEN ON 'включить прерывание по событию PRINT "Нажмите любую клавишу для завершения"... WHILE NOT INSTAT WEND END 'конец программы PenHandler: FOR I% = 1 TO 9 PRINT PEN(I%) NEXT I% RETURN Оператор PEN ---------------------------------------------------------------- Назначение PEN управляет проверкой событий по световому перу Синтаксис PEN {ON | OFF | STOP} Комментарий Оператор PEN управляет проверкой событий, свя- занных со световым пером. До выполнения запросов функции PEN, световое перо должно быть включено с помощью оператора PEN ON. PEN ON разрешает также обработку прерываний по событи-ям, связанным со световым пером, с помощью процедуры, заданной в операторе ON PEN. PEN OFF блокирует функцию PEN и отменяет про- верку событий, связанных со световым пером. PEN STOP отменяет прерывания по событиям, но за- поминает эти события так, что если далее выполня- ется PEN ON, немедленно возникает прерывание. См.также ON PEN Пример ON PEN GOSUB PenHandler ' задание подпрограммы обработки события PEN ON 'включить прерывание по событию PRINT "Нажмите любую клавишу для продолжения..." WHILE NOT INSTAT WEND END 'конец программы PenHandler| FOR I% = 1 TO 9 PRINT PEN(I%) NEXT I RETURN Функция PLAY ----------------------------------------------------------------- Назначение PLAY возвращает число нот в фоновом музыкальном буфере Синтаксис y = PLAY (x) Комментарий x - это фиктивный числовой аргумент. PLAY возвращает число нот в фоновом буфере подготовки музыки, ждущих исполнения. Если музыка исполняется с высоким приоритетом или не исполняется совсем, PLAY возвращает 0. См.также $SOUND Пример ' Исполнение до-ре-ми-фа-соль PLAY "MB CDEFG" Again: n = PLAY(1) 'может ли быть что-нибудь сыграно PRINT n "нот осталось в буфере" IF n = 0 THEN PRINT "Буфер пуст" : END GOTO Again Оператор PLAY ----------------------------------------------------------------- Назначение PLAY создает музыку Синтаксис PLAY символьное-выражение Комментарий PLAY - интерпретируемый мини-язык, который игра- ет для музыки ту же роль, что и DRAW для графики. PLAY позволяет задавать музыкальные пассажи как последовательность символов в символьном-выражении и исполнять их с помощью динамика компьютера. Можно использовать 84 ноты, соответствующие большинству клавиш на пианино, начиная с нот на три октавы ниже среднего "до" и до четырех, без одной ноты, октав выше среднего "до". Нота может быть представлена своим номером по порядку (1-84) или с помощью непосредственного описания (то есть от A до G с диезами и бемолями и указанием октавы). Например, PLAY "N44" исполняет 44-ю ноту "соль", следующую за средним "до". PLAY "O3G" исполняет "соль" в третьей октаве (ту же ноту). Операторы задания нот могут быть сгруппированы в более длинные командные последовательности: PLAY "O3FGA" исполняет три ноты "фа", "соль" и "ля" в третьей октаве. Музыкальный интерпретатор игнорирует пробелы, поэтому их следует использовать для того, чтобы сделать команду более понятной. Команды Следующие одно- и двухсимвольные команды сос- тавляют язык оператора PLAY: нота [{ # | + | - }] формирует ноту, соответствующую строчной или прописной букве от A до G. Включение диеза (# или +) или бемоля (-) после буквы, обозначающей ноту, позволяет выбрать заданную черную клавишу на пианино. Однако нельзя с помощью диезов и бемолей выбирать белую клавишу; так, например, "F-" недопустимо. Nn Задает ноту n, где n - числовое представление ноты от 1 до 84. Нота 1 - нижнее "до" пианино, 84 - верхнее "си". Среднее "до" - нота номер 37. Нота 0 не создает звука и соответствует паузе. On Выбирает октаву n, где n от 0 до 6. Каждая октава начинается с "до" и заканчивается "си". Среднее до - первая нота третьей октавы. По умолчанию выбирается октава 4. >n Увеличивает текущую октаву на 1 и задает ноту n. Если текущая октава - шестая (самая высокая), номер октавы не увеличивается (остается 6). |