后记:需要帮助理解遗留代码
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 行将一个名为 lms
的 dict 放入堆栈,并将 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 托盘设备的标准方法。
我希望 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 行将一个名为 lms
的 dict 放入堆栈,并将 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 托盘设备的标准方法。