====== Глава VII ====== |{{..author_files:007.msx|}}|{{..author_files:007.txt|}}|[[..007|]]| @@ -1,14 +1,11 @@ -c1E +\/d ГЛАВА VII. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ЯЗЫКА MSX-BASIC - - +\/d- VII.1. РАБОТА С КЛАВИАТУРОЙ - VII.1.1. Н е с т а н д а р т н ы й в в о д с к л а в и а т у р ы - Как правило, ввод данных с клавиатуры пользователь осуществляет с помо- щью оператора INPUT. При этом нужно нажать как минимум две клавиши: одну для ввода символа и вторую для помещения его в память. При этом знак во- @@ -22,7 +19,6 @@ в момент нажатия на какую-либо клавишу возвращает значение, равное вводи- мому по ней символу. Если клавиша не нажата, то значением функции INKEY$ является пустая строка (""). - П р и м е р 1. ────────────── 10 W$=INKEY$:IF W$="" THEN 10 'Если клавиша не нажата, то компьютер пе- @@ -40,7 +36,6 @@ █ ◀── нажата клавиша "STOP" Break in 10 ◀── нажаты клавиши "CTRL"+"STOP" Ok - При выполнении программы клавиатура постоянно опрашивается (сканирует- ся), и полученные коды записываются в область памяти, называемую б у ф е- р о м клавиатуры. Функция INKEY$, как Вы только что увидели, извлекает @@ -55,25 +50,23 @@ С помощью функции INKEY$ можно "прочитать" нажатие только тех клавиш, которым соответствует код какого-либо символа. Это делается так: IF INKEY$="с и м в о л" THEN ... - Далее, для обнаружения нажатия какой-либо из клавиш: + Для обнаружения нажатия какой-либо из клавиш: ┌──────────────────────────────────────────────────────────────┐ │ "ESC", "TAB", "RETURN", "SELECT", "HOME/CLS", "INS","DEL", │ │ клавиши управления курсором, "CTRL+буква" │ └──────────────────────────────────────────────────────────────┘ используйте оператор: - IF INKEY$=CHR$(K) THEN ... + IF INKEY$=CHR$(K) THEN ... , где К - код клавиши, нажатия которой ожидается. К сожалению, клавиши ┌─────────────────────────────────────────────────────┐ │ "CAPS", "SHIFT", "GRAPH", "CTRL", "РУС", "STOP" │ └─────────────────────────────────────────────────────┘ -"нечитаемы" операторами INPUT$ или INKEY$. Тем не менее, для чтения этих +"нечитаемы" операторами INPUT$ или INKEY$. Тем не менее для чтения этих клавиш достаточно прочесть буфер NEWKEY (11 байтов) по адресу &HFBE5 (см. раздел X.9.1). - П р и м е р 2. Пример программы, останавливаемой нажатием клавиши ────────────── "SHIFT": 10 Z=PEEK(&HFBEB):IF Z<>254 THEN 10 - П р и м е р 3. Вспомним, что функция ASC(α), где α - строковое выраже- ────────────── ние, возвращает десятичный код ASCII первого символа значения выражения α. Используя функцию INKEY$, можно получать десятичные @@ -90,7 +83,6 @@ 32 ◀── нажата клавиша "пробел" Break in 10◀── нажаты клавиши"CTRL" █ ◀── нажата клавиша "STOP" Ok +"STOP" 49 ◀── нажата клавиша "SHIFT"+"1" - Таким образом, функциональные клавиши имеют ту особенность, что нажа- тие любой из них вызывает вывод кодов нескольких символов, составляющих ее текст. @@ -109,7 +101,6 @@ │ Запомните, что только нажатие клавиш "CTRL"+"STOP" прерывает │ │ действие данной функции! │ └──────────────────────────────────────────────────────────────────┘ - П р и м е р 4. 10 W$=INPUT$(2):?W$:GOTO 10 ────────────── run █ @@ -118,7 +109,6 @@ █ Break in 10 ◀── нажаты клавиши "CTRL"+"STOP" Ok - Этот оператор неудобно использовать для ввода д л и н н ы х символь- ных строк с клавиатуры, ибо Вы можете потерять контроль над вводом (вве- денные символы не видны на экране до тех пор, пока не введен последний из @@ -140,11 +130,9 @@ t │ серии MSX-1 █ │ 97 ◀── нажата клавиша "а" █ и так далее... █ и так далее... - Таким образом, функцию INPUT$() можно также использовать для получения десятичных кодов ASCII символов, а также десятичных кодов ASCII некоторых управляющих и функциональных клавиш. - П р и м е р 6. П а р о л ь ! ────────────── 40 CODE$="Секрет":COUNT=0:PRINT"Имя":INPUT N$ @@ -154,11 +142,10 @@ 130 COUNT=COUNT+1 140 IF COUNT<3 THEN GOTO 70 ELSE PRINT"Проход закрыт":END 150 PRINT:PRINT N$:PRINT"Проходи, приятель":END - Результат работы программной строки 10 A$=INKEY$:IF A$="" THEN 10 может показаться эквивалентным результату работы команды - A$=INPUT$(1) ! + A$=INPUT$(1) . Однако между ними есть различиe: нажатие клавиши "STOP" задерживает программу в цикле с оператором INKEY$, тогда как во время ожидания нажа- тия клавиши, "организованного" оператором INPUT$, клавиша "STOP" временно @@ -167,11 +154,8 @@ │ Это единственный способ временно отключить клавишу "STOP" в MSX-BASIC!│ └───────────────────────────────────────────────────────────────────────┘ - - VII.1.2. Ф у н к ц и о н а л ь н ы е к л а в и ш и - При нажатии клавиши "F1" на дисплее компьютера серии MSX-1 появляется слово "print" (как если бы оно набиралось на клавиатуре посимвольно). Ана- логичным образом действует любая из остальных девяти функциональных кла- @@ -184,7 +168,7 @@ что при нажатии соответствующей клавиши генерируется заранее заданная це- почка символов. Этим средством является оператор ┌──────────────────┐ - │ KEY n,T │ + │ KEY n,T │ , └──────────────────┘ где: KEY ("key"-"клавиша") - служебное слово; n - арифметическое выражение, целая часть значения которого задает @@ -211,11 +195,9 @@ ··· │ MSX-1 4) 10 X$="for x=1 to 15'заголовок":KEY5, _comterm │ X$:KEY LIST Ok - 5) KEY 2,"LIST"+CHR$(13) 'При нажатии клавиши F2 в ы п о л н я е т с я команда LIST. Заметим, что символ CHR$(13) вызывает ввод команды (операто- -ра) так же, как и нажатие клавиши "RETURN"! - +ра), так же как и нажатие клавиши "RETURN"! Отметим, что при включении компьютера серии MSX-1 значения функциональ- ных клавиш устанавливаются по умолчанию следующим образом: print auto goto list run @@ -236,22 +218,17 @@ Предположим, что Вы хотите ввести большое количество двоичных чисел. Это часто бывает необходимо при определении образа спрайта. Чтобы облег- чить себе работу, определите одну из функциональных клавиш так: - KEY1,"DATA 00000000"+CHR$(13) + KEY1,"DATA 00000000"+CHR$(13) , а затем введите команду AUTO. Нажмите клавишу "F1" несколько раз для полу- чения начальных "шаблонов" операторов DATA с последовательными номерами строк. Вам остается только отредактировать те строки, в которых необходи- мо заменить нули на единицы в нужных местах! - - VII.1.3 Д ж о й с т и к - - Человеческая изобретательность ни в чем не проявляется - так, как в играх. - Из письма Г.В.Лейбница Б.Паскалю - - + Человеческая изобретательность ни в чем не + проявляется так, как в играх. + Из письма Г.Лейбница Б.Паскалю В комплекте MSX-компьютера имеется два периферийных устройства для вво- да информации, которые называются д ж о й с т и к а м и ("joy stick" - "палочка радости"). @@ -278,7 +255,6 @@ где: STICK ("рукоятка")- служебное слово; α - арифметическое выражение, целая часть значения которого принад- лежит отрезку [0,2] и задает номер джойстика. - 1 Эта функция возвращает целое число, принадлежащее 8 ▲ 2 отрезку [0,8] и отмечающее направление перемещения ру- \ │ / коятки джойстика, номер которого определяется значени- @@ -286,7 +262,6 @@ / │ \ значения функции STICK() (когда джойстик находится в 6 ▼ 4 нейтральном положении, функция возвращает значение 0). 5 - Говорят, что функция STICK(0) "читает" клавиши управления курсором, функция STICK(1) "читает джойстик" в первом разъеме, функция STICK(2) "читает джойстик"во втором разъеме. @@ -300,7 +275,6 @@ ▲ ▼ X=8, если нажаты одновременно клавиши │ и ◀──; X=0, если не нажата ни одна из этих клавиш. - Например, если Вы запустите программу 10 D=STICK(0):LOCATE 18,11:PRINT D:GOTO 10 и будете нажимать клавиши управления курсором, то будете получать значе- @@ -313,7 +287,7 @@ Функция STRIG() определяет, нажата или нет нужная Вам к н о п к а . Формат функции STRIG() следующий: ┌─────────────┐ - │ STRIG(β) │ + │ STRIG(β) │ , └─────────────┘ где: STRIG("Stick TRIGer"-"кнопка джойстика")- служебное слово: β - арифметическое выражение, целая часть которого принадлежит от- @@ -328,19 +302,17 @@ 5) функция STRIG(4) читает состояние кнопки 2 джойстика в разъеме 2. Функция STRIG() возвращает значение либо ноль, если кнопка не нажата, либо -1 , если кнопка нажата. - П р и м е р 1. IF STRIG(0) THEN BEEP ────────────── Оператор вызывает звуковой сигнал (BEEP), если кнопка джойстика нажата (т.е. STRIG(0) имеет значение -1). - При использовании этой функции, например, в процессе компьютерной игры, -когда требуется "вести стрельбу", функция STRIG(0) ежесекундно задейству- -ется много раз. Для этих частых проверок значений существует специальный -термин "о п р о с". + При использовании функции STRIG(0), например, в процессе компьютерной +игры (скоростная стрельба по цели), она ежесекундно задействуется много +раз. Для этих частых проверок значений существует специальный термин "оп- +рос". Метод опроса иллюстрируется примером 2. Программа начинается с вопроса пользователю о том, располагает ли он джойстиком или работает за клавиату- рой. Далее запрашиваются состояния пусковых кнопок, и в зависимости от того, какая из них нажата, выбирается джойстик. - П р и м е р 2 [76]. ─────────────────── 40 CLS:WIDTH 40 @@ -355,15 +327,13 @@ 250 IF F=1 OR F=3 THEN PRINT "Джойстик А"; 260 IF F=2 OR F=4 THEN PRINT "Джойстик B"; 270 PRINT " в действии":END - В ожидании нажатия клавиши "пробел" опрос будет выполняться постоянно, что делает возможной н е м е д л е н н у ю реакцию программы. Напомним Вам, что нажатие клавиши "пробел" может также проверяться с помощью функ- ции INKEY$, но в этом случае компьютер будет проверять текущее состояние буфера клавиатуры. - З а м е ч а н и е. Функция STRIG(0) возвращает (-1) только, если кла- -виша "пробел" нажата во время в ы ч и с л е н и я значения этой функции. - + З а м е ч а н и е. Функция STRIG(0) возвращает -1 только, если клави- +ша "пробел" нажата во время в ы ч и с л е н и я значения этой функции. П р и м е р 3. 10 FOR I=0 TO 500:PRINT I:NEXT ────────────── 20 IF STRIG(0) THEN 10 ELSE 20 Обратите внимание, что если клавиша "пробел" нажата во время вывода ин- @@ -376,6 +346,8 @@ INKEY$ реагирует на в с е предварительные нажатия. Сколько раз была на- жата клавиша "пробел", столько раз и выполнится соответствующая команда. + + П р и м е р 4. Ввод рисунков с клавиатуры при помощи "рукоятки" (кла- ────────────── виши управления курсором) и "кнопки" (клавиша "пробел") встроенного "джойстика" с номером 0. @@ -389,7 +361,6 @@ 90 IF Y<0 THEN Y=0 ELSE IF Y>20 THEN Y=20 95 LOCATE X,Y 100 IF STRIG(0) THEN PRINT "∗":GOTO 30 ELSE PRINT "+":GOTO 30 - А теперь исправьте "∗" на " ". Что изменилось в работе программы? β) 10 COLOR 1,15:SCREEN 2 @@ -404,6 +375,7 @@ 100 IF D=6 OR D=7 OR D=8 THEN X=X-1 110 RETURN'──▶ + П р и м е р 5. А теперь настала очередь "настоящего" джойстика! ────────────── α) 10 CLS:X=16:Y=11 @@ -439,27 +411,22 @@ а регистры 14 и 15 - за состояние джойстиков и индикатора "РУС". Для того, чтобы определить состояние джойстиков нужно в регистр с номе- ром 15 занести следующие значения: - Д л я д ж о й с т и к а 1 Д л я д ж о й с т и к а 2 ┌───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐ │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ ├───┼───┼───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┼───┼───┤ │ - │ 0 │ - │ 0 │ - │ - │ 1 │ 1 │ │ - │ 1 │ 0 │ - │ 1 │ 1 │ - │ - │ └───┴───┴───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┴───┴───┘ - ...и прочитать регистр PSG с номером 14. Четыре его младших бита покажут состояние выбранного с помощью регистра 15 джойстика: - ┌───┬───┬───┬───┬────┬────┬───┬───┐ │ 7 │ 6 │ 5 │ 4 │ 3 │ 2 │ 1 │ 0 │ ├───┤───┼───┼───┼────┼────┼───┼───┤ │ - │ - │ - │ - │ ─▶ │ ◀─ │ │ │ ▲ │ │ │ │ │ │ │ │ ▼ │ │ │ └───┴───┴───┴───┴────┴────┴───┴───┘ - Если бит в данной позиции "сброшен",то джойстик направлен в показанном на таблице направлении. - П р и м е р 6. Автор программы: Г.Беленький. 26.05.90. ───────────── 10 DATA 3E,0F :' LD A,0Fh ; В 15-й регистр PSG поместим @@ -475,7 +442,6 @@ 90 DEFUSR=&HD000 100 A=USR(0) ' Прочитаем состояние джойстика 1 110 PRINT RIGHT$("0"+BIN$(NOT(PEEK(&HE000) AND 15)),4) - П р и м е р 7. Автор программы: Г.Беленький. 26.05.90. ───────────── 10 DATA 3E,0F :' LD A,0Fh ; Подпрограмма, позволяющая @@ -499,10 +465,9 @@ 200 IF A=6 OR A=7 OR A=5 THEN X=X+2 210 GOTO 140 - Для того, чтобы изменить состояние индикатора "РУС", нужно в регистре + Для того чтобы изменить состояние индикатора "РУС", нужно в регистре PSG с номером 15 изменить старший бит.Если этот бит равен 0, то индикатор включается, а если 1, то выключается. - П р и м е р 8. Автор программы: Г.Беленький. 26.05.90. ───────────── 10 DATA 3E,0F :' LD A,0Fh @@ -517,10 +482,9 @@ 100 FOR I=0 TO 50:NEXT I 110 POKE &HD003,0:GOTO 70 - Кроме только что рассмотренных функций STICK и STRIG,для работы с джой- + Кроме только что рассмотренных функций STICK и STRIG для работы с джой- стиком можно использовать функции PDL и PAD. - Формат функции PDL следующий: - ┌────────┐ + Формат функции PDL следующий: ┌────────┐ │ PDL(N) │ , └────────┘ где: PDL - служебное слово; @@ -542,30 +506,30 @@ ки джойстика в разъеме 1, и возвращает 255 ("истина"), если рукоятка не перемещалась, или 0 ("ложь") - в противном случае. Функция PDL(4) проверяет,происходило ли перемещение н а з а д рукоят- -ки джойстика в разъеме 2 и возвращает 255 ("истина"), если рукоятка не пе- +ки джойстика в разъеме 2,и возвращает 255 ("истина"), если рукоятка не пе- ремещалась, или 0 ("ложь") - в противном случае. Функция PDL(5) проверяет,происходило ли перемещение в л е в о рукоят- -ки джойстика в разъеме 1 и возвращает 255 ("истина"), если рукоятка не пе- +ки джойстика в разъеме 1,и возвращает 255 ("истина"), если рукоятка не пе- ремещалась, или 0 ("ложь") - в противном случае. Функция PDL(6) проверяет,происходило ли перемещение в л е в о рукоят- -ки джойстика в разъеме 2 и возвращает 255 ("истина"), если рукоятка не пе- +ки джойстика в разъеме 2,и возвращает 255 ("истина"), если рукоятка не пе- ремещалась, или 0 ("ложь") - в противном случае. Функция PDL(7) проверяет,происходило ли перемещение в п р а в о руко- -ятки джойстика в разъеме 1 и возвращает 255 ("истина"), если рукоятка не +ятки джойстика в разъеме 1,и возвращает 255 ("истина"), если рукоятка не перемещалась, или 0 ("ложь") - в противном случае. Функция PDL(8) проверяет,происходило ли перемещение в п р а в о руко- -ятки джойстика в разъеме 2 и возвращает 255 ("истина"), если рукоятка не +ятки джойстика в разъеме 2,и возвращает 255 ("истина"), если рукоятка не перемещалась, или 0 ("ложь") - в противном случае. - Функция PDL(9) проверяет, нажата ли кнопка 1 джойстика в разъеме 1 и + Функция PDL(9) проверяет, нажата ли кнопка 1 джойстика в разъеме 1, и возвращает 255 ("истина"), если кнопка не нажата, или 0 ("ложь") - в про- тивном случае. - Функция PDL(10) проверяет, нажата ли кнопка 1 джойстика в разъеме 2 и + Функция PDL(10) проверяет, нажата ли кнопка 1 джойстика в разъеме 2, и возвращает 255 ("истина"), если кнопка не нажата, или 0 ("ложь") - в про- тивном случае. - Функция PDL(11) проверяет, нажата ли кнопка 2 джойстика в разъеме 1 и + Функция PDL(11) проверяет, нажата ли кнопка 2 джойстика в разъеме 1, и возвращает 255 ("истина"), если кнопка не нажата, или 0 ("ложь") - в про- тивном случае. - Функция PDL(12) проверяет, нажата ли кнопка 2 джойстика в разъеме 2 и + Функция PDL(12) проверяет, нажата ли кнопка 2 джойстика в разъеме 2, и возвращает 255 ("истина"), если кнопка не нажата, или 0 ("ложь") - в про- тивном случае. @@ -577,7 +541,7 @@ где: PAD ("pad"-"графический планшет") - служебное слово; N - арифметическое выражение, целая часть которого должна принад- лежать отрезку [0,7] (в противном случае последует сообщение об ошибке - "Illegal function call" . + "Illegal function call"). Функция PAD(N) считывает данные с графического планшета, подключенного к разъему для джойстика. Значение разъема 1 считываются при N, равном 1,2 или 3 , а с разъема 2 при N, равном 4,5,6 или 7. @@ -592,24 +556,21 @@ Однако функцию PAD() можно применять и в том случае, если у Вас нет графического планшета, но есть д ж о й с т и к. Функция PAD(0) проверяет, происходило ли перемещение в п е р е д ру- -коятки джойстика в разъеме 1 и возвращает 0 ("ложь"), если рукоятка не пе- +коятки джойстика в разъеме 1,и возвращает 0 ("ложь"), если рукоятка не пе- ремещалась, или -1 ("истина") - в противном случае. Функция PAD(3) проверяет, происходило ли перемещение в п р а в о ру- -коятки джойстика в разъеме 1 и возвращает 0 ("ложь"), если рукоятка не пе- +коятки джойстика в разъеме 1,и возвращает 0 ("ложь"), если рукоятка не пе- ремещалась, или -1 ("истина") - в противном случае. Функция PAD(4) проверяет, происходило ли перемещение в п е р е д ру- -коятки джойстика в разъеме 2 и возвращает 0 ("ложь"), если рукоятка не пе- +коятки джойстика в разъеме 2,и возвращает 0 ("ложь"), если рукоятка не пе- ремещалась, или -1 ("истина") - в противном случае. Функция PAD(7) проверяет, происходило ли перемещение в п р а в о ру- -коятки джойстика в разъеме 2 и возвращает 0 ("ложь"), если рукоятка не пе- +коятки джойстика в разъеме 2,и возвращает 0 ("ложь"), если рукоятка не пе- ремещалась, или -1 ("истина") - в противном случае. Функции PAD(1), PAD(2), PAD(5) и PAD(6) всегда возвращают значение 255. - - VII.2. П е р е х о д к п о д п р о г р а м м е п о с о б ы т и ю - Переход к подпрограмме по событию ( п р е р ы в а н и е в програм- ме пользователя) представляет собой особый тип условного перехода. Для выполнения "о б ы ч н о г о" условного перехода где-то в программе @@ -671,25 +632,21 @@ нию таких событий, как истечение определенного интервала времени, нажатие какой-либо клавиши F1÷F10, нажатие клавиш "CTRL"+"STOP" и т.п. Об этом и пойдет речь в следующих разделах. + ┌────────────────────────────────────────────────────────────────────────┐ -│ Перед тем, как выполнить программу, содержащую переход к подпрограм-│ -│мам по событию,не забудьте (если работаете на компьютере MSX-2) набрать │ -│ CALL NETEND │ +│ Перед тем как выполнить программу, содержащую переход к подпрограммам │ +│ по событию,не забудьте (если работаете на компьютере MSX-2) выполнить │ +│ команду CALL NETEND . │ └────────────────────────────────────────────────────────────────────────┘ - - VII.2.1. П е р е х о д п о к л ю ч у - Стоять я не могу... Мои колени слабеют... душно... Где ключи? Ключи, ключи мои... - А.С. Пушкин - - - MSX-BASIC включает в себя средство, позволяющее использовать функцио- -нальные клавиши не только для ввода некоторого слова, но и для прерывания -выполнения программы и вызова определенной подпрограммы. + А.Пушкин + Интерпретатор MSX-BASIC включает в себя средство, позволяющее использо- +вать функциональные клавиши не только для ввода некоторого слова,но и для +прерывания выполнения программы и вызова определенной подпрограммы. ┌────────────────────────────────┐ Оператор │ ON KEY GOSUB n1,n2,...,nk │ , └────────────────────────────────┘ @@ -720,7 +677,7 @@ циональной клавиши, для которой выполняется данный оператор. Иногда возникает необходимость временно оградить программу от прерыва- ний, вызываемых функциональными клавишами, и в то же время запомнить каж- -дое нажатие такой клавиши с тем, чтобы впоследствии можно было выполнить +дое нажатие такой клавиши, с тем чтобы впоследствии можно было выполнить все соответствующие вызовы подпрограммы. Это достигается с помощью опера- тора ┌──────────────────┐ │ KEY(k)STOP │ , @@ -731,7 +688,6 @@ таки будут реализованы, но не сразу, а только после выполнения оператора KEY(k)ON , вновь "активизирующего" эту клавишу. - П р и м е р ы. ───────────── α) 10 ON KEY GOSUB 100 β) 10 ON KEY GOSUB 100 @@ -744,28 +700,23 @@ 120 FOR I=10 TO 90 STEP 10 120 FOR I=10 TO 90 STEP 10 130 CIRCLE(120,100),I:NEXT I 130 CIRCLE(120,100),I:NEXT I 140 CLS:RETURN 30 140 CLS:RETURN 30 - γ) Наберите пример β), вставив строку: 135 IF I=50 THEN KEY(1)STOP . - Оператор ON KEY GOSUB позволяет легко организовывать "листание" закон- -ченных программных фрагментов во время выполнения программы, например, +ченных программных фрагментов во время выполнения программы; например, страницы справочной информации 1÷3 вызываются нажатием на клавиши "F1"÷"F3", демонстрационный пример выполняется при нажатии клавиши "F4", выход из программы - при нажатии клавиши "F5" и т.д. - VII.2.2. П е р е х о д п о в р е м е н н о м у и н т е р в а л у - ┌────────────────────────────┐ Оператор │ ON INTERVAL=α GOSUB n │ , └────────────────────────────┘ где: ON , INTERVAL ("интервал"), GOSUB- служебные слова; α - арифметическое выражение, целая часть значения которого принад- -лежит отрезку [1,65535]; - n - номер программной сроки, +лежит отрезку [1,65535]; n - номер программной сроки, назначает интервалы времени, равные INT(α)/60 секунд, через которые компьютер периодически передает управление подпрограмме,рас- @@ -778,7 +729,7 @@ └─────────────────────┘ "дезактивизируется" оператором ┌─────────────────────┐ - │ INTERVAL OFF │ , + │ INTERVAL OFF │ └─────────────────────┘ и временно "дезактивизируется" оператором ┌─────────────────────┐ @@ -788,7 +739,6 @@ убедитесь в том, что интервал INT(α)/60 не короче, чем время выполнения подпрограммы обработки, иначе она будет бесконечно вызывать саму себя,ибо в конце ее неявно выполняется оператор INTERVAL ON. - П р и м е р 1. Проследите за выполнением следующего фрагмента при K=1, ────────────── 2,6. 10 INPUT K:ON INTERVAL=K*60 GOSUB 80 @@ -797,7 +747,6 @@ 70 END 80 PRINT "Проверка":RETURN 100 FOR K=1 TO 7000:NEXT:RETURN - П р и м е р 2. "Секундомер"! ────────────── 5 INPUT "Сколько секунд отсчитать";K:ON INTERVAL=60 GOSUB 80:S=1:PRINТ @@ -806,10 +755,8 @@ 80 PRINT M;TAB(4) "мин";S;TAB(11) "сек":LOCATE POS(0),CSRLIN -1:S=S+1: IF S MOD 60=0 THEN J=0:LOCATE POS(0),CSRLIN:M=M+1:S=0 90 RETURN - Обработка интервала оказывается очень удобной в игровых программах,где нужно повторять какое-либо действие через одинаковые интервалы времени. - П р и м е р 3[76]. Данная программа позволяет наряду с вводом текста ────────────────── организовать отсчет времени ("часы") в правом верх- нем углу экрана. Заметим,что "опрос" клавиатуры выполняется с помощью фун- @@ -834,11 +781,10 @@ - VII.2.3. П е р е х о д по н а ж а т и ю к л а в и ш "CTRL"+"STOP" - + VII.2.3. П е р е х о д по н а ж а т и и к л а в и ш "CTRL"+"STOP" - ┌──────────────────────┐ - По оператору │ ON STOP GOSUB n │ , + По оператору ┌──────────────────────┐ + │ ON STOP GOSUB n │ , └──────────────────────┘ где: ON , STOP, GOSUB - служебные слова; n - номер программной строки; @@ -856,11 +802,9 @@ 80 PRINT"Вам уже ничего не поможет! Делайте, как подсказывают." 90 RETURN - На закуску отметим интересный факт: - + "На закуску" отметим интересный факт: 10 STOP ON:ON STOP GOSUB 50:FOR I=1 TO 5000:NEXT:END 50 POKE &HFBB0,1:RETURN '──▶ - Нажатие клавиш "CTRL"+"STOP" игнорируется. "Доступ" к тексту программы становится возможным, если одновременно нажать пять клавиш: "CTRL"+"GRAPH"+"SHIFT"+"1"+"3" или @@ -875,10 +819,8 @@ тельства в программу, выполняющуюся в Ваше отсутствие! - VII.2.4. П е р е х о д п о д ж о й с т и к у - Поговорим теперь об операторе перехода к подпрограмме по нажатию кноп- ки джойстика:┌────────────────────────────────────────────┐ │ ON STRIG GOSUB n[,n1][,n2][,n3][,n4] │ , @@ -895,7 +837,7 @@ n4 - номер первой строки подпрограммы, которой передается управле- ние при нажатии кнопки 2 джойстика 2. - Для того, чтобы переход к подпрограмме по джойстику был возможен, его + Для того чтобы переход к подпрограмме по джойстику был возможен, его можно подтвердить, отменить или приостановить соответственно операторами ┌─────────────────────────────────────────────┐ │ STRIG(k)ON , STRIG(k)OFF , STRIG(k)STOP │ , @@ -908,7 +850,6 @@ ответствующая кнопка джойстика. Переход к первому номеру строки из списка осуществляется в том случае, если нажата клавиша "пробел", ко второму- ес- ли нажата кнопка 1 джойстика 1 и т.д. - П р и м е р 1. ────────────── 5 STRIG(0) ON:STRIG(1) ON:STRIG(3) ON @@ -933,7 +874,6 @@ 260 'Анализ прерывания от джойстика 270 STRIG(0) OFF 280 PRINT "Ваша реакция":PRINT"=";TIME/60;"секунд":END - Пока выполняется подпрограмма,всякий новый сигнал от кнопки джойстика откладывается до окончания текущей обработки. После возврата управления из подпрограммы интерпретатор определит нали- @@ -950,7 +890,6 @@ └──────────────────┘ приостанавливает разрешение обработки прерываний по нажатию кнопки джой- стика, но сохраняет информацию о нажатии. - П р и м е р 3. Использование "встроенного" джойстика ! ────────────── 10 STRIG (0) ON:ON STRIG GOSUB 130:DEFINT A-Z @@ -992,11 +931,9 @@ 150 E=STRIG(1):IF B<10 THEN IF E=0 THEN RETURN ELSE 130 ELSE 140 - VII.2.5. О д н о в р е м е н н а я о б р а б о т к а с о б ы т и й р а з л и ч н ы х т и п о в - Обрадуем Вас: в одной программе допустима обработка нескольких событий различных типов! Однако для того, чтобы структура программы оставалась яс- ной, необходимо учитывать следующее: @@ -1006,7 +943,7 @@ то подпрограмма по завершении будет сразу же в ы з в а н а снова. Чтобы избежать этого, помещайте в начале подпрограммы оператор с о б ы т и е STOP или -оператор с о б ы т и е OFF . +оператор с о б ы т и е OFF ; 2) применение операторов с о б ы т и е OFF и с о б ы т и е STOP "очищает" от обработки прерываний определенные участки Вашей программы; @@ -1014,21 +951,20 @@ запоминается. ┌────────────────────────────────────────────────────────────────┐ │ Если же событие того же типа возникает еще раз, то компьютер │ - │ запоминает наступление только последнего события │ + │ запоминает наступление только последнего события │ ; └────────────────────────────────────────────────────────────────┘ 4) приоритет (в порядке убывания) при одновременном возникновении собы- -тий: α) обработка ошибок в программе пользователя - β) ON KEY GOSUB - γ) ON STOP GOSUB - δ) ON SPRITE GOSUB - σ) ON STRIG GOSUB - μ) ON INTERVAL GOSUB - Φ) прерывания в локальной сети +тий: α) обработка ошибок в программе пользователя; + β) ON KEY GOSUB ; + γ) ON STOP GOSUB ; + δ) ON SPRITE GOSUB ; + σ) ON STRIG GOSUB ; + μ) ON INTERVAL GOSUB ; + Φ) прерывания в локальной сети; Γ) другие прерывания. В заключение запомните, что использование в Вашей программе полдюжины (≈шесть!) операторов перехода к подпрограммам по событию может мгновенно завести в тупик любого, пытающегося разобраться в ней программиста! - П р и м е р [76]. Предположим, что Вы управляете космическим кораблем, ──────────────── который может перемещаться вверх и вниз. Вы можете обстреливать появившийся вражеский корабль, который также стреляет по Ва- @@ -1169,8 +1105,8 @@ - VII.3. И н и ц и а л и з а ц и я в MSX-BASIC + VII.3. И н и ц и а л и з а ц и я в MSX-BASIC При включении компьютера он приводится автоматически в некоторое исход- ное состояние (происходит его и н и ц и а л и з а ц и я) ; так, например, @@ -1184,13 +1120,12 @@ │ отключенном основном питании)! │ └─────────────────────────────────────────────────────────────────────┘ ┌──────────────────────┐ - 1. Оператор │ SET ADJUST(X,Y) │ + 1. Оператор │ SET ADJUST(X,Y) │ , └──────────────────────┘ где: SET ("установить"), ADJUST ("корректировка") - служебное слово; X и Y - арифметические выражения, целые части значений которых принадлежат отрезку [-7,8] (по умолчанию X=0,Y=0), регулирует положение используемой части экрана. - ┌──────────────────────────────────────────┐ 2. Оператор │ SET BEEP [з в у к][,г р о м к о с т ь] │ , └──────────────────────────────────────────┘ @@ -1203,7 +1138,6 @@ Любой из параметров может быть опущен (его значение совпадет со значе- нием, установленным ранее), причем, если опущен первый параметр, то запя- тая должна быть сохранена. - ┌─────────────────────────────────────────────┐ 3. Оператор │ SET TITLE ["з а г о л о в о к"][,ц в е т] │ , └─────────────────────────────────────────────┘ @@ -1215,7 +1149,6 @@ позволяет переопределять заголовок, возникающий на экране при включении компьютера. Если з а г о л о в о к имеет длину 6, то система будет "ожи- дать" нажатия любой клавиши после вывода заголовка на экран. - ┌─────────────────────────────────┐ 4. Оператор │ SET PASSWORD "п а р о л ь" │ , └─────────────────────────────────┘ @@ -1224,21 +1157,19 @@ жна превышать 255 ; позволяет ввести пароль, проверяемый всякий раз при включении компьютера. Если Вы забыли пароль, нажмите клавиши "STOP" и "GRAPH" при включении. - ┌──────────────────────────────────────┐ 5. Оператор │ SET PROMPT "п о д с к а з к а" │ , └──────────────────────────────────────┘ где: SET , PROMPT - служебные слова; п о д с к а з к а - значение строковой константы, длина которого не более 6 символов; -переопределяет подсказку Ok. +позволяет переопределить стандартную системную подсказку Ok. П р и м е ч а н и е. Можно сохранить результат действия только одного из операторов SET TITLE, SET PASSWORD или SET PROMPT: использованный послед- ним "замещает" предыдущий. Пользуясь этой возможностью, можно отменить пароль, вернуться к исход- ному заголовку, к подсказке "Ok". Достаточно ввести команду SET PROMPT "Ok" - ┌──────────────────────┐ 6. Оператор │ SET SCREEN │ , └──────────────────────┘ @@ -1248,7 +1179,6 @@ SCREEN, COLOR, KEY ON/OFF, WIDTH . Сохраняются только те параметры, которые могут вводиться в командном режиме: - режим экрана (0 или 1); ширина экрана (от 1 до 80, если режим экрана =0; от 1 до 32, если режим экрана =1); @@ -1264,11 +1194,8 @@ При включении компьютера неявно выполняются операторы SCREEN, COLOR, KEY ON/OFF и WIDTH, параметры которых были сохранены. - Мартобря 86 числа. - Н.В.Гоголь. Записки сумасшедшего - - + Н.Гоголь. Записки сумасшедшего ┌─────────────────────────────┐ 7. Оператор │ SET DATE "ММ/ДД/ГГ",[A] │ , └─────────────────────────────┘ @@ -1299,11 +1226,8 @@ причем секунды игнорируются. Учтите, что используя параметр А, всегда не- обходимо вводить вначале в р е м я , а лишь затем д а т у ! - Все врут календари. - А.С.Грибоедов. Горе от ума - - + А.Грибоедов. Горе от ума Для получения даты и времени MSX-BASIC предоставляет также еще два опе- ратора: ┌──────────────────────┐ 1) │ GET DATE Z$,[A] │ , @@ -1324,12 +1248,11 @@ Этот оператор присваивает значение времени переменной Z$ в формате "ЧЧ:ММ:СС". Команда GET TIME Z$,A возвращает значение, определяющее время подачи -подачи сигнала. +сигнала. Отметим, что подача сигнала не является автоматической. Для ее осуществ- ления необходимо использовать подпрограмму, сравнивающую текущие дату и -время с заданными параметром A,и в случае совпадения выдающую сигнал BEEP +время с заданными параметром A и в случае совпадения выдающую сигнал BEEP или определенное сообщение. - П р и м е р ы: ───────────── 1) set date "01/17/89" 2) set date "01/17/89",a @@ -1353,7 +1276,7 @@ 20:50:00 Ok 6) Ваш компьютер можно использовать и в бытовых целях. Если не хотите -опаздывать на свидание, пользуйтесь возможностями компьютеров MSX-2 !!! +опаздывать на свидания, пользуйтесь возможностями компьютеров MSX-2 ! 10 SET BEEP 3,4 20 SET TIME "22:30:45":SET DATE "01/17/89" 30 SET TIME "22:31:45",A:SET DATE "01/17/89",A @@ -1370,8 +1293,8 @@ именем A145333. Записанные ранее версии Вашей программы остаются в непри- косновенности! - VII.4. Р а б о т а с п р и н т е р о м + VII.4. Р а б о т а с п р и н т е р о м Вначале напомним известные Вам факты. С помощью оператора PRINT можно "печатать" на э к р а н е дисплея @@ -1383,7 +1306,6 @@ Установка печатающей головки в заданное место строки производится с по- мощью так называемого т а б у л я т о р а - команды TAB (его использова- ние в "обычном" операторе PRINT, конечно же, Вам известно). - П р и м е р 1. 10 FOR I=1 TO 50 ────────────── 20 LPRINT TAB(25-20*SIN(I/3));"Принтер!" 30 NEXT I @@ -1398,15 +1320,13 @@ └────────────────────────┘ - -VII.4.1. К о м а н д ы д л я у п р а в л е н и я т и п о м п е ч а т и - + VII.4.1. К о м а н д ы д л я у п р а в л е н и я + т и п о м п е ч а т и Эти команды используются для управления типом шрифта, шагом печати и "создания" специальных эффектов. - - 7.4.1.1. У п р а в л е н и е т и п о м ш р и ф т а + VII.4.1.1. У п р а в л е н и е т и п о м ш р и ф т а Взгляните на следующую таблицу: ┌───────────────────────────────────────┬────────────────────────────┐ @@ -1421,7 +1341,6 @@ По умолчанию (при включении питания) осуществляется печать с т а н- д а р т н ы м и символами. Отметим, что первые два кода о т м е н я ю т друг друга. - П р и м е р 2. ────────────── 10 LPRINT CHR$(27);"4":LPRINT "Данная строка напечатана италиком!" @@ -1432,7 +1351,7 @@ а строка 20 выключает его кодом CHR$(27);"5" . ┌────────────────────────────────────────────────────────────────────────┐ │ 4Буквы текста, напечатанного "и т а л и к о м", наклонены в п р а в о !5│ -│ 4"Италик" может использоваться для выделения некоторых букв и слов5 │ +│ 4"Италик" может использоваться для выделения некоторых букв и слов.5 │ └────────────────────────────────────────────────────────────────────────┘ Заметим, что к а ж д ы й тип шрифта может комбинироваться с любым из @@ -1440,6 +1359,7 @@ речь пойдет ниже. + VII.4.1.2. У п р а в л е н и е ш а г о м ш р и ф т а Для печати используются три плотности шага: @@ -1447,7 +1367,7 @@ э л и т е, у п л о т н е н н а я . Каждая из них может быть изменена с помощью команды расширения режима -печати, при этом шаг увеличивается в два раза (см. VII.4.1.3.). +печати, при этом шаг увеличивается в два раза (см. раздел VII.4.1.3.). Предлагаем Вашему вниманию таблицу: ┌─────────────────────┬────────────┬─────────────────┐ │ Плотность шага │ Знаки/дюйм │ Управляющий код │ @@ -1460,6 +1380,7 @@ ├─────────────────────┼────────────┼─────────────────┤ │У п л о т н е н н а я│ 17 │ CHR$(27);"Q" │ └─────────────────────┴────────────┴─────────────────┘ + Поговорим о шаге "ц и ц е р о". Команда, его устанавливающая, определя- ет максимальное число печатаемых колонок до 80 в печатающем устройстве де- сятидюймового типа (например, "Gemini-10XR") и до 136 - в печатающем уст- @@ -1475,7 +1396,6 @@ также устанавливает максимальное число печатаемых колонок на 136 в печата- ющем устройстве десятидюймового типа и на 233 в печатающем устройстве пят- надцатидюймового типа. - П р и м е р 3. ────────────── 10 LPRINT CHR$(27);"N":LPRINT "WHAT IS YOUR NAME?" @@ -1485,17 +1405,16 @@ 70 LPRINT CHR$(27);"Р" 80 LPRINT "PICA PITCH PRINTING IS PRINTER'S THIRD PITCH" run -N +\/e- WHAT IS YOUR NAME? -E +\/fe YOUR PRINTER PRINTS IN ELITE PITCH -Q +\/fc AS WELL AS CONDENSED, THE NARROOWEST PITCH -P +\/fn PICA PITCH PRINTING IS PRINTER'S THIRD PITCH -E +\/e Ok - П р и м е р 4. ────────────── 10 LPRINT CHR$(27);"P":GOSUB 100 @@ -1504,30 +1423,28 @@ 40 LPRINT CHR$(27);"N":GOSUB 100:END 100 LPRINT "Я Вас любил...":RETURN run -P +\/e- Я Вас любил... -E +\/fe Я Вас любил... -Q +\/fc Я Вас любил... -N +\/fn Я Вас любил... -E +\/e Ok - Различные типы плотности можно комбинировать с "италиком" и стандарт- ным шрифтом. - VII.4.1.3. С п е ц и а л ь н ы е р е ж и м ы п е ч а т и - - "M∗∗∗ сказал молодому человеку, который не + VII.4.1.3. С п е ц и а л ь н ы е р е ж и м ы п е ч а т и + ∗∗∗ + M сказал молодому человеку, который не замечал,что его любит женщина:"Вы еще так юны, что, видно, разбираете только круп- ный шрифт". - Себастьян Шамфор. Характеры и анекдоты - + С.Шамфор. Характеры и анекдоты Коды для р а с ш и р е н н о й печати ┌─────────────────────────────────────┬─────────────────┐ @@ -1540,7 +1457,6 @@ Режим расширенной печати можно комбинировать с различной плотностью ша- га. При этом каждый символ будет напечатан в два раза шире, чем это предусмотрено выбором плотности шага. - П р и м е р 5. ────────────── 10 LPRINT CHR$(14);"EXPANDED PICA PITCH" @@ -1549,15 +1465,15 @@ 60 LPRINT CHR$(27);"P";CHR$(15) 70 LPRINT "NOW WE ARE BACK TO UNEXPANDED PICA PRINTING" run -N +\/x EXPANDED PICA PITCH -E +\/fe EXPANDED ELITE PITCH -Q +\/fc EXPANDED CONDENSED PITCH -P +\/fn/x- NOW WE ARE BACK TO UNEXPANDED PICA PRINTING -E Ok + Ok Коды в ы д е л е н и я печати ┌────────────────────────────────┬──────────────────┐ @@ -1571,7 +1487,6 @@ ├────────────────────────────────┼──────────────────┤ │ Отмена выделенной печати │ CHR$(27);CHR$(34)│ └────────────────────────────────┴──────────────────┘ - Выделить текст можно д в у м я способами: α) используя двойную печать со смещением вниз (печать двойным ударом); β) используя двойную печать со смещением вправо (выделенная печать). @@ -1595,20 +1510,19 @@ 120 END 1000 LPRINT "БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго!":RETURN run -N +\/x БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! -4 +\/i БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! - +\/x- БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! -5 +\/i-/fn БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! -G +\/d БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! -H! +\/d-/e БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! -"E Ok - + Ok П р и м е р 7. ────────────── 10 LPRINT CHR$(27);"Q";"Миша";CHR$(27);"P";" + ";CHR$(27);"4";"Ирочка " @@ -1616,7 +1530,7 @@ араул";CHR$(27);CHR$(34) run QМишаP + 4Ирочка 5= !ЛЮБОВЬ !!!Q Караул" -c1E +\/fn/e/i-/x- Ok Коды для о д н о н а п р а в л е н н о й печати @@ -1631,7 +1545,6 @@ печивает с т р о г о вертикальное расположение символов и выравнивает печать вертикальных столбцов. После включения принтера устанавливается ре- жим двунаправленной печати, которая несколько быстрее однонаправленной. - П р и м е р 8. ────────────── 20 FOR I=1 TO 10:LPRINT "++++++++++++++++++++":NEXT I @@ -1646,7 +1559,6 @@ ├────────────────────────┼─────────────────┤ │ Отмена подчеркивания │ CHR$(27);"Y" │ └────────────────────────┴─────────────────┘ - П р и м е р 9. ────────────── 10 LPRINT CHR$(27);"Q" 'Уплотненный шаг включен @@ -1655,9 +1567,8 @@ 40 LPRINT CHR$(27);"X";" ПОДЧЕРКИВАНИЕМ";CHR$(27);"Y":END run QТекст можно выделитьX ПОДЧЕРКИВАНИЕМY -c1E +\/fn/e/i-/x- Ok - Использование кода ┌─────────────────┐ │ CHR$(27);"X" │ └─────────────────┘ @@ -1690,7 +1601,6 @@ печатью. Заметим, что команда о т м е н ы верхних и нижних индексов отключает и направленную печать, и двойной удар. - П р и м е р 10. ─────────────── 10 LPRINT "очень";CHR$(27);"s1";"полезная";CHR$(27);"s0";"ВОЗМОЖНОСТЬ"; @@ -1703,7 +1613,6 @@ VII.4.2. У п р а в л е н и е в е р т и к а л ь н о й п о з и ц и е й п е ч а т а ю щ е й г о л о в к и - 1. И з м е н е н и е в ы с о т ы с т р о к и ┌───────────────────────────────────────┬──────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ @@ -1722,7 +1631,7 @@ равной 6 строкам в дюйме. Однако для данного печатающего устройства можно установить высоту строки на любое требуемое значение. Это делается командой: - LPRINT CHR$(27);"T";"n1";"n2" + LPRINT CHR$(27);"T";"n1";"n2" , где n1 и n2 - цифры от 0 до 9, определяющие высоту строки в n/144 дюйма, величины n, n1 и n2 связаны при помощи формулы: ┌────────────┐ @@ -1741,12 +1650,10 @@ Приведем программу, "настраивающую" принтер на "очень мелкую" печать (она пригодится Вам для изготовления шпаргалок!) - П р и м е р 12.┌────────────────────────────────────────────────────┐ ─────────────── │ 10 LPRINT CHR$(27);"T07";CHR$(27);"s1";CHR$(27);"Q"│ └────────────────────────────────────────────────────┘ Имеется и другой управляющий код для задания высоты строки. - П р и м е р 13. ─────────────── 10 FOR I=1 TO 20 @@ -1757,6 +1664,7 @@ высоты. Попробуйте! 2. У п р а в л е н и е п е р е в о д о м с т р о к + ┌─────────────────────────────────────────┬─────────────────────────┐ │ Ф у н к ц и я │ Управляющий код │ ├─────────────────────────────────────────┼─────────────────────────┤ @@ -1769,11 +1677,12 @@ │ Подача бумаги на n строк без возврата │ CHR$(27);"a";CHR$(n) │ │ каретки │ │ └─────────────────────────────────────────┴─────────────────────────┘ + Эти коды применяются для перемещения бумаги относительно печатающей го- ловки. Возврат печатающей головки в исходную позицию (возврат каретки) произ- водится командой ┌───────────────────────┐ - │ LPRINT CHR$(13) │ + │ LPRINT CHR$(13) │ . └───────────────────────┘ При этом бумага не продвигается. "Получив" код CHR$(10), печатающее устройство продвигает бумагу в п е- @@ -1782,7 +1691,6 @@ строки примените команду:┌──────────────────────────┐ │ LPRINT CHR$(13);CHR$(10) │. └──────────────────────────┘ - П р и м е р 14. Сравните результаты работы командных строк: ─────────────── LPRINT "PROGRAM";CHR$(10);"BASIC" LPRINT "PROGRAM";CHR$(13);"BASIC" @@ -1798,9 +1706,8 @@ перемещает бумагу на n строк (используя высоту текущей строки) без пере- мещения печатающей головки. Однако это не изменяет текущее значение верти- кального положения табуляции. Отметим, что данную команду можно записать -и в таком виде: LPRINT CHR$(27);CHR$(97);CHR$(n) +и в таком виде: LPRINT CHR$(27);CHR$(97);CHR$(n) , где 97 - код символа "a". - П р и м е р 15. ─────────────── 10 LPRINT "LINE NUMBER 1.":LPRINT "LINE NUMBER 2."; @@ -1810,7 +1717,6 @@ печатающая головка при этом не перемещается. Следовательно, строка 40 пе- чатает сообщение начиная с колонки, в которой печатающая головка осталась в конце строки 20. - 3. У п р а в л е н и е с т р а н и ц а м и ┌───────────────────────────────────────┬──────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ @@ -1830,7 +1736,6 @@ приводит к перемещению печатающей головки в н и з в позицию следующей в е р т и к а л ь н о й метки табуляции или на верхнюю часть следующей страницы в порядке первоочередности нахождения. - П р и м е р 16. Перед тем как запустить программу, следует выключить ─────────────── печатающее устройство и отрегулировать бумагу таким образом, чтобы лист был на одном уровне с верхом направляющей ленты на пе- @@ -1846,7 +1751,6 @@ Как Вам известно, любой текст имеет правую и левую границу, называемые п о л я м и. - 1. Поговорим об у с т а н о в к е п о л е й ┌──────────────────────────────────┬────────────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ @@ -1878,8 +1782,7 @@ максимальная печатная позиция равна: α) для шага "ц и ц е р о" - 136, β) для шага "э л и т е" - 163 и - γ) для у п л о т н я е м о г о шага - 233. - + γ) для у п л о т н е н н о г о шага - 233. П р и м е р 17. Установка полей. ─────────────── 10 GOSUB 40 @@ -1904,6 +1807,7 @@ └─────────────────────────────────────────────────────────────────┘ 2. У с т а н о в к а г о р и з о н т а л ь н ы х м е т о к + ┌───────────────────────────────┬───────────────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ ├───────────────────────────────┼───────────────────────────────────────┤ @@ -1935,7 +1839,7 @@ Для перемещения печатающей головки в позицию следующей горизонтальной метки табуляции применяется команда ┌──────────────────┐ - │ LPRINT CHR$(9); │ + │ LPRINT CHR$(9); │ . └──────────────────┘ П р и м е р 18. Демонстрация использования горизонтальных меток. @@ -1947,7 +1851,6 @@ │ │ │ 8-я позиция 16-я позиция 24-я позиция Ok - β) POKE &HF418,1 Ok 10 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"THREE";CHR$(9);"FOUR" @@ -1957,14 +1860,13 @@ │ │ │ 10-я позиция 20-я позиция 30-я позиция Ok - γ) Установка позиции горизонтальной табуляции (установка положений ме- ток) осуществляется следующей командой: ┌───────────────────────────────────────────────────────────┐ - │ LPRINT CHR$(27);"(";"n11n12n13,n21n22n23,...nn1nn2nn3." │ + │ LPRINT CHR$(27);"(";"n11n12n13,n21n22n23,...nn1nn2nn3." │ . └───────────────────────────────────────────────────────────┘ При этом аннулируются все позиции текущей горизонтальной табуляции и уста- -навливает новые, определенные трехзначными числами. +навливаются новые, определенные трехзначными числами. POKE &HF418,1 Ok 10 LPRINT CHR$(27);"(";"008,016,024." @@ -1978,11 +1880,10 @@ Метки будут установлены в колонках 8, 16 и 24. Запятые в 10-Й строке используются для разделения цепочки меток, точка - для окончания определе- ния. - - δ) Для того, чтобы стереть часть горизонтальных меток из набора печата- + δ) Для того чтобы стереть часть горизонтальных меток из набора печата- ющего устройства, существует следующая команда: ┌───────────────────────────────────────────────────────────┐ - │ LPRINT CHR$(27);")";"n11n12n13,n21n22n23,...nn1nn2nn3." │ + │ LPRINT CHR$(27);")";"n11n12n13,n21n22n23,...nn1nn2nn3." │ . └───────────────────────────────────────────────────────────┘ По коду селективного стирания табуляции стираются позиции табуляции, определенной трехзначными номерами. @@ -2002,7 +1903,6 @@ └───────────────────────┘ использовании меток из набора принтера команда LPRINT CHR$(9) будет игно- рироваться. - 3. П р о ч и е к о м а н д ы д л я у п р а в л е н и я г о р и з о н т а л ь н о й п о з и ц и е й п е ч а т а ю щ е й г о л о в к и @@ -2026,7 +1926,7 @@ чечных позиций в п р а в о. При этом величина n должна принадлежать от- резку [0,479] и вычисляется по следующей формуле: ┌──────────────────────────────┐ - │ n = 1000·n1+100·n2+10·n3+n4 │ + │ n = 1000·n1+100·n2+10·n3+n4 │ . └──────────────────────────────┘ ┌─────────────────────┐ Команда │ LPRINT CHR$(8) │ @@ -2035,7 +1935,6 @@ ловка находится в исходной позиции, то команда игнорируется. Эта команда используется для печати дополнительных знаков. - VII.4.4. К о м а н д ы у п р а в л е н и я г р а ф и к о й Принтер можно использовать в качестве г р а ф о п о с т р о и т е л я, @@ -2045,7 +1944,6 @@ т р о в о й г р а ф и к и , позволяющий непосредственно управлять уда- ром к а ж д о г о штырька. Взгляните на следующую таблицу: - ┌───────────────────────────────┬─────────────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ ├───────────────────────────────┼─────────────────────────────────────┤ @@ -2065,13 +1963,9 @@ │ LPRINT CHR$(Двоичный код положения штырька); │ └───────────────────────────────────────────────┘ с указанием того, какие штырьки печатающей головки должны печатать. - - - Боюсь, что от объяснений все проигрывает,- сказал он. - Одни только результаты впечатляют гораздо больше. - Конан Дойль. Приключения клерка - - П р и м е р 19. + П р и м е р 19. А.Конан Дойль. Приключения клерка ─────────────── К о д ш т ы р ь к а &b00000001 ───▶ · @@ -2085,7 +1979,6 @@ ▲ ▲ ▲ ▲ │ │ │ │ &b11111111 &b01111110 &b00111100 &b00011000 - 10 LPRINT CHR$(27);"S";"0008"; 20 FOR T=1 TO 2:LPRINT CHR$(&B11111111);:NEXT 30 FOR T=1 TO 2:LPRINT CHR$(&B01111110);:NEXT @@ -2101,7 +1994,6 @@ ···· ·· Ok - П р и м е р 20. Программа печатает прямоугольник размерами ─────────────── 200 точек╳ 16 точек . 10 DATA &B00000001,&B10000000 @@ -2113,8 +2005,7 @@ Сделаешь раз по сто - вот и будет просто. - П.А. Федотов - + П.Федотов ┌───────────────────────────────────────────┐ Команда │ LPRINT CHR$(27);"V";"n1n2n3n4";CHR$(m) │, @@ -2148,6 +2039,7 @@ ├───────────────────────────────┼─────────────────────────────────────┤ │ Выполнение макрокоманды │ CHR$(27);"%" │ └───────────────────────────────┴─────────────────────────────────────┘ + Команда ┌──────────────────────────────────┐ │ LPRINT CHR$(27);"+";...;CHR$(0) │ └──────────────────────────────────┘ @@ -2155,15 +2047,15 @@ дой. Максимальное число символов в макрокоманде (не считая символов "+" и CHR$(0)) равно 16, в противном случае печатающее устройство будет реагиро- вать только на первые 16 символов макроопределения. + ┌──────────────────────────┐ Команда │ LPRINT CHR$(27);"%" │ └──────────────────────────┘ выполняет макрокоманду, которая предварительно была определена при помощи макроопределения. - После описания макроопределения, Вы можете использовать макрокоманду в -любой требуемый момент времени и печатающее устройство будет "делать" все, + После описания макроопределения Вы можете использовать макрокоманду в +любой требуемый момент времени,и печатающее устройство будет "делать" все, что Вы включили в макроопределение. - П р и м е р 22. Макроопределение для установки принтера в исходное ─────────────── положение всех стилей печати. 10 LPRINT CHR$(27);"+"; ' Начало макроопределения @@ -2176,11 +2068,9 @@ 90 LPRINT CHR$(27);"Y"; ' Отмена подчеркивания 100 LPRINT CHR$(27);"A" ' Высота строки =24/144 дюйма 110 LPRINT CHR$(0) ' Конец макроопределения - Печатающее устройство будет "помнить" об этом макроопределении до тех пор, пока не будет введено новое макроопределение! Теперь посмотрите, как можно использовать описанное макроопределение. - П р и м е р 23. Программа печатает всего одну строку, используя не- ─────────────── сколько различных стилей печати. Затем программная строка 50 позволяет вызвать макрокоманду, определенную в примере 21. @@ -2191,15 +2081,11 @@ 50 LPRINT CHR$(27);"%"; ' Вызов макрокоманды 60 LPRINT "TESTING FOUR, FIVE, SIX" - VII.4.6. Д р у г и е п о л е з н ы е к о м а н д ы - Все правила достойного поведения давным-давно известны, остановка за малым - за умением ими пользоваться. - Блез Паскаль. Мысли - - + Б.Паскаль. Мысли Предлагаем Вашему вниманию следующую таблицу: ┌──────────────────────────────────┬────────────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ @@ -2234,7 +2120,6 @@ └──────────────────────────────────────┘ где n1,n2,n3 - цифры от 0 до 9, приводит к повторению n раз (n=100·n1+10·n2+n3) символа с кодом m. - П р и м е р 24. α) LPRINT CHR$(27);"R120";"+" ─────────────── β) LPRINT CHR$(27);"R120";"+";CHR$(24) ┌────────────────────┐ {{tag> }}