2014-08-27 53 views
-4

有人可以帮我把下面的postscript代码格式化为可读格式吗?我需要修改逻辑以在所有条件下返回错误响应,并且从不打印错误页面。格式Postscript ErrorHandler

%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0 
/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false 
setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype 
ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch 
def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 
rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def 
/nl{currentpoint exch pop lmargin exch moveto 0 -10 rmoveto}def/=={/cp 0 def 
typeprint nl}def/typeprint{dup type exec}readonly def/lmargin 72 def/rmargin 72 
def/tprint{dup length cp add rmargin gt{nl/cp 0 def}if dup length cp add/cp 
exch def prnt}readonly def/cvsprint{=string cvs tprint()tprint}readonly def 
/integertype{cvsprint}readonly def/realtype{cvsprint}readonly def/booleantype 
{cvsprint}readonly def/operatortype{(--)tprint =string cvs tprint(--)tprint} 
readonly def/marktype{pop(-mark-)tprint}readonly def/dicttype{pop 
(-dictionary-)tprint}readonly def/nulltype{pop(-null-)tprint}readonly def 
/filetype{pop(-filestream-)tprint}readonly def/savetype{pop(-savelevel-) 
tprint}readonly def/fonttype{pop(-fontid-)tprint}readonly def/nametype{dup 
xcheck not{(/)tprint}if cvsprint}readonly def/stringtype{dup rcheck{(\()tprint 
tprint(\))tprint}{pop(-string-)tprint}ifelse}readonly def/arraytype{dup rcheck 
{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint}forall(]) 
tprint}ifelse}{pop(-array-)tprint}ifelse}readonly def/packedarraytype{dup 
rcheck{dup xcheck{({)tprint{typeprint}forall(})tprint}{([)tprint{typeprint} 
forall(])tprint}ifelse}{pop(-packedarray-)tprint}ifelse}readonly def/courier 
/Courier findfont 10 scalefont def end errordict/handleerror{systemdict begin 
$error begin $brkpage begin newerror{/newerror false store vmstatus pop pop 0 
ne{grestoreall}if errorname(VMerror)ne{showpage}if initgraphics courier setfont 
lmargin 720 moveto errorname(VMerror)eq{userdict/ehsave known{clear userdict 
/ehsave get restore 2 vmreclaim}if vmstatus exch pop exch pop PrtVMMsg}{ 
(ERROR:)prnt errorname prnt nl(OFFENDING COMMAND:)prnt/command load prnt 
$error/ostack known{nl nl(STACK:)prnt nl nl $error/ostack get aload length{==} 
repeat}if}ifelse systemdict/showpage get exec(%%[ Error:)print errorname 
=print(; OffendingCommand:)print/command load =print(]%%)= flush}if end end 
end}dup 0 systemdict put dup 4 $brkpage put bind readonly put/currentpacking 
where{pop/setpacking where{pop oldpack setpacking}if}if 
%%EndResource 
+1

这看起来更好看! – JuliandotNut 2014-08-27 16:25:12

+0

我觉得这个问题是不公平的。使用工具正确缩进代码绝对是stackoverflow的主题。 “太多可能的答案”根本不适用于这个问题,因为可用的工具库非常小,我认为在这里包括所有这些问题都没有问题。我挑战那些认为存在太多选项来列出10个选项的人。 – hlovdal 2014-11-02 19:51:42

+0

现在为一些非常令人印象深刻的不可读的postscript,请查看http://web.mit.edu/PostScript/obfuscated-1993/Tiny_RayTracing.ps。 – hlovdal 2014-11-02 19:55:00

回答

2

这是Windows PostScript打印机驱动程序prolog的一部分,它依赖于prolog的其他部分。 '格式化'它不会帮助你,你需要有效地反汇编它才能改变它。

但是,设备中的默认错误处理程序'可能'不会打印错误页面,因此处理它的最简单方法就是批量删除它。

+0

+1的确,代码的唯一目的似乎是打印错误页面。最简单的方法是将其删除。 – 2014-08-30 06:56:07

1

正如Ken所说,所有这些代码都是打印错误页面。所以,只要删除它。但是,为了解开代码墙的任务,有选择。

indent做了一个体面的工作,添加空白和括号相关的缩进。它期望C代码,所以会引发很多错误。但它确实将事情分解成更可读的内容(如果您忽略或删除缩进:错误)。

它错误地在斜杠和以下名称之间添加了一个空格,因此也自动更正。

/ currentpacking where 
{ 
    pop/oldpack currentpacking def/setpacking where 
    { 
    pop false setpacking} 
if} 
if /$brkpage 64 dict def $brkpage begin/prnt 
{ 
    dup type/stringtype ne 
    { 
    = string 
indent: Standard input:3: Error:Stmt nesting error. 
indent: Standard input:5: Error:Stmt nesting error. 
     cvs} if dup length 6 mul/tx exch def/ty 10 def currentpoint/
     toy exch def/
     tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 
     rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show} 
     bind def/nl 
     { 
     currentpoint exch pop lmargin exch moveto 0 - 10 rmoveto} 
    def 
     /== 
     { 
     /cp 0 def typeprint nl} 
    def/typeprint 
    { 
    dup type exec} 
    readonly def/lmargin 72 def/rmargin 72 def/tprint 
    { 
     dup length cp add rmargin gt 
     { 
     nl/cp 0 def} 
    if dup length cp add/cp exch def prnt} 
    readonly def/cvsprint 
    { 
     = string 
indent: Standard input:9: Error:Stmt nesting error. 
     cvs tprint()tprint} readonly def/integertype 
     { 
     cvsprint} 
     readonly def/realtype 
     { 
     cvsprint} 
     readonly def/booleantype 
     { 
     cvsprint} 
     readonly def/operatortype 
     { 
     (--) tprint = string cvs tprint (--)tprint} 
     readonly def/marktype 
     { 
     pop (-mark -) tprint} 
     readonly def/dicttype 
     { 
     pop (-dictionary -) tprint} 
     readonly def/nulltype 
     { 
     pop (-null -) tprint} 
     readonly def/filetype 
     { 
     pop (-filestream -) tprint} 
     readonly def/savetype 
     { 
     pop (-savelevel -) tprint} 
     readonly def/fonttype 
     { 
     pop (-fontid -) tprint} 
     readonly def/nametype 
     { 
     dup xcheck not 
     { 
     (/)tprint} 
     if cvsprint} 
     readonly def/stringtype 
     { 
     dup rcheck 
     { 
      (\()tprint tprint (\)) 
indent: Standard input:17: Error:Stmt nesting error. 
      tprint} 
      { 
      pop (-string -) tprint} 
     ifelse} 
     readonly def/arraytype 
     { 
      dup rcheck 
      { 
      dup xcheck 
      { 
       (
       { 
       )tprint 
       { 
       typeprint} 
       forall (} 
      ) tprint} 
      { 
       ([)tprint 
       { 
       typeprint} 
       forall (])tprint} 
      ifelse} 
      { 
      pop (-array -) tprint} 
     ifelse} 
     readonly def/packedarraytype 
     { 
      dup rcheck 
      { 
      dup xcheck 
      { 
       (
       { 
       )tprint 
       { 
       typeprint} 
       forall (} 
      ) tprint} 
      { 
       ([)tprint 
       { 
       typeprint} 
       forall (])tprint} 
      ifelse} 
      { 
      pop (-packedarray -) tprint} 
     ifelse} 
     readonly def/courier 
     /Courier findfont 10 scalefont def end errordict/handleerror 
     { 
      systemdict begin $error begin $brkpage begin newerror 
      { 
      /newerror false store vmstatus pop pop 0 ne 
      { 
      grestoreall} 
      if errorname (VMerror) 
       ne 
       { 
       showpage} 
      if initgraphics courier setfont 
       lmargin 720 moveto errorname (VMerror) 
       eq 
       { 
       userdict/ehsave known 
       { 
       clear userdict/ehsave get restore 2 vmreclaim} 
       if vmstatus exch pop exch pop PrtVMMsg} 
      { 
       (ERROR:) 
       prnt errorname prnt nl (OFFENDING COMMAND:) prnt/
       command load prnt $error/ostack known 
       { 
       nl nl (STACK:) prnt nl nl $error/ostack get aload length 
       { 
       ==} 
       repeat} 
      if} 
      ifelse systemdict/showpage get exec (%%[Error:)print errorname = print (; OffendingCommand:)print/command load = print (] %%) 
indent: Standard input:30: Error:Stmt nesting error. 
       = flush} if end 
indent: Standard input:31: Error:Stmt nesting error. 
       end 
        end} dup 0 systemdict put dup 4 $brkpage put bind readonly 
        put/currentpacking where 
       { 
        pop/setpacking where 
        { 
        pop oldpack setpacking} 
       if} 
      if 
indent: Standard input:34: Error:Unexpected end of file