ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.



 

Часть 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).  
              
              




Яндекс цитирования