Глава 7. Печать текста.
=======================
Все рассмотренные части программы служат для создания текста, но
основной заключительной частью является печать. Вы выбираете что печатать
и как печатать, управляя принтером по программе.
Рассматривайте процедуру печати как управляющую программу. Ее мате-
риал - это текстовый файл, включающий в себя РСТ - операторы управления
печатью. Процедура вызывается: [E] - "P" и затем следует ответить на
следующие вопросы:
1. Номера первой и последней строк выводимого текста. При этом прог-
рамма сама обеспечивает Вас следующими данными: номера первой и последней
строк существующего файла, интервал между строками, количество копий,
установка РСТ. Если эти данные Вас устраивают, можно непосредственно на-
чинать печатать без изменений. Если нет, то их можно изменить - "R". Как
и в операции "SAVE", первый номер строки должен быть точным, а вместо
последнего (для выведения файла целиком) годится любое заведомо большее
число.
2. Интервал между строками - может быть любое число от 1 до 254.
3. Количество копий - от 1 до 254.
4. Статус ACTIVE/NON ACTIVE шестидесяти операторов управления пе-
чатью. Он может быть включен/выключен вводом "R", когда курсор находится
на РСТ.
Более специфическое управления процессом печати осуществляется
посредством вставленных в текст РСТ-операторов, обращающихся к принтеру
для изменения формата печати, к области переменных БЕЙСИКа для отыскания
стринга или к области БЕЙСИК-программы для выполнения некоторых строк пе-
ред возвратом в машиннокодовый блок. Если произойдет сбой (встретится не-
исполнимый оператор РСТ и т.п.), печать прервется и Вы выберете - перехо-
дить к другой копии (если она есть) или возвратить программу к текстовому
файлу.
Имеет смысл хранить копию текста на ленте или микродрайве перед ее
выводом на печать. В случае непредвиденных сбоев, которые бывают, Вам это
поможет.
Количество переменных, которые "драйвуют" между принтером и тексто-
вым файлом в компьютере может быть немалым, при этом вовлекаются много-
численные РСТ-операторы. Связь между всеми элементами превращает TLW в
довольно мощное средство, но искусство работы зависит от Вас.
Глава 8. Операторы управления печатью (РСТ).
============================================
Байты, которые компьютер выдает принтеру для печати находятся в диа-
пазоне кодов ASCII от 32 до 127. Кроме того, строчные принтеры используют
специальные коды для исполнения специальных функций при печати, для чего
программа TLW имеет банк из 60-ти настраиваемых РСТ-операторов управления
печатью, которые могут быть вставлены где надо в текстовый файл для
исполнения какой-либо заранее подготовленной процедуры при выполнении са-
мой печати.
Операторы РСТ разбиваются на три группы:
- непосредственное управление принтером (24 оператора);
- для отыскания и печати именованных стрингов из БЕЙСИК-области (26
операторов);
- передачи управления из TLW в БЕЙСИК-область (10 операторов).
Именно последние две группы обеспечивают пользователю возможность
создания комплексных документов, где стандартные блоки текста искусно
включают в себя блоки данных из внешнего источника, т.е. из БЕЙСИК-прог-
раммы или от микродрайва и т.п.
Все операторы РСТ вставляются в текст с использованием ss "I". За
этой командой требуется ввод числа от 1 до 24 для операторов не-
посредственного управления принтером, ввод буквы от A до Z с последующим
знаком $ для одного из 26 стринговых операторов РСТ или ввод числа от 90
до 99 для обращения к БЕЙСИКовским строкам от 9000 до 9900. Оператор РСТ
всегда вставляется в текст слева от "видимого" символа на экране. Эти
операторы не занимают экранного пространства, строки остаются правильной
длины, отсчет колонок не нарушается.
Вы можете вставить оператор РСТ в файл где угодно, и он ничего не
затрет.
Для того, чтобы указать, где в тексте "спрятан" оператор РСТ, следу-
ющий за ним символ изображается в "обращенном" виде - белым по черному.
Если это невозможно, т.е. оператор стоит в самом конце строки, то в этом
случае маркер "конец строки" изображается подчеркнутым. "Обращение" сим-
волов может быть включено или выключено. Для этого применяется команда
видеомаркера [E] "V", которая работает как переключатель. Индикатором на
экране при этом является наличие или отсутствие маркера "конец абзаца" в
хэдере рядом с величиной разбивки экрана. Генерация маркеров "конец стро-
ки" также включается по этой команде.
Если курсор ввести в середину видеотекста и поместить его на РСТ
оператор, то метка оператора появится в хэдере. Это произойдет независимо
от того, включено или выключено изображение видеомаркеров.
Влияние всех операторов РСТ может быть включено или выключено инпу-
том команды "R" для пересмотра положения переключателя РСТ при инициали-
зации команды выдачи на печать. 24 оператора управления принтером на пе-
чать не выводятся, но остальные два типа - печать стрингов и обращения к
БЕЙСИКовским строкам - выводятся, если переключатель РСТ включен.
Операторы непосредственного управления принтером
TLW содержит файл из 24 управляющих операторов, цель которого -
обеспечить выдачу на принтер избранных групп по четыре кодовых байта для
сообщения принтеру о необходимости выполнения специальных действий и, тем
самым, изменить формат печати. Эти операторы, вставленные в файл, - оди-
ночные байты из диапазона от 128 до 151, пронумерованные от 1 до 24. Ко-
манда [E] "T" изображает на экране текущий формат байта операторов РСТ,
все метки, и соответствующие им значения байтов в диапазоне от 0 до 254.
Значение 255 изображается как "-". Все метки и байты могут быть пересмот-
рены, как описано в п.6.4.3.
Используя команду управления печатью 6.4.1., можно ввести
стандартный
префиксный байт, который будет выдаваться перед группой байтов PCT и вы-
полнять роль инициатора для интерфейса или принтера.
Файл операторов управления принтером выглядит так:
-------------------------------------------------------------------------
N Метка Управляющие операторы | N Метка Управляющие операторы
---------------------------------- | ----------------------------------
1 Frm.F 1 12 -- -- | 13 D.st- 2 27 72 --
2 Elit+ 2 27 77 -- | 14 Sub.+ 2 27 83 48
3 Pica+ 2 27 80 -- | 15 Sub.- 3 27 83 49
4 Enlg+ 3 27 87 49 | 16 Sp/b- 2 27 84 --
5 Enlg- 3 27 87 48 | 17 Ital+ 2 27 52 --
6 Cond+ 1 15 -- -- | 18 Ital- 2 27 53 --
7 Cond- 1 18 -- -- | 19 Bell 1 7 -- --
8 Undl+ 3 27 45 49 | 20 Ppr - 2 27 56 --
9 Undl- 3 27 45 48 | 21 Ppr + 2 27 57 --
10 Emph+ 2 27 69 -- | 22 Initl 2 27 64 --
11 Emph- 2 27 70 -- | 23 A4/70 3 27 67 70
12 D.st+ 2 27 71 -- | 24 Rrf 9 3 27 78 9
-------------------------------------------------------------------------
Стандартный префикс - 1
Как уже было сказано выше, метки и значения, приведенные здесь, от-
носятся к интерфейсу ZXLPRINT III и к принтерам системы EPSON RX-80. Все
эти метки и байты могут быть пересмотрены. Файл операторов управления
принтером может быть вызван также и из БЕЙСИКА, см. Приложение 1.
Если Вам желательно иметь копию таблицы операторов управления прин-
тером на микродрайве или ленте, это можно сделать следующим образом:
на ленту:
SAVE "PCT-table "CODE 51003,217
LOAD "PCT-table" CODE
на микродрайв 1 и т.д.:
SAVE *"M"; 1; "PCT-table" CODE 51003,217
LOAD *"M"; 1; "PCT-table" CODE
Печать именованного стринга.
============================
Если после ввода PCT - ss "I", набрать какую-либо букву и знак $, а
затем ENTER, то можно вставить управляющий оператор, который скомандует
TLW найти и вставить в это место при печати БЕЙСИКовский стринг, имя ко-
торого совпадает с данным оператором управления печати. Другими словами,
оператор а$ вызовет печать БЕЙСИКовского стринга, который в этот момент
имеет это имя. Стринг будет напечатан точно так, как будто он является
частью текста, хотя сам текстовый файл останется без изменений. Если этот
стринг не может быть найден, т.е. он не был присвоен БЕЙСИКовской пере-
менной или он многомерный, что недопустимо, то в этом случае печать оста-
новится и TLW выдаст сообщение: CHECK A$ (проверьте A$). Программа перей-
дет к исполнению следующей копии, если она нужна, можно выйти отсюда -
"Q" или вернуться в текстовый файл, если необходимости в копиях
больше нет.
Переход к БЕЙСИК-строке.
========================
Командой SS "I" и вводом числа (от 90 до 99) осуществляется ввод
оператора управления печатью, который в процессе печати остановит принтер
и обратится к БЕЙСИК-строке, номер которой в 100 раз больше введенного
числа. Так, ввод 96 отправит компьютер к строке 9600.
Цель этого маневра - дать пользователю возможность записать некото-
рую БЕЙСИК-программу для переделки одного или нескольких стрингов, нахо-
дящихся в области памяти БЕЙСИКа, чтобы иметь преимущества при дальнейшей
печати.
Принтер можно, естественно, задействовать напрямую режимом LPRINT,
что может быть удобным для выдачи некоторых простых вещей - комментариев,
подчеркиваний слов и т.п. Вы можете делать PRINT на экран обычным спосо-
бом, хотя при этом необходимо учитывать, что печать должна идти от 4-й
строки до 21-й, т.к. если страница и будет переписана после возврата из
БЕЙСИКа, то хэдер - нет. Если Вы запортите верхнюю часть экрана, то ко-
манда [E] "A" исправит экран, но Вы окажетесь в начале текстового файла.
Когда программа в БЕЙСИКе отработала полностью, заключительная ко-
манда должна быть GOTO 9999, чтобы совершить прыжок назад в TLW. Переход
к машинным кодам осуществляется оператором RANDOMISE USR 65200, располо-
женным в этой строке, хотя это можно сделать и из любого другого места
программы.
Если возврат в TLW невозможен по этому адресу, т.е. при вызове прин-
тером БЕЙСИКа не был "оставлен" адрес возврата, программа начнется с на-
чала текстового файла, как будто по команде [E] "A", а принтер не будет
работать до следующего обращения к нему.
Глава 9. Слияние и составление комплексных документов.
======================================================
Существует два способа, с помощью которых Вы можете включить "внеш-
ний" текст в TLW там, где Вам это надо. Первый выполняется при наборе,
когда Вам надо вставить заранее подготовленную последовательность симво-
лов, например, данных или часто используемую повторяющуюся последователь-
ность символов или букв. Второй способ применяется при печати на принтере
и позволяет вставлять практически неограниченное количество материала в
виде БЕЙСИКовских стрингов, взятых из области переменных БЕЙСИКа. Встав-
ляются они в те места, где были помещены операторы PCT. Можно также вы-
полнять вычисления в БЕЙСИК-области, поместив в выводимый файл оператор
PCT для перехода в БЕЙСИК-область.
Включение стринга при наборе текста.
====================================
Если простой БЕЙСИКовский стринг существует в области переменных
БЕЙСИКа, то командой include - [E] ss "I" (6.3.4.) Вы можете набрать имя
это-
го стринга при вводе текста, тогда на экране появятся первые восемь сим-
волов со знаком # и указанием его длины. Далее Вы можете использовать
его, т.е. вставить в текст - " U ", перейти к другому - " N ", или отб-
росить совсем и вернуться к набору текста - " Q ". Если Вы его использо-
вали, то стринг впишется в Ваш текстовый файл так, как будто Вы его впе-
чатали, и, конечно, все заданные режимы, например, выравнивание правого
поля, перенос слов и т.п. будут соблюдены.
Включение стринга при печати текста на принтере.
================================================
Опять, если предположить, что такой стринг существует, Вы можете
воспользоваться одним из 26 операторов управления печатью, предназначен-
ных для впечатывания стрингов в качестве единицы печатного материала. Это
должен быть простой стринг. Операторы PCT находятся в пределах от a$ до
Z$. Пользователь должен обратить внимание, что мы нигде не говорим о дли-
не этих стрингов, поэтому внимательно смотрите, чтобы их длина соот-
ветствовала размерам принятой Вами страницы.
Если у Вас есть текст или данные, содержащиеся в файлах, полученных
другими программами (например программой Кэмпбелл Мастерфайл), то наилуч-
ший способ ввода этих файлов в TLW осуществляется через Бейсик, до входа
в TLW. Для этого текст, подлежащий вводу, присваивается (LET) Бейси-
ковским стрингам, которые затем вызываются из TLW путем include или не-
посредственно во время печати операторами PCT, предназначенными для
вставки стрингов в текст.
Материал, который Вам нужен, легче всего получить из Мастер-файла
через БЕЙСИК-строки 4900, 6000, 7000. В этих строках записи доступны в
виде стринга C$ (), имеющего размер 130. Первый байт - это метка данных
(от A до Z), а остальные 129 байтов - это сами данные. Их можно записать
на микродрайв например так:
4900 LET d$=" ": REM to Build up the data in
4910 LET n=0: Rem the file number specifier
4920 GO TO USR R: REM Back to Masterfile
6000 LET d$ = d$ + C$ (2 to)+CHR$0: REM Get data,install'markers'
6010 GO TO USR R: REM Back into Masterfile for next item loop
7000 LET n=n+1: REM The file number ti save.
7010 OPEN #8; "m"; 1; "MFL data"+STR$n
7020 PRINT #8; D$: CLOSE #8: REM Save each numbered record
7030 GO TO USR R: REM Back to Masterfile
Здесь данные d$ записываются на микродрайв 1 с именами файлов MFL
data1, MFL data2 и т.д. Последующий вызов в TLW может быть выполнен
например такими строками:
9000 LET n=1: REM The initialiser1 use PCT'90'
9010 GO TO 9999: REM Back to "TLW..."
9500 OPEN #5; "m"; 1; "MFL data"+STR$n: REM Use PCT'95' here
9510 INPUT #5; h$: CLOSE #5: LET N=N+1: REM Get record h$ etc.
9520 GO TO 9999: REM Back to TLW
9600 FOR a=0 TO 4: REM For five records etc.
9610 LET T$=h$ ((a*130+1) TO (a*130+129)): REM t$ takes each item
9620 GO TO 9999: REM Back to TLW
9700 NEXT a: REM Loops back to 9600 four times, use PCT'97'.
9710 GO TO 9999: REM Final return to TLW
Обратите внимание на то, что поскольку информация из Мастер-файла
записывается на микродрайв в формате данных, то теоретически есть возмож-
ность их загрузить в TLW и просмотреть, но при этом, конечно, с ними
нельзя оперировать без наличия программы Мастерфайл.
Если у Вас накопился большой объем информации, которую нужно перера-
ботать таким образом, то, определенно, имеет смысл освоить работу с фай-
лами при помощи микродрайва и интерфейса-1. Этому вопросу посвящены мно-
гие книги, например: Andrew Pennel "Master your ZX microdrive". Эта прек-
расная книга включает в себя также довольно мощную программу - базу дан-
ных "Unifile", которая также может быть использована при работе с файла-
ми, в том числе и с TLW.
Вызов БЕЙСИКа в процессе печати.
================================
С помощью команды PCT INSERT и вводом числа от 90 до 99 можно отпра-
вить компьютер в БЕЙСИК-область в процессе печати текста. Цель этого ма-
невра - выполнение каких-либо вычислений, в частности для того, чтобы пе-
ресмотреть некоторые стринги и создать новые, которые можно использовать
соответствующей командой управления печатью для включения стрингов. Поль-
зователь для этого должен в БЕЙСИК-области написать соответствующую прог-
рамму. В то же время, из области БЕЙСИКа пользователь может управлять пе-
чатью в обычном режиме LPRINT, а для каких-либо действий, может вызвать и
экран TLW. Если используется микродрайв для обеспечения каких-либо стрин-
говых данных через команду INPUT, то две нижние строки экрана будут очи-
щены, но это не имеет значения, т.к. страница будет переписана по оконча-
нии процесса текущей печати. Если в процессе работы БЕЙСИКа происходит
ошибка, компьютер останавливается обычным образом, это не влияет на про-
должение процесса печати при условии, что строка БЕЙСИКа 9999 или опера-
тор RANDOMIZE USR 65200 по-прежнему используется для возврата в TLW, что,
обычно, и бывает в случае появления ошибки.
Итак, когда компьютер отправляется в БЕЙСИК-область, его цель -
строки 9000, 9100 ... 9900. На каждой из них можно организовать выполне-
ние какой-либо специфической задачи при условии, что предусмотрен возврат
через строку 9999 или через оператор RANDOMIZE USR 65200. Фактически, лю-
бая ошибка, возникающая в работе в БЕЙСИК- области не влияет на TLW, так
что Вы можете выполнять любые действия и рассчитывать на возврат в TLW
через адрес 65200.