GIF89a; EcchiShell v1.0
//proc/self/root/usr/share/ghostscript/ [... ] % readimage - .sizeimageparams exch { % multiproc = true. If N > 1, store the procedures in an array. exch pop 1 index { 1 add } if % Stack: ... string alpha? nprocs dup 1 eq { pop //false % only 1 procedure, multiproc is irrelevant } { dup array 4 1 roll 3 add 2 roll astore 3 1 roll //true } ifelse } { % multiproc = false. pop pop //false } ifelse % Map the rectangle to device coordinates. % Stack: x y w h proc(s) str alpha? multi? 8 -4 roll matrix .sizeimagebox pop 8 4 roll % Make sure we allocate the operand array in local VM % to avoid a possible invalidaccess. .currentglobal //false .setglobal 9 1 roll exch { 1 } { 0 } ifelse exch % alpha is last, if present exch 4 1 roll 8 array astore exch .setglobal { % Read out a block of scan lines and pass them to the procedure. % Stack: [x y w h alpha? proc(s) str multi?] -- we must consume this. dup 3 get 0 eq { pop exit } if aload 9 1 roll pop exch pop currentdevice 7 1 roll % Always read out the data as standard (not native) pixels. .sizeimageparams pop pop exch .getbitsrect % Stack: [x y w h alpha? proc(s) str multi?] hread substr 3 -1 roll % Stack: hread substr [x y w h alpha? proc(s) str multi?] dup 1 2 copy get 5 index add put % Stack: hread substr [x y' w h alpha? proc(s) str multi?] dup 3 2 copy get 6 -1 roll sub put % Stack: substr [x y' w h' alpha? proc(s) str multi?] dup 5 get exch 7 get { % multiproc = true, pass each plane to a different procedure. % Stack: substr procs 0 1 2 index length 1 sub { % Push 1 plane and its procedure under the top 2 elements. % Stack: ... substr procs plane# 2 index length 2 index length idiv % bytes per plane dup 2 index mul exch % Stack: ... substr procs plane# start length 4 index 3 1 roll getinterval 4 1 roll 2 copy get 4 1 roll pop } for exch pop length 2 mul .execn } { % multiproc = false, just call the procedure. exec } ifelse } //systemdict /exec get 3 packedarray cvx loop } bind odef % % ... alphaimage - % img_utils_dict begin /.alphaimage where { pop .currentglobal //true .setglobal /alphaimage { //true //.colorimage stopped { /alphaimage .systemvar $error /errorname get signalerror } if } .bind systemdict begin odef end .setglobal } if end % Implement sizeimage using lower-level operators. /sizeimage { % sizeimage % % .sizeimagebox 5 -2 roll pop pop .sizeimageparams 3 -1 roll 4 1 roll } bind odef