ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 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 'конец программы |