我想在PostScript过程中运行永久更改的代码。 不包成一个程序,东西很好地工作:在PostScript过程中使用exitserver
serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==
然而,包装纸这个时候到的PostScript程序与myprocedure
调用它,它似乎代码后,不再执行exitserver:
/myprocedure {
serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==
} def
myprocedure
这是为什么?我虽然PostScript程序是简单的宏,只是调用过程名称与其内容。有没有可能从程序中调用exitserver/startjob代码?
我一直在想这件事,现在我不太确定。如果执行堆栈已被清除,“解释器如何进行处理输入”怎么可能?输入的处理必须通过内部读取循环或exec堆栈上的可执行文件。所以'exitserver'必须比清除execstack更具有手术能力。 –
翻译对输入流进行处理。当然,处理中的任何东西都会被甩掉。在exitserver之后的任何新输入都会正常处理。本质上,这将解释器返回到“干净”状态并终止作业服务器循环。 exitserver之后的输入具有“永久”效应。这样做可以关闭作业封装。请注意**非常**旧版本的Ghostscript没有执行作业服务器循环..... – KenS
同意,但对execstack的实际影响必须至少抓取文件对象,然后清理到作业服务器循环,并开始一个新的循环来读取保存的文件,安排在文件终止后重新启动作业服务器。看来,设计'exitserver'来裁剪作业服务器离开底部并且保持用户部分不受干扰并不是不可思议的。将用户引入不可移植的功能似乎是这种方法的一大缺点。(我应该承认,这个智力练习的一半是朝着实现这个目标而不是OP的Q.) –