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



 

Часть 11

                    Функции LOG, LOG2 и  LOG10
-----------------------------------------------------------------
Назначение    LOG возвращает значение натурального 
                  (по основанию e)  логарифма; 
              LOG2 - логарифма по основанию 2; 
              LOG10 -  логарифма по основанию 10.
              
Синтаксис     LOG:
     
              y = LOG  (числовое выражение)
     
              LOG2:
     
              y = LOG2 ( числовое выражение)
     
              LOG10
     
              y = LOG10 (числовое выражение)
              
Комментарий      LOG  возвращает значение натурального  логарифма  
              (по основанию e = 2.718282...)  заданного аргумента. 
              Если числовое выражение меньше или равно нулю, воз-
              никнет ошибка выполнения 5 -Illegal  Function  Call 
              неверный вызов функции).  
                 Натуральный логарифм равен  степени,  в  которую 
              нужно  возвести  e,  чтобы  результат  был  равен X 
              (аргументу).  LOG,LOG2 и LOG10 возвращают  значения 
              с двойной точностью.  
              
 Пример       FOR I!=1 TO 50 STEP 2.5
                PRINT USING "Натуральный логарифм ##=##^^";_
                            I!, LOG (I!)
              NEXT I!
              END     'конец программы

                           Функция LPOS
-----------------------------------------------------------------
Назначение    LPOS возвращает "позицию курсора" в буфере печатаю-
              щего устройства
              
Синтаксис     y = LPOS (принтер)
              
Замечания     принтер - целочисленное выражение от 0 до 3,
              указывающее на тип печатающего устройства:
     
              0,1 для LPT1:
              2   для LPT2:
              3   для LPT3:
     
                   LPOS сообщает,  какое количество символов было 
              передано на принтер с момента выполнения последнего 
              возврата каретки.  
              
См.также      POS
              
Пример        'установка ширины печати согласно заданной 
              ' константе
              %Wid = 80
              
              'вывод на экран и на принтер кодов ASCII и
              ' расширенных кодов ASCII

            FOR I% = 0 TO 225
                IF (I%>32) THEN
                  PRINT USING "!"; CHR(I%);
                  LPRINT USING CHR$(13)+CHR(10)
                END IF
            NEXT I%
              END    'конец прграммы

                  Операторы LPRINT,LPRINT USING
-----------------------------------------------------------------
Назначение    LPRINT и LPRINT USING посылают данные на принтер
              ( LPT1: )
              
Синтаксис     LPRINT [список выражений [;]]
              LPRINT USING строка формата; список выражений
              
Комментарий      список выражений- список числовых переменных или 
              символьных выражений, разделенных запятыми или точ-
              ками с запятой.  Строка формата содержит информацию 
              для форматирования.  
                   LPRINT   и   LPRINT   USING  выполняют  те  же 
              действия,  что и операторы PRINT и PRINT USING,  за 
              исключением  того,  что список выражений посылается 
              на принтер (LPT1), а не на экран.  
                   Обратите  внимание,  что  по  умолчанию  ТУРБО 
              БЕЙСИК  выполняет  возврат  каретки/перевод  строки 
              после вывода каждых 80  символов  в  строке.  Длину 
              строки можно изменить с помощью оператора WIDTH.  
              
См.также      LPOS   PRINT    PRINT USING     WIDTH
              
Пример        LPRINT USING ## - мой счастливый номер.";/
              END

                          Оператор LSET
-----------------------------------------------------------------
Назначение    LSET перемещает символьные данные  в  буфер файла с
              произвольным доступом.
              
Синтаксис     LSET переменная поля = символьное выражение
              
Комментарий      LSET и родственный ему оператор  RSET перемещают 
              символьную информацию в переменные поля,  принадле-
              жащие по определению буферу  файла  с  произвольным 
              доступом.  
                 Если  длина  символьного выражения  меньше,  чем 
              длина  переменной  поля,  оператор  LSET  выполняет 
              выравнивание   по   левому  знаку,   дополняя  поле 
              пробелом.  Это означает,  что  пробелы  добавляются 
              после последнего знака символьного выражения с тем, 
              чтобы  функция:  

                LEN (переменная поля) 

              возвращала то же значение, которое указано в соот-
              ветствующем операторе FIELD.  
                 RSET  выполняет  выравнивание  по правому знаку, 
              дополняя поле  пробелами  (пробелы  добавляются  до 
              первого знака символьного выражения).  
                 LSET и RSET могут также использоваться для фор-
              матирования  выводимых  на  экран  или  на  принтер 
              данных.  
              
См.также      FIELD     LEN    RSET
              
Пример        OPEN "LSET.DTA" AS #1 LEN = 18
              
              'определение имени и размеров полей файлов
              FIELD 1,2 AS FileInt$, 4 AS FileLong$,_
                    4 AS FileSngl$, 8 AS FileDbl$
              
              ' присвоить значения полям и занести запись в файл
              ' с произвольным доступом
              FOR Count% = 1 TO 5
                LSET FileInt$ = MKI$(Count%)
                LSET FileLong$ = MKL$(Count%^2)
                LSET FileSngl$ = MKS$(Count%^2.1)
                LSET FileDbl$ = MKD$(Count%^4.4)
                PUT 1,Count%
              NEXT Count%
              
              CLOSE 1     'закрытие файла
              
              END         'конец основной программы

                         Оператор MEMSET
-----------------------------------------------------------------
Назначение    MEMSET устанавливает верхнюю границу памяти
              
Синтаксис     MEMSET адрес
              
Комментарий      адрес- длинное целое выражение, определяющее аб-
              солютный  адрес  верхней   границы   памяти   ТУРБО 
              БЕЙСИКА.   Адрес  должен  быть  меньше,  чем  объем 
              имеющейся  памяти  в  системе.  На  практике  адрес 
              обычно  вычисляется  вычитанием некоторой константы 
              из величины, возвращаемой функцией ENDMEM.  
                 MEMSET предназначен для выделения дополнительной 
              памяти для подпрограмм на  ассемблере.  Если  ТУРБО 
              БЕЙСИК   не   может   удовлетворить   запрос  из-за 
              неверного  аргумента  или   недостаточного   объема 
              памяти,  возникает  ошибка  выполнения  7  "Out  of 
              Memory" (выход за пределы памяти).  
   
См.также      ENDMEM
              
Пример        PRINT FRE(-1)      'вывод объема доступной памяти
              'отделить 128 байтов от верхней границы памяти
              MEMSET ENDMEM - &H80
              PRINT FRE(-1)      'вывод объема памяти
              END                'конец программы

                          Функция  MID$
-----------------------------------------------------------------
Назначение    MID$ возвращает символьную подстроку
              
Синтаксис     s$ = MID$ (символьное выражение,n [,m])
              
Комментарий      n и m - числовые переменные или выражения, кото-
              рые могут принимать значения в диапазоне  от  1  до 
              32767 и от 0 до 32767 соответственно.  
                   MID$   возвращает   m-ю   символьную   строку, 
              начинающуюся с n-го  знака  символьного  выражения. 
              Если m опущено или в симовльном выражении менее n+m 
              символов, возвращается остаток строки от n-го знака 
              до   конца.   Если   n   больше  длины  символьного 
              выражения, MID$ возвращает пустую строку.  
              
См.также      LEFT$      RIGHT$      оператор MID$
              
Пример        INPUT "Введите строку:",DummyStr$
              
              TempStr$ = DummyStr$
              PRINT DummyStr$
              ' перезапись строки в обратном порядке с
              ' помощью одновременного использования оператора
              ' и функции MID$
              FOR I%=1 TO LEN(DummyStr$)
                MID$(DummyStr$,I%,1)=MID$(TempStr$,_
                     (LEN(TempStr$)-I%)+1,1)
              NEXT I%
              
              PRINT DummyStr$
              
              END     'конец программы

                          Оператор MID$
-----------------------------------------------------------------
Назначение    MID$ заменяет символы в строке
              
Синтаксис     MID$ (символьная переменная,n[,m]) = строка замены

Комментарий      n и m - числовые переменные или выражения, кото-
              рые  могут  принимать  значения в диапазоне от 1 до 
              32767 и от 0 до 32767 соответственно.  
                 Оператор MID$ заменяет  m  знаков  в  символьной 
              переменной,  начиная  с  n-ого  символа,  на строку 
              замены.  Значение m,  если оно  задано,  определяет 
              количество  символов  из  строки  замены,   которые 
              замещаются  в  символьной  переменной.   Если   оно 
              опущено,  используется вся строка замены.  Оператор 
              MID$ не меняет длину символьной переменной.  
              
См.также      LEFT$     RIGHT$     функция MID$
              
Пример        'оператор MID$
              b$="Hurritane Camille"
              MID$(b$, 11) = "Carla  "   'параметр m опущен
              PRINT b$

                          Оператор MKDIR
-----------------------------------------------------------------
Назначение    MKDIR создает подкаталог (аналог команды MKDIR DOS)
              
Синтаксис     MKDIR маршрут
              
Комментарий      маршрут - символьное выражение, описывающее соз-
              даваемый каталог  (об  именах  файлов  и  маршрутах 
              см. главу 4). MKDIR (make directory - создать ката-
              лог) создает подкаталог в соответствии  с  заданным 
              маршрутом.  
                 При попытке создать каталог,  который уже  суще-
              ствует,  возникает  ошибка  выполнения  5 - Illegal 
              Function Call (неверный вызов функции).  
              
Пример        ' Определить обработку ошибок
              
              ON ERROR GOTO DirError
              
     PRINT "Введите,пожалуйста, имя каталога, который вы хотите:"
              INPUT "создать:", DirName$
              
              MKDIR DirName$      'создание каталога
              
              END                 'конец программы
              
              DirError:
                PRINT "в создание каталога имеется трудность"
                END

                 Функции MKI$, MKL$, MKS$ и MKD$
-----------------------------------------------------------------
Назначение    MKI$,  MKL$,  MKS$,  MKD$  преобразовывают числовые 
              данные в символьные (для выходных файлов  с  произ-
              вольным доступом) 
              
Синтаксис     s$ = MKI$ (целочисленное выражение)
              s$ = MKL$ (длинное целое выражение)
              s$ = MKS$ (выражение с одинарной точностью)
              s$ = MKD$ (выражение с двойной точностью)
              
Комментарий      Функции Make являются частью процесса записи
              числовых  значений в файлы с произвольным доступом.  
              Операторы (LSET и RSET),  записывающие информацию в 
              буфер файла с произвольным доступом, работают толь-
              ко с символьными данными,  поэтому числовые  данные 
              прежде,  чем их можно будет записать (PUT) в файл с 
              произвольным доступом,  должны быть преобразованы в 
              символьные.  
                 MKI$(i) возвращает двухсимвольную строку, состо-
              ящую  из  двух  8-битовых  значений,  которые ТУРБО 
              БЕЙСИК  использует  для  внутреннего  представления 
              целой  переменной  i.  MKL$  возвращает  4-байтовую 
              строку эквивалентному длинному целому  числу.  MKS$ 
              возвращает  4-байтовую  символьную строку,  эквива-
              лентную  значению  с  одинарной   точностью.   MKD$ 
              возвращает   8-байтовую   символьную   строку   для 
              значения с двойной точностью. При чтении из файла с 
              произвольным  доступом  используются  функции  CVI, 
              CVL,  CVS  и  CVD,  выполняющие обратные преобразо-
              вания.  
                 Не следует путать  приведенные  выше  функции  с 
              STR$ и VAL,  которые преобразуют числовые выражения 
              в форму,  приемлемую для печати и,  соответственно, 
              наоборот: 
              
              i = 123.45
              a$= STR$(i):b$=MKS$(i)
              'a$ содержит нечто, что имеет смысл
              'выводить на экран, а b$ - нет
              PRINT a$,b$
              
См.также      CVD    CVI   CVL    CVS
              
Пример        OPEN "MKILSD.DTA" AS #1 LEN = 18
              
              ' определение имен и размеров полей
              FIELD 1,2 AS FileInd$,4 AS FileLong$,_
                      4 AS FileSngl$,8 AS FileDbl$
              ' присвоение значений полям и занесение
              ' в файл с произвольным доступом
              FOR Count%=1 TO 5
                LSET FileInd$=MKI$(Count%)
                LSET FileLong$=MKL$(Count%^2)
                LSET FileSngl$=MKS$(Count%^2.1)
                LSET FileDbl$=MKD$(Count%^4.4)
                PUT 1,Count%
              NEXT Count%
              
              CLOSE #1       'закрыть файл
              
              END            'конец программы

                       Функции MKMD$, MKMS$
-----------------------------------------------------------------
Назначение    MKMD$ и MKMS$  преобразуют числовые значения в сим-
              вольные в форме Microsoft (для ввода в файлы с про-
              извольным доступом).
              
Синтаксис     s$ = MKMS$ (выражение с одинарной точностью)
              s$ = MKMD$ (выражение с двойной точностью)
              
Комментарий      Функции "Make Microsoft" предназначены исключи- 
              тельно  для  совместимости  с  имеющимися файлами с 
              произвольным  доступом,   содержащими  значения   с 
              плавающей запятой в формате Microsoft.  
                 MKMS$ преобразует значение с одинарной точностью 
              в 4-байтовую строку в формате  Microsoft. 
                 MKMD$   создает   8-байтовую  строку  в  формате 
              Microsoft  для   заданного   значения   с   двойной 
              точностью.  
              
См.также      CVMD   CVMS
              
Пример        ' открытие файла с произвольным доступом
              OPEN "CVMD.DTA" AS #1 LEN = 12
              
              FIELD #1,4 AS Single$,8 AS Double$
              
              MaxInt%=32767
              
              FOR I%=1 TO 5          'запись данных в файл
                LSET Double$=MKMD$(I%+MaxInt%)
                PUT #1,I%
              NEXT I%
              
              FOR I%=1 TO 5          'чтение данных из файла
                GET #1,I%            'вывод на экран
                PRINT CVMS(Single$),CVMD(Double$)
              NEXT I%
              
              CLOSE #1               'закрытие файла
              
              END                    'конец программы

                    Функция и оператор MTIMER
-----------------------------------------------------------------
Назначение    MTIMER читает или устанавливает микротаймер
              
Синтаксис     Функция:
              
              y = MTIMER
              
              Оператор:
              
              MTIMER
              
Комментарий      MTIMER предназначен для измерения истекшего вре-
              мени, главным образом, для очень коротких операций. 
              Обеспечивается высокая точность измерений, которая, 
              однако,   быстро  падает,   если  измеряемое  время 
              превышает 54 миллисекунды.  
                 Функция MTIMER возвращает время в микросекундах, 
              которое  прошло  с  момента  выполнения  последнего 
              оператора MTIMER.  
              
Ограничения      Оператор MTIMER устанавливает микротаймер в 0. 
                 Оператор  и  функция MTIMER используются в паре. 
              Следует сначала выполнить оператор MTIMER,  а затем 
              вызвать  функцию,  чтобы  получить  результат.  При 
              последующих обращениях к функции,  если микротаймер 
              не был перезапущен с помощью оператора  MTIMER,  на 
              выходе будет получен 0.  
                 MTIMER и SOUND/PLAY используют канал 2 8255 чипа 
              таймера   и   являются  взаимоисключающими.   Таким 
              образом, выполнение операторов SOUND или PLAY между 
              оператором MTIMER и функцией  MTIMER  устанавливает 
              микротаймер на нулевое значение истекшего времени.  
              
Пример        ' инициализация таймера
              MTIMER
              
              PI%=ATN(1)*4   'вычисление PI
              
              ' чтение значения таймера
              ElapsedTime!=MTIMER
              
      PRINT USING "Это заняло ##### миллисекунд";ElapsedTime!;
              PRINT ", чтобы вычислить значение PI."
              
              END            'конец программы

                          Оператор NAME
-----------------------------------------------------------------
Назначение    NAME переименовывает файл (аналог команды REN DOS)
              
Синтаксис     NAME имя файла- 1 AS имя файла- 2
              
Комментарий      Имя файла- 1 и имя файла- 2 - символьные выраже-
              ния,  соответствующие  правилам  маршрутов  и  имен 
              файлов. Оператор NAME присваивает данным, представ-
              ленным именем файла- 1, имя файла- 2.  Имя файла- 2 
              может содержать описание маршрута,  то есть  данные 
              можно  перемещать  из одного каталога в другой,  но 
              нельзя перемещать на другой диск.  
              
Пример        PRINT "Введите имя файла, который нужно ";
              INPUT "переименовать:", OldName$
              INOUT "введите новое имя файла:", NewName$
              PRINT OldName$, NewName$
              NAME OldName$, NewName$
              
              END                'конец программы

                           Функция OCT$
-----------------------------------------------------------------
Назначение    OCT$  возвращает строку,  представляющую  численное 
              выражение, в восьмеричном виде (по основанию 8).
              
Синтаксис     s$ = OCT$ (числовое выражение)
              
Комментарий      Числовое выражение должно  быть  в  диапазоне от 
              -32768 до 65535. OCT$ возвращает строку, представ-
              ляющую  восьмеричный  вид целочисленного аргумента. 
              Если численное выражение имеет дробную  часть,  оно 
              перед преобразованием округляется.  
                 Для преобразования в шестнадцатеричные или  дво-
              ичные строки используются,  соответственно, функции 
              HEX$ и BIN$.  
  
См. также     BIN$    HEX$
              
Пример        PRINT OCT$(-1)
              PRINT OCT$(65535)

                        Оператор ON COM(n)
-----------------------------------------------------------------
Назначение    ON COM(n) объявляет подпрограмму обработки прерыва-
              ния для событий последовательного порта.
              
Синтаксис     ON COM(n) GOSUB метка
              
Комментарий      n- номер  (1 или 2)  адаптера  связи (последова-
              тельного порта),  из которого должно осуществляться 
              чтение. Метка идентифицирует подпрограмму обработки 
              прерываний.  Если  метка  -  это  номер специальной 
              строки 0, тогда прерывание отменяется.  
                 Оператор ON COM(n) не производит  никакого  дей-
              ствия до тех пор, пока коммуникационные события для 
              данного   последовательного  порта  не  разрешаются 
              соответствующим оператором COM ON.  После того, как 
              выполнен  оператор  COM  ON,  между  каждыми  двумя 
              последующими  операторами проверяется,  не поступил 
              ли символ на указанный последовательный порт.  Если 
              поступил,   то  осуществляется  GOSUB  на  заданную 
              подпрограмму.  
              
См.также      Приложение B "Прерывание по событию"

                        Оператор ON ERROR
-----------------------------------------------------------------
Назначение    ON ERROR задает процедуру обработки ошибки и включ- 
              ает прерывание по ошибке.
              
Синтаксис     ON ERROR GOTO метка
              
Комментарий      Метка идентифицирует первую строку  подпрограммы 
              обработки ошибки.  
                 Если обработка ошибок задана этим оператором, то 
              при возникновении ошибки в ходе выполнения програм-
              мы осуществляется переход  на  процедуру  обработки 
              ошибок,   вместо   обычных  в  этом  случае  выдачи 
              сообщения  и  прекращения   выполнения   программы, 
              следует использовать оператор RESUME.  
                 Чтобы отменить прерывание по ошибке, следует ис-
              пользовать  ON  ERROR  GOTO 0.  Вы можете применять 
              этот способ, если возникает ошибка,  для которой вы 
              не  определили ветви программы для  восстановления. 
              Вы можете также  захотеть  в  этот  момент  вывести 
              содержимое ERL.  
                 Если вы осуществляете прогон программы типа .EXE 
              из  DOS  с  выключенной  обработкой  ошибок,  то за 
              всякой ошибкой в ходе выполнения программы  следует 
              сообщение   об   ошибке,   и  выполнение  программы 
              прерывается. Сообщение имеет вид: 
               
              Error errnum at pgm-ctr=address
              Ошибка "номер ошибки" по адресу в программе = "зна-
              чение адреса"
              
                 Если программа была запущена из ТУРБО БЕЙСИКА  и 
              возникает ошибка, вы оказываетесь в редакторе в том 
              месте, где локализована ошибка.  В строке состояния 
              будет краткое описание ошибки в виде: 
              
              Error "номер ошибки" : сообщение об ошибке.
              
См.также      ERADR   ERL   ERR   ERROR   RESUME
              
Пример        ' установка обработки ошибок
              ON ERROR ErrorHandler
              
              WHILE I         'этот цикл завершается ошибкой
                I=10/0        'этот оператор вызывает ошибку 
                              'выполнения
              WEND
              
              ErrorHandler:
          PRINT  "Обработчик ошибок поймал ошибку выполнения"
                PRINT ERR, "в строке"  ERL
              END

                        Оператор ON/GOSUB
-----------------------------------------------------------------
Назначение    ON/GOSUB вызывает одну из нескольких подпрограмм  в 
              соответствии со значением числового выражения.
              
Синтаксис     ON n GOSUB   метка [,метка]...
              
Комментарий      n- числовое выражение  в  диапазоне от 0 до 255, 
              метка   идентифицирует   оператор,    на    который 
              выполняется переход.  n определяет,  на какую метку 
              осуществляется  скачок  (например,  если  n=4,   то 
              управление получает четвертая метка в списке). Если 
              n  равно  0 или больше числа меток в списке,  ТУРБО 
              БЕЙСИК продолжает выполнение следующего оператора.  
                 Каждая подпрограмма должна заканчиваться опера-
              тором   RETURN,    чтобы   возобновить   выполнение 
              программы  с  оператора,  следующего  за оператором 
              ON/GOSUB.  
                 Многовариантное ветвление  может  осуществляться 
              также,  и с большей гибкостью, с помощью операторов 
              SELECT и IF.  

Пример        FOR I% = 1 TO 3
                ON I% GOSUB OneHandler, TwoHandler, ThreeHandler
              NEXT I%
              END              'конец основной программы

              OneHandler:
                PRINT "номер обработчика", I%
                RETURN

              TwoHandler:
                PRINT "номер обработчика", I%
                RETURN

              ThreeHandler:
                PRINT "номер обработчика", I%
                RETURN

                         Оператор ON/GOTO
-----------------------------------------------------------------
Назначение    ON/GOTO  направляет  выполнение программы по одному 
              из  следующих  путей  в  зависимости  от   значения 
              численного выражения.  
              
Синтаксис     ON n GOTO метка [,метка]...
              
Комментарий      n- численное выражение,  имеющее значение в диа-
              пазоне от 0 до 255,  метка идентифицирует оператор, 
              на который выполняется переход.  
                 n  определяет на какую метку осуществляется ска-
              чок (например,  если n=4,  то  управление  получает 
              четвертая  метка  в  списке).  Если  n  равно 0 или 
              больше  числа  меток   в   списке,   ТУРБО   БЕЙСИК 
              продолжает выполнение следующего оператора.  Каждая 
              подпрограмма    должна   заканчиваться   оператором 
              RETURN,  чтобы возобновить выполнение  программы  с 
              оператора, следующего за оператором ON/GOTO.  
                 Многовариантное  ветвление  может осуществляться 
              также, и с большей гибкостью,  с помощью операторов 
              SELECT и IF.  
                                                                         
Пример        FOR I% = 1 TO 3
                ON I% GOTO OneHandler, TwoHandler, ThreeHandler
              NEXT I%
              END              'конец основной программы
                                                                         
              OneHandler:
                PRINT "номер обработчика", I%
                RETURN
                                                                         
              TwoHandler:
                PRINT "номер обработчика", I%
                RETURN
                                                                         
              ThreeHandler:
                PRINT "номер обработчика", I%
                RETURN

                       Оператор ON KEY (n)
-----------------------------------------------------------------
Назначение    ON KEY (n)   задает подпрограмму обработки прерыва- 
              ния,  на которую передается управление, если нажата 
              определенная клавиша.  

Синтаксис     ON KEY (n) GOSUB метка

Комментарий      Метка  идентифицирует первый оператор в подпрог-
              рамме обработки прерывания, а n определяет клавишу, 
              осуществляющую прерывание.  n  -  целое  выражение, 
              имеющее значение от 1 до 25,  30, 31 в соответствии 
              со следующей таблицей: 

              ------------------------------------------------
                  n      :           клавиша
              ------------------------------------------------

               1-10      :  Функциональные клавиши F1-F10
                         :
                11       :  Курсор вверх
                         :
                12       :  Курсор влево
                         :
                13       :  Курсор вправо
                         :
                14       :  Курсор вниз
                         :
              15-25      :  Клавиши, определенные в операторе KEY
                         :
                30       :  Функциональная клавиша F11
                         :
                31       :  Функциональная клавиша F12
                         :
              ----------------------------------------------------
              
                 Оператор ON KEY не производит никакого  действия 
              до   тех  пор,   пока  прерывания  по  клавишам  не 
              разрешены оператором KEY ON.  Если оператор KEY  ON 
              выполнен,   то  между  каждыми  двумя  последующими 
              операторами проверяется,  не  нажата  ли  указанная 
              клавиша.  Если  нажата,  ТУРБО  БЕЙСИК осуществляет 
              переход на заданную подпрограмму.  
                 Оператор KEY(n) OFF отменяет проверку клавиши  с 
              номером  n.  Для определения прерывания по клавише, 
              не являющейся функциональной клавишей или  клавишей 
              управления движения курсором, используется оператор 
              KEY.  
                 Для  детального управления генерацией кода обна-
              ружения событий ТУРБО БЕЙСИКОМ следует использовать 
              метаоператор $EVENT.  
              
См.также      $EVENT
              KEY (n)

Пример        ' программа иллюстрирует действия оператора KEY(n)
              ' включить контроль за нажатием клавиши KEY ON
              ' присвоить клавишам следующие строки
              
              KEY1, "Hello"+CHR$(13)
              KEY2, "GoodBye"+CHR$(13)
              KEY10, CHR(13)
              
              ' по клавише F10 установить также прерывание
              ON KEY(10) GOSUB GoodBye
              ' включить прерывание по F10
              KEY10 ON
              
              ' запросы пользователю на ввод
              INPUT "НажмитеF1"; Dummy$
              INPUT "НажмитеF2"; Dummy$
              PRINT "Теперь нажмите F10..."
              ' теперь, когда пользователь нажмет F10
              ' будет вызвана подпрограмма GoodBye
              WHILE NOT INSTAT : WEND     'ждать нажатия F10
              END                         'конец программы
              
              GoodBye:
                KEY LIST      'вызвать список текущих 
                              'определений клавиш
                KEY (10) OFF  'отключить прерывание по F10
              
              ' теперь, когда пользователь нажмет F10, будет
              ' выведена символьная строка, назначенная F10
              PRINT "Нажмите F10, чтобы завершить программу..."
              RETURN

                         Оператор ON PEN
-----------------------------------------------------------------
Назначение    ON PEN задает подпрограмму обработки прерывания, на 
              которую передается  управление,  если  производятся 
              действия с световым пером.  
              
Синтаксис     ON PEN GOSUB метка
              
Комментарий      Метка  идентифицирует первый оператор в подпрог-
              рамме обработки прерывания по световому перу.  
                 Оператор  ON PEN не производит никакого действия 
              до  тех  пор,  пока  события,  вызываемые  световым 
              пером, не разрешены с помощью PEN ON. Если оператор 
              PEN   ON   выполнен,   то   между   каждыми   двумя 
              последующими операторами проверяется,  не  было  ли 
              использовано световое перо.  Если было,  вызывается 
              заданная подпрограмма.  
                 Оператор PEN OFF отключает контроль за  световым 
              пером.  После  прерывания  по световому перу неявно 
              выполняется оператор PEN  STOP,  -  чтобы  избежать 
              повторного  вызова  подпрограммы  из  нее  самой  и 
              переполнения,  таким  образом,   стека.   Вместе  с 
              заключительным   оператором   RETURN   подпрограммы 
              обработки прерывания  автоматически  осуществляется 
              PEN  ON,  если  только в подпрограмме не содержится 
              явного оператора PEN OFF.  
                 Для  детального   управления   генерацией   кода 
              обнаружения    событий   ТУРБО   БЕЙСИКОМ   следует 
              использовать метаоператор $EVENT.  
              
См.также      $EVENT  PEN
                       
Пример        ON PEN GOSUB PenHandler  
                                  'установить обработку события
                       
              PEN ON           'отключить прерывание по событию
              
              PRINT "Нажмите любую клавишу для останова..."
              WHILE NOT INSTAT
              WEND
              
              END              'конец программы
              
              PenHandler:
                FOR I% = 1 TO 9
                  PRINT PEN(I%)
                NEXT I%
                RETURN

                         Оператор ON PLAY
-----------------------------------------------------------------
Назначение    ON PLAY  задает подпрограмму, на которую передается 
              управление,   если  в  буфере   подготовки   музыки 
              содержится менее определенного количества нот.  

Синтаксис     ON PLAY (число нот) GOSUB метка

Комментарий      число нот- целое выражение, метка идентифицирует 
              первый оператор в музыкальной подпрограмме.  
                 Оператор  ON  PLAY не осуществляет никакого дей-
              ствия до тех пор,  пока контроль за количеством нот 
              не разрешается оператором PLAY ON.  После того, как 
              оператор PLAY  ON  выполнен,  между  каждыми  двумя 
              последовательными операторами проверяется, не стало 
              ли  количество  несыгранных  еще  нот в музыкальном 
              буфере меньше  заданного  числа  нот.  Если  стало, 
              ТУРБО   БЕЙСИК   осуществляет   переход   GOSUB  на 
              соответствующую подпрограмму.  
                 Оператор PLAY OFF отключает контроль музыкально-
              го буфера.
                 После прерывания по числу нот неявно осуществля-
              ется оператор  PLAY  STOP,  -  чтобы  предотвратить 
              повторный  вызов  подпрограммы  прерывания  из  нее 
              самой   (с   переполнением   стека).    Вместе    с 
              заключительным   оператором   RETURN   подпрограммы 
              обработки  прерывания   автоматически   выполняется 
              оператор  PLAY  ON,  если только в подпро-грамме не 
              содержится явно оператор PLAY OFF.  
                 Обработки  прерывания  не  происходит,   если  к 
              моменту  выполнения  оператора  PLAY  ON  буфер уже 
              пуст.  
                 Для  детального   управления   генерацией   кода 
              обнаружения     событий     следует    использовать 
              метаоператор $EVENT.  Для задания  размеров  буфера 
              подготовки музыки используйте метаоператор $SOUND.  
              
См.также      $EVENT   PLAY   $SOUND
              
Пример        ' эта программа демонстрирует ON PLAY (n)
              ' выделить 30 байтов для буферного пространства
              $SOUND 100
              ' включить контроль событий,
              ' связанных со звуковоспроизведением
              PLAY ON
              ' установить контроль за буфером подготовки музыки

                        Оператор ON TIMER
-----------------------------------------------------------------
Назначение   ON TIMER  задает подпрограмму обработки прерываний, 
              на  которую  передается  управление  через каждые n 
              секунд.  
              
Синтаксис     ON TIMER (n) GOSUB метка
              
Комментарий      Метка идентифицирует первый оператор подпрограм-
              мы обработки прерывания "по истекшему времени". n - 
              целое выражение,  задающее время между прерываниями 
              в секундах. n должно принадлежать диапазону от 1 до 
              86400 (24 часа).  
                 Оператор   ON   TIMER   не  производит  никакого 
              действия до тех пор,  пока контроль за временем  не 
              разрешен  оператором  TIMER  ON.  После  того,  как 
              оператор TIMER ON выполнен,  начинается  внутренний 
              отсчет  секунд,  и  между каждыми двумя операторами 
              проверяется,  не превысило ли  истекшее  количество 
              секунд заданного числа.  Если превысило, вызывается 
              указанная подпрограмма.  
                 Контроль  за  временем  отключается   оператором 
              TIMER OFF.  
                 После  прерывания  неявно  выполняется  оператор 
              TIMER  OFF,-  чтобы  предотвратить  повторный вызов 
              подпрограммы прерывания из нее самой (что  ведет  к 
              переполнению стека). Вместе с заключительным опера-
              тором RETURN подпрограммы автоматически выполняется 
              оператор  TIMER  ON,  если только в подпрограмме не 
              содержится  ранее  явно  оператор  TIMER  OFF.  Это 
              означает,  что  отсчет  секунд  после прерывания по 
              времени устанавливается на 0.  
                 Для управления генерацией кода обнаружения собы-
              тия следует использовать метаоператор $EVENT.  
              
См.также      $EVENT
              TIMER
              
Пример        ON TIMER (1) GOSUB DisplayTime
              ' установить прерывание по таймеру
              ' включить проверку прерывания по таймеру
              TIMER ON
              ' ждать нажатия клавиши
              WHILE NOT INSTAT : WEND
              END       'конец программы
              
              DisplayTime:
                LOCATE 1,70
                PRINT TIME$;
                RETURN

                          Оператор OPEN
-----------------------------------------------------------------
Назначение    Оператор  OPEN  подготавливает  файл или устройство 
              для чтения или записи.
              
Синтаксис     

 OPEN имя файла [FOR режим] AS [#] номер файла [LEN=длина записи]
              
              или
              
OPEN строка режима, [#] номер файла, имя файла [,длина записи]
              
Комментарий      Режим может быть одним из следующих:

        OUTPUT - задает последовательный файл для записи;
        INPUT  - задает последовательный файл для чтения;
        APPEND - задает последовательный файл для дозаписи 
                 (в конец файла):
        RANDOM - задает файл с произвольной организацией для 
                 чтения и записи;
        BINARY - задает двоичный файл для чтения и записи;
              
                 Строка режима- это символьное выражение,  первый 
              (и  обычно  единственный) знак которого принадлежит 
              следующемусписку:     

      O  -  задает режим последовательного вывода;   
      I  -  задает режим последовательного ввода;   
      A  -  задает режим последовательного вывода в конец файла; 
      R  -  задает файл с произвольной организацией ввода/вывода;  
      B  -  задает двоичный файл ввода/вывода. 
              
                 Номером-файла  может  быть любое целое значение.  
              Для  того,   чтобы  увеличить  его  или  уменьшить, 
              следует   использовать   оператор   FILES  в  файле 
              CONFIG.SYS  в  DOS  (см.справочное  руководство  по 
              DOS).  
                 Имя файла- символьное выражение,   задающее  имя 
              файла и, возможно,  адрес накопителя и/или описание 
              маршрута.   
                 Длина записи- это целое  выражение,  принимающее 
              значение  в пределах от 1 до 32767,  которое задает 
              длину в байтах каждой записи в файле с произвольной 
              организацией.  По умолчанию размер записи считается 
              равным 128 байтам.  

                 Главное назначение оператора OPEN состоит в том, 
              чтобы  связать  с  файлом  и физическим устройством 
              некоторый номер и подготовить устройство для чтения 
              и/или записи.  Во всех  операторах,  которые  имеют 
              дело  с файлом,  используется,  как правило,  этот, 
              приписанный  файлу,   номер,   а  не  его  имя.   В 
              операторе   OPEN   содержится  также  информация  о 
              "режиме" файла,  то есть,  о  том,  каким  способом 
              будет     осуществляться     доступ     к    файлу: 
              последовательным (для ввода,  вывода в новый  файл, 
              вывод   в  существующий  файл),   произвольным  или 
              двоичным.   Оператору  OPEN  обычно   соответствует 
              оператор  CLOSE.  Две  формы  использования команды 
              различаются только степенью подробности  словесного 
              оформления:  OPEN  "myfile.dta"  FOR  OUTPUT  AS #1 
              имеет тот же смысл, что и OPEN "O",#1,"myfile.dta" 

Ошибки OPEN      Попытка задать оператор OPEN с режимом INPUT для 
              несуществующего файла приводит к ошибке  выполнения 
              53 File Not Found (файл не найден).  Если применить 
              к несуществующему файлу  оператор  OPEN  с  режимом 
              OUTPUT, APPEND, RANDOM или BINARY, такой файл будет 
              создан.  
              
См.также      OPEN COM
              
Пример        ' эта программа разделена на пять процедур
              ' разница в процедурах состоит в режимах
              ' открытия файлов и способов манипулирования
              ' с данными
              DEF FN PForKey$ (Msg$)
          PRINT Msg$,"Нажмите любую клавишу, чтобы продолжить..."
                WHILE NOT INSTAT:WEND
                FN PForKey$=INKEY$
              END DEF   'конец процедуры PForKey
              
              SUB SequentialOutput
              ' файл открывается для последовательного вывода
              ' и в него записываются некоторые данные
              
         KeyP$=FNPForKey$("Теперь для последовательного вывода")

               ' открытие последовательного файла для вывода

               OPEN "OPEN.DTA" FOR OUTPUT AS #1

               Integer%=12345
               TempStr$="История творится ночью"

               ' запись данных в последовательный файл

               WRITE #1,TempStr$,Integer%*2,TempStr$,Integer%\2

               CLOSE 1  'закрытие файла

              END SUB   'конец процедуры SequentialOutput
              
              SUB SequentialAppend
              ' файл открывается для последовательного вывода,
              ' однако, данные в этом случае добавляются
              ' в конец файла
              
               KeyP$=FNPForKey$("Теперь для дозаписи материала")
                                                                   
               ' открытие последовательного файла для дозаписи
               ' данных
                                                                   
               OPEN "OPEN.DTA" FOR APPEND AS #1
                                                                   
               Integer%=32123
          TempStr$="Наилучшее видение - внутреннее -- M.Forbes"
                                                                   
               ' дозапись данных
                                                                   
               WRITE #1,TempStr$,Integer%*0.2,TempStr$,Integer%\2
                                                                   
               CLOSE 1  'закрытие файла
                                                                   
              END SUB   'конец процедуры SequentialAppend
              
              SUB SequentialInput
              ' файл открывается для последовательного ввода,
              ' прочитанные данные выводятся на экран
              
          KeyP$=FNPForKey$("Теперь чтобы вновь прочитать данные")

              ' открытие последовательного файла и чтение из него

               OPEN "OPEN.DTA" FOR APPEND AS #1
              
               ' чтение первой строки оператором LINE INPUT#
               LINE INPUT# 1,TempStr$
               PRINT TempStr$
               WHILE NOT EOF(1)   'проверка на конец файла
                 TempStr$=TempStr$+INPUT$(1,1)
               WEND
               PRINT TempStr$
              
               CLOSE 1  'закрытие файла
              
               KeyP$=FNPForKey$("")
              
              END SUB    'конец процедуры SequentialInput

              SUB BinaryIO
              ' файл открывается для двоичного ввода/вывода
              ' данные читаются с помощью GET$
              ' SEEK перемещает указатель файла
              ' в конец файла и в конец файла
              ' записываются те же данные
              
          KeyP$=FNPForKey$("Теперь для двоичного ввода и вывода")

               ' открытие последовательного файла, чтение из него

               OPEN "OPEN.DTA" FOR BINARY AS #1

               TempStr$=""

               ' использование GET$ для чтения данных
               ' и записи их в символьную переменную

               WHILE NOT EOF(1)
                 GET$ 1,1,Char$
                 TempStr$=TempStr$+Char$
               WEND
              
               PRINT TempStr$
              
               ' перемещение указателя в конец файла
               SEEK 1,LOF(1)
              
               ' PUT$ копирует те же данные обратно в файл
               FOR I%=1 TO LEN(TempStr$)
                 PUT$ MID$(TempStr$,I%,1)
               NEXT I%
               
               CLOSE 1  'закрытие файла
              
               KeyP$=FNPForKey$("")

              END SUB   'конец процедуры BinaryIO

              SUB RandomIO
              ' файл открывается для произвольного ввода/вывода
              ' использование FIELD для объявления буфера
              ' для хранения считываемых и записываемых данных
              ' GET и PUT записывают и читают данные
              ' Заметьте, перед выполнением GET для
              ' сохранения в буфере файла
              ' используются LSET и RSET
              
      KeyP$=FNPForKey$("Теперь для произвольного ввода и вывода")

               ' открытие файла с произвольным доступом

               OPEN "OPEN.DTA" AS #1  LEN=1
              
          FIELD 1,1 AS Char$      'определение 1-байтового буфера

               TempStr$=""

               TempSize%=LOF(1)     'сохранить длину файла
               
               ' чтение всего файла с помощью GET

               FOR I% = 1 TO TempSize%
                 GET$ 1,1
                 TempStr$=TempStr$+Char$  'сохранение данных
               NEXT I%
              
               ' PUT$ копирует те же данные обратно в файл
               FOR I% =  LEN(TempStr$) TO 1 STEP -1
                   LSET Char$ =  MID$(TempStr$,I%,1)
                   PUT 1, LOF(1)    'запись в конец файла
               NEXT I%
               
               CLOSE 1  'закрытие файла

              END SUB   'конец процедуры RandomIO
                                                  
              ' начало тела основной программы
              
              CALL SequentialOutput
              CALL SequentialAppend
              CALL SequntialInput
              CALL BinaryIO
              CALL RandomIO
              
              END             'конец программы


                        Оператор OPEN COM
-----------------------------------------------------------------
Назначение    OPEN COM открывает и определяет конфигурацию порта 
              связи
              
Синтаксис     OPEN "COM: [бод] [,четность] [,данные] [,стоп]
              [,варианты] AS [#] номер файла [LEN=число]
              
Комментарий      n указывает открываемый последовательный порт,
                бод - целая константа, задающая скорость передачи 
              инфомации: допустимые скорости - 75, 110, 150, 300, 
              600,  1200,  1800,  2400, 4800 и 9600 (по умолчанию 
              300) 
                 Четность  -  один  символ,  определяющий  способ 
              контроля по четности согласно таблице: 

              S -  проверка на ноль (бит четности всегда 0 ); 
              O -  проверка на нечетность; 
              M -  проверка на единицу (бит четности всегда 1); 
              E -  проверка на четность; 
              N -  отсутствие проверки (игнорируется в получаемых 
                   символах и опускается в передаваемых).
              
               По умолчанию выполняется проверка на четность (E).

                 Данные - это целая константа от 5 до 8, задающая 
              число стоп-битов. По умолчанию 7.  
                 Стоп - целая константа, равная 1 или 2, задающая 
              количество битов данных.  По умолчанию, число стоп-
              битов  равно  1  (для  значений  скорости  передачи 
              информации  75  или  110 число стоп-битов равно 2). 
                 Номер файла - числовое выражение, задающее номер 
              для доступа к коммуникационному порту.  
                 Число - максимальное число байтов, которые могут 
              быть   прочитаны  из  коммуникационного  порта  или 
              переданы в него,  по  умолчанию  равно  128.  Число 
              байтов  не  может  быть  больше размеров буфера для 
              соответствующего порта,  установленного  с  помощью 
              метаоператора $COM.  

                 Оператор  OPEN  COM включает необязательный блок 
              [варианты],  который  управляет  обработкой  строки 
              состояния,   проверкой  на  четность  и  обработкой 
              "возвратом каретки/переводом строки".  
              
   варианты = [,RS] [,CS[мсек]] [,DS[мсек] [,CD[мсек] [,LF] [,PE]
              
              RS подавляет линию RTS, 
              CS[мсек] управляет CTS,
              DS[мсек] управляет DSR, 
              CD[мсек] управляет CD.
              LF присоединяет символ "перевод строки" к каждому 
                 символу "возврат каретки", 
             PE включает контроль по четности.

                 Аргумент  мсек  параметров  CS,  DS,   CD  может 
              варьироваться  от  0  до  65535;  он  задает  время 
              ожидания в миллисекундах,  по  прошествии  которого 
              ТУРБО   БЕЙСИК  выдает  сообщение  "Ошибка  простоя 
              устройства".  Если аргумент не задан или  равен  0, 
              проверка  строки  состояния  не  производится.   По 
              умолчанию, значение мсек равно 1000 для CS и DS,  и 
              0 для CD.  
              
См.также      COM    $COM    ON COM

Пример        ' размещение символьного массива для хранения
              ' вводимых данных
              DIM ComPortInput$(1)
              
              $COM 1024   'устанавливает буфер ввода равным 1К
              
              OPEN "COM1:300,n,8,1,DS,RS,CS,CD"  AS #1   LEN=1
              
  PRINT "нажмите любую клавишу, чтобы закончить работу программы"
              WHILE NOT INSTAT    'пока не нажата клавиша
                'есть ли что-нибудь на входе?
                IF LOF(1)>0 THEN
                  'чтение любых данных, доступных в буфере порта
                  ' связи
                   ComPortInput$(0)=INPUT$(LOF(1),#1)
                  'воспроизведение введенных данных
       PRINT "Ввод из коммуникационного порта:";ComPortInput$(0)
                END IF
              WEND
              
              END       'конец программы



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