-c1E
+\/d
ГЛАВА VII. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ ЯЗЫКА MSX-BASIC
-
-
+\/d-
VII.1. РАБОТА С КЛАВИАТУРОЙ
-
VII.1.1. Н е с т а н д а р т н ы й в в о д с к л а в и а т у р ы
-
Как правило, ввод данных с клавиатуры пользователь осуществляет с помо-
щью оператора INPUT. При этом нужно нажать как минимум две клавиши: одну
для ввода символа и вторую для помещения его в память. При этом знак во-
в момент нажатия на какую-либо клавишу возвращает значение, равное вводи-
мому по ней символу. Если клавиша не нажата, то значением функции INKEY$
является пустая строка ("").
-
П р и м е р 1.
──────────────
10 W$=INKEY$:IF W$="" THEN 10 'Если клавиша не нажата, то компьютер пе-
█ ◀── нажата клавиша "STOP"
Break in 10 ◀── нажаты клавиши "CTRL"+"STOP"
Ok
-
При выполнении программы клавиатура постоянно опрашивается (сканирует-
ся), и полученные коды записываются в область памяти, называемую б у ф е-
р о м клавиатуры. Функция INKEY$, как Вы только что увидели, извлекает
С помощью функции 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$, можно получать десятичные
32 ◀── нажата клавиша "пробел" Break in 10◀── нажаты клавиши"CTRL"
█ ◀── нажата клавиша "STOP" Ok +"STOP"
49 ◀── нажата клавиша "SHIFT"+"1"
-
Таким образом, функциональные клавиши имеют ту особенность, что нажа-
тие любой из них вызывает вывод кодов нескольких символов, составляющих
ее текст.
│ Запомните, что только нажатие клавиш "CTRL"+"STOP" прерывает │
│ действие данной функции! │
└──────────────────────────────────────────────────────────────────┘
-
П р и м е р 4. 10 W$=INPUT$(2):?W$:GOTO 10
────────────── run
█
█
Break in 10 ◀── нажаты клавиши "CTRL"+"STOP"
Ok
-
Этот оператор неудобно использовать для ввода д л и н н ы х символь-
ных строк с клавиатуры, ибо Вы можете потерять контроль над вводом (вве-
денные символы не видны на экране до тех пор, пока не введен последний из
t │ серии MSX-1 █
│ 97 ◀── нажата клавиша "а"
█ и так далее... █ и так далее...
-
Таким образом, функцию INPUT$() можно также использовать для получения
десятичных кодов ASCII символов, а также десятичных кодов ASCII некоторых
управляющих и функциональных клавиш.
-
П р и м е р 6. П а р о л ь !
──────────────
40 CODE$="Секрет":COUNT=0:PRINT"Имя":INPUT N$
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" временно
│ Это единственный способ временно отключить клавишу "STOP" в MSX-BASIC!│
└───────────────────────────────────────────────────────────────────────┘
-
-
VII.1.2. Ф у н к ц и о н а л ь н ы е к л а в и ш и
-
При нажатии клавиши "F1" на дисплее компьютера серии MSX-1 появляется
слово "print" (как если бы оно набиралось на клавиатуре посимвольно). Ана-
логичным образом действует любая из остальных девяти функциональных кла-
что при нажатии соответствующей клавиши генерируется заранее заданная це-
почка символов. Этим средством является оператор
┌──────────────────┐
- │ KEY n,T │
+ │ KEY n,T │ ,
└──────────────────┘
где: KEY ("key"-"клавиша") - служебное слово;
n - арифметическое выражение, целая часть значения которого задает
··· │ 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
Предположим, что Вы хотите ввести большое количество двоичных чисел.
Это часто бывает необходимо при определении образа спрайта. Чтобы облег-
чить себе работу, определите одну из функциональных клавиш так:
- KEY1,"DATA 00000000"+CHR$(13)
+ KEY1,"DATA 00000000"+CHR$(13) ,
а затем введите команду AUTO. Нажмите клавишу "F1" несколько раз для полу-
чения начальных "шаблонов" операторов DATA с последовательными номерами
строк. Вам остается только отредактировать те строки, в которых необходи-
мо заменить нули на единицы в нужных местах!
-
-
VII.1.3 Д ж о й с т и к
-
- Человеческая изобретательность ни в чем не проявляется
- так, как в играх.
- Из письма Г.В.Лейбница Б.Паскалю
-
-
+ Человеческая изобретательность ни в чем не
+ проявляется так, как в играх.
+ Из письма Г.Лейбница Б.Паскалю
В комплекте MSX-компьютера имеется два периферийных устройства для вво-
да информации, которые называются д ж о й с т и к а м и ("joy stick" -
"палочка радости").
где: STICK ("рукоятка")- служебное слово;
α - арифметическое выражение, целая часть значения которого принад-
лежит отрезку [0,2] и задает номер джойстика.
-
1 Эта функция возвращает целое число, принадлежащее
8 ▲ 2 отрезку [0,8] и отмечающее направление перемещения ру-
\ │ / коятки джойстика, номер которого определяется значени-
/ │ \ значения функции STICK() (когда джойстик находится в
6 ▼ 4 нейтральном положении, функция возвращает значение 0).
5
-
Говорят, что функция STICK(0) "читает" клавиши управления курсором,
функция STICK(1) "читает джойстик" в первом разъеме, функция STICK(2)
"читает джойстик"во втором разъеме.
▲ ▼
X=8, если нажаты одновременно клавиши │ и ◀──;
X=0, если не нажата ни одна из этих клавиш.
-
Например, если Вы запустите программу
10 D=STICK(0):LOCATE 18,11:PRINT D:GOTO 10
и будете нажимать клавиши управления курсором, то будете получать значе-
Функция STRIG() определяет, нажата или нет нужная Вам к н о п к а .
Формат функции STRIG() следующий:
┌─────────────┐
- │ STRIG(β) │
+ │ STRIG(β) │ ,
└─────────────┘
где: STRIG("Stick TRIGer"-"кнопка джойстика")- служебное слово:
β - арифметическое выражение, целая часть которого принадлежит от-
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
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
Обратите внимание, что если клавиша "пробел" нажата во время вывода ин-
INKEY$ реагирует на в с е предварительные нажатия. Сколько раз была на-
жата клавиша "пробел", столько раз и выполнится соответствующая команда.
+
+
П р и м е р 4. Ввод рисунков с клавиатуры при помощи "рукоятки" (кла-
────────────── виши управления курсором) и "кнопки" (клавиша "пробел")
встроенного "джойстика" с номером 0.
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
100 IF D=6 OR D=7 OR D=8 THEN X=X-1
110 RETURN'──▶
+
П р и м е р 5. А теперь настала очередь "настоящего" джойстика!
──────────────
α) 10 CLS:X=16:Y=11
а регистры 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 поместим
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 ; Подпрограмма, позволяющая
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
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 - служебное слово;
ки джойстика в разъеме 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 ("ложь") - в про-
тивном случае.
где: PAD ("pad"-"графический планшет") - служебное слово;
N - арифметическое выражение, целая часть которого должна принад-
лежать отрезку [0,7] (в противном случае последует сообщение об ошибке
- "Illegal function call" .
+ "Illegal function call").
Функция PAD(N) считывает данные с графического планшета, подключенного
к разъему для джойстика. Значение разъема 1 считываются при N, равном 1,2
или 3 , а с разъема 2 при N, равном 4,5,6 или 7.
Однако функцию 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. П е р е х о д к п о д п р о г р а м м е п о с о б ы т и ю
-
Переход к подпрограмме по событию ( п р е р ы в а н и е в програм-
ме пользователя) представляет собой особый тип условного перехода.
Для выполнения "о б ы ч н о г о" условного перехода где-то в программе
нию таких событий, как истечение определенного интервала времени, нажатие
какой-либо клавиши 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 │ ,
└────────────────────────────────┘
циональной клавиши, для которой выполняется данный оператор.
Иногда возникает необходимость временно оградить программу от прерыва-
ний, вызываемых функциональными клавишами, и в то же время запомнить каж-
-дое нажатие такой клавиши с тем, чтобы впоследствии можно было выполнить
+дое нажатие такой клавиши, с тем чтобы впоследствии можно было выполнить
все соответствующие вызовы подпрограммы. Это достигается с помощью опера-
тора ┌──────────────────┐
│ KEY(k)STOP │ ,
таки будут реализованы, но не сразу, а только после выполнения оператора
KEY(k)ON ,
вновь "активизирующего" эту клавишу.
-
П р и м е р ы.
─────────────
α) 10 ON KEY GOSUB 100 β) 10 ON KEY GOSUB 100
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 секунд,
через которые компьютер периодически передает управление подпрограмме,рас-
└─────────────────────┘
"дезактивизируется" оператором
┌─────────────────────┐
- │ INTERVAL OFF │ ,
+ │ INTERVAL OFF │
└─────────────────────┘
и временно "дезактивизируется" оператором
┌─────────────────────┐
убедитесь в том, что интервал INT(α)/60 не короче, чем время выполнения
подпрограммы обработки, иначе она будет бесконечно вызывать саму себя,ибо
в конце ее неявно выполняется оператор INTERVAL ON.
-
П р и м е р 1. Проследите за выполнением следующего фрагмента при K=1,
────────────── 2,6.
10 INPUT K:ON INTERVAL=K*60 GOSUB 80
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Т
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]. Данная программа позволяет наряду с вводом текста
────────────────── организовать отсчет времени ("часы") в правом верх-
нем углу экрана. Заметим,что "опрос" клавиатуры выполняется с помощью фун-
- VII.2.3. П е р е х о д по н а ж а т и ю к л а в и ш "CTRL"+"STOP"
-
+ VII.2.3. П е р е х о д по н а ж а т и и к л а в и ш "CTRL"+"STOP"
- ┌──────────────────────┐
- По оператору │ ON STOP GOSUB n │ ,
+ По оператору ┌──────────────────────┐
+ │ ON STOP GOSUB n │ ,
└──────────────────────┘
где: ON , STOP, GOSUB - служебные слова;
n - номер программной строки;
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" или
тельства в программу, выполняющуюся в Ваше отсутствие!
-
VII.2.4. П е р е х о д п о д ж о й с т и к у
-
Поговорим теперь об операторе перехода к подпрограмме по нажатию кноп-
ки джойстика:┌────────────────────────────────────────────┐
│ ON STRIG GOSUB n[,n1][,n2][,n3][,n4] │ ,
n4 - номер первой строки подпрограммы, которой передается управле-
ние при нажатии кнопки 2 джойстика 2.
- Для того, чтобы переход к подпрограмме по джойстику был возможен, его
+ Для того чтобы переход к подпрограмме по джойстику был возможен, его
можно подтвердить, отменить или приостановить соответственно операторами
┌─────────────────────────────────────────────┐
│ STRIG(k)ON , STRIG(k)OFF , STRIG(k)STOP │ ,
ответствующая кнопка джойстика. Переход к первому номеру строки из списка
осуществляется в том случае, если нажата клавиша "пробел", ко второму- ес-
ли нажата кнопка 1 джойстика 1 и т.д.
-
П р и м е р 1.
──────────────
5 STRIG(0) ON:STRIG(1) ON:STRIG(3) ON
260 'Анализ прерывания от джойстика
270 STRIG(0) OFF
280 PRINT "Ваша реакция":PRINT"=";TIME/60;"секунд":END
-
Пока выполняется подпрограмма,всякий новый сигнал от кнопки джойстика
откладывается до окончания текущей обработки.
После возврата управления из подпрограммы интерпретатор определит нали-
└──────────────────┘
приостанавливает разрешение обработки прерываний по нажатию кнопки джой-
стика, но сохраняет информацию о нажатии.
-
П р и м е р 3. Использование "встроенного" джойстика !
──────────────
10 STRIG (0) ON:ON STRIG GOSUB 130:DEFINT A-Z
150 E=STRIG(1):IF B<10 THEN IF E=0 THEN RETURN ELSE 130 ELSE 140
-
VII.2.5. О д н о в р е м е н н а я о б р а б о т к а
с о б ы т и й р а з л и ч н ы х т и п о в
-
Обрадуем Вас: в одной программе допустима обработка нескольких событий
различных типов! Однако для того, чтобы структура программы оставалась яс-
ной, необходимо учитывать следующее:
то подпрограмма по завершении будет сразу же в ы з в а н а снова. Чтобы
избежать этого, помещайте в начале подпрограммы оператор
с о б ы т и е STOP или
-оператор с о б ы т и е OFF .
+оператор с о б ы т и е OFF ;
2) применение операторов
с о б ы т и е OFF и с о б ы т и е STOP
"очищает" от обработки прерываний определенные участки Вашей программы;
запоминается.
┌────────────────────────────────────────────────────────────────┐
│ Если же событие того же типа возникает еще раз, то компьютер │
- │ запоминает наступление только последнего события │
+ │ запоминает наступление только последнего события │ ;
└────────────────────────────────────────────────────────────────┘
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]. Предположим, что Вы управляете космическим кораблем,
──────────────── который может перемещаться вверх и вниз. Вы можете
обстреливать появившийся вражеский корабль, который также стреляет по Ва-
- VII.3. И н и ц и а л и з а ц и я в MSX-BASIC
+ VII.3. И н и ц и а л и з а ц и я в MSX-BASIC
При включении компьютера он приводится автоматически в некоторое исход-
ное состояние (происходит его и н и ц и а л и з а ц и я) ; так, например,
│ отключенном основном питании)! │
└─────────────────────────────────────────────────────────────────────┘
┌──────────────────────┐
- 1. Оператор │ SET ADJUST(X,Y) │
+ 1. Оператор │ SET ADJUST(X,Y) │ ,
└──────────────────────┘
где: SET ("установить"), ADJUST ("корректировка") - служебное слово;
X и Y - арифметические выражения, целые части значений которых
принадлежат отрезку [-7,8] (по умолчанию X=0,Y=0),
регулирует положение используемой части экрана.
-
┌──────────────────────────────────────────┐
2. Оператор │ SET BEEP [з в у к][,г р о м к о с т ь] │ ,
└──────────────────────────────────────────┘
Любой из параметров может быть опущен (его значение совпадет со значе-
нием, установленным ранее), причем, если опущен первый параметр, то запя-
тая должна быть сохранена.
-
┌─────────────────────────────────────────────┐
3. Оператор │ SET TITLE ["з а г о л о в о к"][,ц в е т] │ ,
└─────────────────────────────────────────────┘
позволяет переопределять заголовок, возникающий на экране при включении
компьютера. Если з а г о л о в о к имеет длину 6, то система будет "ожи-
дать" нажатия любой клавиши после вывода заголовка на экран.
-
┌─────────────────────────────────┐
4. Оператор │ SET PASSWORD "п а р о л ь" │ ,
└─────────────────────────────────┘
жна превышать 255 ;
позволяет ввести пароль, проверяемый всякий раз при включении компьютера.
Если Вы забыли пароль, нажмите клавиши "STOP" и "GRAPH" при включении.
-
┌──────────────────────────────────────┐
5. Оператор │ SET PROMPT "п о д с к а з к а" │ ,
└──────────────────────────────────────┘
где: SET , PROMPT - служебные слова;
п о д с к а з к а - значение строковой константы, длина которого
не более 6 символов;
-переопределяет подсказку Ok.
+позволяет переопределить стандартную системную подсказку Ok.
П р и м е ч а н и е. Можно сохранить результат действия только одного из
операторов SET TITLE, SET PASSWORD или SET PROMPT: использованный послед-
ним "замещает" предыдущий.
Пользуясь этой возможностью, можно отменить пароль, вернуться к исход-
ному заголовку, к подсказке "Ok". Достаточно ввести команду
SET PROMPT "Ok"
-
┌──────────────────────┐
6. Оператор │ SET SCREEN │ ,
└──────────────────────┘
SCREEN, COLOR, KEY ON/OFF, WIDTH .
Сохраняются только те параметры, которые могут вводиться в командном
режиме:
-
режим экрана (0 или 1);
ширина экрана (от 1 до 80, если режим экрана =0;
от 1 до 32, если режим экрана =1);
При включении компьютера неявно выполняются операторы SCREEN, COLOR,
KEY ON/OFF и WIDTH, параметры которых были сохранены.
-
Мартобря 86 числа.
- Н.В.Гоголь. Записки сумасшедшего
-
-
+ Н.Гоголь. Записки сумасшедшего
┌─────────────────────────────┐
7. Оператор │ SET DATE "ММ/ДД/ГГ",[A] │ ,
└─────────────────────────────┘
причем секунды игнорируются. Учтите, что используя параметр А, всегда не-
обходимо вводить вначале в р е м я , а лишь затем д а т у !
-
Все врут календари.
- А.С.Грибоедов. Горе от ума
-
-
+ А.Грибоедов. Горе от ума
Для получения даты и времени MSX-BASIC предоставляет также еще два опе-
ратора: ┌──────────────────────┐
1) │ GET DATE Z$,[A] │ ,
Этот оператор присваивает значение времени переменной Z$ в формате
"ЧЧ:ММ:СС".
Команда GET TIME Z$,A возвращает значение, определяющее время подачи
-подачи сигнала.
+сигнала.
Отметим, что подача сигнала не является автоматической. Для ее осуществ-
ления необходимо использовать подпрограмму, сравнивающую текущие дату и
-время с заданными параметром A,и в случае совпадения выдающую сигнал BEEP
+время с заданными параметром A и в случае совпадения выдающую сигнал BEEP
или определенное сообщение.
-
П р и м е р ы:
─────────────
1) set date "01/17/89" 2) set date "01/17/89",a
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
именем A145333. Записанные ранее версии Вашей программы остаются в непри-
косновенности!
- VII.4. Р а б о т а с п р и н т е р о м
+ VII.4. Р а б о т а с п р и н т е р о м
Вначале напомним известные Вам факты.
С помощью оператора PRINT можно "печатать" на э к р а н е дисплея
Установка печатающей головки в заданное место строки производится с по-
мощью так называемого т а б у л я т о р а - команды TAB (его использова-
ние в "обычном" операторе PRINT, конечно же, Вам известно).
-
П р и м е р 1. 10 FOR I=1 TO 50
────────────── 20 LPRINT TAB(25-20*SIN(I/3));"Принтер!"
30 NEXT I
└────────────────────────┘
-
-VII.4.1. К о м а н д ы д л я у п р а в л е н и я т и п о м п е ч а т и
-
+ VII.4.1. К о м а н д ы д л я у п р а в л е н и я
+ т и п о м п е ч а т и
Эти команды используются для управления типом шрифта, шагом печати и
"создания" специальных эффектов.
-
- 7.4.1.1. У п р а в л е н и е т и п о м ш р и ф т а
+ VII.4.1.1. У п р а в л е н и е т и п о м ш р и ф т а
Взгляните на следующую таблицу:
┌───────────────────────────────────────┬────────────────────────────┐
По умолчанию (при включении питания) осуществляется печать с т а н-
д а р т н ы м и символами. Отметим, что первые два кода о т м е н я ю т
друг друга.
-
П р и м е р 2.
──────────────
10 LPRINT CHR$(27);"4":LPRINT "Данная строка напечатана италиком!"
а строка 20 выключает его кодом CHR$(27);"5" .
┌────────────────────────────────────────────────────────────────────────┐
│ 4Буквы текста, напечатанного "и т а л и к о м", наклонены в п р а в о !5│
-│ 4"Италик" может использоваться для выделения некоторых букв и слов5 │
+│ 4"Италик" может использоваться для выделения некоторых букв и слов.5 │
└────────────────────────────────────────────────────────────────────────┘
Заметим, что к а ж д ы й тип шрифта может комбинироваться с любым из
речь пойдет ниже.
+
VII.4.1.2. У п р а в л е н и е ш а г о м ш р и ф т а
Для печати используются три плотности шага:
э л и т е,
у п л о т н е н н а я .
Каждая из них может быть изменена с помощью команды расширения режима
-печати, при этом шаг увеличивается в два раза (см. VII.4.1.3.).
+печати, при этом шаг увеличивается в два раза (см. раздел VII.4.1.3.).
Предлагаем Вашему вниманию таблицу:
┌─────────────────────┬────────────┬─────────────────┐
│ Плотность шага │ Знаки/дюйм │ Управляющий код │
├─────────────────────┼────────────┼─────────────────┤
│У п л о т н е н н а я│ 17 │ CHR$(27);"Q" │
└─────────────────────┴────────────┴─────────────────┘
+
Поговорим о шаге "ц и ц е р о". Команда, его устанавливающая, определя-
ет максимальное число печатаемых колонок до 80 в печатающем устройстве де-
сятидюймового типа (например, "Gemini-10XR") и до 136 - в печатающем уст-
также устанавливает максимальное число печатаемых колонок на 136 в печата-
ющем устройстве десятидюймового типа и на 233 в печатающем устройстве пят-
надцатидюймового типа.
-
П р и м е р 3.
──────────────
10 LPRINT CHR$(27);"N":LPRINT "WHAT IS YOUR NAME?"
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
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 сказал молодому человеку, который не
замечал,что его любит женщина:"Вы еще так
юны, что, видно, разбираете только круп-
ный шрифт".
- Себастьян Шамфор. Характеры и анекдоты
-
+ С.Шамфор. Характеры и анекдоты
Коды для р а с ш и р е н н о й печати
┌─────────────────────────────────────┬─────────────────┐
Режим расширенной печати можно комбинировать с различной плотностью ша-
га. При этом каждый символ будет напечатан в два раза шире,
чем это предусмотрено выбором плотности шага.
-
П р и м е р 5.
──────────────
10 LPRINT CHR$(14);"EXPANDED PICA PITCH"
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
Коды в ы д е л е н и я печати
┌────────────────────────────────┬──────────────────┐
├────────────────────────────────┼──────────────────┤
│ Отмена выделенной печати │ CHR$(27);CHR$(34)│
└────────────────────────────────┴──────────────────┘
-
Выделить текст можно д в у м я способами:
α) используя двойную печать со смещением вниз (печать двойным ударом);
β) используя двойную печать со смещением вправо (выделенная печать).
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";"Ирочка "
араул";CHR$(27);CHR$(34)
run
QМишаP + 4Ирочка 5= !ЛЮБОВЬ !!!Q Караул"
-c1E
+\/fn/e/i-/x-
Ok
Коды для о д н о н а п р а в л е н н о й печати
печивает с т р о г о вертикальное расположение символов и выравнивает
печать вертикальных столбцов. После включения принтера устанавливается ре-
жим двунаправленной печати, которая несколько быстрее однонаправленной.
-
П р и м е р 8.
──────────────
20 FOR I=1 TO 10:LPRINT "++++++++++++++++++++":NEXT I
├────────────────────────┼─────────────────┤
│ Отмена подчеркивания │ CHR$(27);"Y" │
└────────────────────────┴─────────────────┘
-
П р и м е р 9.
──────────────
10 LPRINT CHR$(27);"Q" 'Уплотненный шаг включен
40 LPRINT CHR$(27);"X";" ПОДЧЕРКИВАНИЕМ";CHR$(27);"Y":END
run
QТекст можно выделитьX ПОДЧЕРКИВАНИЕМY
-c1E
+\/fn/e/i-/x-
Ok
-
Использование кода ┌─────────────────┐
│ CHR$(27);"X" │
└─────────────────┘
печатью.
Заметим, что команда о т м е н ы верхних и нижних индексов отключает
и направленную печать, и двойной удар.
-
П р и м е р 10.
───────────────
10 LPRINT "очень";CHR$(27);"s1";"полезная";CHR$(27);"s0";"ВОЗМОЖНОСТЬ";
VII.4.2. У п р а в л е н и е в е р т и к а л ь н о й п о з и ц и е й
п е ч а т а ю щ е й г о л о в к и
-
1. И з м е н е н и е в ы с о т ы с т р о к и
┌───────────────────────────────────────┬──────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
равной 6 строкам в дюйме. Однако для данного печатающего устройства можно
установить высоту строки на любое требуемое значение.
Это делается командой:
- LPRINT CHR$(27);"T";"n1";"n2"
+ LPRINT CHR$(27);"T";"n1";"n2" ,
где n1 и n2 - цифры от 0 до 9, определяющие высоту строки в n/144 дюйма,
величины n, n1 и n2 связаны при помощи формулы:
┌────────────┐
Приведем программу, "настраивающую" принтер на "очень мелкую" печать
(она пригодится Вам для изготовления шпаргалок!)
-
П р и м е р 12.┌────────────────────────────────────────────────────┐
─────────────── │ 10 LPRINT CHR$(27);"T07";CHR$(27);"s1";CHR$(27);"Q"│
└────────────────────────────────────────────────────┘
Имеется и другой управляющий код для задания высоты строки.
-
П р и м е р 13.
───────────────
10 FOR I=1 TO 20
высоты. Попробуйте!
2. У п р а в л е н и е п е р е в о д о м с т р о к
+
┌─────────────────────────────────────────┬─────────────────────────┐
│ Ф у н к ц и я │ Управляющий код │
├─────────────────────────────────────────┼─────────────────────────┤
│ Подача бумаги на n строк без возврата │ CHR$(27);"a";CHR$(n) │
│ каретки │ │
└─────────────────────────────────────────┴─────────────────────────┘
+
Эти коды применяются для перемещения бумаги относительно печатающей го-
ловки.
Возврат печатающей головки в исходную позицию (возврат каретки) произ-
водится командой ┌───────────────────────┐
- │ LPRINT CHR$(13) │
+ │ LPRINT CHR$(13) │ .
└───────────────────────┘
При этом бумага не продвигается.
"Получив" код CHR$(10), печатающее устройство продвигает бумагу в п е-
строки примените команду:┌──────────────────────────┐
│ LPRINT CHR$(13);CHR$(10) │.
└──────────────────────────┘
-
П р и м е р 14. Сравните результаты работы командных строк:
─────────────── LPRINT "PROGRAM";CHR$(10);"BASIC"
LPRINT "PROGRAM";CHR$(13);"BASIC"
перемещает бумагу на 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.";
печатающая головка при этом не перемещается. Следовательно, строка 40 пе-
чатает сообщение начиная с колонки, в которой печатающая головка осталась
в конце строки 20.
-
3. У п р а в л е н и е с т р а н и ц а м и
┌───────────────────────────────────────┬──────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
приводит к перемещению печатающей головки в н и з в позицию следующей
в е р т и к а л ь н о й метки табуляции или на верхнюю часть следующей
страницы в порядке первоочередности нахождения.
-
П р и м е р 16. Перед тем как запустить программу, следует выключить
─────────────── печатающее устройство и отрегулировать бумагу таким
образом, чтобы лист был на одном уровне с верхом направляющей ленты на пе-
Как Вам известно, любой текст имеет правую и левую границу, называемые
п о л я м и.
-
1. Поговорим об у с т а н о в к е п о л е й
┌──────────────────────────────────┬────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
максимальная печатная позиция равна:
α) для шага "ц и ц е р о" - 136,
β) для шага "э л и т е" - 163 и
- γ) для у п л о т н я е м о г о шага - 233.
-
+ γ) для у п л о т н е н н о г о шага - 233.
П р и м е р 17. Установка полей.
───────────────
10 GOSUB 40
└─────────────────────────────────────────────────────────────────┘
2. У с т а н о в к а г о р и з о н т а л ь н ы х м е т о к
+
┌───────────────────────────────┬───────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├───────────────────────────────┼───────────────────────────────────────┤
Для перемещения печатающей головки в позицию следующей горизонтальной
метки табуляции применяется команда
┌──────────────────┐
- │ LPRINT CHR$(9); │
+ │ LPRINT CHR$(9); │ .
└──────────────────┘
П р и м е р 18. Демонстрация использования горизонтальных меток.
│ │ │
8-я позиция 16-я позиция 24-я позиция
Ok
-
β) POKE &HF418,1
Ok
10 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"THREE";CHR$(9);"FOUR"
│ │ │
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."
Метки будут установлены в колонках 8, 16 и 24. Запятые в 10-Й строке
используются для разделения цепочки меток, точка - для окончания определе-
ния.
-
- δ) Для того, чтобы стереть часть горизонтальных меток из набора печата-
+ δ) Для того чтобы стереть часть горизонтальных меток из набора печата-
ющего устройства, существует следующая команда:
┌───────────────────────────────────────────────────────────┐
- │ LPRINT CHR$(27);")";"n11n12n13,n21n22n23,...nn1nn2nn3." │
+ │ LPRINT CHR$(27);")";"n11n12n13,n21n22n23,...nn1nn2nn3." │ .
└───────────────────────────────────────────────────────────┘
По коду селективного стирания табуляции стираются позиции табуляции,
определенной трехзначными номерами.
└───────────────────────┘
использовании меток из набора принтера команда LPRINT CHR$(9) будет игно-
рироваться.
-
3. П р о ч и е к о м а н д ы д л я у п р а в л е н и я
г о р и з о н т а л ь н о й п о з и ц и е й п е ч а т а ю щ е й
г о л о в к и
чечных позиций в п р а в о. При этом величина n должна принадлежать от-
резку [0,479] и вычисляется по следующей формуле:
┌──────────────────────────────┐
- │ n = 1000·n1+100·n2+10·n3+n4 │
+ │ n = 1000·n1+100·n2+10·n3+n4 │ .
└──────────────────────────────┘
┌─────────────────────┐
Команда │ LPRINT CHR$(8) │
ловка находится в исходной позиции, то команда игнорируется. Эта команда
используется для печати дополнительных знаков.
-
VII.4.4. К о м а н д ы у п р а в л е н и я г р а ф и к о й
Принтер можно использовать в качестве г р а ф о п о с т р о и т е л я,
т р о в о й г р а ф и к и , позволяющий непосредственно управлять уда-
ром к а ж д о г о штырька.
Взгляните на следующую таблицу:
-
┌───────────────────────────────┬─────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├───────────────────────────────┼─────────────────────────────────────┤
│ LPRINT CHR$(Двоичный код положения штырька); │
└───────────────────────────────────────────────┘
с указанием того, какие штырьки печатающей головки должны печатать.
-
-
- Боюсь, что от объяснений все проигрывает,- сказал он.
- Одни только результаты впечатляют гораздо больше.
- Конан Дойль. Приключения клерка
-
- П р и м е р 19.
+ П р и м е р 19. А.Конан Дойль. Приключения клерка
───────────────
К о д ш т ы р ь к а
&b00000001 ───▶ ·
▲ ▲ ▲ ▲
│ │ │ │
&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
····
··
Ok
-
П р и м е р 20. Программа печатает прямоугольник размерами
─────────────── 200 точек╳ 16 точек .
10 DATA &B00000001,&B10000000
Сделаешь раз по сто - вот и будет просто.
- П.А. Федотов
-
+ П.Федотов
┌───────────────────────────────────────────┐
Команда │ LPRINT CHR$(27);"V";"n1n2n3n4";CHR$(m) │,
├───────────────────────────────┼─────────────────────────────────────┤
│ Выполнение макрокоманды │ CHR$(27);"%" │
└───────────────────────────────┴─────────────────────────────────────┘
+
Команда ┌──────────────────────────────────┐
│ LPRINT CHR$(27);"+";...;CHR$(0) │
└──────────────────────────────────┘
дой. Максимальное число символов в макрокоманде (не считая символов "+" и
CHR$(0)) равно 16, в противном случае печатающее устройство будет реагиро-
вать только на первые 16 символов макроопределения.
+
┌──────────────────────────┐
Команда │ LPRINT CHR$(27);"%" │
└──────────────────────────┘
выполняет макрокоманду, которая предварительно была определена при помощи
макроопределения.
- После описания макроопределения, Вы можете использовать макрокоманду в
-любой требуемый момент времени и печатающее устройство будет "делать" все,
+ После описания макроопределения Вы можете использовать макрокоманду в
+любой требуемый момент времени,и печатающее устройство будет "делать" все,
что Вы включили в макроопределение.
-
П р и м е р 22. Макроопределение для установки принтера в исходное
─────────────── положение всех стилей печати.
10 LPRINT CHR$(27);"+"; ' Начало макроопределения
90 LPRINT CHR$(27);"Y"; ' Отмена подчеркивания
100 LPRINT CHR$(27);"A" ' Высота строки =24/144 дюйма
110 LPRINT CHR$(0) ' Конец макроопределения
-
Печатающее устройство будет "помнить" об этом макроопределении до тех
пор, пока не будет введено новое макроопределение!
Теперь посмотрите, как можно использовать описанное макроопределение.
-
П р и м е р 23. Программа печатает всего одну строку, используя не-
─────────────── сколько различных стилей печати. Затем программная
строка 50 позволяет вызвать макрокоманду, определенную в примере 21.
50 LPRINT CHR$(27);"%"; ' Вызов макрокоманды
60 LPRINT "TESTING FOUR, FIVE, SIX"
-
VII.4.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)
┌────────────────────┐