Ghostscript のエラーメッセージが不親切なので
Ghostscript のエラーメッセージは、例えば f という命令の中の index という命令でエラーが起きた場合
GS>/f{10 index}def GS>f Error: /rangecheck in index Operand stack: 10 Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- %loop_continue 2 3 %oparray_pop --nostringval-- --nostringval-- false 1 %stopped_push .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- Dictionary stack: --dict:1058/1123(ro)(G)-- --dict:0/20(G)-- --dict:69/200(L)-- Current allocation mode is local Current file position is 2
みたいな感じで、index が何のエラーを起こしてその時スタックに何があったかは分かるのですが、その index がどの index なのかよくわからなかったりします。
せめて f の中でエラーになったということ位は知らせてくれないかと思って、def を上書き定義してみました。
/def{ [ exch /stopped cvx [ (Error: in )/print cvx 6 index /= cvx /stop cvx ]cvx/if cvx ]cvx //def }bind def
この def を使って定義した f でエラーを起こすとこうなります。
GS>/f{10 index}def GS>f Error: in f Error: /rangecheck in index Operand stack: 10 Execution stack: %interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- %loop_continue 2 3 %oparray_pop --nostringval-- --nostringval-- false 1 %stopped_push .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- false 1 %stopped_push --nostringval-- --nostringval-- Dictionary stack: --dict:1059/1123(ro)(G)-- --dict:0/20(G)-- --dict:70/200(L)-- Current allocation mode is local Last OS error: 2 Current file position is 2
"Error: /rangecheck" 以下も表示されたのは想定外だった。stopped でエラーを捕まえた後に stop 命令を使うと、さっき起こしたエラー内容が表示されるらしい。