2. Фонты(*.pfa), которыми собираемся печатать помещаем в persistent
resourses (как, см. DSPS мануал), чтобы не грузить их на каждом джобе.
3. С этого момента можно спокойно печатать PS, применяя загруженные
шрифты. Но нам нужно печатать еше и ASCII файлы, так что идем дальше.
4. создаем модуль следующего содержания:
TRN$XLATE_DICT begin
/TRN$ANSI_BOX_0
{ /CourierCyrPS findfont [1000 0 0 -1000 0 0] makefont setfont } def
% повторить предыдущие две строки
% для /TRN$ANSI_BOX_1 .. /TRN$ANSI_BOX_7 - сдесь они исключены
% для краткости. Всместо CourierCyrPS можно использовать другой
% шрифт фиксированной ширины из числа загруженных на шаге 2.
% здесь задается шрифт в 10 пойнтов (1000 centipoints) - можно
% поменять при желании
end
и вставляем его в библиотеку DCPS$DEVCTL.TLB или другую. В
последнем случае нужно модифицировать лог.имя DCPS_LIB.
Переопределив таким образом все TRN$ANSI_BOX_x, мы теряем
возможность печатать другими шрифтами (bold, italic, ...) меняя их
ESC-командами. Можно поиграться и выяснить, какой ANSI_BOX за какой
стиль отвечает и закрепить за ним правильный фонт, но нам не до жиру.
5. Печатаем print/setup=<имя модуля из п.4> или заводим форму с
упомянутым setup-модулем и печатаем print/form= или ставим этот
модуль setup-модулем в форму DCPS$DEFAULT.
6. Здесь приятное заканчивается и начинаются проблемы. DCPS-ский
конвертер ANSI->PS конвертит кириллические буквы в код вида \xxxx,
где xxx - восьмеричный код буквы. Конвертит он их в соответствии с
установленным чарсетом (по умолчанию - ISO Latin-1), в котором нет
символов с кодами 0xD0, 0xDE, 0xF0, 0xFE. Так что в напечатанном
тексте у нас не будет букв 'П' и 'Ч' (КОИ8). В принципе текущий
чарсет можно поменять ESC-последовательностью в начале файла, но
этот конвертер-скотина не знает ни одного русского чарсета. Мне
удалось найти единственный чарсет в котором присутствуют все буквы с
0xC0 по 0xFE. Это - DEC Technical. Ставим в начало печатаемого файла
ESC-последовательность для переключения на данный чарсет: <ESC>)><ESC>~
Подобный обман не проходит даром - весьма криво выводятся пробелы.
Если кто подскажет, как отучить конвертер превращать буквы в
восьмеричный коды или научить его хотя бы превращать их as-is, или
как переключиться на нормальный чарсет - буду очень благодарен.
--
Best regards,
Valentin
valentin.likoum at ncc dot volga dot ru