2014-01-03 4 views
2

У меня есть файлы ресурсов postscript для рисования объектов (флаги) в любом файле постскриптума (вдохновленный от Терри Бертона postscriptbarcode).Файлы ресурсов Postscript: как передать параметры функции?

Файлов для рисования Flaggs в подкаталоге Flaggs (без расширения .ps), вместе с некоторыми вспомогательными файлами, особенно sethexcolor, определяющих функцией sethexcolor, чтобы установить RGB цвета из шестнадцатеричных.

У меня есть файл sample.ps над вложенной Flaggs с кодом:

100 600 moveto 
100 /square /Flaggs findresource exec % draw a square of size 100 
showpage 

Файл square имеет код:

1 dict 
dup /sethexcolor dup /Flaggs findresource put 
begin 
/square { 
    /size exch def 
    currentpoint translate 
    /red (ff0000) def 
    red sethexcolor 
    % 1 0 0 setrgbcolor 
} bind def 
/square dup load /Flaggs defineresource pop 
end 

Я работаю в Windows 7 с Ghostscript 9.10. Ghostscript вызывается с параметром командной строки -P для поиска файлов в текущей папке. (Путь поиска можно увидеть с помощью gswin32c [-P] -h в командной оболочке). Обычно это работает отлично (например, с кодом postscriptbar, см. Выше).

Но здесь это не работает: Начиная sample.ps, я получаю сообщение об ошибке: (. После настройки RGB цвета с 1 0 0 setrgbcolor, он работает)

Error: /undefined in sethexcolor 
Operand stack: 
    (ff0000) 

Если изменить red sethexcolorred /sethexcolor к или red //sethexcolor, нет сообщения об ошибке, а квадрат нарисован - , но в черном, а не в красном.

Что случилось с этим кодом постскриптума? Почему функция square вызывает функцию вызова sethexcolor в той же папке?

Вольфганг

+0

Для объяснения того, как принять ответ, см. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Alan

ответ

2

Попробуйте

red //sethexcolor exec 

Используя немедленное имя (с //) загрузит текущее определение в то время как square тело процедуры строится. Поскольку sethexcolor является (предположительно) процедурой, вы должны явно указать exec для выполнения.