ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 8 Оператор DEF SEG ----------------------------------------------------------------- Назначение Оператор DEF SEG определяет сегмент данных,который будет использован операторами BLOAD, BSAVE, CALL, ABSOLUTE, PEEK и POKE Синтаксис DEF SEG ( =numeric expression) ( численное выражение) Комментарий численное выражение может варьироваться от 0 до 65,535 DEF SEG определяет сегмент памяти, в который последующие операторы BLOAD, BSAVE, CALL, ABSOLUTE, PEEK и POKE определят смещение. Сегмен представдляет собой адресную конструкцию, используемую процессорами семейства Intel86. Процессоры должны быть определены двумя целыми числами: сегментом и смещением в сегменте. DEF SEG без аргумента возвращает значение сегмента к его начальному значению по умолчанию. Первые 256 байтов сегмента по умолчанию содержат информацию, используемую системой поддержки выполнения вашей проограммы. Один интересный адрес находится в смещении &HF4E в данном сегменте. Значения POKE в этом адресе изменяют цвет текста на экране в любом графическом режиме. Цвет зависит от вашего режима. Еще один полезный адрес в сегменте данных по умолчанию находится в ячейке 0 и 1. Это слово содержит сегмент символов ТУРБО БЕЙСИКа. См. также COLOR Пример 'Данная программа заполняет экран буквами А, выполняя 'оператор POKE непосредственно в видео памяти 'Определить функцию, которая определяет адрес видео 'памяти 'получить тип видео наборной панели от пользователя DEF FN VideoScreen% LOCAL Screen Type% 'объявить локальную переменную PRINT "Please enter the type of screen yon are using". INPUT "[ 1 for Mono, 2 for Color]:"; Screen Type% SELECT CASE Screen Type% `назначить результат функции CASE 1 'на базе ввода пользователя 'монохромная ячейка видео памяти FN VideoScreen% = &HB000 CASE 2 'ячейка цвета видео памяти FN VideoScreen% = &HB800 END SELECT END DEF 'закончить функцию 'определить сегмент для POKE и BSAVE DEF SEG = FN VideoScreen% FOR I% = 0 to 4000 STEP 2 POKE I% , ASC("A") 'заполнить экран символами А NEXT I% END Оператор DELAY ----------------------------------------------------------------- Оператор DELAY вставляет паузу. Синтаксис DELAY seconds Комментарий seconds - это численное выражение, указывающее коли- чество секунд паузы ТУРБО БЕЙСИКа перед выполнением следующего оператора. Примечание. Оператор DELAY принимает аргументы с плавающей запятой, могут быть указаны также дробные задержки с разрешением приблизительно в 0,054 секунды. Использование оператора DELAY , а не никчемных программных петель, дает нам программы, которые прекрасно работают на машинах с различной скоростью обработки (то есть, с основанием 8088 против 80286 или 6 Мгц против 8 Мгц). Пример PRINT "Press any key to terminate the programm ..." WHILE NOT INSTAT 'до нажатия клавиши LOCATE 10,30 PRINT TIMES 'показать время DELAY 5 'задержать на 5 секунд WEND END 'закончить программу Оператор DIM ----------------------------------------------------------------- Назначение Оператор DIM описывает массивы. Синтаксис DIM {STATIC/DINAMIC} var (subscripts)[,var(subscripts)]... DIM {STATIC/DINAMIC} var(min:max[,min:max]...)[,var[,min:max]]... Комментарий var - это идентификатор, используемый для массива. subskripts - это ограниченный запятыми список из одного или более целочисленных выражений, определя- ющих размеры массива. Оператор DIM описывает переменные массива и опре- деляет их размер и объем габаритного поля. В расширении синтаксиса Интерпритатора БЕЙСИКа, ТУРБО БЕЙСИК дает вам возможность определить диапазоны значений субиндекса (min:max), а не только его верхнюю границу. Например: DIM b(50:60) создает массив 11 элементов с одинарной точностью, под номерами от 50 до 60. Оператор DIM c(50:60,25:45) создает массив с двойным габаритным полем с общим количеством элементов 11*21. Синтаксис диапазона значений может быть расширен для многомерных массивов: DIM binths (1800:1899,1:12) Связанный оператор OPTION BASE может также исполь- зоваться для определения самого младшего элемента в массиве, несмотря на то что механизм диапазона более мощный и ему отдается большее предпочтение. При первом запуске программы ТУРБО БЕЙСИК устанав- ливает каждый элемент численного массива на 0, а символьные массивы на нулевую строку (длина = 0). В такое же состояние приводятся численнные и символь- ные массивы, когда программа запускается вновь с помощью оператора RUN. Если переменная массива используется без предше- ствующего оператора DIM, максимальное значение его субиндексов по умолчанию будет = 10 , как будто вы включили (10) в оператор DIM. Рекомендуем однако, описывать каждый массив в явном виде. Минимальное значение, которое можно использовать в качестве субиндекса массива - это 0, если оно не было описано иначе с помощью оператора OPTION BASE. Необязательные аргументы STATIC и DYNAMIC контро- лируют соответственно будет ли пространство для мас- сива выделено заранее компилятором или будет распре- деляться динамически. По умолчанию выполняется стати- ческое распределение, которое действует до введения метаоператора $DYNAMIC, в выражениях использующих операторы описания массивов (DIMension), имя массива появляется в двух операторах DIM, или массив объявля- ется локальным по отношению к процедуре либо функции. Переключатель проверки границ, доступный через ме- ню Options, заставляет компилятор создавать код, ко- торый проверяет субиндексы на соответствие, когда идет ссылка на массив. Различия ТУРБО БЕЙСИК позволяет программисту описать и началь- ный, и конечный индексы массива. Интерпритатор БЕЙСИК размещает все массивы динамически, а ТУРБО БЕЙСИК по- пытается разместить массивы статически (во время компиляции), что сделает их более быстрыми. Вы можете заменить тип размещения, задав его в явном виде. См. также $DYNAMIC FRE $STATIC Пример DIM объявляет массив 'константа с именем, определяющая верхнюю границу массива %MaxDim = 20 'константа с именем, определяющая нижнюю границу массива %MinDim = 1 'разместить массив %MaxDim целочисленных элементов DIM Array%(%MinDim:%MaxDim) `инициализироваить массив со случайными цифрами FOR Count I% = %MinDim to %MaxDim Array%(Count I%) = INT(RND*10) NEXT Count I% END Оператор DO/LOOP ----------------------------------------------------------------- Назначение Оператор DO/LOOP представляет собой цикл с тестом для TRUE или FALSE на верхней или/и в нижней части цикла. Синтаксис DO[{WHILE/UNTIL}expression] . . statements [EXIT LOOP] . [LOOP [WEND][{WHILE/UNTIL} expression] Комментарий expression - численное выражение, в котором значе- ния, не равные нулю, представляют TRUE (ИСТИНА), а нулевые значения - FALSE (ЛОЖЬ). DO и LOOP являются подходящими построителями цик- лов для всех случаев. Они позволяют вам создавать циклы с тестами для терминационных условий в верхней части цикла, в низу, в общих местах, или ни в одном из них. Оператор DO должен всегда быть спаренным с оператором LOOP в нижней части цикла. Неудачная попытка спарить DO и LOOP приведет к ошибкам во время компиляции. Для дополнения теста к DO/LOOP используйте WHILE и UNTIL. Используйте резервное слово WHILE, если вам необходимо повторить цикл в случае, если выражение - это TRUE, а если выражение - FALSE - используйте терминальное слово. UNTIL вызывает обратный эффект; то есть цикл будет закончен, если условие - TRUE и повторен в случае FALSE . Например: DO WHIOLE A = 13 . . statements . LOOP выполняет операторы между DO и LOOP до a = 13. В любой точке в DO/LOOP вы можете включить опера-тор EXIT/ LOOP. Это эквивалентно выполнению команды GOTO в отношении оператора после выхода из LOOD. (Подробнее об этом : см. оператор EXIT). Заметьте, что этот DO/LOOD: DO WHILE a < b . . . LOOP имеет такой же эффект как этот цикл WHILE/WEND: WHILE a < b . . . WEND Несмотря на то, что компилятор не заботится о таких вещах, зарезервируйте место для операторов между DO и LOOP. Это поможет прояснить структуру цикла. Пример 'Данная программа ждет нажатия клавиши DO LOOP UNTIL INSTAT END Оператор DRAW ----------------------------------------------------------------- Назначение Оператор DRAW производит построения на графическом экране Синтаксис DRAW string expression. симводьное выражение Комментарий Оператор DRAW вычерчивает объекты на графическом экране в соответствии с командами, вставленными в символьный аргумент, который переходит к данному оператору. Фактически string expression - это прог- рамма для "языка" интерператора DRAW. DRAW выполняет командные строки и создает музыку. ----------------------------------------------------------------- ДЕЙСТВИЕ КОМАНДЫ ----------------------------------------------------------------- Un Движение Вверх Dn Движение Вниз Ln Движение Налево Rn Движение Напраыво En Движение Вверх и вправо Fn Движение Вниз и вправо Gn Движение Вниз и влево Hn Движение Вверх и влево ----------------------------------------------------------------- n - это расстояние, которое необходимо пройти (см.Sn, фактор масштабирования, следующий за ним). Движение всегда начинается на LPR и соответственно подстраива- ет LPR. (LPR означает "последнее указание точки", и относятся к последнему указанию точки определенных графопостроительных операторов. Более подробно об этом см. раздел графики в главе 4). Например: DRAW "D10R5" производит построение формы L (вниз 10, вправо 5), начинается с LPR. Он являет LPR на последний элемент изображения (растровый элемент). M x,y перемещается на координату x,y. Если X сопровождается ведущим плюсом или минусом, перемещение будет относительным, в противном случае оно будет абсолютным. Например: DRAW "D10 R5 M30,50" рисует L из предыдущего, а затем завершает построение строкой в растровый элемент (30,50). Следущие префиксы могут предшествовать любой команде перемещения: B перемещается, но не производит построения; N перемещается, но возвращается после окончания в первоначальное положение. Например: DRAW "BM 180,20 NU10 ND10 NL10 NR10" перемещается без построения к растровому элементу (180,20), затем рисует знак плюса. Другие команды. ---------------- An устанавливает угол n. Значение n может варьироваться от 0 до 3, где 0 равняется 0 градусов, 1 равняется 90 градусов, 2 = 180 градусам и 3 = 270 градусам. TAn поворачивает угол n. Значение n варьируется в диапазоне от -360 до +360 градусов. Если n имеет положительное значение, угол вращается против часовой стрелки. Если оно отрицательное - по часовой стрелке. Значения вне диапазона допустимых величин вызывают ошибку выполнения 5, неправельный вызов функции. Заметьте, что TAn не комулятивный. Cn рисует цветное n. Проверьте оператор PALETTE на диапазон n в каждом режиме дисплея цвет по умолчанию - самый высокий допустимый атрибут. Sn устанавливает масштабный фактор на n/4, где n варьируется от 1 до 255. Например, если n = 8, масштабный фактор = 2. Оператор DRAW увеличивает масштабный фактор посредством аргументов на O,D,L,R,E,F,G,H и релятивные команды М для определения окончательных размеров объектов. По умолчанию для n есть 4, заканчивыается фактором единого масштабирования (то есть отсутсвием масштабирования. Аспектное соотношение используемого вами дисплея определяет отношение между X и Y. На идеальном (несуществующем) дисплее с аспектным соотношением 1/1, пунктирная линия X имеет такуюже длину, как и Y. Однако дисплеи компьютеров ИБМ имеют следующие аспектные соотношения: --------------------------------------------------------------- Монитор/Адаптер Экран 1 Экран 2 Экран 7/8/9 Экран 10 --------------------------------------------------------------- Цвет 5/6 5/12 N/A N/A Усовершенствованный 5/6 5/12 8.76/12 N/A Усоверш. Моно N/A N/A N/A 9.52/12 --------------------------------------------------------------- X VARPTR$ (переменная); выполняет подстроку, то есть, выполняет вторую командную строку изнунри первичной строки DRAW. Команда X похожа на GOSUB; например: DRAW "X" + VARPTR$(X$) P color,boundbary (цвет, граница) начинается на теку- щей координате (X,Y) и заполняет изображение цветом color, прекращая это заполнение в зонах цветовой границы. В каждом случае, аргумент n,X или Y может быть либо константой (как было показано на примерах) или переменной в виде = VARPTR$(переменная); например: DRAW "e15" тоже самое, что a = 15 DRAW "e=" + VARPTR$(a) DRAW игнорирует пространство в командных строках - вы можете использовать его для того, чтобы сделать ваши программы DRAW более читаемыми. Ограничения ТУРБО БЕЙСИК не идентифицирует имена переменных в строках DRAW. Так, вы должны использовать VARPTR$(n) для выборки содержания переменных во время выполнения программы в рамках строки DRAW . Вместо DRAW "U = I%;" используйте DRAW "U = " + VARPTR$(I%) Пример 'Перейдите в средний разрешающий режим графики SCREEN 1 House$ = "U20 G5 E20 F20 H5 D20 C30" DRAW House$ DRAW "BE3" DRAW "P1,3" FOR I% = 1 TO 280 STEP 40 DRAW "BM = " + VARPTR$(I%) + ",40" DRAW House$ NEXT I% END 'закончить программу Оператор END ----------------------------------------------------------------- Назначение Оператор END заканчивает выполнение программы или определяет конец структурного блока. Синтаксис END [{DEF/IF/SELECT/SUB}] Комментарий END без аргументов заканчивает выполнение прог- раммы. Операторы END могут быть помещены в любое место в программе, и их может быть более одного. Если программа встречается с оператором END, она за- крывает все открытые файлы и возвращается к DOS (или к ТУРБО БЕЙСИКу, в зависимости от того, где была запущена программа). Оператор END не требуется компилятору, хотя использование его можно рекомендовать. Если в программе заканчиваются операторы выполнения, генерируется тотже самый эффект. Если за оператором END следуют резервные слова DEF,IF,SUB или SELECT, то это означает конец структурного блока. См. также DEF IF SELECT STOP SUB Пример SUB DummyProc PRINT "Hello" END SUB `закончить определение процедуры DEF FN DummyFunc$ FN DummyFunc$ = "HelloAgain" END DEF `закончить определении функции INPUT "Execute the procedure or the function [1 or 2]";Which% IF Which% > 0 THEN SELECT CASE Which% CASE 1 CALL DummyProc END 'закончить программу CASE 2 PRINT FN DummyFunc% END 'закончить программу CASE ELSE PRINT "An illegal choice was mabe..." END SELECT 'закончить выбирающий оператор END IF 'закончить блок ifthen END 'закончить программу Функция ENDMEM ----------------------------------------------------------------- Назначение Функция ENDMEM возвращает адрес конца физической па- мяти. Синтаксис y = ENDMEM Комментарий Функция ENDMEM возвращает длинное целое число, представляющее адрес последнего байта физической па- мяти. ENDMEM в сопряжении с оператором MEMSET, может использоваться для распределения пространства в стар- шей памяти для программ языка ассемблера. Выполняя программу в памяти, ENDMEM в действитель- ности возвращает конец физической памяти минус объем таблицы символов. Когда ТУРБО БЕЙСИК компилирует в памяти, он сохраняет таблицу символов на уровне самого старшего адреса в памяти. См. также MEMSET Пример 'показать результат PRINT "The end of addressable memore is :";ENDMEM END 'закончить программу Оператор ENVIRON ----------------------------------------------------------------- Назначение Оператор ENVIRON модифицирует информацию в таблице среды. Синтаксис ENVIRON string expression символьное выражение Комментарий string expression определяет как имя параметра, подлежащее изменению, суммированное или исклю- ченное, так и саму информацию о новом параметре. Между ними ставится знак равенства (=). Оператор ENVIRON и соответствующая функция ENVIRON$ используются для конфигурации среды, которая переходит к программам, выполняемым через оператор SHELL. (Более подробно см.статью об операторе SHELL в настоящем руководстве и статью о команде SET в спра- вочном руководстве DOS.) Например: ENVIRON "PATH=\TURBOBAS" устанавливает DOSовский параметр PATH на "\TURBOBAS". Последующее копирование оператором SHELL в команд- ный файл СOMMAND.COM автоматически приводит к иссле- дованмию каталога \TURBOBAS для поиска файлов не на- ходящихся в текущем каталоге. Для исключения параметра из таблицы среды доста- точно поставить точку с запятой ";" после знака равенства: ENVIRON "PATH=;" исключает из таблицы среды параметр маршрута поиска |