/usr/share/ghostscript/9.22/Resource/Init/gs_dpnxt.ps is in libgs9-common 9.22~dfsg+1-0ubuntu1.
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 | % 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.
%
% gs_dpnxt.ps
% NeXT Display PostScript extensions
% Define the operation values for compositing. These must match the values
% in gsdpnext.h, which also are the ones from the NeXT documentation.
% We put them in systemdict, which seems like as good a place as any.
mark
/Clear /Copy /Sover /Sin /Sout /Satop /Dover /Din /Dout /Datop /Xor
/PlusD /PlusL /Highlight % not sure about Highlight
counttomark { counttomark 1 sub def } repeat pop
% We implement readimage and sizeimage using the following 3 otherwise
% undocumented lower-level operators:
%
% <x> <y> <width> <height> <matrix> .sizeimagebox
% <dev_x> <dev_y> <dev_width> <dev_height> <matrix>
%
% - .sizeimageparams <bits/sample> <multiproc> <ncolors>
%
% <device> <x> <y> <width> <max_height> <alpha?> <std_depth|null>
% <string> .getbitsrect <height> <substring>
%
% NOTE: These operators are subject to change without notice!
% Implement readimage using .getbitsrect. Experimentation on a NeXT system
% shows that the data is always returned in order of increasing device Y,
% regardless of the CTM.
%
% Note that we can't make stack protection work for this operator,
% because it must remove its operands from the stack before calling
% the supplied procedure(s).
/readimage { % <x> <y> <width> <height> <proc> [... <procN-1>]
% <string> <alpha?> 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
%
% <w> <h> <bpc> <mtx> <dsrc0> ... <multi> <ncomp> 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 { % <x> <y> <width> <height> <matrix> sizeimage
% <devwidth> <devheight> <bits/sample> <matrix>
% <multiproc> <ncolors>
.sizeimagebox 5 -2 roll pop pop
.sizeimageparams 3 -1 roll 4 1 roll
} bind odef
|