-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas07-05.txt
432 lines (393 loc) · 38 KB
/
bas07-05.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
VII.4.3. У п р а в л е н и е г о р и з о н т а л ь н о й п о з и -
ц и е й п е ч а т а ю щ е й г о л о в к и
Как Вам известно, любой текст имеет правую и левую границу, называемые
п о л я м и.
1. Поговорим об у с т а н о в к е п о л е й
┌──────────────────────────────────┬────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├──────────────────────────────────┼────────────────────────────────────┤
│ Установка левого поля в колонке n│ CHR$(27);"L";"n1n2n3" │
├──────────────────────────────────┼────────────────────────────────────┤
│Установка правого поля в колонке n│ CHR$(27);"/";"n1n2n3" │
└──────────────────────────────────┴────────────────────────────────────┘
Команда ┌──────────────────────────────────┐
│ LPRINT CHR$(27);"L";"n1n2n3" │
└──────────────────────────────────┘
устанавливает позицию н а ч а л а строки, определенную трехзначным чис-
лом. Например, при выполнении команды
LPRINT CHR$(27);"L";"126"
л е в а я граница будет сдвинута на 126 символов.
Команда ┌──────────────────────────────────┐
│ LPRINT CHR$(27);"/";"n1n2n3" │
└──────────────────────────────────┘
устанавливает позицию к о н ц а строки, определенную трехзначным числом.
Например, при выполнении команды
LPRINT CHR$(27);"/";"065"
п р а в а я граница будет установлена на 65 символов.
Для печатающего устройства д е с я т и д ю й м о в о г о типа (напри-
мер, "Gemini-10XR") максимальная печатная позиция равна:
α) для шага "ц и ц е р о" - 80,
β) для шага "э л и т е" - 96, а
γ) для у п л о т н е н н о г о шага - 136.
Для печатающего устройства п я т н а д ц а т и д ю й м о в о г о типа
максимальная печатная позиция равна:
α) для шага "ц и ц е р о" - 136,
β) для шага "э л и т е" - 163 и
γ) для у п л о т н я е м о г о шага - 233.
П р и м е р 17. Установка полей.
───────────────
10 GOSUB 40
20 LPRINT CHR$(27);"L";"010";:LPRINT CHR$(27);"/";"070"
30 GOSUB 40:END
40 FOR I=1 TO 80:LPRINT "=";:NEXT I:RETURN
Подпрограмма осуществляет печать 80 символов"="в одной строке. При пер-
вом вызове подпрограммы все символы "=" печатаются в одной строке. Затем
строка 20 устанавливает левое и правое поля. Теперь, после обращения к
подпрограмме в строке 30, на одной строке уместятся лишь 60 символов, ос-
тальные будут напечатаны со следующей строки.
Для того, чтобы установить поля в исходное положение п о у м о л ч а-
н и ю , имеются две возможности:
α) Вы можете выключить и затем снова включить печатающее устройство;
β) установить поля равными значениям по умолчанию. Это означает, что Вы
должны установить левое поле на 0-й и правое поле на 80-й позиции на печа-
тающем устройстве д е с я т и д ю й м о в о г о типа или 136 - на печа-
тающем устройстве п я т н а д ц а т и д ю й м о в о г о типа.
┌─────────────────────────────────────────────────────────────────┐
│ Если изменять шаг печати после установки полей, поля не будут │
│ изменяться (количество символов в строке останется тем же)! │
└─────────────────────────────────────────────────────────────────┘
2. У с т а н о в к а г о р и з о н т а л ь н ы х м е т о к
┌───────────────────────────────┬───────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├───────────────────────────────┼───────────────────────────────────────┤
│ Перемещение на следующую гори-│ CHR$(9) │
│ зонтальную метку │ │
├───────────────────────────────┼───────────────────────────────────────┤
│ Установка положений горизон- │CHR$(27);"(";"n11n12n13,...,nn1nn2nn3."│
│ тальных меток │ │
├───────────────────────────────┼───────────────────────────────────────┤
│ Стирание установленных гори- │CHR$(27);")";"n11n12n13,...,nn1nn2nn3."│
│ зонтальных меток (селективное│ │
│ стирание меток) │ │
├───────────────────────────────┼───────────────────────────────────────┤
│ Стирание всех горизонтальных │ CHR$(27);"2" │
│ меток │ │
└───────────────────────────────┴───────────────────────────────────────┘
Версия MSX-BASIC предоставляет возможность использования двух режимов
работы с горизонтальными метками. Дело в том, что у компьютера и у принте-
ра р а з н ы й набор меток.
У компьютера метки располагаются строго через в о с е м ь позиций. У
принтера же сразу после его включения горизонтальные метки автоматически
устанавливаются через д е с я т ь печатных позиций. Кроме того, набор
меток печатающего устройства можно изменять программным путем.
Информация о том, из какого набора будут взяты горизонтальные метки та-
буляции, хранится в ячейке памяти с адресом &HF418. Если содержимое этой
ячейки равно нулю, то принтер будет работать с метками из набора компьюте-
ра. Если же содержимое ячейки памяти отлично от нуля,то печатающее устрой-
ство будет работать с горизонтальными метками из своего набора.
Для перемещения печатающей головки в позицию следующей горизонтальной
метки табуляции применяется команда
┌──────────────────┐
│ LPRINT CHR$(9); │
└──────────────────┘
П р и м е р 18. Демонстрация использования горизонтальных меток.
───────────────
α) 10 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"THREE";CHR$(9);"FOUR"
run
ONE TWO THREE FOUR
▲ ▲ ▲
│ │ │
8-я позиция 16-я позиция 24-я позиция
Ok
β) POKE &HF418,1
Ok
10 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"THREE";CHR$(9);"FOUR"
run
ONE TWO THREE FOUR
▲ ▲ ▲
│ │ │
10-я позиция 20-я позиция 30-я позиция
Ok
γ) Установка позиции горизонтальной табуляции (установка положений ме-
ток) осуществляется следующей командой:
┌───────────────────────────────────────────────────────────┐
│ LPRINT CHR$(27);"(";"n11n12n13,n21n22n23,...nn1nn2nn3." │
└───────────────────────────────────────────────────────────┘
При этом аннулируются все позиции текущей горизонтальной табуляции и уста-
навливает новые, определенные трехзначными числами.
POKE &HF418,1
Ok
10 LPRINT CHR$(27);"(";"008,016,024."
20 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"THREE";CHR$(9);"FOUR"
run
ONE TWO THREE FOUR
▲ ▲ ▲
│ │ │
8-я позиция 16-я позиция 24-я позиция
Ok
Метки будут установлены в колонках 8, 16 и 24. Запятые в 10-Й строке
используются для разделения цепочки меток, точка - для окончания определе-
ния.
δ) Для того, чтобы стереть часть горизонтальных меток из набора печата-
ющего устройства, существует следующая команда:
┌───────────────────────────────────────────────────────────┐
│ LPRINT CHR$(27);")";"n11n12n13,n21n22n23,...nn1nn2nn3." │
└───────────────────────────────────────────────────────────┘
По коду селективного стирания табуляции стираются позиции табуляции,
определенной трехзначными номерами.
POKE &HF418,1
Ok
10 LPRINT CHR$(27);"(";"008,016,024."
20 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"THREE";CHR$(9);"FOUR"
30 LPRINT CHR$(27);")";"016."
40 LPRINT "ONE";CHR$(9);"TWO";CHR$(9);"FOUR"
run
ONE TWO THREE FOUR
ONE TWO FOUR
Ok
В настоящей программе метки стираются в колонке 16.
┌───────────────────────┐
Если командой │ LPRINT CHR$(27);"2" │ Вы уберете все метки, то при
└───────────────────────┘
использовании меток из набора принтера команда LPRINT CHR$(9) будет игно-
рироваться.
3. П р о ч и е к о м а н д ы д л я у п р а в л е н и я
г о р и з о н т а л ь н о й п о з и ц и е й п е ч а т а ю щ е й
г о л о в к и
┌───────────────────────────────┬───────────────────────────────────────┐
│ Перемещение на n пробелов │ CHR$(27);"b";CHR$(n) │
├───────────────────────────────┼───────────────────────────────────────┤
│ Перемещение на n точек │ CHR$(27);"F";"n1n2n3n4" │
├───────────────────────────────┼───────────────────────────────────────┤
│ Смещение на один символ влево │ CHR$(8) │
└───────────────────────────────┴───────────────────────────────────────┘
┌───────────────────────────────┐
Команда │ LPRINT CHR$(27);"b";CHR$(n) │,
└───────────────────────────────┘
где n - целое число из отрезка [1,255], позволяет пропустить n печатных
позиций. Эта команда не изменяет текущего значения позиции горизонтальной
табуляции.
┌─────────────────────────────────┐
Команда │ LPRINT CHR$(27);"F";"n1n2n3n4" │,
└─────────────────────────────────┘
где n1,n2,n3,n4 - цифры от 0 до 9, перемещает печатающую головку на n то-
чечных позиций в п р а в о. При этом величина n должна принадлежать от-
резку [0,479] и вычисляется по следующей формуле:
┌──────────────────────────────┐
│ n = 1000·n1+100·n2+10·n3+n4 │
└──────────────────────────────┘
┌─────────────────────┐
Команда │ LPRINT CHR$(8) │
└─────────────────────┘
смещает печатающую головку на одну колонку в л е в о . Если печатная го-
ловка находится в исходной позиции, то команда игнорируется. Эта команда
используется для печати дополнительных знаков.
VII.4.4. К о м а н д ы у п р а в л е н и я г р а ф и к о й
Принтер можно использовать в качестве г р а ф о п о с т р о и т е л я,
т.е. устройства, которое позволяет вывести на печать рисунки, графики и
т.д. Дело в том, что принтер печатает восемью штырьками печатающей голов-
ки. Каждый штырек печатает о д н у точку. Существует р е ж и м р а с -
т р о в о й г р а ф и к и , позволяющий непосредственно управлять уда-
ром к а ж д о г о штырька.
Взгляните на следующую таблицу:
┌───────────────────────────────┬─────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├───────────────────────────────┼─────────────────────────────────────┤
│ Печать растровой графики │ CHR$(27);"S";"n1n2n3n4" │
├───────────────────────────────┼─────────────────────────────────────┤
│ Повторение растровой графики │ CHR$(27);"V";"n1n2n3n4";CHR$(m) │
└───────────────────────────────┴─────────────────────────────────────┘
Режим р а с т р о в о й графики устанавливается командой
┌──────────────────────────────────┐
│ LPRINT CHR$(27);"S";"n1n2n3n4"; │ ,
└──────────────────────────────────┘
где n1,n2,n3,n4 - цифры от 0 до 9.
Если обозначить n - количество положений печатающей головки в строке
при растровой печати, то n=1000·n1+100·n2+10·n3+n4 .
На к а ж д о е такое положение нужно подать команду
┌───────────────────────────────────────────────┐
│ LPRINT CHR$(Двоичный код положения штырька); │
└───────────────────────────────────────────────┘
с указанием того, какие штырьки печатающей головки должны печатать.
- Боюсь, что от объяснений все проигрывает,- сказал он.
- Одни только результаты впечатляют гораздо больше.
Конан Дойль. Приключения клерка
П р и м е р 19.
───────────────
К о д ш т ы р ь к а
&b00000001 ───▶ ·
&b00000010 ───▶ · ·
&b00000100 ───▶ · · ·
&b00001000 ───▶ · · · ·
&b00010000 ───▶ · · · ·
&b00100000 ───▶ · · ·
&b01000000 ───▶ · ·
&b10000000 ───▶ ·
▲ ▲ ▲ ▲
│ │ │ │
&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
40 FOR T=1 TO 2:LPRINT CHR$(&B00111100);:NEXT
50 FOR T=1 TO 2:LPRINT CHR$(&B00011000);:NEXT
run
··
····
······
········
········
······
····
··
Ok
П р и м е р 20. Программа печатает прямоугольник размерами
─────────────── 200 точек╳ 16 точек .
10 DATA &B00000001,&B10000000
30 LPRINT CHR$(27);"T16"; 'Команда устранения пробелов между строками
40 FOR I=1 TO 2
50 LPRINT CHR$(27);"S0200";:LPRINT CHR$(255);:READ A
80 LPRINT STRING$(198,CHR$(A));:LPRINT CHR$(255)
100 NEXT I
Сделаешь раз по сто - вот и будет просто.
П.А. Федотов
┌───────────────────────────────────────────┐
Команда │ LPRINT CHR$(27);"V";"n1n2n3n4";CHR$(m) │,
└───────────────────────────────────────────┘
где n1,n2,n3,n4 - цифры от 0 до 9;
m - целое число, принадлежащее отрезку [0,255];
позволяет повторить N раз изображение вертикальной линии (8 точек),шаблон
которой устанавливается двоичным представлением числа m.
Величина N определяется по формуле:
N=1000·n1+100·n2+10·n3+n4
Отметим, что для выполнения этой команды н е требуется предваритель-
ной установки растровой печати.
П р и м е р 21. Результат действия следующих двух фрагментов одинаков!
───────────────
α) 10 LPRINT CHR$(27);"S";"0008";
20 FOR T=1 TO 8:LPRINT CHR$(&B11111111);:NEXT
β) 10 LPRINT CHR$(27);"V";"0008";CHR$(&B11111111)
VII.4.5. И с п о л ь з о в а н и е м а к р о к о м а н д
┌───────────────────────────────┬─────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├───────────────────────────────┼─────────────────────────────────────┤
│ Определение макрокоманды │ CHR$(27);"+";...;CHR$(0) │
│ (макроопределение) │ ▲ │
│ │ │ │
│ │ Совокупность команд │
├───────────────────────────────┼─────────────────────────────────────┤
│ Выполнение макрокоманды │ CHR$(27);"%" │
└───────────────────────────────┴─────────────────────────────────────┘
Команда ┌──────────────────────────────────┐
│ LPRINT CHR$(27);"+";...;CHR$(0) │
└──────────────────────────────────┘
отменяет существующую макрокоманду и заменяет ее определяемой макрокоман-
дой. Максимальное число символов в макрокоманде (не считая символов "+" и
CHR$(0)) равно 16, в противном случае печатающее устройство будет реагиро-
вать только на первые 16 символов макроопределения.
┌──────────────────────────┐
Команда │ LPRINT CHR$(27);"%" │
└──────────────────────────┘
выполняет макрокоманду, которая предварительно была определена при помощи
макроопределения.
После описания макроопределения, Вы можете использовать макрокоманду в
любой требуемый момент времени и печатающее устройство будет "делать" все,
что Вы включили в макроопределение.
П р и м е р 22. Макроопределение для установки принтера в исходное
─────────────── положение всех стилей печати.
10 LPRINT CHR$(27);"+"; ' Начало макроопределения
20 LPRINT CHR$(27);"P"; ' Шаг "цицеро"
30 LPRINT CHR$(15); ' Отмена расширенной печати
40 LPRINT CHR$(27);"H"; ' Отмена двойного удара
50 LPRINT CHR$(27);CHR$(34); ' Отмена выделенной печати
70 LPRINT CHR$(27);"s";"0"; ' Отмена индексов
80 LPRINT CHR$(27);"5"; ' Отмена шрифта "италик"
90 LPRINT CHR$(27);"Y"; ' Отмена подчеркивания
100 LPRINT CHR$(27);"A" ' Высота строки =24/144 дюйма
110 LPRINT CHR$(0) ' Конец макроопределения
Печатающее устройство будет "помнить" об этом макроопределении до тех
пор, пока не будет введено новое макроопределение!
Теперь посмотрите, как можно использовать описанное макроопределение.
П р и м е р 23. Программа печатает всего одну строку, используя не-
─────────────── сколько различных стилей печати. Затем программная
строка 50 позволяет вызвать макрокоманду, определенную в примере 21.
10 LPRINT CHR$(27);"4"; ' "Италик"
20 LPRINT CHR$(27);"G"; ' Двойной удар
30 LPRINT CHR$(14); ' Расширенная печать
40 LPRINT "TESTING ONE, TWO, THREE"
50 LPRINT CHR$(27);"%"; ' Вызов макрокоманды
60 LPRINT "TESTING FOUR, FIVE, SIX"
VII.4.6. Д р у г и е п о л е з н ы е к о м а н д ы
Все правила достойного поведения давным-давно известны,
остановка за малым - за умением ими пользоваться.
Блез Паскаль. Мысли
Предлагаем Вашему вниманию следующую таблицу:
┌──────────────────────────────────┬────────────────────────────────────┐
│ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │
├──────────────────────────────────┼────────────────────────────────────┤
│ Повторение символа │ CHR$(27);"R";"n1n2n3";CHR$(m) │
├──────────────────────────────────┼────────────────────────────────────┤
│ Отмена последней строки │ │
│ ("стирание" последней строки в │ CHR$(24) │
│ буфере) │ │
├──────────────────────────────────┼────────────────────────────────────┤
│ Установка печатающего устройства │ CHR$(19) │
│ в автономный режим ("OFF LINE") │ │
├──────────────────────────────────┼────────────────────────────────────┤
│ Установка печатающего устройства │ CHR$(17) │
│ в неавтономный режим ("ON LINE") │ │
├──────────────────────────────────┼────────────────────────────────────┤
│ Звучание звонка печатающего │ CHR$(7) │
│ устройства │ │
├──────────────────────────────────┼────────────────────────────────────┤
│ Выключение из работы детектора │ CHR$(27);"p";"0" │
│ отсутствия бумаги │ │
├──────────────────────────────────┼────────────────────────────────────┤
│ Включение в работу детектора │ CHR$(27);"p";"1" │
│ отсутствия бумаги │ │
├──────────────────────────────────┼────────────────────────────────────┤
│ Инициализация печатающего │ CHR$(27);"c";"1" │
│ устройства │ │
└──────────────────────────────────┴────────────────────────────────────┘
Выполнение команды повторения символа
┌──────────────────────────────────────┐
│ LPRINT CHR$(27);"R";"n1n2n3";CHR$(m) │ ,
└──────────────────────────────────────┘
где n1,n2,n3 - цифры от 0 до 9,
приводит к повторению n раз (n=100·n1+10·n2+n3) символа с кодом m.
П р и м е р 24. α) LPRINT CHR$(27);"R120";"+"
─────────────── β) LPRINT CHR$(27);"R120";"+";CHR$(24)
┌────────────────────┐
Команда │ LPRINT CHR$(19) │
└────────────────────┘
приводит к установке печатающего устройства в автономный режим. При этом
игнорируются все последующие символы и функциональные коды, кроме кода
CHR$(17) ,
который служит для возвращения печатающего устройства в режим "ON LINE".
Действие команды ┌────────────────────┐
│ LPRINT CHR$(17) │
└────────────────────┘
отличается от нажатия на кнопку "ON LINE", расположенную на принтере. Ког-
да горит лампочка "ON LINE", то печатающее устройство "игнорирует" код
CHR$(17).
┌─────────────────────┐
Команда │ LPRINT CHR$(7) │
└─────────────────────┘
"заставляет" печатающее устройство издавать звук в течение приблизительно
1/4 секунды.
┌───────────────────────────┐
Командой │ LPRINT CHR$(27);"p";"0" │
└───────────────────────────┘
отменяется сигнал, подаваемый детектором отсутствия бумаги. Сигнал отсут-
ствия бумаги обычно заставляет звучать звонок печатающего устройства и ос-
танавливает печать до тех пор, пока не будет вставлена бумага.
┌───────────────────────────┐
Команда │ LPRINT CHR$(27);"p";"1" │
└───────────────────────────┘
восстанавливает функции детектора отсутствия бумаги.
Команда и н и ц и а л и з а ц и и печатающего устройства
┌──────────────────────────┐
│ LPRINT CHR$(27);"c";"1" │
└──────────────────────────┘
повторно инициализирует печатающее устройство. Буфер печати при этом очи-
щается.