Постскриптум: нужна помощь в понимании старого кода - PullRequest
0 голосов
/ 23 января 2019

Я надеюсь, гуру 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 (копир / принтер), но не для МФУ Sharp.

Я попытался изменить строку 4 на

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

но это тоже не сработало.

В итоге получилось изменить строку 2 на

1 dict dup /MediaPosition 1 put setpagedevice

, который предполагает, что лоток 2 существует, но пока я в порядке; но теперь мне бы очень хотелось понять, что на самом деле делают строки 3 - 5.

I думаю, строка 3 помещает dict с именем lms в стек и помещает либо 1, либо 0 в стек (строка 4) в зависимости от того, что / InputAttributes имеет (? Это где я немного нечеткий). Понятия не имею, что делает строка 5.

Пожалуйста, просветите меня.

1 Ответ

0 голосов
/ 23 января 2019

Я надеюсь, гуру Postscript поможет мне понять этот код Фрагмент

1 dict dup /MediaPosition null put setpagedevice

Создать словарь, содержащий один элемент {MediaPosition: null}; объединить содержимое этого небольшого словаря со словарем pagedevice.

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

Получить словарь, хранящийся под ключом InputAttributes из текущего словаря устройства страниц. Если в словаре InputAttributes есть ключ с именем 1 (ключи словаря InputAttributes - это все числа, в которых словари хранятся в виде значений), тогда установите значение lms в пользовательском словаре на 1 иначе 0. (Т.е. сохраните этот 0 или 1 ключ.)

currentpagedevice /InputAttributes get lms get setpagedevice

В текущем словаре устройства страниц снова получите словарь InputAttributes и найдите числовой ключ, который мы сохранили в переменной lms (теперь это символ в userdict). Какой бы словарь вы не вернули (от ключа 0 или ключа 1), объедините этот словарь в словарь устройства страниц.

т.е. если определение лотка 1 существует, выберите его, в противном случае по умолчанию используется определение лотка 0. Символ lms может не иметь здесь никакого внутреннего значения, он может быть просто временным. Однако, если это так, то мы могли бы заменить эти две строки на что-то вроде:

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

Так что либо они хотели, чтобы lms продолжал существовать за пределами этого использования, либо им просто было не очень удобно с PostScript!

Поскольку фрагменты приведенного выше кода появляются в PPD-файлах Lexmark, я предполагаю, что это означает «LexMark Systems» или что-то подобное, и что этот сценарий мог быть создан на принтере Lexmark до Ricoh.

Может быть стандартный способ выбора устройств в трее, которые вы можете обнаружить, изучая файлы PPD.

...