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

Синтаксис         y = ABS (numeric expression)

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

Пример            ' ABS возвращает текущее расстояние посредством
                  ' учета абсолютного значения размещения

                  ' назначить размещение
                  Location# = - 6,5
                  ' показать текущую позицию
                  PRINT "Current location:", Location#
                  ' показать расстояние
                  PRINT "Distance:", ABS(Location#).

Функция ASC
------------------------------------------------------------------
Назначение        ASC возвращает код ASCII первого знака строки.

Синтаксис         y = ASC (string expression)

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

Ограничения          Символьный аргумент ASC не может быть пустой
                  строкой. Если же  это происходит,  генерируется
                  ошибка  выполнения 5, Illegal Function Call.

Смотреть также    CHR$

Пример            PRINT "The ASCII value of is"; ASC("A")

Функция АТN
---------------------------------------------------------------
Назначение        ATN возвращает тригонометрический арктангенс.

Синтаксис         y = ATN (numeric expression)

Комментарий       ATN возвращает с удвоенной точностью арктангенс
                  численного выражения. Результат,  как и во всех
                  операциях с углами в ТВ, выражается в радианах,
                  а не в градусах.
                     Если вам удобнее  работать с градусами,  ра-
                  дианы  можно перевести в градусы по соотношению

                        1 радиан = 180/пи градусов;
                        1 градус = пи/180 радиан.

                     Для справки: пи = 3.141592653589793.
                     Данное значение можно вычислить по выражению
                  pi# = 4 * ATN(1)
                     Перевод градусов в радианы  и радианы в гра-
                  дусы  является  хорошим  применением  для одно-
                  строчных функций.

Смотреть также    COS , SIN , TAN

Пример            ' вычислите значение PI используя ATN
                  PI# = 4*ATN(1)
                  PRINT PI#

Оператор BEEP
------------------------------------------------------------------
Назначение        BEEP озвучивает динамик.

Синтаксис         BEEP [count]

Комментарий       BEEP воспроизводит тон на 800 Hz через встроен-
                  ный  динамик  за  0.25 секунды.  Необязательный
                  численный аргумент вызывает выполнение соответ-
                  ствующего количества операторов BEEP.
                     BEEP имеет такой же эффект, как и вывод сим-
                  вола звуковой сигнализации ASCII (код 7) на эк-
                  ран. Например, PRINT CHR$(7). Более  мелодичные
                  тоны создаются при помощи  операторов  SOUND  и
                  PLAY.

Смотреть также    PLAY , SOUND

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

Функция BIN$
------------------------------------------------------------------
Назначение        BIN$ возвращает двоичный символьный  эквивалент
                  числа.

Синтаксис         s$ = BIN$ (numeric expression)
Комментарий       численное выражение находится  в  диапазоне  от
                  -32768 до 65535.  Любая дробная часть  округля-
                  ется до того, как создается строка.  Если  чис-
                  ленное выражение отрицательное, BIN$ возвращает
                  дополнительный код числа.

Смотреть также    HEX$ , OCT$

Пример            ' Этот пример иллюстрирует как десятичные,так и
                  ' двоичные значения от -5 до 5.

                  FOR l% = -5 to 5       ' от -5 до 5
                  ' показывает десятичные и двоичные значения l%
                  PRINT USING "The binary equivalant of -## =&";_
                               l%,BIN$(l%)
                  NEXT l%

                  END       ' закончить программу

Оператор BLOAD
------------------------------------------------------------------
Назначение        BLOAD загружает файл BSAVEd в память.

Синтаксис         BLOAD filespec[,address]

Комментарий       filespec есть  символьное выражение, определяю-
                  щее файл для  загрузки,  оно  должно  следовать
                  стандартным  условным  обозначениям  присвоения
                  имени DOS, факультативно  включая  спецификатор
                  накопителя и/или маршрут. address  представляет
                  собой необязательное численное выражение  от  0
                  до 65535  с указанием где  в  текущем  сегменте
                  должен загружаться  файл.  В  случае  опущения,
                  BLOAD помещает файл на адрес, с которого он был
                  первоначально BSAVEd.
                     Если даётся адрес, он заменяет адресную  ин-
                  формацию, записанную  в  файлах,  произведённых
                  оператором BSAVE. Учитывая тот факт, что на ад-
                  ресе  BLOAD  не  происходит  никакой  проверки,
                  вполне возможно  загрузить файл сверх DOS и/или
                  вашей программы и разрушить систему.

Ограничения       BLOAD не будет загружать непосредственно память
                  EGA.

Смотреть макже    BSAVE , DEF SEG

Пример            REM LoadGraphicsScreen
                  DEF SEG &HB800
                  BLOAD "Pictcre",0

Оператор BSAVE
------------------------------------------------------------------
Назначение        BSAVE записывает диапазон памяти на диске.

Синтаксис         BSAVE filespec,address,length

Комментарий       filespec есть символьное выражение,определяющее
                  файл, в  который  должны  быть занесены данные.
                  filespec должен соблюдать стандартные  условные
                  обозначения присвоения имени DOS, и  может  фа-
                  культативно  включать  спецификатор  накопителя
                  и/или информацию о  маршруте.  adress есть чис-
                  ленное выражение с диапазоном oт 0 до  65535  и
                  указывает на оффсетную часть адреса, с  которой
                  будет записан filespec (см.оператор  DEF  SEG),
                  lenght  (длина)  есть   число  байтов,  которые
                  должны  быть записаны, от 0 до 65535.
                     BSAVE сохраняет объем  памяти  на  диске  (в
                  действительности записывает цифровой моменталь-
                  ный снимок указанного объема  памяти  во  время
                  BSAVE). Файлы, созданные с помощью BSAVE  могут
                  затем перезагружаться с командой BLOAD; факуль-
                  тативно файлы могут быть загружены  по  другому
                  адресу, чем с слудае BSAVE.
                     BSAVE и BLOAD часто используются для  записи
                  и загрузки экранных образов при  помощи  непос-
                  редственно  считывания  и  записывания в память
                  дисплея. Буфера дивплея  Монохромного  Адаптера
                  Дисплея вмещает  4000 байтов  и  начинается  на
                  оффсете 0 в сегменте HB000. Буфер  дисплея  CGA
                  вмещает  4000 байтов в режиме текста (SCREEN 0)
                  и  16384 байта в графическом режиме среднего  и
                  высокого  разрешения; оба начанаются с 0 в сег-
                  менте &HB800.

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

Смотреть также    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 procname [(список параметров)]

Комментарий       procname   представляет  собой  имя  процедуры,
                  определенной где-либо  в  программе  с  помощью
                  оператора SUB. Список параметров является  нео-
                  бязательным, с отдельным занятым списком  пере-
                  менных, выражений, и/или констант,которые долж-
                  ны быть переведены в имя процедуры.
                     Существует 3 типа процедур SUB: STATIC (ста-
                  тические), стандартные процедуры и INLINE (вст-
                  роенные). Всё, о чем здесь говорится, относится
                  ко всем 3 типам; однако, то, как компилятор бу-
                  дет работать со списком параметров, зависит  от
                  типа процедуры SUB.
                     Количество и тип проходных аргументов должны
                  соответствовать вписку параметров в определении
                  имени процедуры; иначе произойдет ошибка  Para-
                  meter Mismatch времени компиляции.
                     Если процедура SUB является процедурой INLI-
                  NE, число аргументов варьируется и не  происхо-
                  дит проверка типов  параметров.  В  компетенцию
                  процедуры SUB INLINE входит знание и  определе-
                  ние количества и типов параметров,которые в неё
                  переходят (более подробно об этом см.  Приложе-
                  ние C, "Интерфейс языка ассемблера").
                     Когда аргументы процедуры проходят  ссылками
                  (т.е. переменными), они могут  изменяться  выз-
                  ванными процедурами. Когда переменная  заключа-
                  ся в круглые скобки, она проходит по значению и
                  оригинальное значение не может  быть  изменено.
                  Обратите внимание, что выражения  и  постоянные
                  всегда проходят по значению.
                    Аргументы-массивы  определяются с использова-
                  нием пустых скобок после имени массива. Массивы
                  всегда проходят посредством ссылки. Например:


                  CALL SumArray (A())  ' передать массив A
                                       ' в SumArray
                  CALL SumArray (A(3)) ' передать 3-й элемент A
                                       ' в SumArray

Смотреть также    $INLINE , SUB

Пример            DIM Array (1)  ' объявить массив 2 чисел

                  SUB TestProcedure (I%,L&,S!,D#,A(1))
                  ' эта процедура просто выводит значения
                  ' каждого параметра, переданного ей
                  PRINT I%;L&;S!;D#;A(0)
                  END SUB  ' закончить процедуру TestProcedure

                  Integer = 1
                  LongInt& = 2
                  SinglePre! = 3
                  DoublePre# = 4
                  Array(0) = 5
                  CALL TestProcedure(Integer%,LongInt&,SinglePre!,_
                                        DoublePre#,Array())
                  END     ' закончить программу

Оператор CALL ABSOLUTE
------------------------------------------------------------------
Назначение        CALL ABSOLUTE вызывает программу языка  ассемб-
                  лера.

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

Комментарий       адрес является численным  скаляром,  содержащим
                  начальным номер вызываемой  внешней  программы.
                  Сегмент определяется самым последним оператором
                  DEF SEG. адрес должен находится в диапазоне  от
                  -32768 до 65535.  Отрицательные значения  будут
                  переведены компилятором в положительные.
                     Форма списка параметров поддерживает совмес-
                  тимость с Интерпретатором БЕЙСИК передачей  ко-
                  ротких целых параметров в  стек. Эта форма поз-
                  воляет передавать только целые параметры   (см.
                  Приложение С, "Интерфейс языка ассемблера").
                     Регистровый  буфер  загружается  в  регистры
                  процессора непосредственно перед  CALL ABSOLUTE
                  или CALL INTERRUPT  и записывается  сразу после
                  возврата. В любой момент времени буфер содержит
                  состояние процессора,  в котором  он  находился
                  во  время выполнения самой последней по времени
                  внешней подпрограммы.
                     Из регистрового буфера  выборку осущетсвляет
                  оператор и функция REG, которые используют чис-
                  ленный  аргумент для обращения к соотвестствую-
                  щему регистру:
                  -------------------------------------
                  Аргумент REG                 Регистр
                  -------------------------------------
                  0                             Флаги
                  1                             AX
                  2                             BX
                  3                             CX
                  4                             DX
                  5                             SI
                  6                             DI
                  7                             BP
                  8                             DS
                  9                             ES
                  -------------------------------------
                  REG в качестве оператора  загружает  отобранный
                  элемент  регистрового буфера  с указанным целым
                  значением:
                  REG 2,&H1000        ' загрузить 1000H в буфер
                                      ' регистра BX

                  REG в качестве  функции   возвращает   значения
                  отобранного элемента в буфере регистра:
                  PRINT REG(2)        ' печатать эначение  буфера
                                      ' регистра BX

                     Программист несeт ответственность за сохран-
                  нение регистров Сегмента Данных (DS), Указателя
                  Базы (BP), Сегмента Стека (SS) и Указатель Сте-
                  ка (SP).

Смотреть также    CALL INTERRUPT , DEF SEG , REG

Пример            DEFINT a-z
                  DIM a(100)
                  DIM FillRoutine(10)

                  FillRoutine (0) = &HF2FC
                  FillRoutine (1) = &HCBAA

                  REG 1, -1
                  REG 3, 101 * 2
                  REG 9, VARSEG(a(0))
                  REG 6, VARPTR(a(0))

                  DEF SEG = VARSEG(FillRoutine(0))
                  PRINT a(1)
                  WHILE NOT INSTAT : WEND
                  FillAdr = VARPTR(FillRoutine(0))
                  CALL ABSOLUTE FillAdr            '(REG)

                  PRINT a(1)
                  END

Оператор   CALL INTERRUPT
----------------------------------------------------------------
Назначение   CALL INTERRUPT осуществляет системное прерывание

Синтаксис    CALL INTERRUPT n

Комментарий  n - это целочисленное выражение, представляющее вызы-
             ваемое прерывание, от 0 до 255. Непосредственно перед
             тем как обработчик  прерываний  получает  управление,
             регистры процессора загружаются значениями  из буфера
             машинных  регистров. Когда обработчик прерывания воз-
             вращается, буфер берется  за  значения  в  регитстрах
             процессора. В любое данное время буфер содержит  сос-
             тояние регистров процессора на момент  завершения са-
             мого последнего внешнгего вызова или оператора REG
                Техническое руководство DOS содержит полную инфор-
             мацию по многим функциям,  доступным  через  механизм
             CALL INTERRUPT. Программист  отвечает  за  сохранение
             регистров сегмента стека (SS) и указателя стека (SP).
             Ограничения   перед    выполнением    оператора  CALL
             INTERRUPT: соответствующие  регистры  CPU должны быть
             выбраны из памяти через  функцию REG.

См. также    CALL ABSOLUTE , REG

Функция  CDBL
------------------------------------------------------------------
Назначение   CDBL  преобразовывает  выражение  в  формат удвоенной
             точности.

Синтаксис    Y = CDBL (численное выражение)
Комментарий  CDBL преобразует численную переменную или выражение в
             форму  удвоенной точности.
                Для   устранения  возможности  переполнения  целых
             чисел в выражениях с целочисленными и с операндами  с
             плавающей запятой используйте оператор  CDBL.  Напри-
             мер:

             Y = (2% + x%) / a#
                Результатом данного выражения  будет  переполнение,
             если (2% + X%) будет больше 32767. Во избежание этого,
             используйте оператор CDBL для преобразования  одной из
             целочисленных  переменных  в форму с удвоенной точнос-
             тью. Это  достигается  вычислением  всего  выражения с
             удвоенной точностью.

             Y# = (CDBL (2%) + X%)) / а#

Ограничения  Диапaзон выражений,  передаваемых  CDBL  должен быть в
             пределах допустимого диапазона числа удвоенной точнос-
             ти.

См. также    CINT , CLNG , CSNG

Пример       CDBL  используется для профилактики ошибок выражения

             X% = 20000    ' обьявить целочисленную переменную
             Y% = 20000    ' присвоить Y% значения  X%
             Z# = CDBL (X%) + Y% '  предотвратить переполнениe
                                 '  преобразованием x%
             PRINT  x%,  Y%,  Z# '  показать значения трех
                                 '  переменных
             END

Функция  CEIL
------------------------------------------------------------------
Назначение   Функция  CEIL  преобразует численную переменную
             или выражение в целое число, возвращая наимньшее
             целое число большее или равное его аргументу.

Синтаксис    Y = CEIL (численное выражение)
             Функция  CEIL  проеобразует численную переменную
             или выражение в целое число, возвращая наимньшее
             целое число большее или равное по аргументу.

Различия     В Интерпретаторе БЕЙСИК такой функции нет.

См. также    CINT , FIX , INT

Пример       FOR I! = -2.5 to 2.5 STEP 0.5
             ' показать наименьшее целое число большее для
             ' серии значений
             PRINT "the ceiling of ### is ###."; I!, CEIL (I!).
             NEXT I!
             END 'закончить программу

Оператор CHAIN
------------------------------------------------------------------
Назначение  Оператор CHAIN вызывает модуль цепочки ТБ (создаваемый
            как файл)

Синтаксис   CHAIN filespec

Комментарий
       filespec  представляет  собой  имя  файла в соответствии со
       стандартными условными обозначениями DOS и представляет це-
       почный модуль ТУРБО БЕЙСИКа (расширение ТВС). Если расшире-
       ние опущено, присваивается ТВС. Поэтому, если вам необходи-
       мо определить файл  .ЕХЕ, вы должны к  имени файла добавить
       .ЕХЕ. Переменные перечисленные как  COMMON,  как  в текущей
       программе, так и в  программе назначения  переходят  к про-
       грамме назначения. В фазе тестирования вызывающая программа
       должна компилироваться в файл .ЕХЕ, потому что нельзя сцеп-
       лять  программы изнутри ТУРБО БЕЙСИКа. Вызываемая программа
       должна компилироваться  на  диск как  цепочный модуль (файл
       .ЕХЕ или .ТВС). Если аргументы к операторам COMMON в  вызы-
       вающей и вызываемой программах не совпадают (например,  пе-
       ременные с плавающей запятой в одном месте, а целые числа в
       другом), происходит ошибка выполнения.
          ТУРБО БЕЙСИК не поддерживает версии CHAIN интерпретатора
       БЕЙСИК,  ориентированные  на номер  строки,  включая  номер
       строки CHAIN, DELETE, MERGE. В виду невозможности определе-
       ния номера строки в пределах целочисленнонго модуля  назна-
       чения, выполнение всегда начинается с начала.
          При  трансляции  системы  CHAIN  программ интерпретатора
       БЕЙСИК в ТУРБО БЕЙСИК, вы обнаружите расширенное  использо-
       вание памяти ТУРБО БЕЙСИКа, позволяющее  объединить отдель-
       ные модули в единую программу, и  необходимость в сцеплении
       модулей отпадет.

Ограничения
       Сцепление  можно  осуществить только  при условии, что про-
       грамма выполняется с DOS т.е. с файла .ЕХЕ. MERGE, DERLETE,
       ALL и CHAIN (сцепление) на номер строки  не поддерживаются.

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

См. также COMMON

Пример: Рассмотрим PROG1, которая вызывает цепочку в PROG2.

       '             PROG1.BAS
       ' oбъявить переменные, которые должны быть
       ' переведены в программу со сцепленными модулями
       ' скалярные  переменные  одинарной точности  а и b
       ' и целочисленный массив C%
       DIM  C%(3000)
       а = 65 : b = 13 : C%(2000) = 12
       COMMON  а,b,C%(1)
       ' определить число размерностей в массиве
       CHAIN "PROG2"

       '              PROG2.BAS
       ' Обьявить переменные, которые должны быть получены
       ' из  вызываемой программы.
       ' они должны быить в таком порядке, одного типа,
       ' но не требуют одинаковых имен
       COMMON x, y, z%(1)
       PRINT x, y, z%(2000)

       Когда  PROG1.EXE  вызывается  из  DOS,   она  автома-
       тически "возьмет с собой" модуль PROG2.TBG и выполнит
       его, напечатaв значения,  присвоенные  в PROG1. Когда
       заканчивается PROG2, она  возврвщается в DOS,  а не в
       PROG1.

Оператор CHDIR
----------------------------------------------------------------
Назначение
         Оператор CHDIR изменяет каталог (аналогично команде DOS
         CHDIR или CD).

Синтаксис   CHDIR path

Комментарий
       path - это символьное  выражение,соответствующее условным
       обозначениям маршрута в  DOS  (cм. "Файлы"  в 4-й главе).
       Если маршрут не указывает  правильный каталог, происходит
       ошибка выполнения 76, Path Not Found (маршрут не найден).
       оператор CHDIR изменяет  текущий каталог (активный или по
       умолчанию).Она аналогична команде CHDIR с той лишь разни-
       цей, что она не может  сокращенно называться CD. Выполне-
       ние програmmы,которая  изменяет  текущий  каталог изнутри
       ТУРБО БЕЙСИК,  изменяет  также  и  активный каталог ТУРБО
       БЕЙСИКа.

Примеры   INPUT "New directory:" path$
          ' измените на каталог,определенный пользователем
          CHDIR path$
          END

Функция   CHR$
---------------------------------------------------------------
Назначение    CHR$  преобразует  code ASCII в строку из одного
              символа

Синтаксис     Y=CHR$ (integer ehpression)

Комментарий
       CHR$  возвращает строку, единсвенный  символ которой  имеет
       целочисленное выражение  кода  ASCII, значения от 0 до 255.
       CHR$ комплементирует  функцию  ASC,  которая возвращает код
       ASCII первого  символа строки. CHR$ используется для созда-
       ния символов  трудновводимых с клавиатуры, таких как графи-
       ческие символы для вывода на экран и управляющие последова-
       тельности для вывода  на принтер.  Значение  целочисленного
       выражения, переходящее на CHR$, должно быть в пределах от 0
       до 255. Использование аргумента, выходящего за рамки диапа-
       зона от 0 до 255 дает ошибку выполнения 5: Illegal Function
       Call (неправильный вызов функции).

см. также   ASC

Пример   ' CHR$ выводит набор символов ASCII на экран

         FOR i% = 0  то 255
           PRINT CHR$ (i%)
           показывает символ ASCII, представленный i%
         NEXT  i%
         END

Функция CINT
----------------------------------------------------------------
Назначение
            Функция  CINT  преобразует аргумент в целое число.

Синтаксис   Y = CINT (numeric expression)

Комментарий
    Функция CINT преобразует численную переменную или выражение
    в целое число с округлением дробной части численного  выра-
    жения. Если численное выражение выходит из пределов  диапа-
    зона от -32768 до +32767, то происходит  ошибка  выполнения
    программы 6: overflow (переполнение).
       Это преобразование осуществляется имплицитно назначением
    целочисленной переменной или вызовом процедуры или функции,
    которая принимает целочисленный аргумент.

Различия
    В отличие от  интерпритатора БЕЙСИК, ТУРБО БЕЙСИК не всегда
    округляет  дробную  частицу  числа в большую сторону.  Если
    дробная  часть  числа  равна  .5, она округляется в сторону
    четного числа .

См. также  CDBL , CEIL , CLNG , CSNC , FIX , INT

Пример      FOR  I! = 0.0  TO  5.0  STEP  0.2
               ' показать результат преобразования
               PRINT USING "CINT of #.# = #" I!, CINT(I!)
            NEXT  I!
            END

Оператор    CIRCLE
-----------------------------------------------------------------
Назначение  Оператор  CIRCLE  рисует круг или часть круга.

Синтаксис
        CIRCLE (x,y), radius [, color [, start, end[, aspect]]]
Комментарий
       (x,y) является центром круга и может быть описан  либо в
    абсолютной  либо  в  относительной  форме (с использованием
    STEP). (См. раздел по графике в Главе 3 для более подробной
    информации об абсолютных и относительных координатах).
       "radius" -  представляет  собой  численное    выражение,
    управляющее размером круга.
       "color" -  это  численное  выражение  определяющее  цвет
    круга. Допустимые значения от 0 до 3 в графических  устрой-
    ствах со средней разрешающей способностью (по умолчанию  3)
    и от  0  до   1  в графических   устройствах   с    высокой
    разрешающей   способностью   (по   умолчанию  1).  Цвет  по
    умолчанию - это наиболее высокий цвет для режима в  котором
    вы находитесь. Использование аргумента цвета, выходящего за
    пределы  данных   диапазонов,  дает   ошибку выполнения  5,
    illegal  function call (неправильный вызов функции). (Более
    подробно об отборе цвета см. оператор STATEMENT).
       "Stаrt"  и  "end"  являются  необязательными  численными
    параметрами,  определяющими  начальную  и  конечную   точки
    рисуемой дуги в радианах  (о радианах смотри в статье ATN).
    Используйте   их  при   изображении   только  части  круга.
    Oтрицательные значения начала и конца дают участок круговой
    диаграммы с треугольным сектором  на  зкране  дисплея.  Для
    начала треугольного сектора на положительной оси x, исполь-
    зуйте отрицательное  число, немного менньшее  0  (например,
    -0.0001), а не ноль. Если начало и конец опускаются, то ри-
    суется целый круг. Например:

    SCREEN 1 : pi = 4 * ATN(1)
    CIRCLE (160,100),50,3,0, pi
    рисует белую дугу полукруга от 0 рaдиан (0 градусов) до  пи
    радиан (180 градусов).

    SCREEN  1 :  pi = 4* ATN(1)
    CIRCLE  (160,100),50,,-pi/4, -pi/2
    Рисует  учасмток секторной диаграммы в 45 градусов, от pi/4
    радиан (45 градусов) до pi/2  радиан (90 градусов).

       "Aspect" - это  численное  выражение  управляющее оваль-
    ностью круга. По умoлчанию 5/6 (0.83333)  со средней разре-
    решающей способностью и 5/12 (0.416667) с высокой  разреша-
    ющей  способностью. После нанесения изображения  круга, LPR
    становиться его центром.

Пример  Данная программа демонстрирует возможности CIRCLE
        изменение места, радиуса, цвета и овальности

        PI# = 4 * ATN(1) ' вычислить значения PI
        SCREEN 1         ' перейти в режим графиков

        FOR Radius% = 1 то 20           ' установить размер круга
           Colour% = Radius% MOD 4      ' вычислить цвет дисплея
           CIRCLE (250,150), Raidius%, Colour%  ' центр в 250, 150
        NEXT Radius%

        ' эллипсы могут производить иллюзии типа сфер...
        FOR Aspect = 0  TO  2.0  STEP  0.09
           CIRCLE (90.100) Radius%,,,,Aspect
        NEXT Aspect
        END

Оператор  CLEAR
----------------------------------------------------------------
Назначение  
     Оператор  CLEAR  очищает память переменной

Синтаксис   CLEAR

Комментарий
     CLEAR - это команда без параметров,  которая  устанавливает
     численные  переменные  на  ноль,  а  символьные  переменные
     сводит  к  пустым.   Оператор   CLEAR   отключает   ловушку
     (например, воспроизведение музыки), и вновь  инициализирует
     память массивов и строковую память. 
        Примечание:  Оператор  CLEAR  внутри цикла будет очищать
     счетчик, вызывая бесконечный цикл.
        Для   выборочного   освобождения   массивов   в   памяти 
     пользуйтесь оператором ERASE.

Ограничения
     Турбо-Бейсик не поддерживает динамическую установку стека и
     сегментов   данных;    в   этом   операторе   нет   поэтому 
     соответствующих параметров.

Различия
     Различия между операторами CLEAR  Интерпретаторного Бейсика 
     и ТУРБО-БЕЙСИКа происходит,  главным образом,  из  различий
     между компиляторами  и  интерпретаторами.  Интерпретаторный  
     Бейсик  дает  вам  возможность  динамически   устанавливать
     пространство стека и данных там, где пространство  стека  и
     данных Турбо-Бейсика фиксируется во время компилирования.

См. также   ERASE , $STACK

Пример: Эта программа демонстрирует что может делать CLEAR

     dim Array$(1)               'заявить массив строк
     play "mb l1 efgabcdef"      'играть музыку в фоне
     on pen gosub PenHolder      'настроить отслеживание 
                                 'светового пера
     on strig(0) gosub ButtonHolder 'настроить отсле-
                                 'живатель ручки  управления
     'инициировать строчные данные
     Array$(0)="это строка в Array$(0)"
     Array$(1)="это строка в Array$(1)"
     'отобразить строчные данные
     print using "Элемент массива 1: ":Array$(0)
     print using "Элемент массива 2: ":Array$(1)
     print
     input "нажмите (ввод)для исполнения оператора CLEAR": Пусто$
     clear                       'делается очистка
     print
     'существующие строчные данные более не отображаются
     print using "Элемент массива 1: ":Array$(0)
     print using "Элемент массива 2: ":Array$(1)
     print
     print "строчные переменные теперь пусты"
     end
     PenHolder:    'определить пустую метку для ловушки
                   'светового пера
     return
     ButtonHolder: 'определить пустую метку для
                   'ручки управления
     return

Функция CLNG
----------------------------------------------------------------
Назначение  
      CLNG обеспечивает преобразование в длинное целое

Синтаксис    y=CLNG(числовое выражение)

Комментарий
      CLNG  преобразует  числовую переменную или  выражение  в  длинное
      целое  посредством округления  дробной части  ее аргумента.  Если 
      числовое выражение находится вне диапазона от -(2^31) до (2^31)-1 
      (приблизительно  от  -2 миллиардов  до +2 миллиардов),  возникает  
      ошибка 6 периода прогона, Переполнение.

Ограничения
      Числовое выражение, подаваемое  в  функцию  CLNG должно находится  
      в законном диапазоне длинных целых.

Различия
      Этой   функции   нет  в   больщинстве  Интерпретаторных Бейсиков, 
      поскольку они не поддерживают длинные целые.

См. также  CDBL , CINT , CSNG , FIX , INT

Пример:  
      print clng(2.0E9),clng(33.4),clng(-121.9),clng(100251.6)
      end


Оператор CLOSE
----------------------------------------------------------------
Назначение  
      CLOSE  закрывает файл или устройство

Синтаксис    CLOSE[[#]filenum[,[#]filenum]...]

Комментарий
      CLOSE оканчивает взаимосвязь номера файла и файла, установленного
      в операторе OPEN, и  закнчивает  ввод/вывод  в  этот  файл. Буфер 
      файла наполняется и, если filenum представляет файл, а не устройство,
      команда DOS CLOSE выполняется на нем для обновления каталога.
      Хороша    привычка    периодически   закрывать   файлы,   которыe
      записываются   программой.   Это  дает  уверенность  в  том,  что
      записывается  вся  информация,  а  вход  этого файла  в  каталоге
      операционной  системы правильно обновляется в случае последующего
      сбоя   питания  или  какого-то  другого  затруднения.  CLOSE  без
      спецификации  номера  файла  закрывает  все открытые устройства и
      файлы (то же самое делают RESET, END, STOP и RUN).

См.также END , OPEN , STOP , 

Пример:
      'открыть файл назначенный печатающему устройству
      open "lpt1:" as#1
      print#1,"это тест"
      close#1
      open "openfile.one" as#1
      open "openfile.two" as#2
      print#1, "это тест"
      print#2, "это тест"
      close
      end


Оператор CLS
----------------------------------------------------------------
Назначение  
      CLS  очищает экран

Синтаксис
      В текстовом режиме CLS очишает экран до цвета фона и обеспечивает 
      позиционирование  курсора в  исходном положении  в левом  верхнем 
      углу (ряд 1, колонка 1). CLS в графическом режиме  очищает  экран
      до фонового цвета. LPR (ПУТ) оказывается  в  центре  экрана, либо 
      (160,100),  либо  (320,100),  в  зависимости  от  того,  является 
      текущий режим средней или высокой разрешающей способности. 
         Если  уже   был   исполнен  оператор  VIEW, CLS очищает только
      обзорно-приемное   окно.   Чтобы   стереть  весь  экран,  сначала
      воспользуйтесь VIEW без аргументов для выключения обзорного окна,
      а затем CLS-для очистки экрана.

См. также  COLOR , SCREEN , VIEW

Пример:
      'cls очищает экран до фонового цвета
      print "Это тест оператора CLS"
      input "Нажать  для очистки экрана...",Empty$
      color 10,1
      cls
      end


Опертатор COLOR (графический тип)
-----------------------------------------------------------------
Назначение  Опертатор COLOR графического  типа устанавливает цвет 
            при выполнении графическитх операций.

Синтаксис   Для SCREEN 1:  COLOR [background] [,[palette]]
                ЭКРАНа     ЦВЕТ  [фоновый]      [набор]

         Для SCREENs 7,8,9,10: COLOR [foreground] [,[background]]
             ЭКРАНов 7,8,9,10  ЦВЕТ  [основной]     [фоновый]

Комментарий    background это целое выражение в диапазоне от 0 до 
                          63,  определяющее цвет фона на  котором 
                          высвечиваются символы и строятся графи-
                          ческие объекты;  

               palette    это целое выражение в диапазоне от 0 до
                          1, которое выбирает один из двух цвето-
                          вых наборов;

               foreground это целое выражение в диапазоне от 1 до 
                          15, которое определяет основной цвет, 
                          т.е. цвет, которым высвечиваются симво-
                          лы и графические объекты. 

      Аргументы этой команды
      определяют  фоновый  цвет  экрана  и  палитру  из четырех цветов,
      которые  будут использоваться в последующих чертежных операторах.
      После  того,  как вы уже определили палитру и цвет фона с помощью
      оператора  COLOR, цвет отдельных обьектов попадает под управление
      различных  команд  графики (CIRCLE,LINE и т.д.). В режиме высокой
      разрешающей   способности   на   Цветном   Графическом   Адаптере
      единственными   возможными   цветами  являются  черный  и  белый.
      Следовательно  опе- ратор COLOR не имеет значения в этом режиме и
      попытка  его  использования  приводит к ошибке 5 периода прогона,
      Вызов незаконной функции.

            SCREEN 1

            Фон  0-255: фактически  используемый  цвет  фона  есть  фон
      MOD16. Следовательно фон 0 и 16 дают один и тот же результат.
            Палитра 0-255: выбирается заранее определенная палитра, как
      показано на ниже 
            -----------------------------------------------
               цвет      палитра  0      палитра  1
            -----------------------------------------------
                1        зеленый         зелено-голубой  
                2        красный         пурпурно-красный
                3        коричневый      белый
            -----------------------------------------------

            Четными числами обеспечивается выбор палитры 0, а нечетными
      -палитры   1   по  умолчанию.  Палитра  0  дает  вашей  программе
      возможность  создавать  обьекты  в  зеленом,  красном, коричневом
      цветах. Палитрой 2  предлагаются цвета зелено-голубой (циановый), 
      пурпурно-красный(анилиновый) и белый.

                   ЭКРАН 7 и 8

               Только EGA. Цвета зависят от текущего набора. 
               Основной цвет 1 -15.  Выбранный цвет  используется 
            при написании символов и построении графиков.
               Фонофый цвет 0 -15. Выбирает цвет фона на котором 
            пишутся символы и строятся графики.

                   ЭКРАН 9

               Основной цвет 1 -15.  Выбранный цвет  используется 
            при написании  текста  и построении графиков. Если в
            вашем EGA только 64К памяти для установки цвета поль-
            зуйтесь значениями из диапазона 1- 3.
               Фонофый цвет 0 -63. Выбирает цвет фона на котором 
            пишутся символы и строятся графики.

                   ЭКРАН 10

               Основной  цвет 1 - 3.  Выбранный цвет используется 
            при написании текста и построении графиков.  
               1 = черный,  2 = слабый,  3 = интенсивный.
               Использование 0 для  основного  цвета  приводит  к 
            ошибке  "Illegal  Function Call" ("Неправильный вызов 
            функции").  
               Для изменения атрибутов по умолчанию используйте 
            оператор PALETTE.
               Фонофый цвет 0 -63. Выбирает цвет фона.
               Примечание: 0 является фоновыфм цветом для любого 
            набора цветов, определенного в данном операторе, ос-
            новной цвет по умолчанию устанавливается с максималь-
            ным значением.

Ограничения    В режиме ЭКРАНа 2 оператор COLOR приводит к ошибке 
            выполнения 5 "Illegal Function  Call"  ("Неправильный 
            вызов функции").  

Пример:     'Данная  программа  демонстрирует работу оператора 
            'COLOR в графическом режиме.

            'Переключить экран в графический режим со средней
            'разрешающей спрособностью и установить цветовой на- 
            'бор 0
            SCREEN 1
            COLOR ,0
            FOR Radius% = 1 to 20  'увеличить размер круга
               Color% =  Radius% MOD 4 'вычислить цвет дисплея
               CIRCLE (160,100), Radius%, Color%  'показать на экране
            NEXT Radius%       'круг с центром в точке 250.150
            delay 2
            COLOR  ,1   'изменить набор цветов
            delay 2
            'установить набор цветов и фоновый цвет,
            'очистить экран
            COLOR 6,1:CLS
            'построить красный кртуг в середине экрана
            CIRCLE (160,100), 50, 2
            delay 2
            END

Опертатор COLOR (текстовый тип)
-----------------------------------------------------------------
Назначение  Опертатор COLOR устанавливает текстовый цвет.

Синтаксис   COLOR [foreground] [,[background] [,[border]]
            ЦВЕТ  [основной]     [фоновый]      [граница]  

Комментарий    foreground  это  целочисленное выражение  от 0 до 
                           31, определяющее цвет символов;

               background  это  целочисленное выражение  от 0 до 
                           7, определяющее цвет фона;

               border      это  целочисленное выражение  от 0 до 
                           15, определяющее цвет на границе ос- 
                           новного и фонового цветов.

               Если какой-либо из названных параметров выйдет за 
            пределы указанных диапазонов произойдет ошибка вы-
            полнения 5 "Illegal Function  Call"  ("Неправильный 
            вызов функции").

               Для стандартных видеоадаптеров типа CGA ваш выбор 
            основных цветов должен быть следующим:

            0 - черный               8 - серый
            1 - синий                9 - голубой
            2 - зеленый             10 - светлозеленый
            3 - зелено-голубой      11 - светлозелено-голубой
            4 - красный             12 - светлокрасный
            5 - пурпурно-красный    13 - светлопурпурно-красный
            6 - коричневый          14 - желтый
            7 - белый               15 - интенсивно белый

               Символы могут мигать на экране, для этого необхо- 
            димо установить параметр основного цвета увеличенным 
            на 16. Например, если установим  foreground = 22, то
            получим мигающие коричневые символы  (22 = 6 + 16).

               В случае монохромных адаптеров,  которые  не  дают 
            цветного  изображения,  соответствующие  значения для 
            установки основного цвета интерпретируются  следуюшим 
            образом: 

             0 -     черный
             1 -     подчеркивание
             2-7 -   белый
             8 -     черный
             9 -     интенсивное подчеркивание
            10-15 -  интенсивный
            16 -     черный
            17 -     подчеркивание черным цветом
            18-23 -  мигание
            24 -     черный
            25 -     высокая интенсивность подчеркивания, мигание
            26-31 -  высокая интенсивность, мигание

               Значения фонового цвета от 0 до 6 при монохромном 
            адаптере дают черный фон, 7 - белый.
               Усовершенствованные  графические  адаптеры (EGA) и 
            Видео-графические адваптеры (VGA) с усовершенствован-
            ными мониторами позволяют использовать 16  цветов  из 
            набора в 64 цвета (см. PALETTE).  
               Примечание: На  любом  Адаптере литеры  становятся 
            невидимыми, когда передний фон равен заднему фону.

Ограничения    Пограничный параметр не дает эффекта в случае  EGA 
            или VGA с усовершенствованным монитором.

Пример      'Данная прграмма демонстрирует оператор COLOR  как  в
            'текстовом, так и в графическом режиме.

            'показать на экране таблицу атрибутов
            FOR Back% = 0 to 7
               FOR Fore% = 0 to 15
                  COLOR Fore%, Back%
                  PRINT USING " ### ";Back%*16+Fore%;
               NEXT Fore%
               PRINT
            NEXT Back%

            PRINT

            FOR Back% = 0 to 7      'показать на экране таблицу
                                    'всех атрибутов c миганием
               FOR Fore% = 16 TO 31 
                  COLOR Fore%, Back%   'установить цвет экрана
                  PRINT USING " ### ";Back%*16+Fore%-16;
               NEXT Fore%
               PRINT
            NEXT Back%

            END

Оператор  COM(n)
----------------------------------------------------------------
Назначение
       Оператор  COM(n)  управляет  срабатыванием ловушки
       серийных  портов.

Синтаксис   COM(n){ON|OFF|STOP}

Комментарий
     n - есть номер коммуникационного адаптера, где  применяется
     ловушка (1 или 2).
        Оператор COM(n) ON позволяет применять ловушку при помо-
     щи программы, описанной в операторе ON COM(n). После COM(n)
     ON, ТУРБО БЕЙСИК проверяет выполнение каждого оператора для
     выяснения поступления знаков  на  указанный серийный  порт.
     Если  выясняется,  что  такое  срабатывание  произошло,  он
     вызывает  описанную  в  операторе  ON  COM(n) подпрограмму.
        Если COM(n)  находится  в  OFF,  активность  в  серийном
     порте игнорируется.
        Прерывание  связи  прекращается  после  оператора COM(n)
     STOP; однако, любая активность запоминается,  в случае  вы-
     полнения оператора  COM(n) ON  происходит  незамедлительное
     срабатывание ловушки.
        Для увеличения или уменьшения размера буфера COM исполь-
     зуйте метаоператор  $COM .

См. также  ON COM(n)

Пример
      ' Демонстрируется оператор  COM(n). Примечание.
      ' Данная программа ничего не покажет, если ваш
      ' port COM1  не получит ввода

      ON COM(1) GOSUB GetCominput  ' Установите программу для
                                   ' обработки  ввода COM
      DIM ComPortinput (5 * 1024)  ' Назначить массив в 5К для
                                   ' сохранения ввода
      HeadPtr%=0         ' Назначить указатель (пойнтер) в следу-
                         ' ющее доступное пространство буфера
      COM(1) ON                    ' Включить ловушку COM
      $COM1 1024                   ' Установить буфер ввода в 1К
      OPEN "com1" AS # 1           ' Открыть переменную файла COM1
      PRINT "Press any key to terminate the program..."

      WHILE NOT INSTANT                ' Пока не нажата клавиша...
         IF TailPtr% <> HeatPtr% THEN  ' Если буфер не пустой
            PRINT "COM Port input: "; ComPortInput (TailPtr%)
                                                   'Показать ввод.
            TailPtr% = TailPtr% + 1    ' Перейти к следующей
                                       ' ячейке буфера
         END IF
         LOCATE 2,1
         PRINT TIME$
      WEND
      END       'конец программы

      ' обработать прерывание порта  COM
      GetComInput:
      ' считать ввод с буфера порта  COM
      INPUT# 1,ComPortInput (HeadPtr%)
      ' указать следующую ячейку буфера
      HeadPtr% = HeadPtr% + 1
      ' конец ввода порта  COM
      RETURN

Оператор  COMMON
----------------------------------------------------------------
Назначение
      COMMON (т.е. "общие") объявляет одну или более переменных,
      подлежащих передаче в присоединяемый цепочечный .TBC-модуль.

Синтаксис
      COMMON переменная [, переменная] ...

Комментарий
      Переменная - это массив или скалярная переменная, которая
      должна быть сделана доступной в последующем присоединяемом
      .TBC-модуле. Массивы специфицируются посредством числа
      размерностей в скобках после имени. Операторы COMMON могут
      записываться в любом мемте программы и их может быть более
      одного, однако каждая переменная может появиться в них лишь
      однажды. Соответствующие операторы COMMON должны появляться
      и в присоединяемом .TBC-модуле. Имена переменных, использу-
      емых в операторе COMMON, не имеют значения, но их количество
      и тип важны. Если переменные, заявленные как общие в возбуж-
      дающей программе не совпадают по типу и количеству с пере-
      менными, заявленными как общие в принимающей программе, то
      генерируется ошибка стадии выполнения.

Различия
     ТУРБО БЕЙСИК не поддерживает оператора CHAIN ALL, обеспечи-
     ваемый интерпретатором БЕЙСИК. Каждую переменную, общий доступ
     к которй должны иметь связываемые в цепочку программы, вы
     должны заявлять непосредственно. При специфицировании в ТУРБО
     БЕЙСИКе в качестве общей переменной массива, необходимо специ-
     фицировать число размерностей этого массива. В интерпретаторе
     БЕЙСИК совпадающие COMMON не требуются, поскольку COMMON в
     нем, в отличие от ТУРБО БЕЙСИКа, необходимы только из CHAIN,
     а внутрь CHAIN в них нет необходимости. ТУРБО БЕЙСИК требует,
     чтобы переменные в каждом опрераторе COMMON были правильно
     упорядочены, т.е. имена переменных в главном и цепочечном
     модуле могут отличаться, но типы переменных должны совпадать.
     Правильным является следующее употребление COMMON:

       'Главная программа
       COMMON i%, Array(1), j#
       . . . . . . . .

       'Цепочечный модуль
       COMMON Integer%, RealArray(1), Double#
       . . . . . . . .

Пример
       ' Данные программы демонстрируют оператор  COMMON
       ' Для выполнения данной программы необходимо:
       ' (1) скомпилировать первую программу в файл .EXE .
       ' (2) скомпилировать вторую программу в файл .ТВС
       ' (3) выполнить первую программу на подсказке DOS

       ' Программа MASTER.
       ' Скомпилируйте эту программу в файл .EXE
       DIM OldArray$(1)       'объявить массив двух строк
       OldArray$(0) = "This is the first string fn the array"
       OldArray$(1) = "This ts the second string fn the array"
       OldInteger% = 12345
       OldLongInt% = 123450000
       OldSingLePre! = 12345.12345
       OldDoubLePre# = 1.OE+300
       ' описать переменные, которые являются общими для главной и
       подчиненной программ
       COMMON OldArray$(1), OldInteger%, OldLongInt&,_
              OldSinglePre!, OldDoudlePre#

       CHAIN "SLAVE.TBC"   'цепочка для подчинения программы
       END                 'закончить программу

       ' Программа SLAVE.
       ' Cкомпилировать данную программу в файл .ТВС
       COMMON NewArray$(1), Newinteger%, NewLongInt,_
              NewSinglePre!, NewDoudlePre#

       PRINT NewArray$(0)
       PRINT NewArray$(1)
       PRINT NewInteger%, NewLongInt&, NewSinglePre!,_
             NewDoublePre#

Функция COS
-----------------------------------------------------------------
Назначение  Функция  COS  возвращает тригонометрический косинус

Синтаксис   y = COS (numeric expression)

Коментарий
      numeric  expression  есть  угол, выраженный в радианах.
      (См. о радианах в описании функции ATN).
         Функция COS возвращает значение удвоенной точности.

См. также   ATN , SIN , TAN

Пример      'Данная программа демонстрирует функцию  COS
            PI# = ATN(1) * 4
            FOR I% = 0 TO 360 STEP 45
              PRINT USING "The Cosine of ### degrees = ##.###";_
                           I%, COS(PI#/180 * I%)
            NEXT I%
            END

Функция  CSNG
----------------------------------------------------------------
Назначение
      Функция  CSNG  преобразует   численые   выражения   в  его
      эквивалент с одинарной точностью.

Синтаксис    Y = CSNG (numeric expression)

Комментарий
     Функция   CSNG   преобразует   численную   переменную   или
     выражение в форму с одинарной точностью с плавающей запятой
     Функция   CSNG   обычно   используется   для   профилактики
     промежуточного  переполнения  при  обработке  целочисленных
     операнд.
     См. также   CDBL  ,  CINT  ,  CLNG

Пример    PRINT CSNG(&HFFF), CSNG(13241.1324), CSNG(&HF000)

Функция  CSRLIN
----------------------------------------------------------------
Назначение  Функция  CSRLIN  возвращает   текущее   вертикальное
            положение  курсора (номер строки).

Синтаксис   Y = CRLIN

Комментарий
     Функция  CSRLIN  возвращает  целое   число   от  1  до  25,
     представляя текущее вертикальное положение  (номер  строки)
     курсора.  Для  считывания горизонтального положения курсора
     (номер колонки) используйте функцию POS.
     Оператор LOCATE перемещает курсор в  специальную  строку  и
     колонку.

См. также  LOCATE , POS

Пример   Col = POS      ' записать строку курсора
         Row = CRLIN    ' записать колонку курсора
         CLS
         LOCATE Row,Col 'восстановить положение курсора
         END

Функции   CVI,CVL,CVS,CVD
----------------------------------------------------------------
Назначение
     функции  CVI,CVL,CVS,CVD  преобразуют  символьные  данные,
     считываемые  с  файлов  с  произвольной   организацией,  в
     численные данные.

Синтаксис
            Y% = CVI (2 - bite string)
            Y% = CVL (4 - bite string)
            Y% = CVS (4 - bite string)
            Y% = CVD (8 - bite string)

Комментарий
        CVI преобразует 2-байтную строку в целое число.
        CVL преобразует 4-байтную строку в длинное целое число.
        CVS преобразует 4-байтную строку в значение с одинарной
     точностью.
        CVD преобразует 8-байтную строку в значение с двойной
     точностью.
        Из-за  специфики  работы  ТУРБО   БЕЙСИКа  с  файлами  с
     произвольной  организацией,   численные   значения   должны
     транслироваться   в  символьные  до  того,  как  они  будут
     записаны  на  диске,  а  при  считывании  файла  они  будут
     транслироваться обратно в числа.
        Не путайте эти  функции  (которые  предназначены  строго
     для  обработки  файлов  с  произвольной   организацией)   с
     функцией VAL, которая берет строку типа "3.7" и преобразует
     ее в численный вид.

См. также  MKD$ , MKI$ , MKL$ , MKS$

Пример  см.  FIELD

Функции CVMD, CVMS
----------------------------------------------------------------
Назначение
     Функции  CVMD  и  CVMS  преобразуют  символьные переменные,
     считываемые с файлов с произвольной организацией с формата
     Microsoft, в численный вид.

Синтаксис   y! = CVMS (4 - byte string)
            y# = CVMD (8 - byte string)

Комментарий
        CVMS  (ConVert Microsoft Single)  преобразует  4-байтную
     строку,  представляющую  значение  с  одинарной точностью в
     формате Micvosoft, в значение с одинарной  точностью в фор-
     мате IEEE ТУРБО БЕЙСИКа.
        CVMD (ConVert Microsoft  Double)  преобразует  8-байтную
     строку, представляющую  значение  с  удвоенной  точностью в
     формате Microsoft,  в значение с удвоенной точностью в фор-
     мате IEEE ТУРБО БЕЙСИКа.
        Эти функции обеспечиваются только  для  совместимости  с
     существующими файлами с произвольной организацией Интерпре-
     татора БЕЙСИК.

Пример
     ' открыть файл с произвольной выборкой
     OPEN "CVMSD.DTA" AS #1 LEN = 12

     FIELD #1, 4 AS Single$, 8 AS Double$

     FOR I% = 1 TO 5   ' записать некоторые данные в файл
                       ' преобразовать данные
       LSET Single$ = MKMS$ (I%)
       LSET Double$ = MKMD$ (I%-1)
       PUT #1,I%        ' и записать их в файл
     NEXT I%

     FOR I% = 1 TO 5    ' считать данные файла
       GET #1,I%        ' показать данные на экране
       PRINT CVMS (Single$), CVMD (Double$)
     NEXT I%

     CLOSE #1         'закрыть файл

     END

Оператор DATA
----------------------------------------------------------------
Назначение
          Оператор DATA объявляет константы для операторов READ.
Синтаксис
          DATA constant [,constant]...
Комментарий
     constant - это численная или символьная постоянная.
     Численные константы могут быть целыми числами или с плаваю-
     щей   запятой   и   могут  факультативно  быть  выражены  в
     шестнадцатеричных  или  восьмеричных  значениях. Символьные
     константы  не  берутся  в  кавычки,  если  они  не содержат
     огранчителей (запятых или двоеточий) или значимых пробелов,
     и их можно легко спутать с численными константами.
     Например:
     DATA Taco,.79,Chicken Supreme,2.29,"Dr.Pepper,large",.89

     Программа может содержать много операторов DATA  и  они  не
     должны  распологаться  в  последовательных  строках. каждая
     может включать столько констант, сколько может поместиься в
     строке.
        Во время выполнения программы операторы READ  обращаются
     к константам DATA слева направо и сверху вниз в порядке по-
     явления их в исходной программе. Наиболее  частой  ошибкой,
     связанной с операторами DATA и READ, является "срыв синхро-
     низации" и попытка загрузить символьные данные в  численную
     переменную (это генерирует ошибку выполнения 2).
        Команда    RESTORE   позволит   вам   повторно   считать
     константы  из  первого  оператора  или  любого   описанного
     оператора  DATA .
        Если    вы   попытаетесь   использовать   READ   большее
     количество раз, чем  количество  констант,  содержащихся  в
     вашей  программе,  произойдет  ошибка  выполнения 4, Out of
     data (вне данных).

Ограничения
     Нельзя использовать знаки, подчеркивающие непрерывность,  в
     операторах  DATA.
        Не  используйте апострофа (') для комментирования опера-
     тора DATA, потому что ТУРБО БЕЙСИК подумает, что  последняя
     величина и ваш комментарий являются  частью  одной  длинной
     символьной константы. Например:

       DATA cats,dogs,tigs ' список названия животных

     интерпритируется как содержащая три символьных константы:
     "cats" , "dogs"  and  "pigs ' список названия животных ";
        Вы можете, однако, совершенно безопасно использовать для
     этой цели  : REM  :

     DATA  cats,dogs,pigs :REM list the animals

См. также   READ , RESTORE

Пример   ' Данная  программа  демонстрирует  использование
         ' операторов  DATA и READ.

         SUB ProcessResults (StudentName$, StudentAverage%)
            LOCAL Total%, Value%, I%
            Total% = 0
            READ StudentName$
            FOR I% = 1 TO 10
               READ Value%
               Total% = Total% + Value%
            NEXT I%
            StudentAverage% = Total%\10
         END SUB

         FOR Student% = 1 TO 3
            CALL ProcessResults (Name$, Average%)
            PRINT USING "&,average is ###"; Name$, Average%"
         NEXT Student%
         END   'закончить программу

         DATA W.Perry, 78,65,35,79,86,93,79,85,99,96
         DATA P.Watson, 98,94,70,88,99,100,75,96,100,95
         DATA M.Ciccone, 65,59,75,82,56,79,82,76,69,89

Системная переменная  DATE$
----------------------------------------------------------------
Назначение  DATE$  устанавливает и отыскивает системную дату

Синтаксис   DATE$ = s$ (set date according to information in s$)
                        ( установить дату по информации в s$ )

            s$ = DATE$ (s$ now contains date informetion)
                       ( теперь s$ содержит информацию о дате )
Комментарий
     Назначение  строго  форматированного  символьного  значения
     системной  переменной  DATE$  символьной  переменной делает
     системную дату доступной для  обработки.  DATE$  возвращает
     10-знаковую строку в виде mm-dd-yyyy, где mm - представляет
     месяц, dd - день, а yyyy - год.
        Для  изменения  даты,  ваша  строка должна форматировать
     дату одним из следующих способов:
     mm-dd-yy
     mm/dd/yy
     mm-dd-yyyy
     mm/dd/yyyy
          Например
     DATE$ = "10-25-86"
     устанавливает системную дату 05 октября 1986 года.

Ограничения
            Год, назначаемый системной переменной DATE$, должен
            находиться в прeделах диапазона 1980 - 2099.

См. также   TIME$

Пример
     'Покажите текущую системеую дату на экране
     PRINT "The current system date is" DATE$
     INPUT "Enter then new date in then form MM-DD-YY";NewDate$
     DATE$ = NewDate$
     PRINT "The system date is now set to" DATE$
     END

Оператор  DECR
----------------------------------------------------------------
Назначение
        Оператор  DECR  дает отрицательное приращение переменной

Синтаксис DECR  variable [,size]

Комментарий
     variable  -  это  численная  переменная,  а  size   -   это
     необязательное  числовое  выражение,  которое  указывает на
     значение, которое должно  быть  вычтено  из  variable. Если
     size опускается, используется 1.
        DECR   -   удобный   способ   отрицательного  приращения
     переменной. Для приращения переменной используйте  оператор
     INCR.

См. также  INCR

Пример      I% = 15    ' инициализировать счетчик переменных
            J% = 500
            WHILE  I% > 0
               PRINT  I%,J%    'показать значение
               DECR   I%       'уменьшить значение на  1
               DECR   J%, 5    'уменьшить значение на  5
            WEND
            END             'закончить программу


Оператор   DEF FN/END DEF
----------------------------------------------------------------
Назначение     DEF FN/END DEF  определяет функцию.

Синтаксис   Из одной строки
            DEF FNidentifier[(argument list)] = expression

            Из нескольких строк
            DEF FNidentifier [(argument list)]
              [LOCAL variable list]
              [STATIC variable list]
              [SHARED variable list]
                .
                .
                .   statements
                .
                [EXIT DEF]
                [FNidentifier = expression]
              END DEF

Комментарий
     identifier    есть    уникальное    имя,   которое   должно
     ассоциироваться  с  функцией,  и   должно   соответствовать
     условиям  присвоение  имени меткам и переменным (т.е. буква
     за которой следует любое колличество букв и/или цифр).
     argument  list  есть  необязательная,  отделенная  запятыми
     последовательность   формальных   параметров.  Параметры  в
     списке аргументов служат только для определения функции:
     они не имеют  никакого  отношения  к  другим  переменным  в
     программе с таким же названием.
        DEF  FN  и  END  DEF  берут  в  скобки и присваивают имя
     группе  подпрограммных  операторов,  называемых   функцией.
     Функции  могут  быть  факультативно переданы один или более
     аргументов по значению. Функции  возвращают  значение  (тип
     которого  контролируется  именем  функции,  как  будто  это
     переменная) и могут по этому вызываться из любого оператора
     который принемает значение соответствующего типа.

         Определение функции и ход программы.

     Положение определений функции несущественно. Функция  может
     быть  определена  в  1 строке или 1000 строке программы без
     учета места ее использования; и вам не надо направлять  ход
     программы  через  функцию  как  шаг инициализации (как эито
     требуется в однострочных функциях в Интерпритаторе БЕЙСИК).
     Компилятор видит ваши определения, где бы они не находились
     Выполнение программы также не может случайно и в отличие от
     подпрограмм "распадаться" на функции. Что касается маршрута
     выполнения   программы,   определения  функций  и  процедур
     являются невидимыми. Например:

     t = FNPrintStuff
     DEF fnprintStuff
         PRINT "Printed from within FNPrintStuff"
     END DEF

     Когда   выполняется   данная   четырехстрочная   программа,
     сообщение   появляется   только  однажды,  т.к.  PrintStuff
     вызывается в первой строчке.
        Определения   функции    следует    рассматривать    как
     изолированные  островки  кода;  не запрыгивайте на них и не
     выпрыгиваете обратно  при  помощи  операторов  GOTO,  GOSUB
     или  RETURN.  В рамках определений, однако, такие операторы
     допустимы.
        Заметьте, что определения функции и процедуры  не  могут
     вкладываться;  т.е.  недопустимо  определять  процедуру или
     функцию в рамках процедуры или  функции  (хотя  определение
     процедуры   или   функции  может  содержать  вызовы  других
     процедур или функций).

        Объявление локальных  переменных  (только  многострочные
     функции).

     Для   объявления  локальных  переменных  в  рамках  функции
     используйте  оператор   LOСAL   перед   любым   выполняемым
     оператором в дефиниции. Например:

     LOCAL a%,b#,bigArray%()

     создает  три  локальные  переменные: a% и b# (целое число и
     число с двойной точностью соответственно)  и  целочисленный
     массив   bigArray.   Массив   должен  быть  соответствующих
     размеров:

     DIM DYNAMIC bigArray%(1000)

        Статические и разделенные переменные.

     По  умолчанию,  переменные,  которые  появляются  в  рамках
     определений   функции   имеют  аттрибут  SHARED,  т.е.  они
     являются  глобальными  по  отношению  к   остальной   части
     программы.
        Объявляйте  переменные  с  атрибутом STATIC, если важно,
     чтобы переменная не теряла свое значение с каждым  вызовом,
     а изменена она может быть только в пределах функции.
        Определение  функции из нескольких строк включает обычно
     назначение идентификатору функции и должно быть  прекращено
     при  помощи  END DEF. Если вы решили не включать назначение
     идентификатору  функции,   тогда   значения,   возвращенное
     функцией, бюудет неопределенным.
        Используйте оператор  EXIT  DEF для возврата из функции,
     который находится не в ее конце.

См. также  LOCAL , SHARED , STATIC

Пример      $STASK &H7FFF
            Total = 1

            DEF FNFactorial%(I%)
            ' Данная функция вычисляет факториал I%
            Total = Total * I%
            IF I% > 1 THEN
               Subb% = FNFactorial%(I%-1)
            END IF
            FNFactorial% = Total
            END DEF  'закончить факториал функции

            PRINT "Input the number you wish to calculate the";
            INPUT "factorial of: ",J%
            PRINT FNFactorial%(J%)
            END

Операторы  DEFINT, DEFLNG, DEFSNG, DEFDBL, DEFSTR
----------------------------------------------------------------
Назначение  Операторы  DEFINT, DEFLNG, DEFSNG, DEFDBL  и  DEFSTR
            объявляют тип идентификаторов переменных по умолчанию

Синтаксис   DEFtype letter range [, letter range]....

Комментарий
     type представляет  один  из  пяти  типов  переменных  ТУРБО
     БЕЙСИКа  :  INT,  LNG,  SNG, DBL и STR. letter range - есть
     либо одиночный  алфавитный  символ  (от  A  до  Z  ),  либо
     диапазон  букв  (две  буквы  отделенные друг от друга тире,
     например:  A-M).
     Оператор типа DEF сообщает  компилятору  что  переменные  и
     определенные  пользователем  функции,  начиная с конкретной
     буквы или набора букв будут определенного  типа.  Это  дает
     возможность   вам   использовать  переменные  не  только  с
     одинарной точностью и плавающей запятой в  вашей  программе
     без включения идентификаторов типа (например, %, #).
        По  умолчанию,  когда компилятиор находит имя переменной
     без идентификатора типа, он  допускает,  что  переменная  с
     плавающей запятой и с одинарной точностью.
     Например:  в  данном  операторе  как  n  так  и  m являются
     переменными с одинарной точностью:
          n = m + 16
     Однако если, этому оператору предшевствуют  DEFINT n,m
     тогда n и m обе будут  целочисленными  переменными,  как  и
     любая  другая  переменная,  чье  имя начинается с n или m в
     верхнем или нижнем регистре.
        Выполнение DEFtype в ТУРБО  БЕЙСИКе  немного  отличается
     от Интерпретатора БЕЙСИК. Интерпретатор  оценивает  DEFtype
     в  соответсвии  с  тем, где оператор DEFtype появляется при
     выполнеии программы. ТУРБО БЕЙСИК  в  качестве  компилятора
     рассматривает   положение   DEFtype   в   исходном   файле.
     Например, при выполнении данной программы

        10 GOTO 30
        20 DEFINT A-M
        30 j = 45.3 : PRINT j

     Интерпретатор БЕЙСИК никогда  не видит  оператор  DEFINT  в
     строке  20  когда  он  встретит  j  в  строке  30, j станет
     переменной с одинарной точностью и будет напечетано  45.3 .
     Наоборот,   ТУРБО   БЕЙСИК  принемает  решения  о  введении
     переменных  во  время  компиляции,   без   учета   маршрута
     выполнения  (о  котором  во  время  компиляции он ничего не
     знает).  Он  заботится  только,   чтобы   оператор   DEFINT
     появился  физически  до  первого  появления  переменной  j.
     Таким образом j становится целым числом и печатается 45 .

Ограничения
     Оператор  DEFtype  переопределит  тип любой соответствующей
     переменной уже использованной в программе. Следующий пример
     демонстрирует этот тонкий момент.

Пример ' назначить значение числу с одинарной точностью
       I = 2.2
       ' показать значение на экране
       PRINT "Single Precision number"I
       ' экплизитно объявить переменную с таким же именем
       ' и такого же типа
       DEFSNG I
       PRINT  "Single Precision number"I
       ' эксплизитно объявить переменную с такимже именем
       ' но другого типа
       DEFINT I
       'напечатать значение новой переменной
       PRINT  "Integer number"I
       ' все идентификаторы, начиная с буквы от A  до  C
       ' будут с двойной точностью до следующего оператора  DEF
       DEFOBL A-C
       ' все идентификаторы, начиная с буквы от  J  до  Z  будут
       ' целочисленного типа до очередного оператора  DEF
       DEFLNG J-2
       ' присвоить значение переменной с удвоенной точностью
       A = 32767.1
       ' присвоить значение длинному целому числу
       Z = -1
       'присвоить значение  ранее  определенной  целочисленной
       'переменной
       I = &H8FFF
       PRINT  "The different types:",A,2,I
       END    'закончить программу

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

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

     ' определить сегмент для  POKE  и  BSAVE
     DEF SEG = FNVideoScreen%
     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 , численные массивы устанавливаются в состояние 0  ,  а
     символьные массивы на нулевую строку.
        Если переменная массива используется без предшествующего
     оператора  DIM,  максимальное  значение  его субиндексов по
     умолчанию будет равным 10, как будто  вы  включили  (10)  в
     оператор  DIM  .  Рекомендуем  однако, экплуцитно описывать
     каждый массив.
        Минимальное  значение,  которое  можно  использовать   в
     качестве  субиндекса  массива  -  это  0,  если оно не было
     описано по-другому с помощью оператора  OPTION BASE.
        Необязательные аргументы STATIC и  DYNAMIC  контролируют
     соответственно будет ли пространство для  массива  выделено
     заранее компилятором или будет распределяться  динамически.
     В случае опущения, массивы переходят по умолчанию к  стати-
     ческому распределению  до введения  метаоператора $DYNAMIC.
     Пространство   распределяется   также   динамически,   если
     в операторе DIM  используется выражение, в двух  операторах
     DIM появляется имя массива, либо массив объявляется локаль-
     ным в процедуре или функции.
        Переключатель  проверки  границ,  доступный  через  меню
     Options  ,  заставляет  компилятор  создавать  код, который
     проверяет субиндексы на соответствие, когда идет ссылка  на
     массив.

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

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

Пример
       'константа с именем, определяющая верхнюю границу массива
       %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]
Комментарий
     выражение  есть численное выражение, в котором значения, не
     равные нулю, представляют TRUE, а нулевые значения  FALSE.
        DO и LOOP являются построителями циклов всех видов.  Они
     позволяют вам создавать циклы с тестами для условий  завер-
     шения наверху цикла, внизу, в общих местах,  или ни в одном
     из них. Оператор DO должень всегда быть спаренным с  опера-
     тором  LOOP  в нижней части цикла.
        Неудачная  попытка  спарить  DO  и   LOOP   приведет   к
     ошибкам вреиени компиляции.
        Для  дополнения  теста  в  DO/LOOP  используйте  WHILE и
     UNTIL.  Используйте  резервное  слово  WHILE  ,  если   вам
     необходимо  повторить  цикл  в случае, если выражение - это
     TRUE, и выйти из него в противном случае.   UNTIL  вызывает
     обратный эффект; то есть цикл будет  закончен, если условие
     - TRUE и повторен в случае  FALSE . Например:

     DO WHILE A = 13
     .
     . statements
     .
     LOOP

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

     DO WHILE 2 < b
     .
     .
     .
     LOOP

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

     WHILE a < b
     .
     .
     .
     WEND

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

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

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

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

     Например:

     DRAW "D10R5"

     производит  построение  формы  L  (вниз  10,   вправо   5),
     начиная  с  LPR.  Он  переводит  LPR  на  последний элемент
     изображения.
     Mx,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
 ---------------------------------------------------------------
  CGA                    5/6      5/12       N/A           N/A
  EGA                    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    'закончить программу