799 lines
25 KiB
PostScript
799 lines
25 KiB
PostScript
% Copyright (C) 1995 Aladdin Enterprises. 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.
|
|
%
|
|
% For more information about licensing, please refer to
|
|
% http://www.ghostscript.com/licensing/. For information on
|
|
% commercial licensing, go to http://www.artifex.com/licensing/ or
|
|
% contact Artifex Software, Inc., 101 Lucas Valley Road #110,
|
|
% San Rafael, CA 94903, U.S.A., +1(415)492-9861.
|
|
|
|
% $Id: stcinfo.ps,v 1.4 2002/02/21 21:49:28 giles Exp $
|
|
% stcinfo.ps
|
|
% Epson Stylus-Color Printer-Driver
|
|
|
|
% The purpose of this file is to print & show Parameters of the
|
|
% stcolor-driver. If not run on ghostscript/stcolor, it prints
|
|
% something like a color-chart.
|
|
|
|
% use either existing STCinfo-dictionary, retrieve new one or create dummy
|
|
|
|
statusdict begin product end
|
|
dup (Ghostscript) eq 1 index (Aladdin Ghostscript) eq or
|
|
exch (AFPL Ghostscript) eq or{
|
|
|
|
currentdevice getdeviceprops .dicttomark
|
|
dup /Name get (stcolor) eq /STCi_onstc exch def
|
|
/STCinfo where {/STCinfo get exch pop} if
|
|
/STCinfo exch def
|
|
|
|
}{
|
|
|
|
/STCinfo 10 dict def
|
|
STCinfo begin /Name (unknown) def end
|
|
/STCi_onstc false def
|
|
|
|
}ifelse
|
|
|
|
% Next Block are procedures to generate the color-triangles.
|
|
% you may wish to separate them, just look ahead for the name
|
|
% given in the next line to achieve that.
|
|
% Begin: colortri_procedures
|
|
|
|
% Plot the CIE-XY-triangle (or something like that)
|
|
|
|
% /colortri_mat Conversion matrix RGB -> XYZ
|
|
% /colortri_bg procedure, that takes X/Y-Values and delivers the
|
|
% "background color" as RGB-Values, default is:
|
|
% {pop pop 0.85 dup dup}
|
|
|
|
% The default matrix was taken from:
|
|
% Color spaces FAQ - David Bourgin
|
|
% Date: 15/6/94 (items 5.3 and 6 updated)
|
|
% Last update: 29/6/94
|
|
|
|
/colortri_mat [ % RGB -> CIE XYZitu601-1 (D65)
|
|
0.4306 0.3415 0.1784
|
|
0.2220 0.7067 0.0713
|
|
0.0202 0.1295 0.9394
|
|
] def
|
|
|
|
/colortri_bg {pop pop 0.85 dup dup} bind def
|
|
|
|
|
|
% +---------------------------------------------------------------------+
|
|
% | Besides from fixing bugs, nothing should be changed below this line |
|
|
% +---------------------------------------------------------------------+
|
|
|
|
|
|
% Arbitrary operation on a pair of vectors, *CHANGES* 1st.
|
|
% invoke: Vaccu Vop op vop
|
|
/vop {
|
|
bind 0 1 3 index length 1 sub {
|
|
3 index 1 index get 3 index 2 index get 3 index exec 4 index 3 1 roll put
|
|
} for pop pop
|
|
} bind def
|
|
|
|
/vsub { {sub} vop } bind def % subtract two vectors
|
|
/vmul { {mul} vop } bind def % multiply two vectors
|
|
|
|
% Compute sum of vectors elements
|
|
/vsum {0.0 exch{add}forall} bind def
|
|
|
|
|
|
% Sum up products of elements
|
|
/veqn { [ 3 -1 roll {} forall ] exch vmul vsum } bind def
|
|
|
|
% Find index of |maximum| in array
|
|
/imax {
|
|
dup 0 get abs 0 exch % array i v[i]
|
|
1 1 4 index length 1 sub {
|
|
3 index 1 index get abs dup 3 index gt {4 2 roll}if pop pop
|
|
} for
|
|
3 -1 roll pop
|
|
} bind def
|
|
|
|
% Procedure to *CHANGE* RGB-Values into XYZ-Values
|
|
/rgb2xyz {
|
|
0 3 6 { colortri_mat exch 3 getinterval 1 index veqn exch } for astore
|
|
} bind def
|
|
|
|
% Procedure to *CHANGE* transform rgb->xy
|
|
/rgb2xy {
|
|
rgb2xyz
|
|
dup 0 get 1 index 1 get 2 index vsum % XYZ X Y sum
|
|
dup 0 ne {
|
|
exch 1 index div 3 1 roll div % XYZ y x
|
|
2 index exch 0 exch put % xYZ y
|
|
1 index exch 1 exch put % xyZ
|
|
}{
|
|
pop pop pop dup 0 0 put dup 0 1 put
|
|
} ifelse
|
|
0 2 getinterval
|
|
} bind def
|
|
|
|
% So here we go with our procedure
|
|
|
|
/colortri { %Usage: box #pixels
|
|
save
|
|
1 index type /arraytype eq {exch 8}{3 1 roll} ifelse % Default scale
|
|
/colortri_scale exch def
|
|
/colortri_box exch def
|
|
|
|
|
|
% Prepare some useful constants for xy -> RGB conversion
|
|
|
|
/colsum [ % Array with column-sums
|
|
0 1 2{0 exch 3 1 index 6 add{colortri_mat exch get add}for}for
|
|
] def
|
|
|
|
/Xrow colortri_mat 0 3 getinterval def % two rows from colortri_mat
|
|
/Yrow colortri_mat 3 3 getinterval def
|
|
|
|
% Avoid allocating new arrays
|
|
/xcoeff 3 array def
|
|
/ycoeff 3 array def
|
|
|
|
% Procedure to derive RGB-Values form X,Y
|
|
/xy2rgb{ aload pop
|
|
dup dup dup ycoeff astore colsum vmul Yrow vsub imax
|
|
3 index dup dup xcoeff astore colsum vmul Xrow vsub imax
|
|
3 -1 roll 1 index 1 index gt{
|
|
xcoeff ycoeff /xcoeff exch def /ycoeff exch def pop 3 -1 roll pop
|
|
}{
|
|
3 1 roll pop pop
|
|
} ifelse
|
|
1e-6 lt { % No Pivot ?
|
|
pop colortri_bg xcoeff astore pop
|
|
}{ % Have a Pivot
|
|
dup ycoeff exch get neg
|
|
0 1 2 { dup ycoeff exch get 2 index div ycoeff 3 1 roll put} for
|
|
pop ycoeff 1 index 0 put
|
|
|
|
xcoeff 1 index get
|
|
0 1 2 {
|
|
ycoeff 1 index get 2 index mul xcoeff 2 index get add
|
|
xcoeff 3 1 roll put
|
|
} for
|
|
pop xcoeff 1 index 0 put
|
|
xcoeff imax 1e-6 lt { % no Pivot ?
|
|
pop pop colortri_bg xcoeff astore pop
|
|
}{
|
|
dup 2 index or 3 exch sub
|
|
xcoeff 1 index get xcoeff 3 index get div neg
|
|
xcoeff exch 3 index exch put
|
|
xcoeff 1 index 1 put
|
|
ycoeff exch get ycoeff 2 index get xcoeff 4 -1 roll get mul add
|
|
xcoeff 3 1 roll put
|
|
0 1 2 {
|
|
xcoeff exch get dup -0.0015 lt exch 1.0015 gt or {
|
|
colortri_bg xcoeff astore dup exit
|
|
} if
|
|
} for
|
|
pop pop xcoeff
|
|
} ifelse
|
|
} ifelse
|
|
} bind def
|
|
|
|
% Compute the displayed range
|
|
[ 1 1 1 ] rgb2xy
|
|
dup 0 get /colortri_x0 exch def /colortri_dx colortri_x0 def
|
|
1 get /colortri_y0 exch def /colortri_dy colortri_y0 def
|
|
[[0 0 1][0 1 0][0 1 1][1 0 0][1 0 1][1 1 0]] {
|
|
rgb2xy
|
|
dup 0 get
|
|
dup colortri_x0 lt {/colortri_x0 1 index def}if
|
|
dup colortri_dx gt {/colortri_dx 1 index def}if
|
|
pop 1 get
|
|
dup colortri_y0 lt {/colortri_y0 1 index def}if
|
|
dup colortri_dy gt {/colortri_dy 1 index def}if
|
|
pop
|
|
} forall
|
|
colortri_dx colortri_x0 sub /colortri_dx exch def
|
|
colortri_dy colortri_y0 sub /colortri_dy exch def
|
|
%
|
|
|
|
% determine the scale
|
|
colortri_box 2 get colortri_box 0 get sub colortri_dx div % fx
|
|
colortri_box 3 get colortri_box 1 get sub colortri_dy div % fx fy
|
|
gt { % fy limits
|
|
colortri_box 3 get colortri_box 1 get sub
|
|
dup colortri_dx mul colortri_dy div exch
|
|
}{ % fx limits
|
|
colortri_box 2 get colortri_box 0 get sub
|
|
dup colortri_dy mul colortri_dx div
|
|
} ifelse
|
|
dtransform abs colortri_scale div cvi /colortri_ny exch def
|
|
abs colortri_scale div cvi /colortri_nx exch def
|
|
colortri_nx colortri_scale mul colortri_ny colortri_scale mul
|
|
idtransform abs exch abs exch
|
|
colortri_box 0 get colortri_box 2 get 1 index sub 3 index sub 2 div add
|
|
colortri_box 1 get colortri_box 3 get 1 index sub 3 index sub 2 div add
|
|
transform .5 add cvi exch .5 add cvi exch itransform
|
|
translate scale
|
|
|
|
% String & indices
|
|
/colortri_tmp colortri_nx 3 mul string def
|
|
/colortri_dx colortri_dx colortri_nx 1 sub div def
|
|
/colortri_dy colortri_dy colortri_ny 1 sub div def
|
|
/colortri_xy [ colortri_x0 colortri_y0 ] def
|
|
/colortri_ie colortri_tmp length 3 sub def
|
|
|
|
colortri_nx colortri_ny 8 [ colortri_nx 0 0 colortri_ny 0 0 ]
|
|
{
|
|
colortri_xy 0 colortri_x0 put
|
|
0 3 colortri_ie {
|
|
colortri_tmp exch % buf ir
|
|
colortri_xy xy2rgb % buf ir rgb buf ib
|
|
2 index 2 index 2 add 2 index 2 get 255 mul cvi put
|
|
2 index 2 index 1 add 2 index 1 get 255 mul cvi put
|
|
0 get 255 mul cvi put
|
|
colortri_xy dup 0 exch 0 get colortri_dx add put
|
|
}for
|
|
colortri_xy dup 1 exch 1 get colortri_dy add put
|
|
colortri_tmp
|
|
} bind
|
|
false 3 colorimage
|
|
restore
|
|
} bind def
|
|
|
|
% [ newpath clippath pathbbox ] colortri showpage % standalone usage
|
|
|
|
% End: colortri_procedures
|
|
|
|
% The next section is a group of procedures, that I for myself
|
|
% do no more fully understand, but they do the Job.
|
|
|
|
% Begin: stcinfo_procedures_1
|
|
|
|
% fetch a parameter from the dictionary
|
|
/STCiget { STCinfo exch get } bind def
|
|
|
|
% action upon ProcessColorModel
|
|
/STCimode {
|
|
/ProcessColorModel STCiget dup
|
|
/DeviceCMYK eq{pop 2}{/DeviceRGB eq{1}{0}ifelse}ifelse get exec
|
|
} bind def
|
|
|
|
% print given number of blanks
|
|
/STCipspace {
|
|
dup 0 gt{ 1 exch 1 exch { pop ( ) print}for }{ pop } ifelse
|
|
} bind def
|
|
|
|
% print right or left-justified text
|
|
/STCiprint {
|
|
dup 0 gt { dup 2 index length sub STCipspace } if
|
|
1 index print
|
|
dup 0 lt { neg dup 2 index length sub STCipspace } if
|
|
pop pop
|
|
} bind def
|
|
|
|
% floating-point to fixed-length-string conversion
|
|
|
|
/STCicvs { % number -> string
|
|
|
|
% Prepare the result
|
|
8 string dup 0 ( ) putinterval
|
|
exch
|
|
|
|
% Make it unsigned
|
|
dup 0 lt {neg(-)}{( )}ifelse 0 get exch
|
|
|
|
dup 1000 lt 1 index 0 eq 2 index 0.001 ge or and { % floating point
|
|
(e+) 0
|
|
}{ % engineering
|
|
0 {
|
|
1 index 1000.0 ge
|
|
{3 add exch 1000 div exch}
|
|
{1 index 1 lt {3 sub exch 1000 mul exch}{exit}ifelse}
|
|
ifelse
|
|
}loop
|
|
dup 0 lt {neg(e-)}{(e+)}ifelse exch
|
|
}ifelse
|
|
|
|
% string sign num esig e
|
|
|
|
% always up to three Integer Digits plus sign
|
|
2 index cvi 3 { % string sign num esig e int ind
|
|
1 index 10 div cvi dup 10 mul 3 index exch sub cvi
|
|
(0123456789) exch get 8 index exch 3 index exch put
|
|
3 -2 roll 1 sub exch pop dup 0 eq 2 index 0 eq or {exit} if
|
|
} loop exch pop % string sign num esig e ind
|
|
5 index exch 6 -1 roll put % string num esig e
|
|
|
|
% print either fraction or exponent
|
|
dup 0 eq { pop pop dup cvi sub % String fraction
|
|
|
|
dup 0.0 ne { % Fraction present
|
|
0.0005 add 1 index 4 (.) putinterval
|
|
5 1 7 { % string frac ind
|
|
exch 10 mul dup cvi exch 1 index sub % string ind ic nfrac
|
|
exch (0123456789) exch get 3 -1 roll % string nfrac chr ind
|
|
exch 3 index 3 1 roll put
|
|
} for
|
|
} if
|
|
pop
|
|
|
|
}{ 3 -1 roll pop % string esig e
|
|
|
|
exch 2 index exch 4 exch putinterval
|
|
7 -1 6 { % string n i
|
|
1 index 10 div cvi dup 10 mul 3 index exch sub cvi % string n i n/10
|
|
(0123456789) exch get 4 index exch 3 index exch put
|
|
exch pop exch pop
|
|
} for
|
|
pop
|
|
} ifelse
|
|
|
|
} bind def
|
|
|
|
% compute colorvalue-steps from transfer & coding
|
|
/STCisteps { % xfer, coding => X-values, Y-Values
|
|
% 2^nbits
|
|
2 /BitsPerComponent STCiget dup 11 gt { pop 11 } if exp cvi
|
|
|
|
% X & Y - Arrays (stack: xv:4 yv:3 xfer:2 coding:1 2^ni:0)
|
|
dup 1 add array 1 index array 5 2 roll
|
|
|
|
% compute GS-Color-Value according to the coding-array
|
|
|
|
1 index null eq { % no coding present
|
|
|
|
0 1 2 index 1 sub {
|
|
dup 6 index exch dup 4 index div put
|
|
4 index exch dup 3 index 1 sub div put
|
|
} for
|
|
|
|
}{ % coding-array given
|
|
|
|
1.0 1 index 1 sub div % y step
|
|
0 % current index
|
|
0 1 4 index 1 sub { % over indices
|
|
dup 3 index mul
|
|
{
|
|
dup 3 index 1 add dup 8 index length ge {pop pop exit} if % i y
|
|
7 index exch get le {exit} if
|
|
2 index 1 add 3 1 roll 4 -1 roll pop
|
|
} loop
|
|
5 index 3 index get sub
|
|
5 index 3 index 1 add get 6 index 4 index get sub div
|
|
2 index add 5 index length 1 sub div
|
|
2 copy exch dup 0 eq {
|
|
10 index exch 0.0 put pop
|
|
}{
|
|
dup 10 index exch 1 sub get 3 -1 roll add 2 div
|
|
10 index 3 1 roll put
|
|
}ifelse
|
|
7 index 3 1 roll put
|
|
} for % over indices
|
|
pop pop
|
|
} ifelse
|
|
4 index 1 index 1.0 put
|
|
|
|
% Replace the raw y-values by those computed from the transfer-array
|
|
|
|
0 1 2 index 1 sub { % over indices, 2nd
|
|
dup 5 index exch get
|
|
dup 5 index length 1 sub mul cvi % -> iy
|
|
5 index 1 index get
|
|
1 index 1 add 7 index length lt {
|
|
dup 7 index 3 index 1 add get exch sub
|
|
3 index 3 index 9 index length 1 sub div sub mul
|
|
7 index length 1 sub mul add
|
|
} if
|
|
exch pop exch pop 5 index 3 1 roll put
|
|
} for % over indices, 2nd
|
|
|
|
pop pop pop
|
|
} bind def
|
|
|
|
/STCibar { % Window X-Values proc => Window
|
|
0 1 3 index length 2 sub {
|
|
dup 3 index exch get exch
|
|
1 add 3 index exch get
|
|
dup 2 index add 2 div 3 index exec % Color to average
|
|
4 index 2 get 5 index 0 get sub exch 1 index mul 5 index 0 get add 3 1 roll
|
|
mul 4 index 0 get add 4 index 3 get 5 index 1 get
|
|
newpath
|
|
2 index 1 index moveto
|
|
3 index 1 index lineto
|
|
3 index 2 index lineto
|
|
2 index 2 index lineto
|
|
closepath fill
|
|
pop pop pop pop
|
|
} for
|
|
pop pop
|
|
0 setgray
|
|
newpath
|
|
dup 0 get 1 index 1 get moveto
|
|
dup 2 get 1 index 1 get lineto
|
|
dup 2 get 1 index 3 get lineto
|
|
dup 0 get 1 index 3 get lineto
|
|
closepath stroke
|
|
pop
|
|
} bind def
|
|
|
|
% End: stcinfo_procedures_1
|
|
|
|
% Begin: stcinfo_preparation
|
|
|
|
% Compute used area from clippath
|
|
|
|
/STCi_clip [
|
|
newpath clippath pathbbox
|
|
2 sub 4 1 roll 2 sub 4 1 roll 2 add 4 1 roll 2 add 4 1 roll
|
|
] def
|
|
|
|
%
|
|
% Perpare the texual messages, assume no stcolor if this fails
|
|
%
|
|
{
|
|
/STCi_stopped % A Special Mark
|
|
|
|
% Textual Parameters (an array of pairs of strings)
|
|
/STCi_l1 0 def
|
|
/STCi_l2 0 def
|
|
/STCi_text [
|
|
% Driver-Name & Version
|
|
(Parameters of)
|
|
/Name STCiget length /Version STCiget length add 1 add string
|
|
dup 0 /Name STCiget putinterval dup /Name STCiget length (-)putinterval
|
|
dup /Name STCiget length 1 add /Version STCiget putinterval
|
|
% Dithering-Algorithm
|
|
(Dithering)
|
|
/Dithering STCiget
|
|
[{( \(Monochrome\))}{( \(RGB\))}{( \(CMYK\))}] STCimode
|
|
dup length 2 index length add string exch 1 index exch
|
|
3 index length exch putinterval dup 3 1 roll exch 0 exch putinterval
|
|
% Flags for the algorithm
|
|
(Flag4-0) 5 string
|
|
dup 0 /Flag4 STCiget {(T)}{(f)} ifelse putinterval
|
|
dup 1 /Flag3 STCiget {(T)}{(f)} ifelse putinterval
|
|
dup 2 /Flag2 STCiget {(T)}{(f)} ifelse putinterval
|
|
dup 3 /Flag1 STCiget {(T)}{(f)} ifelse putinterval
|
|
dup 4 /Flag0 STCiget {(T)}{(f)} ifelse putinterval
|
|
|
|
% Bits Per Pixel & Bits Per Component
|
|
(BitsPerPixel) 10 string % (nn -> nxnn)
|
|
/BitsPerPixel STCiget 1 index cvs length % string used
|
|
dup 2 index exch ( -> ) putinterval 4 add dup 2 add exch 2 index exch
|
|
[{(1x)}{(3x)}{(4x)}] STCimode putinterval % String used
|
|
/BitsPerComponent STCiget 2 index 2 index 2 getinterval cvs length add
|
|
0 exch getinterval
|
|
|
|
() ()
|
|
% ColorAdjustMatrix
|
|
(ColorAdjustMatrix)
|
|
/ColorAdjustMatrix STCiget dup null eq {
|
|
pop (default)
|
|
}{
|
|
{ STCicvs } forall
|
|
[{ % Monochrome
|
|
26 string
|
|
dup 0 6 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 5 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 4 -1 roll putinterval
|
|
}{ % RGB
|
|
26 string
|
|
dup 0 12 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 11 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 10 -1 roll putinterval
|
|
|
|
() 26 string
|
|
dup 0 11 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 10 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 9 -1 roll putinterval
|
|
|
|
() 26 string
|
|
dup 0 10 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 9 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 8 -1 roll putinterval
|
|
}{
|
|
35 string
|
|
dup 0 19 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 18 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 17 -1 roll putinterval dup 26 ( ) putinterval
|
|
dup 27 16 -1 roll putinterval
|
|
|
|
() 35 string
|
|
dup 0 17 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 16 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 15 -1 roll putinterval dup 26 ( ) putinterval
|
|
dup 27 14 -1 roll putinterval
|
|
|
|
() 35 string
|
|
dup 0 15 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 14 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 13 -1 roll putinterval dup 26 ( ) putinterval
|
|
dup 27 12 -1 roll putinterval
|
|
|
|
() 35 string
|
|
dup 0 13 -1 roll putinterval dup 8 ( ) putinterval
|
|
dup 9 12 -1 roll putinterval dup 17 ( ) putinterval
|
|
dup 18 11 -1 roll putinterval dup 26 ( ) putinterval
|
|
dup 27 10 -1 roll putinterval
|
|
|
|
}
|
|
] STCimode
|
|
} ifelse
|
|
() ()
|
|
|
|
% Printer Model
|
|
(Printer-Model) /Model STCiget
|
|
|
|
% Resolution
|
|
(Resolution) 15 string % (nnnnnxnnnnn DpI)
|
|
/HWResolution STCiget 0 get cvi 1 index cvs length
|
|
dup 2 index exch (x) putinterval 1 add dup 2 index exch 5 getinterval
|
|
/HWResolution STCiget 1 get cvi exch cvs length add dup 2 index
|
|
exch ( DpI) putinterval 4 add 0 exch getinterval
|
|
|
|
% HWsize holds entire Page in Pixels,
|
|
% .HWMargins is [left,bottom,right,top] in Points
|
|
(Printed Area) 18 string % (nnnnnxnnnnn Pixel)
|
|
/HWSize STCiget 0 get /.HWMargins STCiget dup 0 get exch 2 get add
|
|
/HWResolution STCiget 0 get mul 72.0 div sub cvi 1 index cvs length
|
|
dup 2 index exch (x) putinterval 1 add dup 2 index exch 5 getinterval
|
|
/HWSize STCiget 1 get /.HWMargins STCiget dup 1 get exch 3 get add
|
|
/HWResolution STCiget 1 get mul 72.0 div sub cvi exch cvs length add
|
|
dup 2 index exch ( Pixel) putinterval 6 add 0 exch getinterval
|
|
|
|
() ()
|
|
% WeaveMode
|
|
(Weave-Mode)
|
|
/noWeave STCiget {
|
|
(noWeave)
|
|
}{
|
|
/Microweave STCiget {(Microweave)}{(Softweave)}ifelse
|
|
}ifelse
|
|
% Unidirectional
|
|
(Unidirectional) /Unidirectional STCiget {(ON)}{(off)} ifelse
|
|
% Output coding
|
|
(OutputCode) /OutputCode STCiget
|
|
% number of heads
|
|
(escp_Band) /escp_Band STCiget 3 string cvs
|
|
(escp_Width) /escp_Width STCiget 5 string cvs
|
|
(escp_Height) /escp_Height STCiget 5 string cvs
|
|
(escp_Top) /escp_Top STCiget 5 string cvs
|
|
(escp_Bottom) /escp_Bottom STCiget 5 string cvs
|
|
] def
|
|
|
|
%
|
|
% compute the Proper X & Y-Arrays
|
|
%
|
|
[{ % Monochrome
|
|
/Ktransfer STCiget /Kcoding STCiget STCisteps
|
|
/STCi_yv [ 3 -1 roll ] def
|
|
/STCi_xv [ 3 -1 roll ] def
|
|
/STCi_col [[0 0 0]] def
|
|
/STCi_set [{1.0 exch sub setgray}] def
|
|
}{ % RGB
|
|
/Rtransfer STCiget /Rcoding STCiget STCisteps
|
|
/Gtransfer STCiget /Gcoding STCiget STCisteps
|
|
/Btransfer STCiget /Bcoding STCiget STCisteps
|
|
exch 4 -1 roll 6 -1 roll exch 3 -1 roll
|
|
/STCi_xv [ 5 2 roll ] def
|
|
/STCi_yv [ 5 2 roll ] def
|
|
/STCi_col [[1 0 0] [0 1 0] [0 0 1]] def
|
|
/STCi_set [
|
|
{1.0 exch sub 1 exch dup setrgbcolor}
|
|
{1.0 exch sub dup 1 exch setrgbcolor}
|
|
{1.0 exch sub dup 1 setrgbcolor}
|
|
] def
|
|
}{ % CMYK
|
|
/Ctransfer STCiget /Ccoding STCiget STCisteps
|
|
/Mtransfer STCiget /Mcoding STCiget STCisteps exch 3 1 roll
|
|
/Ytransfer STCiget /Ycoding STCiget STCisteps exch 4 1 roll
|
|
/Ktransfer STCiget /Kcoding STCiget STCisteps exch 5 1 roll
|
|
/STCi_yv [ 6 2 roll ] def
|
|
/STCi_xv [ 6 2 roll ] def
|
|
/STCi_col [[0 1 1] [1 0 1] [1.0 0.5 0.0] [0 0 0]] def
|
|
/STCi_set [
|
|
{ 0 0 0 setcmykcolor }
|
|
{ 0 exch 0 0 setcmykcolor }
|
|
{ 0 exch 0 exch 0 setcmykcolor }
|
|
{ 0 exch 0 exch 0 exch setcmykcolor }
|
|
] def
|
|
}
|
|
]STCimode
|
|
|
|
} stopped
|
|
|
|
{ {/STCi_stopped eq {exit}if}loop true}
|
|
{ {/STCi_stopped eq {exit}if}loop false} ifelse
|
|
|
|
% End: stcinfo_preparation
|
|
|
|
% The Next section does the real job
|
|
|
|
% Begin: stcinfo_execution
|
|
{
|
|
(%%[ stcinfo.ps: currentdevice is not supported -> colortri ]%%\n) print
|
|
STCi_clip colortri % The default action
|
|
|
|
}{
|
|
%
|
|
% Print the text
|
|
%
|
|
0 2 STCi_text length 2 sub { dup 1 add exch
|
|
STCi_text exch get length dup STCi_l1 gt{/STCi_l1 exch def}{pop}ifelse
|
|
STCi_text exch get length dup STCi_l2 gt{/STCi_l2 exch def}{pop}ifelse
|
|
} for
|
|
/STCi_l2 STCi_l2 neg def
|
|
0 2 STCi_text length 2 sub {
|
|
dup 1 add STCi_text exch get exch STCi_text exch get
|
|
1 index length 0 gt {
|
|
dup STCi_l1 STCiprint length 0 gt {(: )}{( )}ifelse print print
|
|
}{
|
|
pop pop
|
|
} ifelse
|
|
(\n) print
|
|
} for
|
|
%
|
|
% Deactivate a present ColorAdjust Matrix, if any
|
|
%
|
|
/ColorAdjustMatrix STCiget null ne STCi_onstc and {
|
|
mark
|
|
/ColorAdjustMatrix null
|
|
currentdevice putdeviceprops pop
|
|
} if
|
|
%
|
|
% "Show" the text
|
|
%
|
|
/Times-Roman findfont 10 scalefont setfont
|
|
/STCi_l1 0 def
|
|
0 2 STCi_text length 2 sub {
|
|
STCi_text exch get stringwidth pop dup STCi_l1 gt {
|
|
/STCi_l1 exch def
|
|
}{
|
|
pop
|
|
} ifelse
|
|
} for
|
|
STCi_l1 STCi_clip 0 get add /STCi_l1 exch def
|
|
|
|
STCi_clip 3 get 12 sub
|
|
0 2 STCi_text length 2 sub {
|
|
STCi_text exch get dup length 0 gt {
|
|
dup stringwidth pop STCi_l1 exch sub 2 index moveto show
|
|
}{
|
|
pop
|
|
} ifelse
|
|
12 sub
|
|
} for
|
|
pop
|
|
|
|
/Courier findfont 10 scalefont setfont
|
|
/STCi_l2 0 def
|
|
1 2 STCi_text length 1 sub {
|
|
STCi_text exch get stringwidth pop dup STCi_l2 gt {
|
|
/STCi_l2 exch def
|
|
}{
|
|
pop
|
|
} ifelse
|
|
} for
|
|
|
|
STCi_clip 3 get 12 sub
|
|
1 2 STCi_text length 1 sub {
|
|
STCi_text exch get dup length 0 gt {
|
|
STCi_l1 12 add 2 index moveto show
|
|
}{
|
|
pop
|
|
} ifelse
|
|
12 sub
|
|
} for
|
|
pop
|
|
|
|
%
|
|
% compute the space for the graph-window
|
|
%
|
|
STCi_l1 12 add STCi_l2 add 12 add dup STCi_clip 2 get exch sub % Extend
|
|
[ 3 -1 roll dup 3 index add STCi_clip 3 get dup 5 index sub 3 1 roll ]
|
|
/STCi_win exch def /STCi_l1 exch def
|
|
|
|
% The "Axis"
|
|
newpath
|
|
STCi_win 0 get STCi_win 1 get 14 add moveto
|
|
STCi_win 2 get STCi_win 1 get 14 add lineto stroke
|
|
|
|
STCi_win 0 get 14 add STCi_win 1 get moveto
|
|
STCi_win 0 get 14 add STCi_win 3 get lineto stroke
|
|
|
|
% The Labels
|
|
/Times-Roman findfont 10 scalefont setfont
|
|
(Postscript-color) dup stringwidth pop
|
|
STCi_win 2 get STCi_win 0 get sub 14 sub 1 index sub 2 div exch pop
|
|
STCi_win 0 get add 14 add STCi_win 1 get 4 add moveto show
|
|
|
|
gsave
|
|
STCi_win 0 get 10 add STCi_win 1 get 14 add translate 90 rotate
|
|
(Device-color) dup stringwidth pop
|
|
STCi_win 3 get STCi_win 1 get sub 14 sub 1 index sub 2 div exch pop
|
|
0 moveto show
|
|
grestore
|
|
|
|
% The Graphs
|
|
gsave
|
|
STCi_win 0 get 14 add STCi_win 1 get 14 add
|
|
STCi_win 2 get 2 index sub STCi_win 3 get 2 index sub
|
|
4 2 roll translate
|
|
STCi_col 0 1 2 index length 1 sub {
|
|
1 index 1 index get aload pop setrgbcolor
|
|
STCi_xv 1 index get STCi_yv 3 -1 roll get
|
|
newpath
|
|
1 index 0 get 5 index mul 1 index 0 get 5 index mul moveto
|
|
1 index 1 get 5 index mul 1 index 0 get 5 index mul lineto
|
|
1 1 2 index length 1 sub {
|
|
2 index 1 index get 6 index mul
|
|
2 index 2 index get 6 index mul lineto
|
|
2 index 1 index 1 add get 6 index mul
|
|
2 index 2 index get 6 index mul lineto
|
|
pop
|
|
} for
|
|
stroke pop pop
|
|
} for
|
|
pop pop pop
|
|
grestore
|
|
|
|
%
|
|
% Find lowest Y from Text or graph
|
|
%
|
|
STCi_win 1 get STCi_clip 3 get STCi_text length 2 div 12 mul sub
|
|
dup 2 index gt { pop } { exch pop } ifelse 12 sub
|
|
|
|
%
|
|
% compute the upper bar-window
|
|
%
|
|
/STCi_win [
|
|
STCi_clip 0 get 4 -1 roll 36 sub STCi_clip 2 get 1 index 36 add
|
|
] def
|
|
|
|
%
|
|
% Draw the required number of graphs
|
|
%
|
|
[{ % Monochrome
|
|
STCi_win STCi_xv 0 get {setgray} STCibar
|
|
}{ % RGB
|
|
STCi_win STCi_xv 0 get {0 0 setrgbcolor} STCibar
|
|
STCi_win dup 1 exch 1 get 47 sub put
|
|
STCi_win dup 3 exch 3 get 47 sub put
|
|
STCi_win STCi_xv 1 get {0 0 3 1 roll setrgbcolor} STCibar
|
|
STCi_win dup 1 exch 1 get 47 sub put
|
|
STCi_win dup 3 exch 3 get 47 sub put
|
|
STCi_win STCi_xv 2 get {0 0 3 2 roll setrgbcolor} STCibar
|
|
}{ % CMYK
|
|
STCi_win STCi_xv 0 get {0 0 0 setcmykcolor} STCibar
|
|
STCi_win dup 1 exch 1 get 47 sub put
|
|
STCi_win dup 3 exch 3 get 47 sub put
|
|
STCi_win STCi_xv 1 get {0 0 0 4 1 roll setcmykcolor} STCibar
|
|
STCi_win dup 1 exch 1 get 47 sub put
|
|
STCi_win dup 3 exch 3 get 47 sub put
|
|
STCi_win STCi_xv 2 get {0 0 0 4 2 roll setcmykcolor} STCibar
|
|
STCi_win dup 1 exch 1 get 47 sub put
|
|
STCi_win dup 3 exch 3 get 47 sub put
|
|
STCi_win STCi_xv 3 get {0 0 0 4 3 roll setcmykcolor} STCibar
|
|
}
|
|
] STCimode
|
|
|
|
STCi_win 1 STCi_clip 1 get put
|
|
STCi_win dup 3 exch 3 get 47 sub put
|
|
|
|
%
|
|
% Plot either one or two Color-Triangles
|
|
%
|
|
/ColorAdjustMatrix STCiget null ne STCi_onstc and {
|
|
STCi_win 0 get STCi_win 2 get add 2 div
|
|
[STCi_win 0 get STCi_win 1 get 3 index STCi_win 3 get ] colortri
|
|
mark /ColorAdjustMatrix dup STCiget currentdevice putdeviceprops pop
|
|
[1 index STCi_win 1 get STCi_win 2 get STCi_win 3 get ] colortri
|
|
pop
|
|
}{
|
|
STCi_win colortri
|
|
} ifelse
|
|
newpath clippath stroke
|
|
} ifelse
|
|
showpage
|