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



 

Часть 8

                        Оператор  DEF SEG
-----------------------------------------------------------------
Назначение  Оператор DEF  SEG  определяет сегмент  данных,который 
            будет  использован  операторами BLOAD,  BSAVE,  CALL, 
            ABSOLUTE, PEEK и POKE 

Синтаксис   DEF SEG ( =numeric expression)
                    (  численное выражение)
Комментарий численное  выражение  может  варьироваться  от  0  до 
            65,535   DEF SEG определяет сегмент памяти, в который 
            последующие операторы BLOAD,  BSAVE,  CALL, ABSOLUTE, 
            PEEK и POKE определят смещение.  Сегмен представдляет 
            собой адресную конструкцию, используемую процессорами 
            семейства Intel86.  Процессоры должны быть определены 
            двумя  целыми  числами:   сегментом  и  смещением   в 
            сегменте.  
               DEF SEG без аргумента возвращает значение сегмента 
            к  его  начальному значению по умолчанию.  Первые 256 
            байтов сегмента  по  умолчанию  содержат  информацию, 
            используемую   системой  поддержки  выполнения  вашей 
            проограммы.   Один  интересный  адрес   находится   в 
            смещении  &HF4E  в  данном сегменте.  Значения POKE в 
            этом адресе изменяют цвет текста на  экране  в  любом 
            графическом  режиме.  Цвет  зависит от вашего режима. 
            Еще  один  полезный  адрес  в  сегменте   данных   по 
            умолчанию  находится  в  ячейке  0  и  1.  Это  слово 
            содержит сегмент символов ТУРБО  БЕЙСИКа.  

См.  также  COLOR 

Пример      'Данная программа заполняет экран буквами А, выполняя
            'оператор  POKE  непосредственно в видео памяти
            'Определить функцию, которая определяет адрес видео  
            'памяти
            'получить тип видео наборной панели от пользователя

            DEF FN VideoScreen%
            LOCAL Screen Type%   'объявить локальную переменную
            PRINT "Please enter the type of screen yon are 
                   using".
            INPUT "[ 1 for Mono, 2 for Color]:"; Screen Type%
            SELECT CASE Screen Type%  `назначить результат функции
              CASE 1       'на базе ввода пользователя

              'монохромная ячейка видео  памяти

            FN VideoScreen% = &HB000
              CASE 2

              'ячейка цвета видео памяти

            FN VideoScreen% = &HB800
            END SELECT
            END DEF    'закончить функцию

            'определить сегмент для  POKE  и  BSAVE
            
            DEF SEG = FN VideoScreen%

            FOR I% = 0  to  4000  STEP  2
            POKE I% , ASC("A") 'заполнить экран символами А
            NEXT I%
            END

                         Оператор  DELAY
-----------------------------------------------------------------
Оператор    DELAY  вставляет паузу.

Синтаксис   DELAY seconds

Комментарий  seconds - это численное выражение, указывающее коли- 
             чество секунд паузы ТУРБО  БЕЙСИКа перед  выполнением 
             следующего оператора.  

            Примечание.  Оператор  DELAY  принимает  аргументы  с 
            плавающей запятой, могут быть указаны  также  дробные 
            задержки   с   разрешением   приблизительно  в  0,054 
            секунды.   Использование  оператора  DELAY  ,   а  не 
            никчемных  программных  петель,  дает  нам программы, 
            которые прекрасно работают  на  машинах  с  различной 
            скоростью  обработки  (то  есть,  с  основанием  8088 
            против 80286 или 6 Мгц против 8 Мгц).  

Пример      PRINT "Press any key to terminate the programm ..."
            WHILE NOT INSTAT  'до нажатия клавиши
            LOCATE  10,30
            PRINT TIMES       'показать время
            DELAY 5           'задержать на 5 секунд
            WEND
            END               'закончить программу

                          Оператор  DIM
-----------------------------------------------------------------
Назначение  Оператор  DIM описывает массивы.

Синтаксис   

       DIM {STATIC/DINAMIC} var (subscripts)[,var(subscripts)]...
DIM {STATIC/DINAMIC} var(min:max[,min:max]...)[,var[,min:max]]...

Комментарий    var - это идентификатор, используемый для массива.
               subskripts - это ограниченный запятыми  список  из 
            одного или более целочисленных  выражений,  определя- 
            ющих размеры массива.  
               Оператор DIM описывает переменные массива и  опре- 
            деляет их размер и объем габаритного поля. 
               В  расширении  синтаксиса  Интерпритатора БЕЙСИКа, 
            ТУРБО  БЕЙСИК   дает   вам   возможность   определить 
            диапазоны значений субиндекса (min:max),  а не только 
            его верхнюю границу.  Например: 

            DIM b(50:60)

            создает массив 11 элементов  с  одинарной  точностью, 
            под номерами от 50 до 60. Оператор 

            DIM c(50:60,25:45)

            создает  массив  с  двойным  габаритным полем с общим 
            количеством элементов 11*21.  
               Синтаксис диапазона значений может  быть  расширен 
            для многомерных массивов: 

            DIM binths (1800:1899,1:12)

               Связанный оператор OPTION BASE может также исполь- 
            зоваться для определения самого младшего  элемента  в 
            массиве,  несмотря на то что механизм диапазона более 
            мощный и ему отдается большее предпочтение.  
               При первом запуске программы ТУРБО БЕЙСИК устанав-
            ливает каждый элемент  численного  массива  на  0,  а 
            символьные  массивы  на  нулевую  строку (длина = 0). 
            В такое же состояние приводятся численнные и символь- 
            ные массивы,  когда  программа  запускается  вновь  с 
            помощью оператора RUN.  
               Если  переменная  массива используется без предше- 
            ствующего оператора DIM,  максимальное  значение  его 
            субиндексов  по  умолчанию будет = 10 ,  как будто вы 
            включили  (10)  в  оператор DIM.  Рекомендуем однако, 
            описывать каждый массив в явном виде. 
               Минимальное значение, которое можно использовать в 
            качестве субиндекса массива - это 0, если оно не было 
            описано иначе с помощью оператора OPTION BASE. 
               Необязательные аргументы STATIC и DYNAMIC  контро- 
            лируют  соответственно будет ли пространство для мас- 
            сива  выделено заранее компилятором или будет распре- 
            деляться динамически. По умолчанию выполняется стати- 
            ческое  распределение,  которое действует до введения 
            метаоператора $DYNAMIC,  в  выражениях  использующих 
            операторы описания массивов (DIMension),  имя массива 
            появляется в двух операторах DIM, или массив объявля- 
            ется локальным по отношению к процедуре либо функции.  
               Переключатель проверки границ, доступный через ме- 
            ню Options, заставляет компилятор создавать код,  ко- 
            торый  проверяет  субиндексы  на соответствие,  когда 
            идет ссылка на массив.  

Различия    ТУРБО БЕЙСИК позволяет программисту описать и началь-
            ный, и конечный индексы массива. Интерпритатор БЕЙСИК 
            размещает все массивы динамически, а ТУРБО БЕЙСИК по-
            пытается  разместить  массивы  статически  (во  время 
            компиляции), что сделает их более быстрыми. Вы можете 
            заменить тип размещения, задав его в явном виде.  

См. также   $DYNAMIC    FRE   $STATIC

Пример      DIM  объявляет массив
       'константа с именем, определяющая верхнюю границу массива
                 %MaxDim = 20
        'константа с именем, определяющая нижнюю границу массива
                 %MinDim = 1

            'разместить массив %MaxDim целочисленных элементов
            DIM Array%(%MinDim:%MaxDim)

            `инициализироваить массив со случайными цифрами
           FOR Count I% = %MinDim to %MaxDim
              Array%(Count I%) = INT(RND*10)
           NEXT Count I%
            END

                        Оператор  DO/LOOP
-----------------------------------------------------------------
Назначение  Оператор DO/LOOP представляет собой цикл с тестом для
            TRUE или FALSE на верхней или/и в нижней части цикла.  

Синтаксис   DO[{WHILE/UNTIL}expression]
            .
            . statements [EXIT LOOP]
            .
            [LOOP [WEND][{WHILE/UNTIL} expression]

Комментарий    expression - численное выражение, в котором значе-
            ния, не равные нулю, представляют TRUE (ИСТИНА), а 
            нулевые значения - FALSE (ЛОЖЬ).
               DO  и LOOP являются подходящими построителями цик- 
            лов для всех случаев.  Они  позволяют  вам  создавать 
            циклы  с тестами для терминационных условий в верхней 
            части цикла, в низу,  в общих местах,  или ни в одном 
            из  них.  Оператор  DO должен всегда быть спаренным с 
            оператором LOOP в нижней части цикла.  
               Неудачная попытка спарить DO  и  LOOP  приведет  к 
            ошибкам во время компиляции.  
               Для дополнения теста к DO/LOOP используйте WHILE и 
            UNTIL.  Используйте  резервное слово WHILE,  если вам 
            необходимо повторить цикл в случае,  если выражение - 
            это  TRUE,  а  если  выражение  - FALSE - используйте 
            терминальное слово.  UNTIL вызывает обратный  эффект; 
            то  есть  цикл будет закончен,  если условие - TRUE и 
            повторен в случае FALSE .  

               Например:

            DO WHIOLE A = 13
            .
            . statements
            .
            LOOP

            выполняет операторы между DO и LOOP до a = 13.  

               В любой точке в DO/LOOP вы можете включить опера-тор 
            EXIT/ LOOP.  Это эквивалентно выполнению команды GOTO 
            в  отношении  оператора  после   выхода   из   LOOD. 
            (Подробнее об этом : см. оператор EXIT).  

            Заметьте, что этот DO/LOOD:

            DO WHILE a < b
            .
            .
            .
            LOOP

            имеет такой же эффект как этот цикл WHILE/WEND:

            WHILE a < b
            .
            .
            .
            WEND
            
            Несмотря на то,  что компилятор не заботится о  таких 
            вещах, зарезервируйте место для операторов между DO и 
            LOOP. Это поможет прояснить структуру цикла.  

Пример      'Данная программа ждет нажатия клавиши

            DO
            LOOP UNTIL INSTAT
            END

                          Оператор  DRAW
-----------------------------------------------------------------
Назначение   Оператор  DRAW  производит построения на графическом 
             экране

Синтаксис    DRAW string expression.
                 симводьное выражение

Комментарий  Оператор  DRAW  вычерчивает  объекты  на графическом 
             экране  в  соответствии с командами,  вставленными в 
             символьный аргумент,  который  переходит  к  данному 
             оператору.  Фактически string expression - это прог-
             рамма   для   "языка"   интерператора   DRAW.   DRAW 
             выполняет командные строки и создает музыку.  

-----------------------------------------------------------------
ДЕЙСТВИЕ                               КОМАНДЫ
-----------------------------------------------------------------
Un                      Движение       Вверх
Dn                      Движение       Вниз
Ln                      Движение       Налево
Rn                      Движение       Напраыво
En                      Движение       Вверх и вправо
Fn                      Движение       Вниз и вправо
Gn                      Движение       Вниз и влево
Hn                      Движение       Вверх и влево
-----------------------------------------------------------------
            n - это расстояние, которое необходимо пройти (см.Sn, 
            фактор масштабирования,  следующий за ним).  Движение 
            всегда начинается на LPR и соответственно подстраива- 
            ет LPR.  (LPR означает "последнее указание точки",  и 
            относятся к последнему  указанию  точки  определенных 
            графопостроительных  операторов.  Более  подробно  об 
            этом см. раздел графики в главе 4).  
            
            Например:

            DRAW "D10R5"

            производит  построение  формы L (вниз 10,  вправо 5), 
            начинается с LPR.  Он являет LPR на последний элемент 
            изображения  (растровый элемент).  M x,y перемещается 
            на координату  x,y.  Если  X  сопровождается  ведущим 
            плюсом или минусом,  перемещение будет относительным, 
            в противном случае оно будет  абсолютным.  

            Например: 

            DRAW "D10 R5 M30,50" рисует L из предыдущего, а затем 
            завершает  построение  строкой  в  растровый  элемент 
            (30,50).  

              Следущие  префиксы   могут   предшествовать   любой 
            команде перемещения: 

              B перемещается, но не производит построения;  
              N перемещается, но возвращается после окончания в 
                первоначальное положение.  

               Например:

            DRAW  "BM 180,20 NU10 ND10 NL10 NR10"

            перемещается без  построения  к  растровому  элементу 
            (180,20), затем рисует знак плюса.  

                               Другие  команды.
                               ----------------
            An   устанавливает   угол   n.   Значение   n   может 
            варьироваться от 0 до 3,  где 0 равняется 0 градусов, 
            1  равняется 90 градусов,  2 = 180 градусам и 3 = 270 
            градусам.  

            TAn поворачивает угол n.  Значение  n  варьируется  в 
            диапазоне  от  -360  до  +360 градусов.  Если n имеет 
            положительное значение, угол вращается против часовой 
            стрелки. Если оно отрицательное - по часовой стрелке. 
            Значения вне диапазона  допустимых  величин  вызывают 
            ошибку  выполнения  5,  неправельный  вызов  функции. 
            Заметьте, что TAn не комулятивный.  

            Cn рисует цветное n.  Проверьте оператор  PALETTE  на 
            диапазон  n в каждом режиме дисплея цвет по умолчанию 
            - самый высокий допустимый атрибут.  

            Sn устанавливает масштабный  фактор  на  n/4,  где  n 
            варьируется  от  1  до  255.  Например,  если  n = 8, 
            масштабный фактор  =  2.  Оператор  DRAW  увеличивает 
            масштабный    фактор    посредством   аргументов   на 
            O,D,L,R,E,F,G,H   и   релятивные   команды   М    для 
            определения   окончательных  размеров  объектов.   По 
            умолчанию  для  n  есть  4,  заканчивыается  фактором 
            единого    масштабирования    (то   есть   отсутсвием 
            масштабирования.  
               Аспектное соотношение используемого  вами  дисплея 
            определяет  отношение  между  X  и  Y.  На  идеальном 
            (несуществующем)  дисплее  с  аспектным  соотношением 
            1/1, пунктирная линия X имеет такуюже длину, как и Y. 
            Однако   дисплеи   компьютеров  ИБМ  имеют  следующие 
            аспектные соотношения: 

  ---------------------------------------------------------------
  Монитор/Адаптер    Экран 1   Экран 2   Экран 7/8/9   Экран 10
  ---------------------------------------------------------------
  Цвет                   5/6      5/12       N/A           N/A
  Усовершенствованный    5/6      5/12    8.76/12          N/A
  Усоверш. Моно          N/A      N/A        N/A        9.52/12
  ---------------------------------------------------------------

            X VARPTR$ (переменная); выполняет подстроку, то есть, 
            выполняет вторую командную строку  изнунри  первичной 
            строки DRAW. Команда X похожа на GOSUB; например: 

            DRAW "X" + VARPTR$(X$)

            P color,boundbary (цвет, граница) начинается на теку- 
            щей координате (X,Y) и заполняет  изображение  цветом 
            color,  прекращая  это  заполнение  в  зонах цветовой 
            границы.  
               В каждом случае,  аргумент n,X или  Y  может  быть 
            либо  константой  (как было показано на примерах) или 
            переменной в виде 

            = VARPTR$(переменная);

            например:

            DRAW  "e15"

            тоже самое, что

            a = 15
            DRAW  "e=" + VARPTR$(a)

               DRAW игнорирует пространство в командных строках - 
            вы можете использовать его для  того,  чтобы  сделать 
            ваши программы DRAW более читаемыми.  

Ограничения    ТУРБО БЕЙСИК не идентифицирует имена  переменных в 
            строках DRAW.  Так, вы должны использовать VARPTR$(n) 
            для выборки содержания переменных во время выполнения 
            программы в рамках строки DRAW .  Вместо  DRAW  "U  = 
            I%;" используйте DRAW "U = " + VARPTR$(I%) 

Пример      'Перейдите в средний разрешающий режим графики
                     SCREEN 1
              House$ = "U20 G5 E20 F20 H5 D20 C30"
           DRAW House$
           DRAW  "BE3"
           DRAW  "P1,3"
        FOR  I% = 1  TO  280  STEP  40
           DRAW  "BM = " + VARPTR$(I%) + ",40"
           DRAW House$
       NEXT I%
               END    'закончить программу

                          Оператор  END
-----------------------------------------------------------------
Назначение  Оператор END заканчивает  выполнение  программы   или
            определяет конец структурного блока.

Синтаксис   END [{DEF/IF/SELECT/SUB}]

Комментарий     END без аргументов  заканчивает выполнение  прог-
             раммы.  Операторы END могут быть  помещены  в  любое 
             место  в  программе,  и  их может быть более одного. 
             Если программа встречается с оператором END, она за-
             крывает все открытые файлы и возвращается к DOS (или 
             к ТУРБО БЕЙСИКу,  в зависимости от  того,  где  была 
             запущена программа).  
               Оператор  END  не  требуется   компилятору,   хотя 
             использование   его  можно  рекомендовать.   Если  в 
             программе   заканчиваются   операторы    выполнения, 
             генерируется тотже самый эффект.  
               Если  за  оператором  END  следуют резервные слова 
             DEF,IF,SUB   или  SELECT,   то  это  означает  конец 
             структурного блока.  

См. также    DEF   IF   SELECT   STOP   SUB

Пример      SUB  DummyProc
              PRINT  "Hello"
            END SUB   `закончить определение процедуры
            DEF FN DummyFunc$
                FN DummyFunc$ = "HelloAgain"
            END DEF   `закончить определении функции
            INPUT   "Execute the procedure or the function [1 or
                     2]";Which%
                                 IF Which% > 0 THEN
               SELECT CASE Which%
                 CASE 1
                   CALL  DummyProc
                   END   'закончить программу
                 CASE 2
                   PRINT FN DummyFunc%
                   END    'закончить программу
                 CASE ELSE
                   PRINT  "An illegal choice was mabe..."
              END SELECT   'закончить выбирающий оператор
              END IF       'закончить блок ifthen
            END           'закончить программу

                         Функция  ENDMEM
-----------------------------------------------------------------
Назначение  Функция  ENDMEM возвращает адрес конца физической па-
            мяти.

Синтаксис   y = ENDMEM

Комментарий    Функция  ENDMEM   возвращает длинное целое  число, 
            представляющее  адрес последнего байта физической па- 
            мяти.  ENDMEM в сопряжении с оператором MEMSET, может 
            использоваться для распределения пространства в стар- 
            шей памяти для программ языка ассемблера.  
               Выполняя программу в памяти, ENDMEM в действитель-
            ности  возвращает конец физической памяти минус объем 
            таблицы символов.  Когда ТУРБО БЕЙСИК  компилирует  в 
            памяти,  он  сохраняет  таблицу  символов  на  уровне 
            самого старшего адреса в памяти. 

См. также MEMSET 

Пример      'показать результат
            PRINT  "The end of addressable memore is :";ENDMEM
            END     'закончить программу

                         Оператор ENVIRON
-----------------------------------------------------------------
Назначение  Оператор ENVIRON  модифицирует  информацию  в таблице 
            среды.

Синтаксис   ENVIRON string expression
                    символьное выражение

Комментарий    string expression  определяет как имя параметра, 
               подлежащее  изменению,  суммированное  или  исклю- 
            ченное,  так и саму  информацию  о  новом  параметре.  
            Между ними ставится знак равенства (=).  
               Оператор   ENVIRON   и   соответствующая   функция 
            ENVIRON$ используются для конфигурации среды, которая 
            переходит к программам,  выполняемым  через  оператор 
            SHELL. (Более подробно см.статью об операторе SHELL в 
            настоящем  руководстве и статью о команде SET в спра- 
            вочном руководстве DOS.) 
               Например:
                            ENVIRON "PATH=\TURBOBAS"

            устанавливает DOSовский параметр PATH на "\TURBOBAS".  
               Последующее копирование оператором SHELL в команд- 
            ный файл СOMMAND.COM автоматически приводит к  иссле- 
            дованмию каталога \TURBOBAS для поиска файлов не на- 
            ходящихся в текущем каталоге.
               Для исключения параметра из таблицы  среды  доста- 
            точно  поставить  точку  с  запятой  ";"  после знака 
            равенства:
            
                      ENVIRON "PATH=;"

            исключает из таблицы среды параметр  маршрута  поиска 
            .  
               
Ограничения    Расширить объем среды невозможно.  Для того, чтобы 
            записать новую информацию, необходимо стереть старую, 
            освободив таким образом место для записи.

См.также       ENVIRON$     SHELL

Пример              'показать и изменить переменную среды
            PRINT ENVIRON$ ("PATH")
            "ENVIRON "PATH=\"



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