/usr/share/ghostscript/9.06/Resource/Init/gs_l2img.ps is in libgs9-common 9.06~dfsg-2+deb8u7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | % Copyright (C) 2001-2012 Artifex Software, Inc.
% All Rights Reserved.
%
% This software is provided AS-IS with no warranty, either express or
% implied.
%
% This software is distributed under license and may not be copied,
% modified or distributed except as expressly authorized under the terms
% of the license contained in the file LICENSE in this distribution.
%
% Refer to licensing information at http://www.artifex.com or contact
% Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134, San Rafael,
% CA 94903, U.S.A., +1(415)492-9861, for further information.
%
% Emulate the Level 2 dictionary-based image operator in Level 1,
% except for Interpolate (ignored) and MultipleDataSources = true;
% also, we require that the data source be either a procedure of a
% particular form or a stream, not a string or a general procedure.
% pdf2ps copies the portion of this file from %BEGIN to %END if Level 1
% compatible output is requested.
/currentglobal where
{ pop currentglobal { setglobal } //true setglobal }
{ { } }
ifelse
/packedarray where
{ pop }
{ /packedarray { array astore readonly } bind def }
ifelse
%BEGIN
11 dict /.csncompdict 1 index def begin
/DeviceGray { 1 /setgray load } bind def
/DeviceRGB { 3 /setrgbcolor load } bind def
/DeviceCMYK { 4 /setcmykcolor load } bind def
/Indexed
{ dup 1 index 1 get //.csncompdict exch get exec
% Stack: [/Indexed base hival map] ncomp basesetcolor
3 -1 roll 3 get mark 3 1 roll
% Stack: ncomp -mark- basesetcolor map
dup type /stringtype eq
{ { -
{ exch round cvi get 255 div
}
-
{ exch round cvi 3 mul 2 copy 2 copy get 255 div
3 1 roll 1 add get 255 div
4 2 roll 2 add get 255 div
}
{ exch round cvi 4 mul 2 copy 2 copy 2 copy get 255 div
3 1 roll 1 add get 255 div
4 2 roll 2 add get 255 div
5 3 roll 3 add get 255 div
}
}
4 index get aload pop counttomark -1 roll
}
{ /exec load 3 -1 roll
% Stack: -mark- mapproc --exec-- basesetcolor
}
ifelse .packtomark cvx
exch pop 1 exch
} bind def
/Separation
{ dup 2 index //.csncompdict exch get exec
% Stack: [/Separation name alt xform] ncomp altsetcolor
3 -1 roll 3 get /exec load 3 -1 roll 3 array astore readonly cvx
exch pop 1 exch
} bind def
% Substitute device spaces for CIE spaces.
/CIEBasedA /DeviceGray load def
/CIEBasedABC /DeviceRGB load def
/CIEBasedDEF /DeviceRGB load def
/CIEBasedDEFG /DeviceCMYK load def
end
/.packtomark { counttomark packedarray exch pop } bind def
/.csinextbits % - .csinextbits <bits>
% Uses b, nnb, i, row, mask, BitsPerComponent;
% sets b, nnb, i.
{ /nnb nnb BitsPerComponent add
{ dup 0 le { exit } if
/b b 8 bitshift row i get add def
/i i 1 add def 8 sub
}
loop def
b nnb bitshift mask and
} bind def
% Note that the ColorSpace key must be present in the image dictionary.
/.colorspaceimage % <imagedict> .colorspaceimage -
{ save exch
dup length 15 add dict begin { cvlit def } forall
ColorSpace dup dup type /nametype ne { 0 get } if
.csncompdict exch get exec
/setpixelcolor exch def /ncomp exch def pop
/row ncomp BitsPerComponent mul Width mul 7 add 8 idiv string def
/mask 1 BitsPerComponent bitshift 1 sub def
/nextbits BitsPerComponent 8 eq
{ { row i get /i i 1 add def } }
{ /.csinextbits load }
ifelse def
/nextpixel mark 0 2 ncomp 1 sub 2 mul
{ /nextbits cvx exch
Decode exch 2 getinterval
dup aload pop exch sub
dup mask eq { pop } { mask div /mul load 3 -1 roll } ifelse
0 get dup 0 eq { pop } { /sub load 3 -1 roll } ifelse
}
for
/setpixelcolor load dup type /operatortype ne { /exec load } if
.packtomark cvx def
/readrow
/DataSource load dup type
dup /arraytype eq exch /packedarraytype eq or
{ % Must be { <file> <string> ... }
aload length 1 add array /pop load exch astore
dup 1 row put cvx
}
{ pop
% Adobe requires readstring to signal an error if given
% an empty string. Work around this nonsense here.
row length 0 eq
{ { } }
{ { DataSource row readstring pop pop } }
ifelse
}
ifelse def
ImageMatrix matrix invertmatrix concat
/imat matrix def
0 1 Height 1 sub
{ imat 5 3 -1 roll neg put
readrow
/b 0 def /nnb 0 def /i 0 def
0 1 Width 1 sub
{ imat 4 3 -1 roll neg put nextpixel
1 1 //true imat {<80>} imagemask
}
for
}
for
end restore
} bind def
%END
exec
currentfile closefile
% Patch for testing.
/.cincompdict 3 dict begin
1 { {0 1} {/DeviceGray} } def
3 { {0 1 0 1 0 1} {/DeviceRGB} } def
4 { {0 1 0 1 0 1 0 1} {/DeviceCMYK} } def
currentdict end def
/.imagekeys [
/Decode /DataSource /ImageMatrix /BitsPerComponent /Height /Width
] def
/colorimage % <width> <height> <bits/comp> <matrix>
% <datasrc> false <ncomp> colorimage -
{ 1 index { /colorimage .systemvar /rangecheck signalerror } if exch pop
//.cincompdict exch get exec
7 dict begin /ColorSpace exch cvlit def
.imagekeys { exch cvlit def } forall
currentdict end .colorspaceimage
} bind odef
/image
{ dup type /dicttype ne
{ 7 dict begin /ColorSpace /DeviceGray def [0 1]
.imagekeys { exch cvlit def } forall
currentdict end
}
{ dup length 1 add dict .copydict dup /ColorSpace currentcolorspace put
}
ifelse
.colorspaceimage
} bind odef
exec
|