123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799 |
- % 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
|