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



 

Часть 8

                                Глава 5

                    Словарь-справочник ТУРБО-БЕЙСИКА

         200   с   лишним   команд  ТУРБО-БЕЙСИКА  можно  сгруппировать
      соответственно  их  синтаксическому  классу в функции, операторы,
      системные переменные и метаоператоры. 
         Функции   (заранее  определенные  в  отличие  от  определяемых
      пользователем) возвращают значение и потому должны использоваться
      внутри выражений. Для большинства из них требуются один или более
      аргументов; например: 
          t=cos(3.1)        -числовая функция с 1 числовым аргументом 
          t$=left$("cat",2) -строчная  функция  с  1  строчным и одним
                             числовым аргументами 
        Операторы-это    неделимые   строительные   блоки,   образующие
      программы.  Операторы  должны  появлятся  в  строке,  занимая  ее
      целиком,   или  с  разделяющими  смежные  операторы  двоеточиями,
      например: 
          CIRCLE (160,100),50    -чертить окружность 
          CALL Mysub(x,y,z)      -вызвать процедуру 
          a=a+1                  -присвоение (см. оператор LET) 
         Системные    переменные    являются    заранее   определенными
      идентификаторами  для  доступа и управления определенной системой
      информации, например: 
          a$=DATE$             -считать системную дату
          TIME$="00:00"        -установить системное время 
         Метаоператоры представляют  собой  директивы компилятору. Если
      быть  точными,  они  не  являются  частью  языка, но вместо этого
      работают  на  другом  уровне,  управляя  поведением  компилятора,
      например: 
          $INCLUDE "module1.tbs"-загрузка и обработка включаемого файла
          $STACK &H1000         -см. размер стека 
         Метаоператоры, подобно  субменю  опций  компилятора, управляют
      компилятором  во  время  компиляции,  а  не  компьютером во время
      прогона. Метаоператорам предшествует знак доллара ($) для отличия
      их  от  обычных  операторов.  В  строке  может  быть  только один
      метаоператор  и,  в  отличии  от некоторых других компилированных
      Бейсиков, они не помещаются внутрь REMARKS (замечаний). 

                              Формат справочника
                             -------------------

         Каждый  вход  справочника  содержит описание, синтаксис, общие
      замечания   и   пример   использования   оператора,  функции  или
      процедуры.   Где   это   приемлемо,   связанные   входы  снабжены
      перекресными  ссылками, оговорены любые ограничения применения, а
      также  отмечены  любые  различия  в использовании их в Турбо-Бей-
      сике и интерпретаторе Бейсика. 
         Ниже    приведены   соглашения,   касающиеся   синтаксического
      описания, используемого в алфавитном порядке команд. 

                              Числовое выражения
                             -------------------

         Числовая  константа, числовая функция или числовая переменная,
      либо   их  комбинация,  в  которой  используются  арифметические,
      логические    операторы    и    операторы    отношения.    Иногда
      специфицируется   тип   числового   выражения,   например   целое
      выражение: 
             16
             X
             16^X
             SIN(3.14159)
             SIN(X/(16*X))

                             Строковое выражение
                             --------------------

         Строковая   константа,   строковая  переменная  или  строковая
      функция,  либо  их  комбинация,  опционально  включающая  в  себя
      оператор сцепления, знак плюс (+). Например: 
           "CAT"
           a$+"CAT"
           LEFT$(a$+"CAT$",4)

                              Спецификация файла
                             -------------------

         Строчное  выражение описывающее имя файла MS-DOS (восемь литер
      с  опциональным  трехлитерным  расширением, которому предшествует
      точка,   регистр   безразличен),   возможно   включающее  в  себя
      спецификацию   привода  и/или  прохода.  За  исключением  случаев
      снабженных   замечаниями,  имена  файлов  должны  выражаться  как
      строчные   переменные,   либо   заключаться  в  двойные  кавычки,
      например: 
          "MAYFIRST.BAS"
          "turbobas\myfirst.bas"
          "a:\turbobas\myfirst.bas"

                                    Проход
                                   -------

         Строчное  выражение,  описывающее  законный  субсправочник  на
      зарегистрированном приводе. Например: 
          "\TURBOBAS"
          "GAMES"

                                     LPR
                                     ----

         "Точка   последней  ссылки"  (LPR)  используется  как  неявное
      координатное   значение   в  некоторых  графических  операциях  и
      устанавливается большинством операторов графики . 

                                    Метка
                                    ------

         Метка  представляет  собой либо алфавитно-цифровую метку, либо
      номер строки, идентифицирующие программную строку. Номера строк и
      метки более или менее взаимозаменяемы в синтаксисе Турбо-Бейсика,
      за исключением того, что метки должны появляться в строке сами по
      себе, как таковые. 

                         Типографические особенности
                         ----------------------------

         Курсивом   указывают   зоны   команд,   подлежащие  заполнению
      специальной информацией области применения, например: 
          REG register,value 
         Текстом   в   литерах  верхнего  регистра  обозначается  часть
      команды, которая должна присутствовать дословно, например: 
           RESUME NEXT 
         Квадратные  скобки  ([])  обозначают,  что  заключенная  в них
      информация является опциональной, например: 
          OPEN filispec as [#]filenum
      означает,  что  вы  можете включать знак номера (#) перед номером
      файла  в  операторе  OPEN  (открыть),  либо отказаться от него по
      вашему выбору. Поэтому законны обе следущие команды:
          OPEN "cust.dta" AS 1
          OPEN "cust.dta" AS #1 
         Фигурными  скобками  ({})  указывается  выбор  двух  или более
      опций,  одна  из которых должна использоваться обязательно. Опции
      разделяются вертикальной чертой. Например: 
          KEY {on!off}
      означает,  что  законны оба заявления KEY ON и KEY OFF, а само по
      себе KEY незаконно. 
         Многоточием (...)отмечается,что часть команды может повторится
      столько раз,сколько необходимо.Например: 
          READ  variable[,variable]...  
      означает,   что   одним   оператором  READ  может  отрабатываться
      множество переменных, разделяемых запятыми: 
          READ a$
          READ a$,b$,a,b,c 
         Три вертикально расположенные точки указывают на пропуск одной
      или более строк программного текста: 
          FOR n=1 to 10
          .
          .
          .
          NEXT n

                              Метаоператор $COM
                              ------------------

      Функция     $COM     распределяет  пространство  для  приемного
      -------             буфера последовательного входного устройства.

      Синтаксис   $COM n size 
      ---------

      Замечания  n указывает коммуникационный адаптер (1 или 2), а size
      ---------  (размер)  есть  целая  константа, определяющая емкость
      буфера  для  этого  адаптера  (от  0 до 32767). По умолчанию-256.
      Значение  по  умолчанию  может устанавливаться и храниться в меню
      опций.  Значения  по умолчанию могут изменяться метаоператорами в
      программе. 

      Ограничения       Размер буфера специфицируемый в операторе
      -----------       $COM,  должен  находиться в диапазоне  от  0
      до  32767. Интерпретаторный Бейсик будет располагать буфер одного
      и  того  же размера для обоих коммуникационных входных устройств,
      если  они  существуют.  В Турбо-Бейсике размеры этих двух буферов
      устанавливаются независимо. 

      Различия          При  возбуждении  в интерпретаторном  Бейсике
      --------          эта  функциональность  доступна  только через
                        параметры камандной строки. 

      Пример:           'оператор $COM используется для изменения
                        'пространства  по умолчанию, распределяемого
                        'для буферов последовательных входных
                        'устройств.    Настроить    подпрограмму    для
                        'обработки COM- ввода 
           $COM 1 1024  'настраивается буфер ввода 1 К
           ON COM(1) GOSUB   получить комввод
           COM(1) ON    'включить обработку  COM ввода
           OPEN "COM1" AS #1 'oткрыть переменную файла как COM1
           PRINT "Нажмите любую клавищу для завершения программы"
           'пока клавиша еще не нажата
           WHILE NOT INSTAT
             LOCATE 2.1
             PRINT TIME$ 'отобразить время
           WEND
           END 'конец программы
           ПолучитьКомввод : 'обработать COM-порт прерывание
           'считать ввод из буфера COM-порта
           INPUT #1,КомПортВвод (заголовок %)
           RETURN
           КонецВвода: 'конец COM-порт ввода
           PRINT "Достигнут конец ввода"
           END 'конец программы

                            Метаоператор $DYNAMIC
                            ----------------------
      Функция    $DYNAMIC    заявляет  ,что размещение массива по
      -------                умолчанию  должно быть динамическим. 

      Синтаксис      $DYNAMIC
      ---------

      Замечания      Метаоператор $DYNAMIC не имеет аргументов и
      ---------      заявляет, что тип размещения массивов по умолчанию
      должен  быть динамическим. Пространство для динамических массивов
      распределяется   во   время   прогона.   Для  ликвидации  массива
      используйте  оператор  ERASE.  Динамические  массивы  дают  более
      эфективное  использование  памяти.  Массивы  можно  заявлять  как
      динамические  с  помощью  ключевого  слова DYNAMIC или аргументов
      выражениа  в  операторе  DIM.  Массивы с переменными размера- ми,
      которые  заявляются  как  общие  или  локальные в процедуре, либо
      функции, всегда динамические. 

      СМ.также  DIM
      --------  ERASE
                FRE
                $STATIC

      Пример    'настроить обработчик ошибок
      -------   ON ERROR GOTO ОшибокОбработчик
                'отобразить память,имеющуюся в массивном пространстве
                PRINT FRE(-1)
                DIM БольшойМассив(10000) 'заявить дин.массив
                БольшойМассив(6666)=66
                PRINT FRE(-1)
                PRINT БольшойМассив(6666)
                END 'конец прогона
                Ошибкообработчик:
                PRINT "ошибка типа " ERR;
                PRINT "произошла по адресу" ERADR
                END

                             Метаоператор $EVENT
                             --------------------
      Функция   $EVEN   управляет генерированием кода отслеживания
      -------           событий.


      Синтаксис    $EVEN {ON!OFF}
      ---------

      Замечания        Если  ваша  программа  содержит  какое-либо
      ---------        средство  захвата  событий  определенного  сорта
      (например, ON KEY, ON COM), то $EVENT по умолчанию ON (вкл.), что
      приводит к генерированию компилятором кода проверки события между
      всеми   операторами   вашей   прграммы.   Если   в  программе  не
      предусмотрено  отслеживание,  то $EVENT находится в состоянии OFF
      (выкл.) и код события не генерируется. 
            $EVENT  дает  вам  возможность  управлять  тем, какие части
      программы  будут  проходить без проверки событий. Если существует
      какая-то   зона,  где  максимальная  скорость  важнее  ответа  на
      случайное  событие,  то  заключайте эту часть программного кода в
      скобки, образуемые метаоператорами $EVENT OFF и $EVENT ON. 

      Пример:   'пример события
                ON TIMER(1) gosub ПотеряВремени
                timer on
                print "Медленный цикл"
                x=таймер
                for i=1 to 10000
                 i=i+i-i
                next i
                y=таймер
                print "Время цикла есть" y-x
                $event off
                print "быстрый цикл"
                x=таймер
                for i=1 to 10000
                 i=i+i-i
                next i
                y=таймер
                print "время цикла естьЭ" y-x
                end
                ПотеряВремени:
                for j=1 to 1000:j=j+j-j:next j:print
                return

                        Метаоператоры $IF/$ELSE/$ENDIF
                        ------------------------------

      Функция     $IF,$ELSE и $ENDIF    определяют части программы,
      -------                           подлежащие  компилированию  или
      от   него  уклоняющиеся  (часто  этот  способ  называют  условным
      компилированием). 

      Синтаксис   $IF константа
      ---------   .
                  .операторы
                  .
                  [$else
                  .
                  .операторы]
                  .
                  $ENDIF

      Замечания         Константа-это  именованная  константа   или
      ---------         постоянное  значение. Если константа не нулевая
      (TRUE), то операторы между $IF и $ELSE компилируются, а операторы
      между  $ELSE  и  $ENDIF  не компилируются. Если Константа нулевая
      (FALSE),   то   операторы  между  $IF  и  $ELSE  игнорируются,  а
      находящиеся    между   $ELSE   и   $ENDIF   компилируюся.   $ELSE
      устанавливается   опционально,   но   $ENDIF   требуется  всегда.
      Операторы   условной  компиляции  могут  вкладываться  до  уровня
      глубиной 256. 

      Пример    %ЦветнойЭкран=1  'установка именованной константы на
                                 'ненулевое значение указывает работу
                'на цветном экране, установка нулевого значения указы -
                'вает работу в монохромной системе

                $if %ЦветнойЭкран
                 def seg=&HB800 'адрес памяти графического экрана
                $else
                 def seg=&HB000 'адрес памяти монохромного экрана
                for i%=0 to 4000 step 2
                 poke i%,asc("A") 'заполнить экран буквами "A"
                next i%
                'хранить все 4000 байтов видео-прогона
                bsave "$if.dta",0,4000
                end

                              Метаоператор $INCLUDE
                              ---------------------

      Функция     $INCLUDE    включает текстовый файл
      -------

      Синтаксис   $INCLUDE файласпец.литерал
      ---------

      Замечания         Используйте $INCLUDE для компилирования текста
      ---------         другого   файла   вместе   с   текущим  файлом.
      ФайлаСпец.литерал  это  строчная  константа, а представляемый его
      файл  должен  следовать  соглашениям DOS об имени файла и в то же
      время  представлять  собой  исходный файл Турбо Бейсика. Если для
      включенного  файла  не  специфицируется  его  имя, предполагается
      расширение .BAS. 
            Механизм    $INCLUDE    вызывает   трактовку   компилятором
      включаемого  файла  таким  образом,  как  если  бы  он  физически
      существовал  в первоначальном тексте в данной точке. Это дает вам
      возможность   разрывать  вашу  программу  на  управляемые  куски.
      Принцип  рабочий  файл/главный  файл  Турбо  Бейсика  относится к
      $INCLUDE.  В иллюстративных целях рассмотрим файлы CALCAREA.BAS и
      CONST.BAS:
            Файл CALCAREA.BAS
            print "программа вычисления площади круга"
            print "если бы вы находите эту программу полезной"
            print "пожалуйста вышлите 3500 долларов"
            print
            print "Франк Борланд"
            print "Скатте Валлей,СА95066"
            print "-------------------------------------------------"
            $include "CONST.BAS"
            input "ввести радиус",r
            print "площадь ="pi*r*r

            Файл CONST.BAS
            'общецелевые константы
            pi=ANT(1)*4
            %истинно=-1
            %ложно=0
            %максX=319
            %максY=199

         Чтобы  компилировать эту программу CALCAREA должен быть сделан
      "главным  файлом",  посколько  это  файл  с  оператором $INCLUDE.
      Рабочий  файл  двигается  туда  и  обратно  по отношению к любому
      другому,  в  зависимости  от  нужд редактирования (т.е если имеет
      ошибки).   Вне   зависимости   от   текущего  рабочего  фай-  ла,
      компилирование  всегда  начинается  с  CALCAREA (главного файла).
      (Более детально см. в разделе "Главное меню" гл.3).
         Когда компилятор Турбо Бейсика встречает метаоператор $INCLUDE
      в  строке  7 файла CALCAREA, он загружает и начинает считывать из
      CONST.BAS.  Когда  этот код исчерпывается, компилятор захватывает
      оставленное им место в первоначальной программе.
         $INCLUDE  может вкладываться на глубину 5; т.е включаемый файл
      может иметь свои $INCLUDE. 

      Пример   'хранить следущее в файле "example.inc"
      ------   sub СкажиАлло 'процедура вывод
                print "Алло"
               end sub
               'далее следунт главная программа
               $include "example.inc" 'включить исходный файл
               call СкажиАлло
               end

                             Метаоператор $INLINE
                            ---------------------

      Функция     $INLINE      заявляет   внутристрочный   машинный
                               код во внутристрочной субпроцедуре. 

      Синтаксис   $INLINE [Список байтов][файлспец.литерал]
      ---------

      Замечания   $INLINE      может  быть  только  в   пределах   тела
      ---------                внутристрочной субпроцедуры. 
         Список   байтов  - это  последовательность  целых  значений  в
      диапазоне  от  0 до 255, подлежащих кодированию непосредственно в
      обьектном коде в данной точке. 
         ФайлСпец.литерал  -  это  имя  файла,который  содержит  код, в
      который   вставляется   внутристрочная.   Этот  код  должен  быть
      переопределяем,   а   также  должен  защищать  и  восстанавливать
      следующие  регистры:  стековый  сегмент(SS),  стековый  указатель
      (SP),  базовый  указатель  (BP),  сегмент  данных (DS). Внутрист-
      рочный  код  может  иметь  ссылку  на  пораметры с использованием
      относительной адресации BP. Более подробная информация содержится
      в  приложении  А "Числовые соображения" и приложении С "Интерфейс
      языка ассемблера". 

        Пример   sub визг inline
                 '$inline вызывает выдачу визга звуковым излучателем
                 $inline &HBA,&H00,&H07,&HE4,&H61,&H24,
                 $inline &HFC,&H34,&H02,&HE6,&H61,&HB9,
                 $inline &H40,&H01,&HE@,&HFE,&H4A,&H74
                 $inline &H02,&HF2
                 end sub
                 call визг
                 end

                            Метаоператор $SEGMENT
                            ---------------------

      Функция   $SEGMENT       заявляет новый кодовый сегмент.
      --------

      Синтаксис $SEGMENT
      ---------

      Замечания          Используйте   "безаргументные"   метаоператоры
      ---------        $SEGMENT  для  разрыва вашей исходной программы,
      когда  компилятор  сообщает,  что  превышено  ограничение 64К для
      кодового сегмента: ERROR 409 segment overflow press  (ошибка
      409 переполнение сегмента нажмите ) 
         Все,   что   находится  после  метаоператора  $SEGMENT,  будет
      помещено  в  новый  кодовый  сегмент. В результате любой оператор
      управления   программой   (GOSUB,  GOTO),  передающее  управление
      черезэту  границу,  будет  реализовать межсегментное перемещение,
      вызов  или  переход,  для  которого  требуется  несколько  больше
      времени  и  стекового пространства. Этот эффект можно минимизиро-
      вать,размещая  операторы  $SEGMENT  там, где в программе проходят
      естественные  линии  деления ее на части; например между главными
      подпрограммами  или  главной  программой  и кодом возбуждения или
      завершения.
         В  программе  на  Турбо  Бейсике  может  быть  до  16  кодовых
      сегментов. Данные состояниа компилирования, распечатываемые после
      его   завершения,   будут  показывать  размер  каждого  сегмента,
      отделяемого косой чертой(/).

      Примечание:   Вы  не  можете  использовать  оператор  $SEGMENT  в
      -----------    структурированном    блоке:   for/next,   do/loop,
      while/wend, if block. 

        Пример    sub Процедура1
                  print "это пустая процедура"
                  end sub
                  $segment 'определить второй сегмент
                  sub Процедура2
                   print "это другая пустая процедура"
                  end sub
                  $segment 'определить третий сегмент
                  sub Процедура3
                   print "Это другая пустая процедура"
                  end sub
                  call Процедура1
                  call Процедура2
                  call Процедура3
                  end

                             Метаоператор $SOUND
                             -------------------

      Функция  $SOUND     заявляет емкость фонового музукального буфера
      -------- 

      Синтаксис $SOUND       размер буфера
      ---------

      Замечания Размер буфера-это числовая константа, которая указывает
      ---------  нотную  емкость фонового буфера оператора PLAY от 1 до
      4096.  Увеличение  емкости  буфера  до  максимального  числа нот,
      которые   вы   намерены  играть  в  данной  программе,  исключает
      необходимость   отслеживания  счетчика  нот  (и  соответствующeго
      ухудшения качества исполнения).
         Для  каждой  ноты  требуется  8  байтов  памяти;  по умолчанию
      емкость  равна  32  нотам  или  256 байтам. Значение по умолчанию
      можно менять и хранить, пользуясь входом музыкального буфера меню
      опций.  Значения  по  умолчанию  преодолеваются включенными в код
      метаоператорами. 

                             Метаоператор $STACK
                             --------------------

      Функция   $STACK заявляет размер стека периода прогона.
      --------

      Синтаксис $STACK отсчет
      ---------

      Замечания  Отсчет  -  числовая  константа от 1024 до 32 К. $STACK
      ---------  определяет  сколько  памяти  в  период  прогона  будет
      выделено  на  стек.  Стек  используется  для  адресов возврата во
      времени  вызовов  подпрограмм и в структурированных операторах, а
      также   для   локальных  переменнных  многострочных  функций.  По
      умолчанию (минимальный) размер состовляет 1024 (400Н) байтов.
         Вы  можете  пожелать  размещить больше стекового пространства,
      если   ваша   программа   ненормально   структурированта,  в  ней
      используются   большие   локальные   переменные  или  выполняется
      реккурсивность.  Если  вы  подозреваете что программа выбегает за
      стековое  пространство, перекомпилируйте ее с опцией тестирования
      стека  из меню опций. Программа, генерированная с этим отладочным
      переключателем   во   включенном   состоянии,   перед   входом  в
      подпрограммы,  процедуры  и  функции  всегда  проверяет  наличное
      стековое   пространство.   Значения   по  умолчанию  продлеваются
      включенными в код метаоператорами. 
         Вы можете проверять для себя величину стекового пространства с
      помощью функции FRE(-2). 
            СМ. также FRE

      Пример    'дается стек 4096 байтов
                $stack &H1000
                print fre(-2)      'отображается   величина   наличного
                                   'стекового прост ранства 

                             Метаоператор $STATIC
                            ---------------------

      Функция  $STATIC    заявляет, что размещаемый по умолчанию массив
      -------             должен быть статическим. 

      Синтаксис          Метаоператор  $STATIC  не  имеет аргументов и
      ---------          заявляет, что массив будет статического типа.
         Пространство  для статических массивов распределяется во время
      компилирования. Массивы постоянных размеров являются статическими
      всегда,  за  исключением случаев заявления массива как локального
      для  процедуры  или функции, либо если один и тот же массив имеет
      более одного размера. 
         Статические массивы невозможно стирать.Оператором ERASE каждый
      элемент массива только возбуждается в ноль или ноль-строку. 
         Следует   заметить,  что  метаоператор  $STATIC,  несмотря  на
      косметическое  подобие,  не  имеет  ничего  общего  с  оператором
      STATIC, которое определяет специальный тип локальной переменной в
      процедурах и функциях. В режиме умолчания компилятора - $STATIC.
      CМ. также
           DIM
           $DYNAMIC
           ERASE
           FRE

      Пример  $STATIC 'явно определить статические массивы
              print "Наличная память: ",fre(-1)
              'память остается той же самой
              dim a(50) 'а-статический массив
              print "наличная память",fre(-1)
              n=50
              'в-это динамический массив, т.к используется в операторе
              'DIM как аргумент выражения
              dim b(n)
              print "Наличная память ",fre(-1)
              'теперь ее меньше
              erase a
              print "Наличная память",fre(-1)
              'никакого отличия нет, поскольку А не перераспреде-
              'ляется, а только обнуляется 
              erase b
              print "наличная память ",fre(-1)
              'больше памяти,поскольку динамические массивы перерас- 
              'пределяются
              end

                                 Функция ABS
                                 -----------

      Функция  ABS    возвращает  абсолютное  значение
      -------

      Синтаксис Y=ABS    (числовое выражение)
      ---------

      Замечания       ABS  возвращает  абсолютное   значение  числового
      ---------       выражения.  Абсолютное  значение  X указывает его
      величину  вне зависимости от знака. Например, абсолютное значение
      -3 равно 3; абсолютное значение +3 есть 3.

      Пример    'ABS возвпащает текущее расстояние от исходной точки,
      ------    'беря абсолютное значение расстояния
                'назначить местоположение
                Местоположение=-6.5
                'отобразить текущее местоположение
                print "текущее местоположение ",Местоположение#
                'отобразить тек.расстояние от исходной точки
                print "расстояние от исх.точки", abs (Расстояние#)
                  (Местоположение#)

                                 Функция ASC
                                 -----------

      Функция  ASC        возвращает код ASCII первой литеры строки.
      -------

      Синтаксис           Y=ASC(строчное выражение)
      ---------

      Замечания    ASC возвращает код ASCII (от 0 до 255) первой литеры
      ---------     строчного  выражения.  Чтобы  преобразовать целое в
      литерную  строку,  используйте  функцию  CHR$, которая при подаче
      ASCII-значения дает одно-литерную строку.

      Ограничения    Строчное выражение, подаваемое в ASC не может быть
      -----------   нулевой (пустой) строкой, иначе генерируется ошибка
      5 (вызов незаконной функции).
         См. также CHR$

      Пример   print "ASCII- значение А есть",asc("А")

                                 Функция ATN
                                 -----------

      Функция   ATN           определяет тригонометрический арктангенс.
      -------

      Синтаксис               Y=ATN(числовое выражение)
      ---------

      Замечания ATN определяет арктангенс (инверсию тангенса) числового
      ---------      выражения. ATN выдает результат двойной точности.
         Результат,  как  и во всех операциях с углами в Турбо Бейсике,
      представляется в радианах, а не в градусах. Радианы - это единицы
      угловых  измерений  т.е  математически более удобна, чем градусы.
      Когда углы специфицируются в градусах в диапазоне от 0 до 360, их
      спецификация  в  радианах  лежит  в  диапазоне  от 0 до 2п, при 0
      радиан  на  положительной  оси  X  и  возрастанием против часовой
      стрелки.  Это  дает  положительную  ось  Y  (90градусов)  при п/2
      радиан,  отрицательную  ось  X  (180  градусов)  при  п  радиан и
      отрицательную ось Y (270 градусов) при 3п/2 радиан.
                        90=п/2рад.
                               ^
                               |
                               |
                   180=п рад   |
                   ------------+----------->0=0рад.
                               |
                               |
                               |
                               |
                               270=3п/2 рад.
         Если   вы   более   тяготеете   к   градусам,   радианы  можно
      преобразовать в градусы посредством умножения значения в радианах
      на 57.2958. Например, арктангенс 0.23456 есть 
            ATN (.23456) радианы
            =0.230395 радианы
            =(0.230395*57.2958)градусы
            =12.2градусы

         Преобразовывайте градусы в радианы посредством  умножения  на
      0.0174533. Например,
            14 градусы
            =(0.0174533*14) радианы
            =0.24435 радианы

         Вместо  того,  чтобы  запоминать  коэффициенты  преобразования
      радианы/градусы,  вычисляйте их для себя запомнив их взаимосвязь:
      2Пи  радиан  равны полной окружности, т.е 360 градусам, так что 1
      радиан  есть  180/п  градусов,  и  наоборот, 1 градус равен п/180
      радиан.
         Вам  в  качестве  справки: Пи  с  16-тизначной  точностью есть
      3.141592633589793 Это значение можно вычислить из выражения 
            pi#=4*atn(1)
         Градус-радианные  и  радиан-градусные  преобразования являются
      хорошим приложением для однострочных функций. 
      см. также COS
               SIN
               TAN
      Пример   'вычислить значение pi,используя  atn
               pi#=4*atn(10
               print pi#

                                Оператор BEEP
                                -------------

      Функция  BEEP      обеспечивает звучание излучателя звука.
      --------

      Синтаксис     BEEP играет тон 800 гц через динамик в течении 0.25
      ---------     сек.  Опциональый числовой аргумент вызывает отсчет
      BEEP-сигналов.   BEEP   имеет   то  же  действие,  что  и  литера
      колокольчика  ASCII  (код7)  при выводе на экран; например, print
      CHR$(7).  Более  мелодичные  тоны  можно создавать с помощью опе-
      раторов SOUND и PLAY.
        См. также PLAY
            SOUND

        Пример    BEEP 2 'привлеч внимание пользователя

                                 Функция BIN$
                                 ------------

      Функция   BIN$       двоичнную строку как эквивалент числа
      -------

      Синтаксис            s$=bin$(числовое выражение)
      ---------

      Замечание      Числовое выражение лежит в диапазоне  от -32768 до
      ---------      65535. Перед  созданием строки любая дробная часть
      округляется.   Если   числовое   выражение   отрицательно,  число
      возвращается в форме двоичного дополнения.

        Cм также  HEX$
                  OCT$

       Пример 'в этом примере отображаются десятичное и двоичное
              'значение для чисел от -5 до 5
              print using "двоичный эквивалент -##=&";i%,bin$(i%)
              next i%
              end

                                Оператор BLOAD
                                --------------

      Функция   BLOAD      загружает в память файл создаваемый
      -------              с помощью оператора BSAVE.

      Синтаксис            BLOAD файласпец.[,адрес]
      ---------

      Замечания  Файласпец-это строчное выражение, специфицирующее файл
      ---------  для загрузки, которое должно удовлетворять стандартным
      соглашениям  DOS  об  наименовании  файлов.  Адрес  -опциональное
      числовое выражение от 0 до 65535, которое указывает в какое место
      текушего   сегмента   должен   быть  загружен  файл.  Если  адрес
      опускается,  BLOAD  помещает  файл  по  адресу из которого он был
      изначально взят на хранение с помощью оператора BSAVE.
         Если   адрес  задается,  он  преодолевает  хранимую  с  файлом
      адресную,  информацию, генерированную оператором BSAVE. Поскольку
      не  делается  никакой  проверки  адреса  в BLOAD, вполне возможна
      небрежная  загрузка  файла  в  верхнюю  часть  DOS  и /или в вашу
      программу и разрушение системы.

      Ограничения BLOAD не будет осуществлять непосредственную загрузку
      -----------     памяти EGA (улучшенного графического адаптера). 

       Cм также    BSAVE
                   DEF SEG

       Пример   rem загрузить графический экран
                def seg &HB800
                bload "картинка",0

                                Оператор BSAVE
                                --------------

      Функция BSAVE       сохраняет некоторый диапазон данных на диске
      --------

      Синтаксис           BSAVE файласпец,адрес,длина
      ---------

      Замечания     Файласпец-строчное выражение, специфицирующее файл,
      ----------    в который подлежат  записи данные. Файласпец должно
      следовать  стандартным  соглашениям  DOS  об  именовании  файлов.
      Адрес-это   числовое   выражение  в  диапазоне  от  0  до  65535,
      указывающее  смещаемую  часть  адреса, с которого файласпец будет
      сохраняться  (см  оператор  def seg). Длина есть число байтов для
      хранения,  от  0 до 65535. BSAVE обеспечивает хранение некоторого
      диапазона  памяти на диске (эффективно храниться цифровая выборка
      указанного  диапазона  во  время  BSAVE).  Файлы,  создаваемые  с
      помощью  BSAVE,  можно потом перегружать с помощью команды BLOAD;
      опционально  файлы  можно  перегружать по другому адрксу, чем за-
      нятый  при BSAVE. BSAVE и BLOAD часто используются для хранения и
      загрузки    экранных    образов   посредством   непосредственного
      считывания и записи памяти дисплея. Дисплейный буфер Монохромного
      Дисплейного  Адаптера  имеет  длину  4000  байтов и начинается на
      смещении   0  сегмента  &HB000.  Дисплейный  буфер  для  Цветного
      Графического  Адаптера  состовляет 4000 байтов в текстовом режиме
      (SCREEN  0) и 16384 байта как в режимах графики средней и высокой
      разрешающей  способности; оба начинаются на смещение 0 в сегменте
      &HB500.

      Ограничения  Перед исполнением оператора BSAVE программист должен
      ------------   явно   установить  сегмент, который  должен  будет
      храниться на диске, используя оператор DEF SEG.

       Cм также BLOAD
               DEF SEG

        Пример   'BSAVE заполняет экран буквами А и обеспечивает 
                 'хранение на диске
                 for i%=1 to 2000
                  print "A"
                 next i%
                 'определить экран для BSAVE
                 def seg=&HB000
                 'хранить монохромный видео-экран
                 bsave "text.pic",0,4000
                 'удвоенное число литер поскольку имеются атрибуты
                 end

                                Оператор CALL
                                -------------

       Функция   CALL      вызывает процедуру (подпрограмму)
       -------

      Синтаксис            CALL процимя[(список параметров)]
      ---------

      Замечания     Процимя-это имя   процедуры,определяемое  где-то  в
      ----------    прогрмме с помощью оператора SUB. Список параметров
      есть   опциональный   список   разделяемых  запятыми  переменных,
      выражений и /или констант, передаваемых в Процимя. Существует три
      типа   SUB-процедур:  STATIC,  стандартные  процедуры  и  INLINE.
      Предыдущее  обсуждение  применимо  ко  всем типам; однако способ,
      которым  компилятор  обрабатывает  списки  параметров, зависит от
      типа  SUB-процедуры.  Количество  и  тип аргументов, подаваемых в
      процедурутребует   согласованности   со   списком   параметров  в
      определении  Процимя;  иначе возникает ошибка несогласован- ности
      параметрав   периода   компиляции.  Если  SUB-процедура  является
      процедурой  INLINE, число аргументов переменно и никакая проверка
      набора  параметров  не  выполняется.  Сама  процедура  SUB INLINE
      ответственна  за  то  как  узнать или определить количество и тип
      параметров  в нее неподаваемых. (Более подробно о SUB INLINE см в
      приложении С "Интерфейс языка ассемблера"). Когда процедурные ар-
      гументы  подаются  посредством ссылки (т.е являются переменными),
      они  доступны  изменению  вызвынной  процедурой. Когда переменная
      заключена  в  скобки,  она подается значением и исходное значение
      изменено  быть  не  может.  Следует  заметить,  что  выражения  и
      константы   всегда   подаются   значением.   Аргументы   массивов
      специфицируются  с  использованием  пустого  набора  скобок посде
      имени массива . Целые массивы всегда подаются посредством ссылки.
      Например: 
            CALL СуммаМассив (а())  'подать массив а в СуммаМассив
            CALL СуммаМассив (а(3)) 'подать элемент 3 массива а в
                                    'СуммаМассив

       Cм также $INLINE
                SUB
       Пример: DIM Массив (1) 'заявить массив из 2 элементов
               SUB ТестПроцедура (i%,l&,s!,d#,e,a(1))
               'эта  процедура  просто выводит значения каждого 
               'подаваемого в нее параметра 
                print i%;l&;s!;d#;e;a(0)
               end sub
               Целое%=1
               ДлинноеЦелое&=2
               ЕдиничнаяТочность!=4
               Массив(0)=5
               call ТестПроцедура (Целое%, ДлинноеЦелое&, 
               ЕдиничнаяТочность!,ДвойнаяТочность#,целое%^2,Массив())
               end

                            Оператор CALL ABSOLUTE
                            ----------------------
      Функция  CALL  ABSULUTE возбуждает подпрограмму языка ассемблера.
      ------- 

     Синтаксис            CALL ABSOLUTE адрес(список параметров)
     ---------

      Замечания  Адрес-это числовой скаляр, содержащий смещение внешней
      ----------    подпрограммы,   подлежащей   возбуждению.   Сегмент
      определяется  самым  последним  заявлением  DEF SEG. Адрес должен
      находится  в диапазоне от -32768 до 65535. Отрицательные значения
      будут  преобразовываться  компилятором  в  положительные.  Формой
      списка  параметров  поддерживается  совместимость  с  интерпрета-
      тором   Бейсика   посредством   подачи  на  стек  коротких  целых
      параметров.    Только   эта   форма   допускает   подачу   целых.
      (См.приложение  С  "Интерфейс  языка ассемблера". Буфер регистров
      загружается  на  поцессорные регистры как раз перед CALL ABSOLUTE
      или  CALL  INTRRUPT  и  отпрвляются  обратно на хранение сразу же
      после  прогона.  В  любое  данное  время буфер содержит состояние
      процессора,  в  котором  он  находился  при  компилировании самой
      последней внешней процедуры . 
         Буфер  регистров доступен с помощью оператора и функции REG, в
      которых    используется   числовой   аргумент   для   ссылки   на
      соответствующий регистр ,как показано ниже: 
      -----------------------------------------------------------------
               Аргумент регистра                Регистр
      -----------------------------------------------------------------
            0                                Флаги
            1                                АХ
            2                                ВХ
            3                                СХ
            4                                DX
            5                                SI
            6                                DI
            7                                BP
            8                                DS
            9                                ES
      -----------------------------------------------------------------
         REG,   как   оператор,   загружает  выбранный  элемент  буфера
      регистров указанным целым значением: 
         REG 2,&H1000 'загрузить 1000H на ВХ буфера регистров 
         REG, как  функция, возвращает  значение  выбранного  элемента
      буфера регистров: 
         PRINT REG (2) 'вывести значения из ВХ буфера регистров 
         Программист  ответственнен за защиту регистров сегмента данных
      (DS),  сегмента  стека (SS), указателя базы (BP), указателя стека
      (SP) 
        Cм также CALL INTERRUPT
              DEF SEG
              REG
      Пример  defint a-z
              dim a(100)
              dim ЗаполненияПодпрограмма (10)
              ЗаполненияПодпрограмма (0)=&HF2FC
              ЗаполненияПодпрограмма (1)=&HCBAA
              reg 1,-1
              reg 3,101*2
              reg 9,varseg(a(0))
              reg 6,varptr(a(0))
              def seg=varseg(ЗаполненияПодпрограмма (0))
              print a(1)
              while not instat:wend
              ЗаполнитьАдрес=varptr(ЗаполненияПодпрограмма(0))
              call absolute ЗаполнитьАдрес '(reg)
              print a(1)
              end


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