后记:需要帮助来了解遗留代码

时间:2019-01-23 02:42:16

标签: postscript

我希望Postscript专家可以帮助我理解以下代码片段:

1 %%BeginFeature: InputSlot Tray2
2  1 dict dup /MediaPosition null put setpagedevice
3  userdict /lms
4  currentpagedevice /InputAttributes get 1 known { 1 }{ 0 }ifelse put
5  currentpagedevice /InputAttributes get lms get setpagedevice

我可以肯定地说,它很努力地试图确定打印机是否有纸盘2,是否可以使用它,否则,请使用纸盘1-除非它不起作用!

它曾经用于理光MFP(复印机/打印机),但不适用于Sharp MFP。

我尝试将第4行更改为

currentpagedevice /InputAttributes get 1 known { 1 }{ 1 }ifelse put

但是那也不起作用。

最终可行的方法是将第2行更改为

1 dict dup /MediaPosition 1 put setpagedevice

只是假设纸盘2存在,但我现在可以接受;但是现在我真的很想了解第3-5行的实际作用。

认为第3行将称为lms dict 放入堆栈,并根据堆栈的不同将1或0放入堆栈(第4行) / InputAttributes有什么(?这是我有点模糊的地方)。不知道第5行在做什么。

请赐教。

1 个答案:

答案 0 :(得分:3)

  

我希望Postscript专家可以帮助我理解此代码   片段

1 dict dup /MediaPosition null put setpagedevice

创建一个包含项{MediaPosition: null}的字典;将此小词典的内容与pagedevice词典合并。

userdict /lms currentpagedevice /InputAttributes get 1 known { 1 }{ 0 }ifelse put

从当前的页面设备字典中获取存储在InputAttributes键下的字典。如果1词典中有一个名为InputAttributes的键(InputAttributes词典的键是所有数字,将字典存储为值),则设置{{1 }}中的用户字典中的lms,否则为1。 (即保存0或1键。)

0

从当前的pagedevice词典中,再次获得currentpagedevice /InputAttributes get lms get setpagedevice 词典,并查找我们存储在InputAttributes变量中的数字键(现在是userdict中的符号)。无论您从键lms还是键0取回哪个词典,都将该词典合并到pagedevice词典中。

即如果存在纸盘定义1,请选择它,否则默认为纸盘定义0。这里的1符号可能没有内在的含义,可能只是临时的。但是,如果是这种情况,那么我们可以将这两行替换为:

lms

所以他们要么希望currentpagedevice /InputAttributes get dup 1 known { 1 }{ 0 }ifelse get setpagedevice 在这种用途之外继续存在,要么对PostScript不太满意!

由于上述代码的片段出现在Lexmark PPD文件中,因此我猜测它代表“ LexMark Systems”(或类似名称),并且该脚本可能源自理光之前的Lexmark打印机。

通过研究PPD文件,可能有一种标准的选择托盘设备的方法。