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

Postscript: Need help understanding legacy code

我希望 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 - 除非它不起作用!

它曾经用于 Ricoh MFP (copier/printer),但不适用于 Sharp MFP。

我试过将第 4 行更改为

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

但这也没有用。

最终起作用的是将第 2 行更改为

1 dict dup /MediaPosition 1 put setpagedevice

假设纸盒 2 存在,但我暂时同意;但现在我真的很想了解第 3 - 5 行的实际作用。

I think 第 3 行将一个名为 lmsdict 放入堆栈,并将 1 或 0 放入堆栈(第 4 行)取决于 /InputAttributes 的内容(?这是我有点模糊的地方)。不知道第 5 行在做什么。

请赐教。

I am hoping a Postscript guru can help me understand this code fragment

1 dict dup /MediaPosition null put setpagedevice

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

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

从当前pagedevice字典中获取存储在InputAttributes键下的字典。如果InputAttributes字典中有一个叫1的键(InputAttributes字典的键都是数字,下面存储字典作为值),则设置[=19的值=] 到 1 否则 0。 (即保存 0 或 1 键。)

currentpagedevice /InputAttributes get lms get setpagedevice

从当前的pagedevice字典中,再次获取InputAttributes字典,并查找我们存储在lms变量中的数字键(现在是userdict中的一个符号)。无论您取回哪个字典(来自键 0 或键 1),将该字典合并到 pagedevice 字典中。

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

currentpagedevice /InputAttributes get dup 1 known { 1 }{ 0 }ifelse get setpagedevice

所以要么他们希望 lms 在这种用途之后继续存在,要么就是他们对 PostScript 不太满意!

由于上述代码的片段出现在 Lexmark PPD 文件中,我猜测它代表 'LexMark Systems' 或类似的东西,并且该脚本可能源自 Ricoh 之前的 Lexmark 打印机。

通过研究 PPD 文件可能会发现 select 托盘设备的标准方法。