VII.4. Р а б о т а с п р и н т е р о м Вначале напомним известные Вам факты. С помощью оператора PRINT можно "печатать" на э к р а н е дисплея текст в любом месте экрана (ему"активно помогает" в этом оператор LOCATE). При печати на б у м а г е оператора, аналогичного LOCATE, нет. Более того, при печати нельзя возвращаться в предыдущие строки (прогон бумаги осуществляется только в п е р е д). Возврат в начало текущей строки из ее конца в о з м о ж е н . Установка печатающей головки в заданное место строки производится с по- мощью так называемого т а б у л я т о р а - команды TAB (его использова- ние в "обычном" операторе PRINT, конечно же, Вам известно). П р и м е р 1. 10 FOR I=1 TO 50 ────────────── 20 LPRINT TAB(25-20*SIN(I/3));"Принтер!" 30 NEXT I Арифметическое выражение, задающее номер позиции печатающей головки, указывается после служебного слова TAB в скобках и значение его целой час- ти не должно превосходить 255. Использование в команде LPRINT специальных управляющих кодов и функции CHR$ позволяет управлять принтером, например, менять вид шрифта, его плот- ность и высоту. И наконец, ┌────────────────────────┐ │ 1 дюйм ≈ 2,54 см │ └────────────────────────┘ VII.4.1. К о м а н д ы д л я у п р а в л е н и я т и п о м п е ч а т и Эти команды используются для управления типом шрифта, шагом печати и "создания" специальных эффектов. 7.4.1.1. У п р а в л е н и е т и п о м ш р и ф т а Взгляните на следующую таблицу: ┌───────────────────────────────────────┬────────────────────────────┐ │ Ф у н к ц и я │У п р а в л я ю щ и й к о д│ ├───────────────────────────────────────┼────────────────────────────┤ │ Установка стандартных символов │ CHR$(27);"5" │ ├───────────────────────────────────────┼────────────────────────────┤ │ Установка наклонной печати ("италик") │ CHR$(27);"4" │ ├───────────────────────────────────────┼────────────────────────────┤ │ Печать графического символа MSX │ CHR$(1);CHR$(Код символа) │ └───────────────────────────────────────┴────────────────────────────┘ По умолчанию (при включении питания) осуществляется печать с т а н- д а р т н ы м и символами. Отметим, что первые два кода о т м е н я ю т друг друга. П р и м е р 2. ────────────── 10 LPRINT CHR$(27);"4":LPRINT "Данная строка напечатана италиком!" 20 LPRINT CHR$(27);"5":LPRINT "Эта строка напечатана стандартным шрифтом" Строка 10 включает тип шрифта "и т а л и к" с помощью кода CHR$(27);"4" , а строка 20 выключает его кодом CHR$(27);"5" . ┌────────────────────────────────────────────────────────────────────────┐ │ 4Буквы текста, напечатанного "и т а л и к о м", наклонены в п р а в о !5│ │ 4"Италик" может использоваться для выделения некоторых букв и слов5 │ └────────────────────────────────────────────────────────────────────────┘ Заметим, что к а ж д ы й тип шрифта может комбинироваться с любым из трех шагов шрифта, а также с расширенной и выделенной печатью, о которых речь пойдет ниже. VII.4.1.2. У п р а в л е н и е ш а г о м ш р и ф т а Для печати используются три плотности шага: ц и ц е р о ( н о р м а л ь н а я ), э л и т е, у п л о т н е н н а я . Каждая из них может быть изменена с помощью команды расширения режима печати, при этом шаг увеличивается в два раза (см. VII.4.1.3.). Предлагаем Вашему вниманию таблицу: ┌─────────────────────┬────────────┬─────────────────┐ │ Плотность шага │ Знаки/дюйм │ Управляющий код │ ├─────────────────────┼────────────┼─────────────────┤ │ Ц и ц е р о │ 10 │ CHR$(27);"P" │ ├─────────────────────┼────────────┼─────────────────┤ │ Ц и ц е р о │ 10 │ CHR$(27);"N" │ ├─────────────────────┼────────────┼─────────────────┤ │ Э л и т е │ 12 │ CHR$(27);"E" │ ├─────────────────────┼────────────┼─────────────────┤ │У п л о т н е н н а я│ 17 │ CHR$(27);"Q" │ └─────────────────────┴────────────┴─────────────────┘ Поговорим о шаге "ц и ц е р о". Команда, его устанавливающая, определя- ет максимальное число печатаемых колонок до 80 в печатающем устройстве де- сятидюймового типа (например, "Gemini-10XR") и до 136 - в печатающем уст- ройстве пятнадцатидюймового типа. При этом плотность шага устанавливается равной 10 знакам на дюйм в режиме печати текста и 160 точкам на дюйм в ре- жиме р а с т р о в о й (точечной) графики (о ней мы расскажем ниже). Немного об "э л и т е". Выбор этого шага устанавливает максимальное чи- сло печатаемых колонок до 96 в печатающем устройстве десятидюймового типа и до 163 в печатающем устройстве пятнадцатидюймового типа. В режиме рас- тровой печати плотность шага устанавливается равной 90 точкам на дюйм. Установка у п л о т н е н н о й печати приводит к тому,что вся после- дующая печать выполняется с плотностью 17 знакам на дюйм. Данная команда также устанавливает максимальное число печатаемых колонок на 136 в печата- ющем устройстве десятидюймового типа и на 233 в печатающем устройстве пят- надцатидюймового типа. П р и м е р 3. ────────────── 10 LPRINT CHR$(27);"N":LPRINT "WHAT IS YOUR NAME?" 30 LPRINT CHR$(27);"E":LPRINT "YOUR PRINTER PRINTS IN ELITE PITCH" 50 LPRINT CHR$(27);"Q":LPRINT "AS WELL AS CONDENSED, THE NARROOWEST PI TCH" 70 LPRINT CHR$(27);"Р" 80 LPRINT "PICA PITCH PRINTING IS PRINTER'S THIRD PITCH" run N WHAT IS YOUR NAME? E YOUR PRINTER PRINTS IN ELITE PITCH Q AS WELL AS CONDENSED, THE NARROOWEST PITCH P PICA PITCH PRINTING IS PRINTER'S THIRD PITCH E Ok П р и м е р 4. ────────────── 10 LPRINT CHR$(27);"P":GOSUB 100 20 LPRINT CHR$(27);"E":GOSUB 100 30 LPRINT CHR$(27);"Q":GOSUB 100 40 LPRINT CHR$(27);"N":GOSUB 100:END 100 LPRINT "Я Вас любил...":RETURN run P Я Вас любил... E Я Вас любил... Q Я Вас любил... N Я Вас любил... E Ok Различные типы плотности можно комбинировать с "италиком" и стандарт- ным шрифтом. VII.4.1.3. С п е ц и а л ь н ы е р е ж и м ы п е ч а т и "M∗∗∗ сказал молодому человеку, который не замечал,что его любит женщина:"Вы еще так юны, что, видно, разбираете только круп- ный шрифт". Себастьян Шамфор. Характеры и анекдоты Коды для р а с ш и р е н н о й печати ┌─────────────────────────────────────┬─────────────────┐ │ Ф у н к ц и я │ Управляющий код │ ├─────────────────────────────────────┼─────────────────┤ │ Установка режима расширенной печати │ CHR$(14) │ ├─────────────────────────────────────┼─────────────────┤ │ Отмена режима расширенной печати │ CHR$(15) │ └─────────────────────────────────────┴─────────────────┘ Режим расширенной печати можно комбинировать с различной плотностью ша- га. При этом каждый символ будет напечатан в два раза шире, чем это предусмотрено выбором плотности шага. П р и м е р 5. ────────────── 10 LPRINT CHR$(14);"EXPANDED PICA PITCH" 20 LPRINT CHR$(27);"E":LPRINT "EXPANDED ELITE PITCH" 40 LPRINT CHR$(27);"Q":LPRINT "EXPANDED CONDENSED PITCH" 60 LPRINT CHR$(27);"P";CHR$(15) 70 LPRINT "NOW WE ARE BACK TO UNEXPANDED PICA PRINTING" run N EXPANDED PICA PITCH E EXPANDED ELITE PITCH Q EXPANDED CONDENSED PITCH P NOW WE ARE BACK TO UNEXPANDED PICA PRINTING E Ok Коды в ы д е л е н и я печати ┌────────────────────────────────┬──────────────────┐ │ Ф у н к ц и я │ Управляющий код │ ├────────────────────────────────┼──────────────────┤ │ Выбор печати двойным ударом │ CHR$(27);"G" │ ├────────────────────────────────┼──────────────────┤ │ Отмена печати двойным ударом │ CHR$(27);"H" │ ├────────────────────────────────┼──────────────────┤ │ Выбор выделенной печати │ CHR$(27);"!" │ ├────────────────────────────────┼──────────────────┤ │ Отмена выделенной печати │ CHR$(27);CHR$(34)│ └────────────────────────────────┴──────────────────┘ Выделить текст можно д в у м я способами: α) используя двойную печать со смещением вниз (печать двойным ударом); β) используя двойную печать со смещением вправо (выделенная печать). В обоих этих случаях символы пропечатываются д в а ж д ы. ┌───────────────────────────────────────────────────────────────────┐ │ Выделенную печать рекомендуется использовать с шагом "цицеро". │ │ Для другой плотности печати используйте печать д в о й н ы м │ │ ударом │ └───────────────────────────────────────────────────────────────────┘ Заметим, что отмена печати двойным ударом возвращает печатающее устрой- ство к предыдущему стилю печатания, а отмена выделенной печати возвращает печатающее устройство к стандартной печати. П р и м е р 6. ────────────── 10 LPRINT CHR$(14):GOSUB 100 'Расширенная печать включена 20 LPRINT CHR$(27);"4":GOSUB 100 '"Италик" включен 30 LPRINT CHR$(15):GOSUB 100 'Расширенная печать выключена 35 LPRINT CHR$(27);"5":GOSUB 100:END 100 LPRINT CHR$(27);"G":GOSUB 1000:LPRINT CHR$(27);"H" 110 LPRINT CHR$(27);"!":GOSUB 1000:LPRINT CHR$(27);CHR$(34) 120 END 1000 LPRINT "БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго!":RETURN run N БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! 4 БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго!  БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! 5 БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! G БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! H! БУДЬТЕ СЧАСТЛИВЫ !!! Живите долго! "E Ok П р и м е р 7. ────────────── 10 LPRINT CHR$(27);"Q";"Миша";CHR$(27);"P";" + ";CHR$(27);"4";"Ирочка " ;CHR$(27);"5";"= ";CHR$(27);"!";"ЛЮБОВЬ !!!";CHR$(15);CHR$(27);"Q";" К араул";CHR$(27);CHR$(34) run QМишаP + 4Ирочка 5= !ЛЮБОВЬ !!!Q Караул" c1E Ok Коды для о д н о н а п р а в л е н н о й печати ┌──────────────────────────────────┬────────────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ ├──────────────────────────────────┼────────────────────────────────────┤ │ Выбор однонаправленной печати │ CHR$(27);">" │ ├──────────────────────────────────┼────────────────────────────────────┤ │ Отмена однонаправленной печати │ CHR$(27);"]" │ └──────────────────────────────────┴────────────────────────────────────┘ Однонаправленная печать используется в таблицах и схемах, так как обес- печивает с т р о г о вертикальное расположение символов и выравнивает печать вертикальных столбцов. После включения принтера устанавливается ре- жим двунаправленной печати, которая несколько быстрее однонаправленной. П р и м е р 8. ────────────── 20 FOR I=1 TO 10:LPRINT "++++++++++++++++++++":NEXT I 50 LPRINT:LPRINT:LPRINT CHR$(27);">" 70 FOR I=1 TO 10:LPRINT "++++++++++++++++++++":NEXT I Коды для п о д ч е р к и в а н и я ┌────────────────────────┬─────────────────┐ │ Ф у н к ц и я │ Управляющий код │ ├────────────────────────┼─────────────────┤ │ Выбор подчеркивания │ CHR$(27);"X" │ ├────────────────────────┼─────────────────┤ │ Отмена подчеркивания │ CHR$(27);"Y" │ └────────────────────────┴─────────────────┘ П р и м е р 9. ────────────── 10 LPRINT CHR$(27);"Q" 'Уплотненный шаг включен 20 LPRINT "Текст "; 30 LPRINT CHR$(14);"можно ";CHR$(15);"выделить"; 40 LPRINT CHR$(27);"X";" ПОДЧЕРКИВАНИЕМ";CHR$(27);"Y":END run QТекст можно выделитьX ПОДЧЕРКИВАНИЕМY c1E Ok Использование кода ┌─────────────────┐ │ CHR$(27);"X" │ └─────────────────┘ приводит к автоматическому подчеркиванию в с е х последующих печатаемых символов (в том числе и пробелов). Отмена подчеркивания осуществляется командой: LPRINT CHR$(27);"Y" Коды печати в е р х н е г о и н и ж н е г о индексов ┌────────────────────────────────────┬─────────────────┐ │ Ф у н к ц и я │ Управляющий код │ ├────────────────────────────────────┼─────────────────┤ │ Выбор верхнего индекса │ CHR$(27);"s1" │ ├────────────────────────────────────┼─────────────────┤ │ Выбор нижнего индекса │ CHR$(27);"s2" │ ├────────────────────────────────────┼─────────────────┤ │ Отмена верхнего и нижнего индексов │ CHR$(27);"s0" │ └────────────────────────────────────┴─────────────────┘ Верхние и нижние индексы по высоте составляет половину с т р о ч н ы х символов. В е р х н и е индексы печатаются наравне с верхней частью обыч- ного символа, а н и ж н и е индексы - наравне с нижней частью обычного символа. Индексы часто применяются для ссылок, примечаний и в математичес- ких формулах. Пока печатающее устройство находится в режиме печати верхних или ниж- них индексов, обычная двунаправленная печать отменяется и заменяется од- нонаправленной. Более того, при печати верхних и нижних индексов устанав- ливается режим д в о й н о г о у д а р а . Выбор верхних и нижних индексов можно совмещать с выбором шрифта "ита- лик", однако индексы нельзя использовать с подчеркиванием и расширенной печатью. Заметим, что команда о т м е н ы верхних и нижних индексов отключает и направленную печать, и двойной удар. П р и м е р 10. ─────────────── 10 LPRINT "очень";CHR$(27);"s1";"полезная";CHR$(27);"s0";"ВОЗМОЖНОСТЬ"; CHR$(27);"s2";"ПРИНТЕРА";CHR$(27);"s0" run оченьs1 полезная s0ВОЗМОЖНОСТЬs2 ПРИНТЕРАs0 Ok VII.4.2. У п р а в л е н и е в е р т и к а л ь н о й п о з и ц и е й п е ч а т а ю щ е й г о л о в к и 1. И з м е н е н и е в ы с о т ы с т р о к и ┌───────────────────────────────────────┬──────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ ├───────────────────────────────────────┼──────────────────────────────┤ │ Установка высоты строки на n/144 дюйма│ CHR$(27);"Т";"n1";"n2" │ ├───────────────────────────────────────┼──────────────────────────────┤ │ Установка высоты строки на 1/6 дюйма │ CHR$(27);"A" │ ├───────────────────────────────────────┼──────────────────────────────┤ │ Установка высоты строки на 1/8 дюйма │ CHR$(27);"В" │ │ │ (переключатель 1-2 выключен) │ ├───────────────────────────────────────┼──────────────────────────────┤ │ Установка высоты строки на 1/9 дюйма │ CHR$(27);"В" │ │ │ (переключатель 1-2 включен) │ └───────────────────────────────────────┴──────────────────────────────┘ При включении печатающего устройства плотность строк устанавливается равной 6 строкам в дюйме. Однако для данного печатающего устройства можно установить высоту строки на любое требуемое значение. Это делается командой: LPRINT CHR$(27);"T";"n1";"n2" где n1 и n2 - цифры от 0 до 9, определяющие высоту строки в n/144 дюйма, величины n, n1 и n2 связаны при помощи формулы: ┌────────────┐ │ n=10·n1+n2 │ . └────────────┘ А теперь посмотрите, как легко и просто изменяется плотность строк. П р и м е р 11. ─────────────── 10 FOR I=48 TO 50 20 FOR J=48 TO 57 30 LPRINT CHR$(27);"T";CHR$(I);CHR$(J) 40 LPRINT "VARIABLE LINE SPACING WITH PRINTER" 50 NEXT J 60 NEXT I 70 LPRINT CHR$(27);"A" Приведем программу, "настраивающую" принтер на "очень мелкую" печать (она пригодится Вам для изготовления шпаргалок!) П р и м е р 12.┌────────────────────────────────────────────────────┐ ─────────────── │ 10 LPRINT CHR$(27);"T07";CHR$(27);"s1";CHR$(27);"Q"│ └────────────────────────────────────────────────────┘ Имеется и другой управляющий код для задания высоты строки. П р и м е р 13. ─────────────── 10 FOR I=1 TO 20 20 LPRINT CHR$(27);"B":LPRINT "LINE NUMBER";I 40 NEXT I В зависимости от положения двухпозиционного переключателя 1-2 (включен или выключен), который находится внутри принтера, задаются две различные высоты. Попробуйте! 2. У п р а в л е н и е п е р е в о д о м с т р о к ┌─────────────────────────────────────────┬─────────────────────────┐ │ Ф у н к ц и я │ Управляющий код │ ├─────────────────────────────────────────┼─────────────────────────┤ │ Возврат печатающей головки на левый край│ CHR$(13) │ ├─────────────────────────────────────────┼─────────────────────────┤ │ Перемещение бумаги вперед на одну строку│ CHR$(10) │ ├─────────────────────────────────────────┼─────────────────────────┤ │ Подача бумаги вперед на n строк │ CHR$(31);CHR$(n) │ ├─────────────────────────────────────────┼─────────────────────────┤ │ Подача бумаги на n строк без возврата │ CHR$(27);"a";CHR$(n) │ │ каретки │ │ └─────────────────────────────────────────┴─────────────────────────┘ Эти коды применяются для перемещения бумаги относительно печатающей го- ловки. Возврат печатающей головки в исходную позицию (возврат каретки) произ- водится командой ┌───────────────────────┐ │ LPRINT CHR$(13) │ └───────────────────────┘ При этом бумага не продвигается. "Получив" код CHR$(10), печатающее устройство продвигает бумагу в п е- р е д на одну строку. Для перемещения печатающей головки на левый край с л е д у ю щ е й строки примените команду:┌──────────────────────────┐ │ LPRINT CHR$(13);CHR$(10) │. └──────────────────────────┘ П р и м е р 14. Сравните результаты работы командных строк: ─────────────── LPRINT "PROGRAM";CHR$(10);"BASIC" LPRINT "PROGRAM";CHR$(13);"BASIC" ┌───────────────────────────┐ Команда │ LPRINT CHR$(31);CHR$(n) │ , └───────────────────────────┘ где n - целое число (1≤n≤15), позволяет продвинуть бумагу в п е р е д на n строк. ┌──────────────────────────────┐ Команда │ LPRINT CHR$(27);"a";CHR$(n) │ , └──────────────────────────────┘ где n - целое число (1≤n≤255), перемещает бумагу на n строк (используя высоту текущей строки) без пере- мещения печатающей головки. Однако это не изменяет текущее значение верти- кального положения табуляции. Отметим, что данную команду можно записать и в таком виде: LPRINT CHR$(27);CHR$(97);CHR$(n) где 97 - код символа "a". П р и м е р 15. ─────────────── 10 LPRINT "LINE NUMBER 1.":LPRINT "LINE NUMBER 2."; 30 LPRINT CHR$(27);"a";CHR$(3); 40 LPRINT "LINE NUMBER 3.":LPRINT "LINE NUMBER 4." Программная строка 30 позволяет переместить страницу вверх на 3 строки, печатающая головка при этом не перемещается. Следовательно, строка 40 пе- чатает сообщение начиная с колонки, в которой печатающая головка осталась в конце строки 20. 3. У п р а в л е н и е с т р а н и ц а м и ┌───────────────────────────────────────┬──────────────────────────────┐ │ Ф у н к ц и я │ У п р а в л я ю щ и й к о д │ ├───────────────────────────────────────┼──────────────────────────────┤ │ Перемещение бумаги на верхнюю часть │ CHR$(12) │ │ следующей страницы │ │ ├───────────────────────────────────────┼──────────────────────────────┤ │ Перемещение бумаги в позицию следующей│ │ │ вертикальной метки табуляции. │ │ │ Позиции вертикальной табуляции устана-│ CHR$(11) │ │ вливаются на строках с номерами, крат-│ │ │ ными 6 (6,12,18,...60) │ │ └───────────────────────────────────────┴──────────────────────────────┘ ┌────────────────────┐ Команда │ LPRINT CHR$(11) │ └────────────────────┘ приводит к перемещению печатающей головки в н и з в позицию следующей в е р т и к а л ь н о й метки табуляции или на верхнюю часть следующей страницы в порядке первоочередности нахождения. П р и м е р 16. Перед тем как запустить программу, следует выключить ─────────────── печатающее устройство и отрегулировать бумагу таким образом, чтобы лист был на одном уровне с верхом направляющей ленты на пе- чатающей головке, а затем включить печатающее устройство. 10 LPRINT "LINE NUMBER 1.":LPRINT "LINE NUMBER 2."; 30 LPRINT CHR$(12); 40 LPRINT "LINE NUMBER 3.":LPRINT "LINE NUMBER 4." 50 LPRINT CHR$(11); 60 LPRINT "LINE NUMBER 5.":LPRINT "LINE NUMBER 6."