在PostScript过程中使用exitserver

时间:2016-07-23 13:35:42

标签: postscript

我想在PostScript过程中运行代码以进行永久性更改。 没有将它包装到一个程序中,事情就可以了:

serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==

但是,当将它包装到PostScript过程并使用myprocedure调用它时,似乎不再执行exitserver之后的代码:

/myprocedure {
    serverdict begin 0 exitserver
    (PERMANENT_STUFF_HERE) ==
} def
myprocedure

这是为什么?我虽然PostScript程序是简单的宏,但只是在调用时用其内容替换过程名称。是否有可能从过程中调用exitserver / startjob代码?

2 个答案:

答案 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