Функция HEX$ Функция: HEX$ преобразует число в его шестнадцатеричный символьный эквивалент. Синтаксис: s$ = HEX$(числовое выражение) Комментарии: "Числовое выражение" может находиться в диапазоне от -32768 до +65535. Любая дробная часть "числового выражения" округляется до целого прежде, чем оно будет обрабатываться функцией HEX$(x). Если аргумент - отрицательное число, то используется его двоичное дополнение. Смотри также: BIN$ OCT$ Пример: PRINT HEX$(65535) PRINT HEX(-1) Оператор IF Функция: IF проверяет условие и изменяет ход программы, если выполнится заданное условие. Синтаксис: IF целое_выражение[,] THEN оператор(ы) [ELSE оператор(ы)] Комментарии: Если значение "целого_вырaжения" - ИСТИНА (разультат не равен нулю),то выполняются операторы после THEN до первого встретившегося ELSE. Если значение выражения - ЛОЖЬ (результат равен нулю), то выполняются операторы после ELSE. Если часть оператора с ELSE опущена, то выполнение программы продолжается со следующей строки. Обычно, "целое_ выражение" является результатом, возвращаемым оператором отношения, хотя и не всегда, как показано ниже: IF printerOn THEN LPRINT answer$ В этом примере оператор LPRINT выполняется, если "флаг" переменной printerOn имеет ненулевое значение. Двоеточие не должно появляться перед ключевым словом ELSE, например, следующий оператор не будет компилироваться: IF a < b THEN c = d :ELSE e = f Оператор IF и все связанные с ним операторы, включая и те, что после ELSE, должны появляться на той же самой логической строке. Следовательно, следующая запись является неправильной: IF a < b THEN t = 15 : u = 16 : v = 17 ELSE t = 17: u = 16: v = 15 так как компилятор трактует вторую строку как новый оператор, не имеющий отношения к предыдущему оператору. Если у вас больше операторов, чем может поместиться на одной строке, вы можете использовать символ продолжения строки, подчеркивание (_), чтобы распространить одну логическую строку на несколько физических строк. Например, ниже приведена правильная запись предыдущего примера: IF a < b THEN t = 15 : u = 16 : v = 17_ ELSE t = 17: u = 16: v = 15 Однако, лучшим способом является использование блочного оператора IF. Вы также можете использовать блочный оператор IF для формирования многострочных серий операторов IF. Различия: Turbo Basic имеет расширенный оператор IF THEN ELSE для обеспечения многих строк программы в конструкции IF THEN ELSE. Turbo Basic также имеет операторы ELSEIF END IF для блочного оператора IF. Смотри также: блочный IF SELECT Пример: ' однострочный IF INPUT "Enter a number", X IF X > 100 THEN PRINT "BigNumber" ELSE PRINT "SmallNumber" END Блочный оператор IF Функция: Блочный оператор IF создает ряд операторов IF. Синтаксис: IF целое_выражение [,] THEN . . оператор(ы) . [ELSE IF целое_выражение [,] THEN . . оператор(ы)] . [ELSE . . оператор(ы) . END IF Комменарии: Блочный оператор IF является расширением интерпретирующего Basic, реализующем многократные проверки во многих строках. При выполнении блочного оператора IF, истинность выражения в операторе IF проверяется в первую очередь. Если результат нулевой (ЛОЖЬ), каждый из следующих операторов ELSEIF проверяется по порядку (операторов ELSEIF может быть столько, сколько вы пожелаете). Как только будет найдено выражение со значением ИСТИНА, Turbo Basic выполняет операторы, следующие за соответствующим THEN, а затем выполняет переход на оператор, следующий за завершающим END IF без выполнения каких-либо дальнейших проверок. Если ни одна из предыдущих проверок не явилась удовлетворительной, выполняются операторы, следующие за ELSE. Заметьте, что на первой строке блочного оператора IF, после ключевого слова THEN, не может быть операторов; таким образом компилятор отличает блочный оператор IF от обычного оператора IF. Также заметьте, что ничего не следует за ELSE. Блочные операторы IF могут быть вложенными, т.е. любой из операторов после любого THEN может содержать блоки IF. (Полезно сдвигать операторы, соответствующие каждой проверке, на два пробела, как показано в примере.) Блочные операторы IF должны заканчиваться оператором END IF. Заметьте, что END IF содержит пробел, а ELSEIF не содержит. Смотри также: SELECT Пример: RANDOMIZE TIMER bankroll=100:bet=5:delayVal=.5 WHILE NOT INSTAT ' нажмите клавишу, чтобы закончить roll=INT(RND(1) * 6) + INT(RND(1) * 6) + 2 PRINT STRING$(30,"-") PRINT "Bankroll =" bankroll PRINT roll:DELAY delayVal IF roll=2 OR roll=3 OR roll=12 THEN PRINT "You lose" bankroll=bankroll-bet ELSEIF roll=7 OR roll=11 THEN PRINT "You win!" bankroll=bankroll+bet ELSE PRINT "Your point is" roll noPoint=-1 WHILE noPoint nextRoll=INT(RND(1) * 6) + INT(RND(1) * 6) + 2 PRINT nextRoll:DELAY delayVal IF roll=nextRoll THEN 'вложенный блок IF PRINT "You win!" bankroll=bankroll+bet noPoint=0 ELSEIF nextRoll=7 THEN PRINT "You lose" bankroll=bankroll-bet noPoint=0 ' конец блока IF roll = nextRoll END IF WEND 'конец цикла noPoint WHILE END IF 'конец первого блока IF WEND 'конец цикла WHILE NOT INSTAT Оператор INCR Функция: INCR наращивает переменную. Синтаксис: INCR числовая_переменная [,размер] Комментарии: "размер" - необязательное числовое выражение, которое задает значение, добавляемое к заданной переменной. Если "размер" опущен, используется 1. INCR - просто быстрый способ увеличения переменной без использования оператора присваивания. Различия: Этот оператор не поддерживается в интерпретирующем Basic. Смотри также: DECR Пример: I% = -15 'инициализируются счетчики J% = -500 WHILE I% < 0 PRINT I%, J% 'вывод значения INCR I% 'увеличивает значение на 1 INCR J%, 5 'увеличивает значение на 5 WEND END 'конец программы Функция INKEY$ Функция: INKEY$ считывает символ с клавиатуры без отображения на экран. Синтаксис: s$=INKEY$ Комментарии: INKEY возвращает строку из 0, 1 или 2 символов, отражающую состояние буфера клавиатуры. Пустая строка (LEN(s$) = 0) означает, что буфер пуст. Строка, имеющая длину (LEN(S$) = 1), означает, что она содержит значение кода ASCII последней нажатой клавиши; например, 13 для ENTER (также известного как возврат каретки), 65 для А. Строка из двух символов (LEN(S$) = 2) означает, что была нажата клавиша, которой не соответствует код ASCII. Первый символ в строке имеет значение 0, а второй, так называемый расширенный код клавиатуры, представляет одну из клавиш, клавиатуры, которой не соответствует код ASCII, таких как Home,PgDn или клавиши - стрелки (смотри перечень расширенных кодов клавиатуры в приложении F для определения нажатой клавиши). Если нажата заданная функциональная клавиша (смотри оператор KEY), INKEY$ возвращает последовательность символов (один на каждое обращение к INKEY$, которая была закодирована при определении данной клавиши. INKEY$ является безотказным механизмом,позволяющим пользователю осуществлять ввод в программу без ограничений,присущих оператору INPUT. Так как INKEY$ не ждет ввода символа перед возвращением результата, вы будете, обычно, использовать его в цикле в подпрограмме более низкого уровня, непрерывно проверяя его и формируя входную строку для отработки программами более высокого уровня. INKEY$ передает коды любых клавиш, включая такие клавиши как Tab, Enter и Backspace, в вашу программу без вывода на дисплей или обработки их, за исключением следующих случаев: - Ctrl-Break заканчивает программу, если только при ее компиляции не был сброшен ключ Keyboard break. - Ctrl-Alt-Del вызывает перезапуск системы. - Shift-PrtSc вызывает вывод содержимого экрана на печать. Смотри также: INSTAT Пример: PRINT "Enter some characters followed by :" ' считывает клавиши и выводит их на дисплей WHILE Char$ <> CHR$(13) Char$ = INKEY$ InputString$ = InputString$ +Char$ WEND PRINT InputString$ END 'конец программы Функция INP Функция: INP возвращает байт, считанный с интерфейса ввода-вывода. Синтаксис: y = INP(номер интерфейса n) Комментарии: INP возвращает байт, считанный с интерфейса ввода-вывода, заданного аргументом "номер интерфейса". Аргумент задает номер аппаратного интерфейса ввода, который должен находиться в диапазоне от 0 до 65535. Функция INP полезна для считывания информации о состоянии, представляемой различными аппаратными подсистемами, такими как последовательные интерфейсы. (Смотрите техническое справочное руководство по компьютеру по поводу назначения интерфейсов). Используйте оператор OUT для вывода данных через интерфейс ввода-вывода. Смотри также: OUT Пример: ' программа заставляет громкоговоритель издавать звук ' считывая регистр состояния и ' проверяя (установлены или нет) биты, ' управляющие громкоговорителем ' считывает значение с интерфейса 61 (шестн.) StatusReg% = INP(&H61) StatusReg% = StatusReg% AND &H00FC ' маскирует считанное значение ' сделаем длительность звучания такой, ' чтобы ее можно было услышать FOR J = 1 to 1000 StatusReg% = StatusReg% XOR 2 'управление громкоговорителем OUT &H61,StatusReg% 'выводит новое состояние delay .001 NEXT J END Оператор INPUT Функция: Запрашивает пользователя ввести данные, чтобы присвоить их одной или нескольким переменным. Синтаксис: INPUT[;][строка запроса{;|,}]список переменных Комментарии: Аргумент "строка запроса" - это необязательная символьная константа. Аргумент "список переменных" - последовательность из одной или более символьных или числовых переменных, разделенных запятыми. INPUT ожидает ввода пользователем данных с клавиатуры и присваиваивает эти данные одной или нескольким переменным. Если вы включили точку с запятой после "строки запроса", то Turbo Basic выводит вопросительный знак после строки. Используйте запятую вместо точки с запятой для подавления вопросительного знака. Тип каждого вводимого элемента данных должен согласовываться с типом переменной в операторе INPUT; нечисловые символы не могут быть присвоены числовым переменным. Если введенные данные не согласуются, Turbo Basic потребует повторного ввода информации. Например, ввод нечисловых символов в числовые переменные вызывает фиксацию ошибки ?Redo from start (Повторить сначала). Если в операторе INPUT запрашивается больше одной переменной, то ваш ответ на каждую переменную должен отделяться запятыми. Если точка с запятой находится сразу после ключевого слова INPUT, курсор будет оставаться на той же строке, после нажатия ENTER для завершения ответа. В противном случае, символы возврат каретки/перевод строки выводятся на дисплей. Различия: В Turbo Basic допускается, чтобы вводимая в ответ на оператор ввода информация разделялась запятыми или пробелами. В интерпретирующем Basic вводимая информация должна разделяться запятыми. Пример: INPUT "Enter your age and weight: "Age, Weight PRINT USING "You are a ### year old & and weight ###";_ Age, Weight END 'конец программы Оператор INPUT# Функция: INPUT# считывает элементы данных из последовательного файла. Синтаксис: INPUT# номер файла, список переменных Комментарии: Параметр "номер файла" представляет собой число, под которым файл был открыт для ввода. "список переменных" содержит последовательность символьных или числовых переменых разделенных запятыми. Файл может быть или дисковым файлом, или последовательным интерфейсом (COMn:) или клавиатурой (KYBD:). Тип данных в файле должен соответствовать типу переменных в операторе INPUT#. Переменная должна появиться, как если бы она была напечатана в ответ на оператор INPUT, т.е., должна отделяться запятыми с возвратом каретки на конце. Таким способом создаются файлы с помощью оператора WRITE#. Смотри также: WRITE# Пример: SUB MakeFile 'INPUT # открывает последовательный файл для вывода 'используя WRITE #, записывает строки различных 'типов данных в файл 'назначает переменной файла #1 OPEN "INPUT#.DTA" FOR OUTPUT AS #1 'определяет переменные и инициализирует их StringVariable$ = "I'll be back." Integer% = 1000 FloatingPoint! = 30000.1234 'записывает строку текста в последовательный файл WRITE# 1, StringVariable$, Integer%, FloatingPoint! CLOSE 1 'закрывает переменную файла END SUB 'конец процедуры MakeFile SUB ReadFile 'Эта процедура открывает последовательный файл 'для ввода. Испoльзуя INPUT #, считывает строки различных 'типов данных из файла. 'назначает переменной файла #1 OPEN "INPUT#.DTA" FOR INPUT AS #1 StringVariable$ = "" 'определяет переменные и Integer% = 0 'инициализирует их FloatingPoint! = 0 'считывает строку текста из 'последовательного файла INPUT# 1, StringVariable$, Integer%, FloatingPoint! PRINT StringVariable$, Integer%, FloatingPoint! CLOSE #1 'закрывает переменную файла END 'конец процедуры ReadFile CALL MakeFile CALL ReadFile END 'конец программы Функция INPUT$ Функция: INPUT$ считывает заданное число символов с клавиатуры или из файла с заданным номером. Синтаксис: s$ = INPUT$(n[,[#]номер_файла] Комментарии: n - число символов для считывания, "номер_файла" определяет файл, из которого символы будут считываться. Если номер файла опущен, то символы считываются с клавиатуры. Если для ввода используется клавиатура, то вводимые символы не выводятся на экран и все символы передаются в заданную строку. Основное преимущество INPUT$ по отношению к другим способам считывания из файлов или с клавиатуры заключается в том, что для него все символы, включая управляющие, являются допустимыми. Файловый режим BINARY обеспечивает возможность работы с функцией INPUT$ более гибким способом. Примечание: Определенные клавиши и клавишные комбинации (например, функциональные клавиши и клавиши управления курсором) не возвращают значения кодов ASCII. При нажатии таких клавиш INPUT$ подставляет CHR$(0); INKEY$ не имеет такого ограничения. Смотри также: INKEY Пример: OPEN "INPUT#.DTA" FOR INPUT AS #1 S$ = INPUT$(15, #1); PRINT S$ CLOSE #1 END Функция INSTAT Функция: INSTAT возвращает состояние клавиатуры. Синтаксис: y = INSTAT Комментарии: INSTAT возвращает информацию о состоянии клавиатуры. Если клавиша была нажата, INSTAT возвращает -1; в противном случае возвращается 0. INSTAT не удаляет код нажатой клавиши из буфера, поэтому, если она возвратила значение ИСТИНА (-1), то будет продолжать возвращать ИСТИНА, до тех пор, пока код нажатой клавиши не будет удален с помощью оператора INKEY$ или другой команды считывания с клавиатуры. Смотри также: INKEY$ Пример: WHILE NOT INSTAT 'проверка нажатой клавиши LOCATE 1,1 PRINT "Waiting for a key..." WEND PRINT INKEY$ 'выводит на дисплей нажатую клавишу END 'конец программы Функция INSTR Функция: INSTR находит в строкe образец. Синтаксис: y = INSTR([n,] целевая_строка,образец_строки) Комментарии: n - выражение целого типа в диапазоне от 1 до 32767, a целевая_строка и образец_строки - любые символьные переменные, выражения или константы. INSTR возвращает позицию образца строки в целевой строке. Если образец_троки не найден в целевой_строке, то INSTR возвращает 0. Если включен необязательный параметр n, поиск начинается с позиции n в целевой строке. Если образец_строки - пустая строка (длина 0), то INSTR возвращает 1 (или n, если n задано). INSTR учитывает разницу в регистрах на которых набраны символы. Пример: 'запрашивает ввод пользователя LINE INPUT "Please input a string: ";DummyStr$ PRINT "Now input a substring that exists in the"; INPUT "first string: ";SubStr$ 'выводит на дисплей положение подстроки PRINT USING "The string ' & ' exists starting at";_ SubStr$; PRINT USING " location ### in &";_ INSTR(1,DummyStr$,SubStr$), DummyStr$ END 'конец программы Функция INT Функция: INT преобразует числовое выражение в целое. Синтаксис: y = INT(числовое_выражение) Комментарии: INT возвращает наибольшее целое, меньшее или равное числовому выражению. Смотри также: CEIL CINT FIX Пример: PRINT "X", "INT(X)" PRINT FOR N=1 TO 6 READ X# PRINT X#, INT(X#) NEXT N DATA 3.1, -3.1, 3.5, -3.5, 3.9, -3.9 END Оператор IOCTL, функция IOCTL$ Функция: IOCTL, IOCTL$ устанавливает связь с драйвером устройства. Синтаксис: Оператор: IOCTL [#] номер_файла,символьное_ выражение Функция: s$ = IOCTL$ [#] номер_файла Комментарии: Параметр "номер_файла" определяет номер файла, открытого для драйвера устройства. Параметр "символьное_выражение" содержит информацию, передаваемую на устройство. Формат символьной информации, передаваемой на устройство или принимаемой с устройства опеделяется самим устройством. IOCTL посылает данные на драйвер устройства. IOSTL$ считывает данные с драйвера устройства. Более подробная информация приведена в разделе, описывающем драйверы устройств в техническом справочном руководстве по DOS фирмы IBM. Оператор KEY Функция: KEY устанавливает и выводит на дисплей значения функциональных клавиш и определяет значения для управления прерываниями от клавиш. Синтаксис: KEY {ON|OFF|LIST} KEY n, символьное_выражение KEY n,CHR$(регистр)+CHR$(скэн-код) Комментарии: KEY ON и KEY OFF включает и выключает вывод на дисплей функциональных клавиш внизу экрана. Заметьте, что выключение вывода на дисплей не влияет на определение функциональных клавиш. KEY LIST выводит текущие определения функциональных клавиш на дисплей. Когда функциональные клавиши выводятся на дисплей, его 25-ая строка не прокручивается и попытка разместить курсор на ней вызывает возникновение ошибки 5 периода выполнения "Illegal Function Call" (Неправильный вызов функции). KEY n, символьное_выражение назначает функциональной клавише n значение символьного_выражения, где символьное выражение имеет длину 15 символов или меньше (только первые 6 из них появляются на экране в строке состояния). Чтобы запретить действие функциональной клавиши, назначьте ей нулевую строку. Возврат каретки в строке (CHR$(13)) выводится на дисплей в виде маленькой левой стрелки. KEY n,CHR$(регистр) + CHR(скэн-код) связывает клавишу (или комбинацию клавиш) с числом (n от 15 до 20) для управления обработкой прерывания от клавиши с последующими операторами ON KEY и KEY(n) ON. Формат следующий: - "регистр" - целое выражение в диапазоне от 0 до 255, управляющее реакцией на прерывание в зависимости от состояния клавиш Ctrl, CapsLock, Num Lock, Alt, и обе клавиши Shift. - "скэн-код" - числовое выражение от 1 до 83, определяющее клавишу, от которой поступает прерывание в соответствии с таблицей скэн-кодов в приложении F. Заметьте, что клавиши 59-68, 72,75,77 и 80 уже определены (это функциональные клавиши и клавиши управления курсором), так что их определение не производит никакого действия. Используйте следующую таблицу для задания значения параметра "регистр": ----------------------------------------------------------- Клавиша Двоичное значение Шестнадцеричное значение ----------------------------------------------------------- Правая SHIFT 0000 0001 01 Левая SHIFT 0000 0010 02 CTRL 0000 0100 04 ALT 0000 1000 08 Num lock 0010 0000 20 Caps lock 0100 0000 40 ---------------------------------------------------------- Например, мы хотим работать с прерыванием от комбинации shift-escape; т.е. хотим, чтобы управление передавалось определенной подпрограмме всякий раз при нажатии клавиши Esc одновременно с клавишей Shift. Сначала следует построить маску регистра. Если вы хотите, чтобы распознавались обе клавиши Shift, следует к коду каждой клавиши добавить маску: 01H+02H=03H. Затем следует найти таблицу скэн-кодов в приложении F и по ней определить, что клавиша Esc имеет скэн-код, равный 1. Следующий оператор сообщает Turbo Basic о ваших планах: KEY 15,CHR$(&03) + CHR$(1) Вы должны использовать значение клавиши 15, так как первые 14 определены заранее для функциональных клавиш и клавиш управления курсором. Далее вы должны определить подпрограмму обработки прерывания, которая будет вызываться при одновременном нажатии на клавиши Shift-Esc: ON KEY(15) GOSUB ShiftEscape где ShiftEscape - метка в начале подпрограммы обработки прерываний. Наконец, вы разрешаете прерывания от клавиши 15 с помощью оператора KEY(n): KEY(15) ON Смотри также: KEY(n) ON KEY Пример: 'эта программа демонстрирует работу операторов 'KEY ON/OFF и KEY N символьное выражение 'выключает вывод на дисплей 'функциональных клавиш KEY OFF 'назначает символьное выражение 'функциональным клавишам FOR N%=1 TO 10 READ A$ KEY N%, A$+CHR$(13) NEXT N% KEY LIST 'выводит на дисплей определения 'функциональных клавиш 'включает вывод на дисплей функциональной клавиши KEY ON 'ожидает нажатия клавиши пользователем WHILE NOT INSTAT WEND 'операторы DATA, используемые READ DATA Help, Enter, Edit, Change, Report, Print, Setup DATA DOS, Copy, Quit END 'конец программы Оператор KEY(n) Функция: KEY(n) включает или выключает прерывания от заданной клавиши. Синтаксис: KEY(n) {ON|OFF|STOP} Комментарии: n - клавиша, от которой задается прерывание, определяемая выражением целого типа со значением от 1 до 25, 30 и 31, в соотвтствии со следующей таблицей: --------------------------------------------------------- n Клавиша --------------------------------------------------------- 1-10 Функциональные клавиши F1-F10 11 Курсор вверх 12 Курсор влево 13 Курсор вправо 14 Курсор вниз 15-25 Клавиши, определенные оператором KEY 30 Функциональная клавиша F11 31 Функциональная клавиша F12 --------------------------------------------------------- KEY(n) ON включает прерывания от клавиши n. то означает, что проверка нажатия клавиши выполняется перед каждым оператором программы; и если клавиша нажата, выполнение программы переключается на программу, заданную в операторе ON KEY для той клавиши. KEY(n) OFF запрещает прерывания от клавиши n. KEY(n) STOP также запрещает прерывания от клавиши, но запоминает факт нажатия клавиши, так что если в дальнейшем будет выполнен оператор KEY ON, прерывание немедленно обрабатывается. Смотри также: $EVENT ON KEY Пример: 'включает проверку клавиш KEY ON ' назначает строки клавишам KEY 1, "Hello"+CHR$(13) KEY 2, "GoodBye"+CHR$(13) KEY 10, CHR$(13) 'устанавливает подпрограмму обработки прерывания от F10 'назначает строку клавише ON KEY(10) GOSUB GoodBye 'включает прерывание от F10 KEY(10) ON 'получить данные от пользователя INPUT "Press F1: ";Dummy$ INPUT "Press F2: ";Dummy$ PRINT "Press F10 now..." 'сейчас будет вызвана подпрограмма GoodBye WHILE NOT INSTAT : WEND 'ожидание прерывания от F10 END 'конец программы GoodBye: KEY(10) OFF 'выключает прерывания ' теперь используем назначение символьной строки ' клавише F10 PRINT "Press F10 now to quit the program..." RETURN Оператор KILL Функция: KILL уничтожает файл (аналогично, команде DOS DEL). Синтаксис: KILL имя_файла Комментарии: "имя_файла" - символьное выражение, представляющее файл или файлы для удаления, которое может дополнительно включать имя пути и/или символы замещения. KILL является аналогом команд DEL (ERASE) в DOS. Так же как и DEL, KILL не может уничтожить справочник. Вместо того команд, используйте RMDIR, предварительно удалив все файлы из справочника. Пример: 'устанавливает простую программу обработки ошибки ON ERROR GOTO FileError 'получает имя файла INPUT "Please enter the file to delete:", FileName$ 'удаляет файл IF FileName$ <> "" THEN KILL FileName$ END IF END 'конец программы FileError: 'сообщение об ошибке PRINT "Error "; PRINT Err "occured when deleting the file" END Оператор LBOUND Функция: LBOUND возвращает нижнюю границу (наименьшее значение индекса) для заданной размерности массива. Синтаксис: LBOUND(массив(размерность)) Комментарии: "Массив" - имя массива, нижняя граница размерности которого определяется. "Размерность" представляет целое число в диапазоне от 1 до числа размерностей массива. Вы можете определить размер массива, используя операторы LBOUND и UBOUND. Для определения верхней границы размерности массива служит оператор UBOUND. Если вы не определили диапазон индексов (смотрите DIM), то наименьший индекс по умолчанию 0. Вы можете переопределить значение нижней границы по умолчанию, используя оператор OPTION BASE. Смотри также: DIM OPTION BASE UBOUND Пример: 'определим размерность массива с нижней и верхней границами DIM Array%(1900:2000,10:20) 'печать нижней границы массива PRINT "Lower Array Bound of Dimension 2 is ";LBOUND(Array%(2)) END Функция LCASE Функция: LCASE возвращает строку символов с кодами только нижнего регистра. Синтаксис: s$ = LCASE$(символьное выражение) Комментарии: LCASE возвращает строку, соответствующую символьному выражению, за исключением того, что все буквы в символьном выражении будут преобразованы в буквы нижнего регистра. Смотри также: UCASE$ Пример: PRINT LCASE$("What's that WATERMELON for?"); Функция LEFT$ Функция: LCASE возвращает строку, содержащую левые n символов заданной строки. Синтаксис: s$ = LEFT$(символьное_выражение) Комментарии: "n" - выражение целого типа, определяющее число символов из m "символьного_выражения", которое должно быть возвращено. "n" должно быть в диапазоне от 0 до 32767. LEFT$ возвращает строку, содержащую левые n символов заданного символьного аргумента. Если "n" больше или равно длине "символьного выражения", то возвращается пустая строка (нулевой длины). Смотри также: MID$ RIGHT$ Пример: PRINT LEFT$("Hello out there in the universe!",5) Функция LEN Функция: LEN возвращает длину строки. Синтаксис: y = LEN(символьное выражение) Комментарии: LEN возвращает значение от 0 до 32767, равное числу символов в "символьном выражении". Заметьте, что этот диапазон намного больше, чем в интерпретирующем Basic, для которого максимальная длина строки равна 255 символов. Пример: INPUT "Enter a string: ",DummyStr$ PRINT USING "The length of the string = ### ";_ LEN(DummyStr$) END 'конец главной программы Оператор LET Функция: LET присваивает переменной значение выражения. Синтаксис: [LET] переменная=выражение Комментарии: "Переменная" - символьная или числовая переменная, "выражение" - выражение соотвествующего типа (т.е. символьное для символьных переменных и числовое для числовых переменных). LET - необязательный оператор присваивания; и на практике он обычно опускается. Пример: INPUT "Enter a string:",DummyStr$ ' присвоим TempStr$ значение, используя LET LET TempStr$ = DummyStr$ PRINT TempStr$, DummyStr$ END Оператор LINE Функция: LINE вычерчивает прямую линию или раскрашенный прямоугольник. Синтаксис: LINE [(x1,y1))-(x2,y2) [,[цвет] [,B[F]] [,образец]] Комментарии: (х1,y1) и (x2,y2) - координаты двух точек на графическом экране, которые могут быть определены в абсолютной или относительной форме. (Смотрите в главе 4 более подробную информацию об абсолютных и относительных координатах). "Цвет" - выражение целого типа, определяющее цвет, в котором линия или прямоугольник должны быть вычерчены. "Образец" - маска целого типа, управляющая тем, как линия или прямоугольник вычерчиваются. Для того, чтобы вычертить линию в точку (x,y) из LPR в цвете по умолчанию, напечатайте: LINE -(x,y) Для вычерчивания той же линии в другом цвете, напечатайте: LINE -(x,y), 2 Для вычерчивания линии из точки (x1,y1) в точку (x2,y2) напечатайте: LINE (x1,y1) - (x2,y2) Для вычерчивания прямоугольника с координатами верхнего левого угла (x1,y1) и координатами нижнего правого угла (x2,y2), напечатайте: LINE (x1,y1) - (x2,y2)..B Для раскрашивания прямоугольника цветом 2, напечатайте: LINE (x1,y1) - (x2,y2),2,BF Для вычерчивания прерывистой линии, включите аргумент "образец". Например, для создания линии из точек, используйте значение образца &HAAAA (1010 1010 1010 1010 в двоичном виде). Заметьте, что "образец" не влияет на раскрашивание прямоугольников. LINE (x1,y1) - (x2,y2),,,maskword После выполнения оператора LINE, LPR становится второй из двух точек заданных в операторе LINE. Смотри также: FILL Пример: ' вычерчивает диагональную линию, пересекающую экран SCREEN 1,0 LINE (0,0)-(319,199) ' вычерчивает горизонтальную пунктирную линию LINE (0,100)-(319,100)...&HCCCC ' вычерчивает квадрат со стороной в 50 пикселей, ' раскрашенный цветом 2, ' с координатами левого верхнего угла (10,20). LINE (10,20)-(60,70), 2, BF ' соединяет точки READ X,Y PSET (X,Y) ' установка LPR FOR N=1 TO 11 READ X,Y LINE -(X,Y) NEXT N LOCATE 9,9 PRINT "ORLAND" END 'конец программы DATA 10,20, 50,20, 55,25, 55,40, 50,45, 10,45 DATA 50,45, 55,50, 55,65, 50,70, 10,70, 10,20 Оператор LINE INPUT Функция: LINE INPUT считывает строку с клавиатуры символьную переменную, игнорируя разделители. Синтаксис: LINE INPUT [;][строка запроса;]символьная переменная Комментарии: Необязательный параметр "строка запроса" задает символьную константу, выводимую на экран, которая сообщает пользователю, что он должен ввести во время выполнения программы. Параметр "символьная переменная" задает переменную, в которую будут записываться все символы, вводимые с клавиатуры. Используйте оператор LINE INPUT вместо INPUT, если вы должны ввести символьную информацию, содержащую разделители (т.е. запятые), что, нельзя сделать посредством оператора INPUT. Например: INPUT "Enter patient address: "; a$ приведет к ошибке, если адрес содержит запятую: Enter patient address: 101 Main Street, Apt 2 ? Redo from start (Повторить сначала?) Оператор LINE INPUT вводит запятые без проблем. Если точка с запятой следует за оператором LINE INPUT, то при нажатии Enter для завершения вводимой последовательности, символ возврата каретки не будет выводится на дисплей (т.е. курсор останется на той же самой строке). Пример: PRINT "Enter several fields of input, you needn't" LINE INPUT "worry about delimiting them in any way:"_ DummyStr$ PRINT DummyStr$ END 'конец главной программы Оператор LINE INPUT# Функция: LINE INPUT# считывает целую строку из последовательного дискового файла и записывает ее в символьную переменную, игнорируя разделители. Синтаксис: LINE INPUT# номер файла, символьная переменная Комментарии: Параметр "номер файла" задает номер, под которым файл был открыт. Параметр "символьная переменная" задает имя переменной, в которую будет осуществляться прием строки. Оператор LINE INPUT# аналогичен оператору LINE INPUT, за исключением того, что данные считываются из последовательного файла, а не с клавиатуры. Текущая запись считывается из файла и записывается в символьную переменную. Как и LINE INPUT, оператор LINE INPUT# используется, если надо вводить данные, которые перемешаны с разделителями (запятыми). Если данные записаны в файл с помощью оператора WRITE#, они уже разделены должным образом и для их считывания лучше пользоваться оператором INPUT#. Пример: Sub MakeFile ' LINE INPUT# открывает последовательный файл для вывода ' Используя PRINT # и PRINT # USING запишем различные ' типы данных в файл ' назначает переменной файла номер 1 OPEN "LINEINP#.DTA" FOR OUTPUT AS #1 ' определим некоторые переменные и инициализируем их StringVariable$ = There's trouble in River City." Integer% = 1000 FloatingPoint! = 300000.1234 'запишем строку текста в последовательный файл PRINT #1,StringVariable$, Integer%, FloatingPoint! CLOSE #1 'закрывает файл перееменных END SUB 'конец процедуры MakeFile SUB ReadFile ' открывает последовательный файл для ввода ' использует LINE INPUT # и INPUT$ для считывания ' строк различных типов данных из файла ' назначает переменной файла номер 1 OPEN "LINEINP#.DTA" FOR INPUT AS #1 StringVariable$ = "" ' вводит всю строку независимо от длины LINE INPUT # 1, StringVariable$ PRINT StringVariable$ CLOSE #1 'закрывает файл переменных END SUB 'конец процедуры ReadFile CALL MakeFile CALL ReadFile END 'конец программы Функция LOC Функция: LOC возвращает текущую позицию в файле. Синтаксис: y = LOC(номер файла) Комментарии: Параметр "номер файла" задает номер, под которым файл был открыт. Действия LOC зависят от режима, в котором файл был открыт. При работе с дисковыми файлами с произвольным доступом LOC возвращает номер последней считанной или записанной в файл записи. При работе с последовательными файлами LOC возвращает количество 128-байтных блоков, считанных или записанных в файл с момента его открытия. LOC возвращает один блок для файлов, которые были открыты, но операции ввода/вывода для него не выполнялись. Для двоичных файлов, LOC возвращает позицию файла, заданную оператором SEEK. Для файлов связи, LOC возвращает число символов во входном буфере. Пример: OPEN "LOC.DTA" FOR BINARY AS #1 PUT$ #1, "TurboBasic" PRINT LOC(1) CLOSE END Оператор LOCAL Функция: LOCAL объявляет локальные переменные в процедуре или функции. Синтаксис: LOCAL список переменных Комментарии: Оператор LOCAL допустим только в определениях функций и процедур; он должен находиться перед любым выплняемым оператором в соответствующем определении. LOCAL определяет одну или несколько переменных как локальные для процедур или функций, в которых они используются. Локальные переменные могут иметь те же имена, что и другие переменные в других частях программы, а могут также иметь одинаковые имена с локальными переменными в других процедурах и функциях. Конфликта не возникает, так как они являются отдельными переменными. Для объявления локального массива, включите его идентификатор с пустыми скобками в список переменных, а затем оператором DIM задайте его размерность. Локальные переменные размещаются в стеке и инициализируются нулевым значением (символьных переменных - пустой строкой) при каждом вызове соответствующей функции или процедуры. Необъявленные переменные в процедурах по умолчанию получают статус статических; однако рекомендуется явно объявлять каждую переменную. Смотри также: DIM SHARED STATIC Пример: SUB Locals LOCAL a(),i% DIM DYNAMIC a(10:20) FOR i% = 10 TO 20 a(i%) = i% NEXT i% END SUB Оператор LOCATE Функция: LOCATE позиционирует курсор и/или определяет форму курсора. Синтаксис: LOCATE[ряд][,[колонка][,[курсор][,начало][,конец]]] Комментарии: "Ряд" - выражение целого типа, опредеделяющее строку экрана, на которой курсор должен позиционироваться (1-25). "Колонка" определяет колонку экрана (1-80). "Курсор" - числовое значение, задающее должен ли быть курсор видимым (0 - курсор невидимый; 1 - видимый). До тех пор, пока изображения функциональных клавиш перстанут выводяться на дисплей, 25-ая строка крана не доступна для курсора. (Смотрите оператор KEY OFF). "Начало" и "конец" - выражения целого типа, управляющие размером курсора и задающие размер курсора по вертикали в пикселях. Нижнее значение размера - 0; верхее - 7 для цветных графических адаптеров и 13 для монохромных адаптеров. LOCATE часто используется перед оператором PRINT для задания позиции экрана, куда будет осуществляться вывод. Пример: CLS CRSLIN and POS INPUT "Input X and Y coordinates: ",X%, Y% ' позиционирование курсора и изменение его формы LOCATE X%,Y%,1,4,5 PRINT "Hi"; WHILE NOT INSTAT : WEND 'ожидание клавиши END 'конец программы Функция LOF Функция: LOF возвращает длину файлa. Синтаксис: LOF(номер файла) Комментарии: Параметр "номер файла" задает номер, под которым файл был открыт. LOF возвращает длину заданного файла в байтах. При работе с файлами, передаваемыми по линии связи, LOF возвращает количество свободного пространства во входном буфере. Пример: OPEN "TB.EXE" FOR BINARY AS #1 PRINT "the size of Turbo Basic is";LOF((1) CLOSE #1 END Функции LOG, LOG2 и LOG10 Функция: LOG возвращает натуральный логарифм (основание е); LOG2 возвращает логарифм основание 2; LOG10 возвращает логарифм основание 10. Синтаксис: LOG: y = LOG(числовое выражение) LOG2: y = LOG2(числовое выражение) LOG10: y = LOG10(числовое выражение) Комментарии: LOG возвращает значение натурального логарифма (основание е, где е = 2.718282...) аргумента. Если значение "числового выражения" меньше или равно нулю, то возникает ошибка 5 периода выполнения "Illegal Function Call" (Неправильный вызов функции). Натуральный логарифм х - степень, в которую следует возвести е, чтобы получить значение, равное х. LOG, LOG2 и LOG10 возвращают результаты с двойной точнстью. Пример: FOR I! = 1 TO 50 STEP 2.5 PRINT USING "The natural log of ## = ##^^^^";_ 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 255 IF (I% >32)THEN PRINT USING "!";CHR$(I%): LPRINT USING "!";CHR$(I%); END IF ' переход на следующую строку, если достигнут конец строки IF LPOS(0) = %Wid THEN LPRINT 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), а не на экран. Примечание: По умолчанию Turbo Basic вставляет символы "возврата каретки" и "перевода строки" после печати 80 символов в строке. Эти характеристики могут изменяться с помощью оператора WIDTH. Смотри также: LPOS PRINT PRINT USING WIDTH Пример: LPRINT USING ## is my lucky number.";7 END Оператор LSET Функция: LSET переписывает символьные данные в буфер файла с произвольным доступом. Синтаксис: LSET переменная=символьное выражение Комментарии: LSET и и родственный ему оператор RSET переписывают символьную информацию в заданную переменную поля, принадлежащую буферу файла с произвольным доступом. Если длина "символьного выражения" меньше размера поля, отведенного под переменную поля оператором FIELD, LSET выравнивает строку по левому краю поля, для заполнения незанятых позиций используeтся символ пробела. Это означает, что пробелы добавляются после последнего символа символьного выражения, поэтому после выполнения оператора LSET, LEN(переменной поля) выдает ширину, определенную в соответствующем операторе FIELD. RSET выполняет выравнивание по правому краю поля с помощью пробелов (пробелы добавляются перед первым символом символьного выражения). Операторы LSET и RSET могут также использоваться для форматирования информации при выводе на принтер или дисплей: a$=space$(20) RSET a$="Right-just" PRINT a$ Смотри также: FIELD LEN RSET Пример: OPEN "LSET.DTA" AS #1 LEN=18 ' определяет имена полей и размеры файлов FIELD 1,2 AS FileIt$, 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 адрес Комментарии: "Адрес" - выражение типа длинное целое, определяющее абсолютный адрес верхней границы памяти Turbo Basic. "Адрес" должен быть меньше, чем общий объем памяти, установленной в системе. Обычно адрес вычисляется вычитанием константы из значения, возвращаемого функцией ENDMEM. MEMSET предназначается для выделения памяти для подпрограмм на ассемблере. Если Turbo Basic не может удовлетворить этому требованию из-за несоответствующего аргумента или недостаточного количества памяти, возникает ошибка 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$ Оператор MID$ RIGHT$ Пример: INPUT "Input a string: ",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" задает количество символов из "строки замещения", которое используется при замещении. Если "m" опущено, то используется вся строка замещения. Независимо от того, опущено "m" или задано, замещение символов никогда не производится за пределы исходной длины строки, т.е. длина строки не меняется. Смотри также: LEFT$ Функция MID$ RIGHT$ Пример: ' оператор MID$ b$ = "Hurricane Camille" MID$(b$,11) = "Carla " ' опущен необязательный ' параметр m PRINT b$ Команда MKDIR Функция: MKDIR создает подсправочник (аналогично команде MKDIR в DOS). Синтаксис: MKDIR путь Комментарии: Параметр "путь" является символьным выражением, которое идентифицирует создаваемый подсправочник. (Смотри в главе 4 информацию о именах файлов и путях.). MKDIR (Makedirectory - создать директорий) создает подсправочник, определенный "путем". Если вы пытаетесь создать уже существующий справочник, возникает ошибка 5 периода выполнения "Illegal Function Call" (Неправильный вызов функции). Пример: ' зададим программу обработки ошибок ON ERROR GOTO DirError PRINT "Please enter the directory you would like to"; INPUT "Create: ",DirName$ MKDIR DirName$ 'создает справочник END 'конец программы DirError: PRINT "There is a problem in creating the directory." END Функции MKI$, MKL$, MKS$, MKD$ Функции: MKI$, MKL$,MKS$ и MKD$ преобразовывают числовые величины в символьные строки (для записи в файл с произвольным доступом). Синтаксис: s$ = MKI$(целое выражение) s$ = MKL$(длинное целое выражение) s$ = MKS$(выражение обычной точности) s$ = MKD$(выражение двойной точности) Комментарии: Функции MAKE являются частью процесса записи числовых значений в фаил с произвольным доступом. Так как операторы, записывающие информацию в буфер файла с произвольным доступом (LSET и RSET) работают только со строками, числовые данные должны быть преобразованы в символьную форму перед их записью в файл с произвольным доступом с помощью оператора PUT. MKI$(i) возвращает 2-байтовую строку, состоящую из двух 8-битовых значений, которые Turbo Basic использует для внутреннего представления целой переменной 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 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 'конец программы Функции MKMD$ и MKMS$ Функция: MKMD$ и MKMS$ преобразуют числовые данные в строки в формате фирмы Microsoft (для вывода в файл с произвольным доступом). Синтаксис: s$ = MKMS$(выражение обычной точности) s$ = MKMS$(выражение двойной точности) Комментарии: Функции "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 примерно 2 микросекунды. Как оператор MTIMER устанавливает микротаймер в ноль. Ограничения: Оператор и функция MTIMER используются в паре. Вы должны задать оператор MTIMER, а затем вызвать функцию для получения результата. Последующие вызовы фунции будут возвращать значение 0, если вы не установили таймер с помощью оператора MTIMER. MTIMER и SOUND/PLAY используют канал 2 микросхемы таймера 8255 и поэтому являются взаимно исключаемыми. Следовательно, выполнение операторов SOUND и PLAY между оператором MTIMER и функцией MTIMER вызывает установку микротаймера в 0. Пример: ' иницициализирует таймер MTIMER PI# = ATN(1) * 4 'вычисляет PI ' считывает значение таймера ElapsedTime! = MTIMER PRINT USING "It took ##### millisekunds ";ElapsedTime!; PRINT " to calculate the value of PI." END 'конец программы Оператор NAME Функция: NAME переименовывает файл (аналогично функции REN в DOS). Синтаксис: NAME имя_файла1 AS имя_файла2 Комментарии: "имя_файла1" и "имя_файла2" - символьные выражения, удовлетворяющие правилам присвоении имен файлам и путям в DOS. Операция NAME файлу данных с именем "имя_файла1" присваивает имя "имя_файла2". Поскольку "имя_файла2" может содержать имя пути, возможно перемещение данных из одного справочника в другой, если только вы не предпримите попытку переименования с одного диска на другой. Пример: INPUT "Enter the name of the file to rename: ",OldName$ INPUT "Enter the new name of the file: ",NewName$ print oldname$,newname$ NAME OldName$ AS NewName$ END "конец программы Функция OCT$ Функция: OCT$ возвращает символьное представление восьмеричной формы (основание 8) числового выражения. Синтаксис: s$ = OCT$(числовое выражение) Комментарии: "Числовое выражение" находится в диапазоне от -32768 до +65535. OCT$ возвращает символьное представление восьмеричной формы целого аргумента. Если "числовое выражение" имеет дробную часть, то оно округляется до целого перед выполнением функции 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 передает управление соответствующей подпрограмме. Смотри также: Приложение В "Прерывания". Оператор ON ERROR Функция: ON ERROR определяет подпрограмму обработки ошибок и разрешает прерывания по ошибкам. Синтаксис: ON ERROR GOTO метка Комментарии: Параметр "метка" определяет первую строку подпрограммы обработки ошибок. Как только обработка ошибок разрешена с помощью того оператора, вместо вывода на дисплей сообщения об ошибке и окончания выполнения программы, при возникновении ошибки периода выполнения управление будет передаваться на соответствующую подпрограмму обработки ошибок. Используйте оператор RESUME для продолжения выполнения программы. Для запрещения прерываний по ошибкам, используйте оператор ON ERROR GOTO 0. Вы можете использовать этот метод при возникновении ошибок, которые вы знаете как обрабатывать; вы также можете задать вывод на дисплей содержимого ERL в это время. Если вы запустили программу типа .EXE из DOS с выключенной обработкой ошибок, любая возникшая ошибка вызывает печать сообщения и завершение работы программы. Сообщение выводится в форме: Error номер ошибки at pgm-ctr = адрес Если программа запускается из Turbo Basic и имеют место ошибки, то автоматически запускается режим редактирования программы с указанием строки, в которой возникла ошибка. На строке состояния будет приведено краткое описание ошибки периода выполнения: Error номер ошибки: сообщение об ошибке Смотри также: ERADR ERL ERR ERROR RESUME Пример: ' устанавливаевт обработку ошибок ON ERROR GOTO ErrorHandler WHILE 1 ' Этот цикл заканчивается ошибкой I = 10/0 ' Это вызывает ошибку периода выполнения WEND ErrorHandler: PRINT "Handler caught run-time erroe "; PRINT ERR," at line " ERL END Оператор ON/GOSUB Функция: ON/GOSUB вызывает одну из нескольких возможных подпрограмм в соотвествии со значением числового выражения. Синтаксис: ON n GOSUB метка [,метка]... Комментарии: n - числовое выражение в диапазоне от 0 до 255, а "метка" определяет оператор, на который передается управление. n определяет, на какую метку осуществляется переход (например, если n = 4, то переход осуществляется ня четвтртую метку. Если n равно 0, или больше, чем число меток в списке, Turbo Basic продолжает выполнение программы со следующего оператора. Каждая подпрограмма должна заканчиваться оператором RETURN, для того, чтобы можно было возобновить выполнение основной программы с оператора, непосредственно следующего за оператором ON/GOSUB. Оператор SELECT и блочный оператор IF могут также выполнять многоцелевые переходы и являются более гибкими, чем ON/GOSUB. Пример: FOR I%=1 TO 3 ON I% GOSUB OneHandler, TwoHandler, ThreeHandler NEXT I% END 'конец главной программы OneHandler: PRINT "Handler number",I% RETURN TwoHandler: PRINT "Handler number",I% RETURN ThreeHandler: PRINT "Handler number",I% RETURN Оператор ON/GOTO Функция: ON/GOTO осуществляет в программе ветвление на одно из нескольких возможных направлений в соотвествии со значением числового выражения. Синтаксис: ON n GOTO метка [,метка]... Комментарии: n - числовое выражение в диапазоне от 0 до 255, а "метка" определяет оператор, на который передается управление. n определяет, на какую метку осуществляется переход (например, если n = 4, то управление передается на четвертую метку в списке. Если n равно 0, или больше, чем число меток в списке, Turbo Basic продолжает выполнение программы со следующего оператора. Оператор SELECT и блочный оператор IF могут также выполнять многоцелевые переходы и являются более гибкими. Пример: FOR I%=1 TO 3 ON I% GOTO OneHandler, TwoHandler, ThreeHandler Back: NEXT I% END 'конец главной программы OneHandler: PRINT "Handler number",I% GOTO Back: TwoHandler: PRINT "Handler number",I% GOTO Back: ThreeHandler: PRINT "Handler number",I% GOTO Back: Оператор ON KEY(n) Функция: ON KEY(n) передает управление заданной подпрограмме обработки прерываний при нажатии заданной клавиши. Синтаксис: ON KEY(n) GOSUB метка Комментарии: "Mетка" идентифицирует подпрограмму обработки прерывания, а 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 выполнится, Turbo Basic перед выполнением каждого последующего оператора будет выполнять проверку нажатия заданной клавиши. Если клавиша нажата, оператор GOSUB передает управление соответствующей подпрограмме. Оператор KEY(n)OFF отменяет проверку клавиши n. Используйте оператор KEY для задания нужной вам клавиши, не являющейся функциональной клавишей или клавишей управления курсором. Используйте метаоператор $EVENT для организации качественного управления через генерацию кодов проверки событий системой Turbo Basic. Смотри также: $EVENT KEY(n) Пример: ' программа демонстрирует оператор KEY(n) ' включает проверку клавиш KEY ON ' назначает строки клавишам KEY 1, "Hello"+CHR$(13) KEY 2, "GoodBye"+CHR$(13) KEY 10, CHR$(13) ' устанавливает слежение за клавишей F10 ' и назначает ей строку. ON KEY(10) GOSUB GoodBye ' запрашивает прерывания от F10 KEY(10) ON ' запрашивает ввод пользователя INPUT "Press F1:";Dummy$ INPUT "Press F2:";Dummy$ PRINT "Press F10 now..." ' когда пользователь нажимает теперь клавишу F10 ' будет вызываться подпрограмма GoodBye WHILE NOT INSTAT:WEND 'ожидания нажатия F10 GoodBye END 'конец программы GoodBye: KEY LIST ' перечисляет определенные клавиши KEY(10) OFF ' запрещает прерывания ' теперь при нажатии пользователем F10, назначенная ' ей символьная строка будет выводится на экран PRINT "Press F10 now to quit the program..." RETURN Оператор ON PEN Функция: ON PEN определяет подпрограмму обработки прерываний от светового пера. Синтаксис: ON PEN GOSUB метка Комментарии: Параметр "метка" определяет первый оператор подпрограммы обработки прерываний от светового пера. Oператор ON PEN не действует до тех пор, пока прерывания от светового пера не будут разрешены с помощью оператора PEN ON. Как только оператор PEN ON выполнится, перед выполнением каждого оператора программы будет осуществляться проверка активности светового пера. Если прерывание от светового пера имеет место, то вызывается соответствующая подпрограмма. Оператор PEN OFF запрещает обработку прерываний от светового пера. После прерывания от светового пера, выполняется неявный оператор PEN STOP, для предотвращения повторяющихся вызовов подпрограммы обработки прерываний в самой себе (и заполнения стека). Завершающий подпрограмму обработки прерываний оператор RETURN автоматически выполняет оператор PEN ON, если только в программе не был исполнен явно оператор PEN OFF. Используйте метаоператор $EVENT для улучшения качества управления помощью генерации кода проверки события системой Turbo Basic. Смотри также: $EVENT PEN Пример: ON PEN GOSUB PenHandler ' устанавливает программу обработку ' события PEN ON ' разрешает прерывания PRINT "Press any key to stop..." 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 выполнится, Turbo Basic перед выполнением каждого оператора программы осуществляет проверку числа нот, остающихся в музыкальном буфере. Если число нот меньше, чем заданный "счетчик нот", то Turbo Basic выполняет переход на заданную подпрограмму. Оператор 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 PLAY(5) GOSUB FillPayBuffer Notes$ = "GEAGFDGFECFEDGGG" ' воспроизводит ноты со 2 по 4 октавы PlayStr$ = "MB" FOR Octave% = 2 TO 4 Octave$ = "0" + STR$(Octave%) PlayStr$ = PlayStr$ + Octave$ + Notes$ NEXT Octave% PLAY PlayStr$ DO LOOP UNTIL INSTAT CLEAR END 'конец программы FillPlayBuffer: PRINT PlayStr$ PLAY PlayStr$ RETURN Оператор ON STRIG Функция: ON STRIG объявляет подпрограмму обработки прерываний от кнопки джой-стика. Синтаксис: ON STRIG(n) GOSUB метка Комментарии: "Метка" определяет первый оператор в подпрограмме обработки прерываний от нажатой кнопки, n является выражением целого типа, обозначающим кнопку, от которой задается прерывание, в соответствии со следующей таблицей: -------------------------------- n Кнопка -------------------------------- 0 Кнопка 1, джой-стик А 2 Кнопка 1, джой-стик В 4 Кнопка 2, джой-стик А 6 Кнопка 2, джой-стик В ------------------------------- Оператор ON STRIG не оказывает никакого действия, пока не будут разрешены прерывания от кнопок оператором STRIG ON. Как только оператор STRIG ON выполнится, перед выполнением каждого последующего оператора будет осуществляться проверка нажатия заданной кнопки. Если она нажата, то вызывается соотвествующая подпрограмма. STRIG OFF запрещает проверку указанных кнопок джой-стиков. После прерывания выполняется неявно оператор STRIG STOP для предотвращения повторных вызовов подпрограммы обработки прерываний в самой себе (и заполнения стека). Завершающий подпрограмму обработки прерываний оператор RETURN автоматически выполняет оператор STRIG ON, если только в программе не был исполнен явно оператор STRIG OFF. Используйте метаоператор $EVENT для задания компилятору генерации кодов проверки событий. Смотри также: $EVENT STRIG(n) Пример: ZeroX=1 ZeroY=1 Оne2 TwoY=1 FourX=3 FourY=1 SixX=4 SixY=1 ' устанавливает обработку прерываний ON STRIG(0) GOSUB TriggerZero ON STRIG(2) GOSUB TriggerTwo ON STRIG(4) GOSUB TriggerFour ON STRIG(6) GOSUB TriggerSix ' разрешает проверку прерываний STRIG(0) ON STRIG(2) ON STRIG(4) ON STRIG(6) ON ' пока кнопка не нажата, вывод на дисплей ' текущих координат джой-стиков WHILE NOT INSTAT LOCATE 15,15,0 PRINT STICK(0),STICK(1); WEND END 'конец программы TriggerZero: LOCATE ZeroX, ZeroY PRINT "Button 1" LOCATE 15,15,0 RETURN TriggerTwo: LOCATE TwoX, TwoY PRINT "Button 2" LOCATE 15,15,0 RETURN TriggerFour: LOCATE FourX, FourY PRINT "Button 4" LOCATE 15,15,0 RETURN TriggerSix: LOCATE SixX, SixY PRINT "Button 4" LOCATE 15,15,0 RETURN Оператор ON TIMER Функция: ON TIMER объявляет подпрограмму обработки прерываний, на которую передается управление через каждые n секунд. Синтаксис: ON TIMER(n) GOSUB метка Комментарии: Метка определяет первый оператор в подпрограмме обработки прерываний от таймера, n - целое выражение, указывающее число секунд ожидания от 1 до 86400 (24 часа). Оператор ON TIMER не действует, пока оператор TIMER ON разрешит обработку прерываний от таймера. Как только оператор TIMER ON выполнится, начинается внутренний счет секунд и перед выполнением каждого оператора программы осуществляется проверка, не истекло ли заданное число секунд. Если время истекло, вызывается заданная подпрограмма. Оператор TIMER OFF отменяет проверку прерываний от таймера. После прерывания выполняется неявный оператор TIMER STOP для предотвращения повторных вызовов других подпрограммы обработки прерывания в самой себе (и заполнения стека). Завершающий подпрограмму обработки прерываний оператор RETURN автоматически выполняет оператор TIMER ON, если только в программе не был исполнен явно оператор TIMER OFF. то означает, что счетчик секунд сбрасывается в нуль после прерывания от таймера. Используйте метаоператор $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 Определяет режим последовательного ввода; R Определяет режим произвольного ввода/вывода; A Определяет режим вывода в конец последовательного файла; В Определяет режим двоичного ввода-вывода. Параметр "номер файла" может быть любым целым числом. Используйте оператор 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. Попытка открыть в режиме ввода несуществующий файл, вызывает возникновение ошибки 53 периода выполнения "File Not Found" (Файл не найден). Если вы пытаетесь открыть несуществующий файл для вывода, добавления, произвольного доступа или выполнения двоичных операций, то этот файл создается. Смотри также: OPEN COM Пример: ' Эта программа разделяется на 5 процедур ' различия между процедурами заключаются в режимах, ' в которых файлы открываются и в способах работы ' с данными в файлах. DEF FN PForKey$(Msg$) PRINT Msg$, "Press any key to continue..." WHILE NOT INSTAT:WEND FN PForKey$=INKEY$ END DEF 'Конец процедуры PForKey SUB SequentialOutput ' Файл открывается для последовательного вывода и ' часть данных записывается в него. KeyP$=FNPForKey$("Now for some sequential output") ' Открывает последовательный файл для вывода. OPEN "OPEN.DTA" FOR OUTPUT AS #1 Integer%=12345 TempStr$="History is made at night." ' Запись данных в последовательный файл WRITE# 1,TempStr$, Integer%*2, TempStr$, Integer%\2 CLOSE 1 'закрываем файл END SUB 'конец процедуры Sequential Output SUB SequentialAppend ' Файл открывается для последовательного вывода. ' Однако, данные в этом случае добавляются в ' конец файла. KeyP$=FNPForKey$("Now to append some more stuff") ' Открывает последовательный файл для добавления данных ' в него. OPEN "OPEN.DTA" FOR APPEND AS #1 Integer%=32123 TempStr$="The best vision is insight--M.Forbes" ' добавление данных WRITE# 1, TempStr$, Integer%*0.2, TempStr$, Integer%\2 CLOSE 1 'закрывает файл END SUB 'конец процедуры Sequential Аppend SUB SequentialInput ' Файл открывается для последовательного ввода, и ' данные, которые считываются, выводятся ' на дисплей. KeyP$=FNPForKey$("Now to read it back") ' Открывает последовательный файл и читает данные из него. OPEN "OPEN.DTA" FOR INPUT AS #1 ' Считывает первую строку, используя LINE INPUT# LINE INPUT# 1, TempStr$ PRINT TempStr$ ' Используйте INPUT$ для считывания остатка файла ' по символу за один раз. 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$("Now for binary input AND output") ' Открывает последовательный файл и считывает из него ' данные. 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$ 1,MID$(TempStr$,I%,1) NEXT I% CLOSE 1 'закрывает файл. KeyP$=FNPForKey$("") END SUB 'конец процедуры BinaryI0 SUB RandomIO ' Открывает файл для произвольного ввода-вывода. ' Используйте FIELD для объявления буфера под записываемые ' и считываемые данные. ' GET и PUT считывают и записывают данные. Заметьте, что ' перед выполнением GET, LSET или RSET используется для ' записи данных в буфер файла KeyP$=FNPForKey$("Now for some random I/0") ' Открывает файл с произвольным доступом. 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,I% 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 SequentialInput CALL BinaryIO CALL RandomIO END 'конец программы Оператор OPEN COM Функция: OPEN COM открывает и конфигурирует интерфейс связи. Синтаксис: OPEN "COMn: [бод][,контроль][,данные][,стоп][параметры]" AS [#] номер_файла [LEN=номер] Комментарии: "n" определяет последовательный интерфейс, который должен быть открыт. "Бод" - целая константа, определяющая скорость обмена данными. Допустимыми являются следущюие значения скорости: 75, 110, 150, 300, 600, 1200, 1800, 2400, 4800 и 9600 (значение по умолчанию 300). "Контроль" - один символ, определящюий значение контрольного бита четности в соответствиии со следующим: S Контроль по нулю (контрольный бит всегда 0); O Контроль по нечетности; M Контроль по единице (контрольный бит всегда 1); E Контроль по четности; N Нет контроля (в принимаемых символах контрольный бит игнорируется, а в передаваемых опускается). По умолчанию используется контроль по четности. "Данные" - константа целого типа от 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 и определяет сколько миллисекунд Turbo Basic будет ждать ответа, после чего будет зафиксирована ошибка "Device Timeout" (Тайм-аут устройства). Если этот аргумент равен 0 или опущен, то проверка состояния шин не выполняется. Значением по умолчанию для аргумента "мсек" является 1.000 для CS и DS и 0 для CD. Смотри также: COM $COM ON COM Пример: ' резервирует символьный массив для хранения вводимой ' информации DIM ComPortInput$(1) $COM1 1024 ' устанавливает размер буфера ввода 1К OPEN "COM1:300,n,8,1,DS,RS,CS,CD" AS #1 LEN=1 PRINT "Press any key to terminate the program..." WHILE NOT INSTAT ' пока клавиша не нажата ' если есть любой доступный ввод IF LOF(1)>0 THEN ' считывает любую доступную информацию в ' буфер интерфейса связи ComPortInput$(0)=INPUT$(LOF(1), #1) ' выводит данные на дисплей PRINT "COM Port input: "; ComPortInput$(0) END IF WEND END 'конец программы Оператор OPTON BASE Функция: OPTON BASE устанавливает минимальное значение для индексов массива. Синтаксис: OPTION BASE целое_выражение. Комментарии: "Целое_выражение" может находиться в диапазоне от 0 до 32767. OPTION BASE устанавливает значение индекса, для первого элемента массива. Например, после OPTION BASE 1, объявляя массив х с помощью оператора DIM х(20) резервируется память для 20 элементов (от 1 до 20), в отличие от числа элементов по умолчанию 21 (от 0 до 20). Хотя вы можете пользоваться OPTION BASE для задания диапазона индексов, Turbo Basic предлагает более мощный метод с помощью оператора DIM. Смотри также: DIM Пример: ' размещает массив из 3 целых DIM FirstArray%(2) ' устанавливает начальный индекс для любого объявленного ' массива OPTION BASE 1 ' размещает массив из 2 целых DIM SecndArray%(2) FOR I%=0 TO 2 ' ненулевой индекс; проверка на ноль IF I%>0 THEN SecndArray%(I%)=I% END IF FirstArray%(I%)=I% NEXT I% FOR I%=0 TO 2 ' ненулевой индекс; проверка на ноль IF I%>0 THEN PRINT SecndArray%(I%) END IF PRINT FirstArray%(I%) NEXT I% END 'конец программы. Оператор OUT Функция: OUT выполняет запись в интерфейс ввода-вывода. Синтаксис: OUT номер интерфейса,целое выражение Комментарии: OUT посылает байт данных (от 0 до 255) на интерфейс вывода с заданным номером, где "номер интерфейса" - выражение целого типа со значением 0 до 65535. OUT необходим для управления различными аппаратными подсистемами, такими как адаптеры связи или видеоадаптеры. Неправильное использование OUT легко может привести к краху системы. Пример: ' Программа заставляет динамик издавать звук, считывая ' регистр состояния и устанавливая и скидывая биты, ' управляющие динамиком ' считывает значение с интерфейса 61 (шестнадцатеричное) StatusReg% = INP(&H61) StatusReg% = StatusReg% AND &HOOFC ' маскирует считываемые значения ' устанавливает длительность звука, достаточную ' для слышимости FOR J = 1 to 1000 StatusReg% = Status Reg% XOR 2 'переключает динамик OUT &H61,StatusReg% 'выводит новое состояние delay .001 NEXT J END Оператор PAINT Функция: PAINT заполняет замкнутую графическую фигуру выбранным цветом. Синтаксис: PAINT (x, y) [[,цвет] [,контур] [,фон]] Комментарии: Параметр (x,y) задает точку внутри закмнутой фигуры на экране, подлежащей раскрашиванию. Если точка задана внутри замкнутой фигуры, то вся ограниченная ее контуром область будет заполнена указанным цветом. Если точка задана вне замкнутой фигуры, то раскрашена будет область, окружающая фигуру. Параметр "цвет" может быть либо числовым, либо символьным выражением. Если он задан в виде числового выражения, то он задает атрибут (цвет), которым будет осуществляться раскрашивание. Если он задан в виде символьной строки, то он содержит маску, которой должна быть заполнена указанная фигура, вместо того, чтобы быть просто раскрашенной. Если параметр "цвет" опущен, то используется стандартный цвет основных символов. Параметр "контур" задает цвет контура фигуры. Оператор PAINT завершает раскрашивание, когда на экране встречается цвет контура. Факультативный параметр "фон" задает маску, используемую, когда вы хотите заново раскрасить фон. Маска фона является тем признаком, который анализируется при поиске уже раскрашенных зон. Оператор PAINT может раскрасить любую замкнутую фигуру, независимо от ее сложности. Turbo Basic выбирает элемент для вывода по формуле: y mod длина_шаблона Перед использованием оператора PAINT убедитесь в том, что ваша фигура замкнута, т.к. если начнут раскрашиваться оставшиеся "щели", то весь ваш рисунок может быть разрушен. Если параметр "цвет" является числовым выражением, то оператор PAINT раскрашивает фигуру соответствующим цветом. Признаком конца раскрашивания служат пиксели с атрибутами, соответствующими заданным параметрам "контур" и "цвет". Если параметр "цвет" является символьным выражением, то "раскрашивание" осуществляется заданным шаблоном. Шаблон, заданный параметром "цвет" всегда имеет ширину 8 битов (что соответствует 4 пикселям при среднем разрешении экрана и 8 селям при высоком разрешении), а ее длина может быть от 1 до 64 байтов (что соответствует от 1 до 64 строкам по вертикали). При заполнении фигуры шаблоном, параметр "цвет" должен быть представлен следующим образом: CHR$(&Hnn) + CHR$(&Hnn)... На экране высвечиваются точки, которым соответствуют единицы в разрядах шаблона; при этом первый символ шаблона соответствует первой раскрашиваемой строке, второй символ - второй строке, и т.д. Например, следующий шаблон соответствует раскрашиванию по типу шахматной доски (50-процентная шкала серости) в режиме высокого разрешения: 10101010 (первый байт) 01010101 (второй байт) Чтобы заполнить фигуру такой "шахматкой", необходимо сформировать соответствующую символьную строку. Сначала преобразуем двоичный код в шестнадцатеричный: 10101010 = &HAA 01010101 = &H55 Теперь создадим двусимвольную строку, используя CHR$: pattern$ = CHR$(&HAA) + CHR$(&H55) Теперь получим окончательный вид оператора: PAINT (50,50),pattern$ который осуществляет раскрашивание серым цветом ("шахматкой"). Параметр "фон" используется в качестве признака конца раскрашивания при выполнении этой операции на уже раскрашенной области. Если оператор раскрашивания встречает пиксель, совпадающий с соответствующим битом параметра "фон", то раскрашивание прекращается. То же самое происходит, если этот пиксель имеет цвет, совпадающий с параметром "контур". При заполнении фигуры шаблоном параметр "цвет" определяет структуру используемого шаблона. Помните, что число битов на пиксель связано с числом значений цвета в любом заданном экранном режиме. Для вычисления числа битов на пиксель вы можете использовать следующую формулу: LOG2(X) = Y где X равен общему числу цветов вашего экрана, а Y равен числу битов на пиксель. Заполнение шаблоном в режиме SCREEN 1. При среднем разрешении экрана, X равен 4 пикселям (которые представляются одним байтом шаблона) и, в соответствии с приведенной выше формулой, Y равен 2 бита на пиксель. Поскольку каждый пиксель имеет связанный с ним атрибут цвета, то для описания одного из четырех атрибутов требуются 2 бита в байте шаблона. В следующей таблице приведены десятичные и шестнадцатеричные значения, соответствующие каждому атрибуту: _____________________________________________________________ Цветовая Двоичное Двоичное Шестнадцатеричное палитра значение значение значение атрибута шаблона шаблона _____________________________________________________________ 0 зеленый 01 01010101 &H55 красный 10 10101010 &HAA коричневый 11 11111111 &HFF _____________________________________________________________ 1 циановый 01 01010101 &H55 малиновый 10 10101010 &HAA белый 11 11111111 &HFF _____________________________________________________________ Заполнение шаблоном в режиме SCREEN 2. Режиму высокого разрешения соответствует кодировка 1 бит на пиксель, что позволяет одним шаблоном представлять 8 пикселей на экране. Как только в разряде маски встречатеся единица, на экран выводится точка. Символьная строка, задающая шаблон, может содержать до 64 байтов. Шаблон применяется единообразно ко всей области, заданной параметром "контур". Когда параметр "контур" не задан, весь экран рассматривается как раскрашиваемая область. Заполнение шаблоном в режимах SCREEN 7,8,9,10,11 и 12. В этих дополнительных экранных режимах шаблон запоминается и интерпретируется как набор 8-битовых элементов, используемых совместно и называемых битовой плоскостью. Для каждого экранного режима, кроме режима 10, требуются 4 битовых плоскости для определения одного байта шаблона; для режима 10 требуются 2 битовые плоскости. Пример: 'Пример использования шаблонов SCREEN 1: CLS 'зададим шаблон для диагональных строк TIL$=CHR$(&H40)+CHR$(&H10)+CHR$(&H10)+ CHR$(4)+CHR$(4)+CHR$(1)+CHR$(1) CIRCLE (100,100),50 PAINT (100,100)TIL$ 'зададим шаблон в виде "шахматки" TIL2$=CHR$(&HAA)+CHR$(&HAA)+CHR$(&H80)+CHR$(&H80)+ CHR$(&H80)+CHR$(&H80)+CHR$(&H80)+CHR$(&H80) CIRCLE (225,100),50 PAINT (225,100),TIL2$ Операторы PALETTE, PALETTE USING Функция: Операторы PALETTE и PALETTE USING позволяют изменить один или более цветов в палитре. (Чтобы использовать эти операторы у вас должен быть расширенный графический адаптер (EGA) или графический матричный видеоадаптер (VGA).) Синтаксис: PALETTE [атрибут,цвет] PALETTE USING имя_массива_целых_чисел(индекс_массива) Комментарии: Параметр "атрибут" задает цвет из палитры, а параметр "цвет" задает реальный цвет на экране, который в дальнейшем заменяет заданный атрибут в палитре. Цвет, в котором осуществляется вывод на дисплей, зависит от установленного экранного режима и аппаратных средств дисплея (см. описание оператора SCREEN). Оператор PALETTE позволяет изменять цвет текста и графических изображений, имеющихся на экране в данный момент, и это изменение цвета действует также на всю информацию, выводимую после этого на экран. Это удобное средство, которое дает вам возможность не перерисовывать графические изображения или текст, если вы хотите изменить только их цвет (см. пример). Кроме того, оператор PALETTE позволяет устанавливать соответствие между цветами палитры и числами, больше 15. Вы даже можете вывести текст, невидимый на имеющемся фоне, а затем, изменив в палитре цвет текста, вдруг сделать его видимым. Оператор PALETTE без аргументов устанавливает палитру в известное исходное состояние. Эта установка соответствует начальной инициализации цветов по умолчанию. При использовании дополнительного параметра USING все элементы палитры могут быть изменены одним оператором PALETTE USING. Аргумент "имя_массива_целых_чисел" определяет имя массива целых чисел. Аргумент "индекс_массива" задает индекс первого элемента в массиве целых чисел, задающих вашу палитру. (Как правило, вы будете задавать индекс массива, равный 0.) Массив должен иметь достаточно большой размер, чтобы установить все 16 элементов палитры при выборке его членов, начиная с указанного индекса. Каждому атрибуту в палитре ставится в соответствие цвет, код которого содержится в соответствующем элементе массива. Если значение "цвета" в каком-либо элементе массива равно -1, то соответствие между соответствующим атрибутом палитры и цветом не изменяется. Других отрицательных значений элементы массива иметь не могут. Ниже приведен перечень диапазонов изменения кодов атрибутов и цветов для различных мониторов и экранных режимов: Таблица 5-1. Диапазоны изменения кодов атрибутов и цветов. _____________________________________________________________ Режим Монитор Диапазон атрибута Диапазон цвета _____________________________________________________________ 0 Моно/EGA 0-15 0-2 Цветной/EGA 0-31 0-15 1 Цветной/EGA 0-3 0-15 2 Цветной/EGA 0-1 0-15 7 Цветной/EGA 0-15 0-15 8 Цветной/EGA 0-15 0-15 9 EGA (64K) 0-3 0-15 EGA (>64K) 0-15 0-63 10 Моно/EGA 0-3 0-8 11 MCGA/VGA 0-1 0-1 12 VGA 0-15 0-15 Моно = Монохромный EGA = Расширенный графический адаптер фирмы IBM VGA = Графический матричный видеоадаптер MCGA = Многоцветный графический матричный адаптер _____________________________________________________________ Ограничения: Операторы PALETTE и PALETTE USING требуют наличия расширенного графического адаптера. Смотри также: COLOR DRAW SCREEN Пример: 'в данном примере показано использование оператора PALETTE 'для изменения цвета графических изображений (и текста) 'без их перерисовывания или нового вывода на экран SCREEN 8 'устанавливается 16-цветный режим адаптера 'EGA с разрешением 640х200 PALETTE 'устанавливаются цвета палитры EGA по умолчанию LINE (10,10)-(630,190),1,BF 'нарисовать прямоугольник и рас- 'красить его синим цветом DO FOR I% = 2 TO 14 PALETTE 1,I% 'изменяет цвет прямоугольника с синего DELAY .2 'задержка, чтобы вы могли увидеть это 'изменение NEXT I% LOOP UNTIL INSTANT 'делать это до тех пор, пока не будет нажата 'клавиша END Функция PEEK Функция: PEEK возвращает в качестве значения содержимое заданной ячейки памяти. Синтаксис: y = PEEK(смещение) Комментарии: Параметр "смещение" должен быть числовым выражением со значением в диапазоне от 0 до 65535, представляющим 16-разрядное смещение в текущем сегменте, установленном последним оператором DEF SEG. Возвращаемое значение может быть в диапазоне от 0 до 255. Последний исполненный оператор DEF SEG определяет абсолютный адрес ячейки, содержимое которой должно быть прочитано. PEEK является функцией, обратной оператору POKE. Они являются примером работы в Turbo Basic непосредственно с памятью на самом низком уровне. Одним из применений PEEK и POKE является формирование массивов из байтов для тех случаев, когда не требуется создавать массивы с элементами, рассчитанными на полный диапазон целых чисел от -32768 до 32767. Смотри также: DEF SEG POKE Пример: DIM Array%(5) 'размещает массив из 6 целых чисел DEF SEG = VARSEG(Array%(0)) 'используя POKE, инициализируем массив FOR I% = 0 TO 11 POKE I%, &HFF NEXT I% 'используя PEEK, выведем содержимое массива FOR I% = 0 TO 11 PRINT HEX$(PEEK(I%)) NEXT I% END 'конец программы Функция PEN Функция: Считать информацию со светового пера. Синтаксис: y = P(n) Комментарии: "n" является целым числом в диапазоне от 0 до 9, которое управляет информацией, возвращаемой функцией PEN, в соответствии со следующей таблицей: _____________________________________________________________ n Действие _____________________________________________________________ 0 Перо сдвинуто вниз после последнего опроса? (-1 = да; 0 = нет). 1 Координата x того места, где перо было задействовано последний раз. 2 Координата y того места, где перо было задействовано последний раз. 3 Текущее значение выключателя (-1 = вниз; 0 = вверх). 4 Последняя координата x. 5 Последняя координата y. 6 Строка, на которой перо было задействовано последний раз (1-24). 7 Колонка, на которой перо было задействовано последний раз (1-80). 8 Номер последней строки (1-24). 9 Номер последней колонки (1-80). ______________________________________________________________ Перед использованием функции PEN световое перо должно быть включено оператором PEN ON. Пример: ON PEN GOSUB PenHandler 'задает программу обработки 'прерываний PEN ON 'включает обработку прерываний от светового пера PRINT "Press any key to stop..." WHILE NOT INSTAT WEND END 'конец программы PenHandler: FOR I% = 1 TO 9 PRINT PEN(I%) NEXT I% RETURN Оператор PEN Функция: PEN управляет обработкой информации со светового пера. Синтаксис: PEN {ON|OFF|STOP} Комментарии: Оператор PEN управляет обработкой информации со светового пера. Перед обращением к функции PEN, световое перо должно быть включено оператором PEN ON. Выполнение оператора PEN ON разрешает обработку прерываний от светового пера программой, указанной в операторе ON PEN. Оператор PEN OFF запрещает выполнение функции PEN и обработку прерываний от светового пера. Оператор PEN STOP запрещает обработку прерываний, но запоминает ситуацию, если световое перо выставило требование прерывания. Поэтому прерывание произойдет сразу же, как только будет выполнен оператор PEN ON. Смотри также: ON PEN Пример: 'эта программа демонстрирует применение оператора PEN ON ON PEN GOSUB PenHandler 'задает программу обработки прерывания PEN ON 'разрешает обработку прерываний PRINT "Press any key to stop..." WHILE NOT INSTAT WEND END 'конец программы PenHandler: FOR I% = 1 TO 9 PRINT PEN(I%) NEXT I% RETURN Функция PLAY(n) Функция: PLAY возвращает количество нот, находящихся в данный момент в фоновом музыкальном буфере. Синтаксис: y = PLAY(x) Комментарии: "x" является формальным числовым аргументом и может иметь любое значение. Функция PLAY возвращает количество нот в фоновом музыкальном буфере, ожидающих своей очереди. Если музыкальное сопровождение исполняется в основном режиме или не исполняется вообще, то функция PLAY возвращает 0. Смотри также: $SOUND Пример: 'исполняются ноты до-ре-ми-фа-соль 'и ведется счет оставшихся нот PLAY "MB CDEFG" Again: n = PLAY(1) 'может быть и PLAY(все_что_угодно) PRINT n "notes left in buffer" IF n = 0 THEN PRINT "Buffer Empty" : END GOTO Again Оператор PLAY Функция: PLAY воспроизводит музыкальное сопровождение. Синтаксис: PLAY символьное выражение Комментарии: PLAY представляет собой интерпретирующий мини-язык, который выполняет те же функции для музыкального сопровождения, что и оператор DRAW для вычерчивания графических изображений. PLAY позволяет задавать музыкальные фрагменты в виде последовательности символов в символьном выражении и воспроизводить их с помощью динамика, встроенного в компьютер. Всего можно воспроизвести 84 ноты, соответствующие большинству клавиш рояля, и включающие три октавы ниже среднего "ми" и четыре октавы без одной ноты выше среднего "ми". Нота может быть представлена своим числовым значением (1-84), или символьным описанием (т.е. буквами от A до G с диезами и бемолями и с информацией об октаве). Например, PLAY "N44" воспроизводит ноту 44, т.е. G выше среднего С (ми). PLAY "O3G" воспроизводит G в 3-й октаве (та же самая нота). Описания музыкальных фрагментов могут быть сгруппированы в длинные командные последовательности: PLAY "O3FGA" воспроизводит три ноты (F, G и A) в 3-й октаве. Пробелы игнорируются музыкальным интерпретатором и используются только для того, чтобы сделать структуру командной строки более ясной. Команды. Язык оператора PLAY составляют следующие однобуквенные и двубуквенные команды: буква-нота [{#|+|-}] Воспроизводится буква-нота; буквы от A до G обозначают ноты (регистр несущественен). Включение дополнительных модификаторов - диеза (# или +) или бемоля (-) - после буквы-ноты вызывает воспроизведение ноты, соответствующей черной клавише рояля. Нельзя использовать диезы и бемоли для получения звучания, соответствующего белой клавише рояля; например, "F-" является недопустимой командой. Nn Воспроизводится нота n, где "n" обозначает числовое обозначение ноты, имеющее значение от 1 до 84. Нота 1 соответствует самому нижнему С (ми) на рояле, а нота 84 - самому верхнему В (ре). Среднему С (ми) на рояле соответствует нота 37. Значение n, равное 0, означает паузу. On Задает текущую октаву n, где n изменяется от 0 до 6. Каждая оклава начинается с C и заканчивается нотой B. По умолчанию устанавливается октава 4. Среднее C находится в начале октавы 3. >n Вызывает воспроизведение ноты n в следующей более высокой октаве. Если установлена октава 6 (самая верхняя октава), то изменения октавы не происходит.