我想在PostScript过程中运行代码以进行永久性更改。 没有将它包装到一个程序中,事情就可以了:
serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==
但是,当将它包装到PostScript过程并使用myprocedure
调用它时,似乎不再执行exitserver之后的代码:
/myprocedure {
serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==
} def
myprocedure
这是为什么?我虽然PostScript程序是简单的宏,但只是在调用时用其内容替换过程名称。是否有可能从过程中调用exitserver / startjob代码?
答案 0 :(得分:1)
运行exitserver时,终止服务器循环。立即。如果你在循环中:
{
(before exit\n) print
exit
(after exit\n) print
} loop
然后你会看到'之前'处理完毕,但不是后处理。 exitserver本质上是同一种操作。终止任何执行上下文,清理堆栈等。
因此,如果您在程序中间执行此操作(可执行数组,并且它们不是宏),则会清理执行堆栈并将控制权返回给调用上下文。
现在,当您终止作业服务器循环时,解释器会继续处理输入,这就是为什么当您不在程序中时,这会达到预期效果。执行exitserver时终止服务器循环,解释器继续解释输入的字节。
你当然可以运行' exitserver'从一个程序,但你不能期望该程序继续执行。
无论如何,执行exitserver通常都不赞成,你应该有充分的理由在PostScript程序中运行它。
答案 1 :(得分:0)
正如肯所说,exitserver
无法在程序中使用。它必须是从流执行的主线代码。但您可以使用可重复使用的空值解码过滤文件。查看2006年10月号Acumen Journal的问题,了解如何制作其中之一。那里的例子将它用于图像数据。但是您也可以将代码放入其中,然后cvx exec
。