/usr/share/pmw/PSheader is in pmw 1:4.24-1.
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 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 | %%Header file for PMW PostScript output
% Last modified for Acorn version: 23 February 1997
% Last modified for Linux version: 28 August 2003
% Re-jigged for Unicode and more than 256 chars per font support: August 2005
% Added extra functions for right-to-left printing: January 2009
% Added function for drawing staves: January 2012
% Made top comment above a %% comment: January 2012
% For fonts that use Adobe's standard encoding (that is, normal text fonts),
% we are going to bind each font twice, to give us 512 characters to play with.
% This is sufficient to encode all existing characters in the normal fonts.
% Here are the two encoding vectors. The first 256 characters are encoded with
% the Unicode encoding.
/LowerEncoding 256 array def
LowerEncoding 0 [
% 00 - 0F
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
% 10 - 1F
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
% 20 - 2F
/space/exclam/quotedbl/numbersign
/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus
/comma/hyphen/period/slash
% 30 - 3F
/zero/one/two/three
/four/five/six/seven
/eight/nine/colon/semicolon
/less/equal/greater/question
% 40 - 4F
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O
% 50 - 5F
/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore
% 60 - 6F
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o
% 70 - 7F
/p/q/r/s/t/u/v/w/x/y/z/braceleft
/bar/braceright/asciitilde/currency
% 80 - 8F
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
% 90 - 9F
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
/currency/currency/currency/currency
% A0 - AF
/space/exclamdown/cent/sterling
/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft
/logicalnot/hyphen/registered/macron
% B0 - BF
/degree/plusminus/twosuperior/threesuperior
/acute/mu/paragraph/bullet
/cedilla/onesuperior/ordmasculine/guillemotright
/onequarter/onehalf/threequarters/questiondown
% C0 - CF
/Agrave/Aacute/Acircumflex/Atilde
/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis
/Igrave/Iacute/Icircumflex/Idieresis
% D0 - DF
/Eth/Ntilde/Ograve/Oacute
/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex
/Udieresis/Yacute/Thorn/germandbls
% E0 - EF
/agrave/aacute/acircumflex/atilde
/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis
/igrave/iacute/icircumflex/idieresis
% F0 - FF
/eth/ntilde/ograve/oacute
/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex
/udieresis/yacute/thorn/ydieresis
]putinterval
% The next encoding vector uses Unicode for the first 128 characters (Latin
% Extended-A). The remainder are used arbitrarily for the remaining Adobe
% standardly encoded characters. This latter part of the encoding must be kept
% in step with the appropriate table in the code.
/UpperEncoding 256 array def
UpperEncoding 0 [
% 100 - 10F
/Amacron/amacron/Abreve/abreve
/Aogonek/aogonek/Cacute/cacute
/currency/currency/currency/currency
/Ccaron/ccaron/Dcaron/dcaron
% 110 - 11F
/Dcroat/dcroat/Emacron/emacron
/currency/currency/Edotaccent/edotaccent
/Eogonek/eogonek/Ecaron/ecaron
/currency/currency/Gbreve/gbreve
% 120 - 12F
/currency/currency/Gcommaaccent/gcommaaccent
/currency/currency/currency/currency
/currency/currency/Imacron/imacron
/currency/currency/Iogonek/iogonek
% 130 - 13f
/Idotaccent/dotlessi/currency/currency
/currency/currency/Kcommaaccent/kcommaaccent
/currency/Lacute/lacute/Lcommaaccent
/lcommaaccent/Lcaron/lcaron/currency
% 140 - 14F
/currency/Lslash/lslash/Nacute
/nacute/Ncommaaccent/ncommaaccent/Ncaron
/ncaron/currency/currency/currency
/Omacron/omacron/currency/currency
% 150 - 15F
/Ohungarumlaut/ohungarumlaut/OE/oe
/Racute/racute/Rcommaaccent/rcommaaccent
/Rcaron/rcaron/Sacute/sacute
/currency/currency/Scedilla/scedilla
% 160 - 16F
/Scaron/scaron/currency/currency
/Tcaron/tcaron/currency/currency
/currency/currency/Umacron/umacron
/currency/currency/Uring/uring
% 170 - 17F
/Uhungarumlaut/uhungarumlaut/Uogonek/uogonek
/currency/currency/currency/currency
/Ydieresis/Zacute/zacute/Zdotaccent
/zdotaccent/Zcaron/zcaron/currency
% --------------------------------------------------------------------
% These are the remaining characters in the Adobe standard encoding,
% in alphabetic order (seems as good as any other).
% --------------------------------------------------------------------
% 180 - 18F
/Delta/Euro/Scommaaccent/Tcommaaccent
/breve/caron/circumflex/commaaccent
/dagger/daggerdbl/dotaccent/ellipsis
/emdash/endash/fi/fl
% 190 - 19F
/florin/fraction/greaterequal/guilsinglleft
/guilsinglright/hungarumlaut/lessequal/lozenge
/minus/notequal/ogonek/partialdiff
/periodcentered/perthousand/quotedblbase/quotedblleft
% 1A0 - 1AF
/quotedblright/quoteleft/quoteright/quotesinglbase
/radical/ring/scommaaccent/summation
/tcommaaccent/tilde/trademark
]putinterval
% Straightforward abbreviations
/F/fill load def
/GS/gsave load def
/GR/grestore load def
/Mt/moveto load def/Lt/lineto load def
/R/rotate load def
/Rl/rlineto load def/Rm/rmoveto load def
/Ct/curveto load def/Rc/rcurveto load def
/S/stroke load def
/Slw/setlinewidth load def
/Slc/setlinecap load def
/Slj/setlinejoin load def
/Sg/setgray load def
/Sd/setdash load def
/T/translate load def
% Additional control values for slurs: normally zero
/clx 0 def/cly 0 def/crx 0 def/cry 0 def
% For EPS files we must define *all* variables before defining the
% procedures (PRM p. 715) in case they are previously defined.
%EPS /u 0 def /v 0 def /w 0 def /x 0 def /y 0 def /z 0 def
%EPS /x0 0 def /x1 0 def /x2 0 def /y0 0 def /y1 0 def /y2 0 def
%EPS /t1 0 def /t2 0 def /t 0 def /gg 0 def /newfont 0 def
%EPS /a 0 def /b 0 def /c 0 def
% Routine to find a font and re-encode it if it has the standard encoding.
% On the stack we should have two names, for the two differently encoded
% versions of the font. When the font is not re-encoded, the two will end up
% the same. Following the two names is the font name.
% We find the font first, and then look to see if it's in the directory,
% to cope with the case of loading from an auxiliary store.
/inf{dup dup findfont 3 1 roll FontDirectory exch known {pop}{(**** Font ")print
100 string cvs print (" is not loaded ****\r\n)print stop}ifelse
% At this point we have on the stack the two names, followed by the font.
% Duplicate it, and test to see whether it uses the Adobe Standard encoding.
dup dup/Encoding get StandardEncoding eq
% If the result is true, we obey the following.
% Find the maximum length of the font's dictionary, and make two new
% dictionaries of the same length.
{maxlength dup dict/newfont0 exch def dict/newfont1 exch def
% Copy the original font into the two new ones, ommitting only the FID.
dup
{1 index/FID eq{pop pop}{newfont0 3 1 roll put}ifelse}forall
{1 index/FID eq{pop pop}{newfont1 3 1 roll put}ifelse}forall
% Now set up the two new encodings and define the names.
newfont1/Encoding UpperEncoding put dup newfont1 definefont def
newfont0/Encoding LowerEncoding put dup newfont0 definefont def
}
% If the font does not use the Standard Encoding, we set both names to
% the unmodified font.
{3 1 roll def def}ifelse
}bind def
% Font selection
/ss{scalefont setfont}bind def
% Transformed font selection
/sm{makefont setfont}bind def
% Reversed font selections
/ssr{scalefont [-1 0 0 1 0 0] makefont setfont}bind def
/smr{makefont [-1 0 0 1 0 0] makefont setfont}bind def
% Print deep bar line: char-height, ybot, char, x, ytop
/b{/y exch def/x exch def/w exch def/z exch def/v exch def
{x y Mt w show
y z gt{/y y v sub def y z lt{/y z def}if}
{exit}ifelse}loop}bind def
% Print brace: scale, x, ymid
/br{gsave translate dup 0.11 gt {0.11}{dup 2.0 div 0.055 add}ifelse
exch scale 2{0.0 0.0 Mt 100.0 20.0 -50.0 245.0 60.0 260.0
curveto -50.0 245.0 60.0 20.0 0.0 0.0
curveto fill 1.0 -1.0 scale}repeat grestore}bind def
% Print alternate brace: scale, x, ymid
/br2{gsave translate dup 0.11 gt {0.11}{dup 2.0 div 0.055 add}ifelse
exch scale 2{0.0 0.0 Mt 95.0 40.0 -43.0 218.0 37.0 256.0
curveto -59.0 219.0 66.0 34.0 0.0 0.0
curveto fill 1.0 -1.0 scale}repeat grestore}bind def
% Coordinate setup for slurs: x0 y0 x1 y1 "depth"
/cc{/u exch def/y1 exch def/x1 exch def/y0 exch def/x0 exch def
/w y1 y0 sub dup mul x1 x0 sub dup mul add sqrt 2 div def
/v w 2 mul 3 div dup 10 gt {pop 10} if def
x0 x1 add 2.0 div y0 y1 add 2.0 div translate
y1 y0 sub x1 x0 sub atan rotate}bind def
% Set up additional control for slurs: clx cly crx cry
/cA{/cry exch def/crx exch def/cly exch def/clx exch def}bind def
% Draw ordinary slur or tie in preset coordinate system
/cd{w neg 0.05 moveto v w sub clx add u cly add w v sub crx add u cry add
w 0.05 curveto w -0.05 lineto w v sub crx add u cry add 1 sub v w sub clx add
u cly add 1 sub w neg -0.05 curveto closepath fill}bind def
% Print tie or ordinary slur
/cv{gsave cc cd grestore}bind def
% Draw wiggly ordinary slur in preset coordinate system
/cwd{w neg 0.05 moveto v w sub clx add u cly add w v sub crx add cry u sub
w 0.05 curveto w -0.05 lineto w v sub crx add cry u sub 1 sub v w sub clx add
u cly add 1 sub w neg -0.05 curveto closepath fill}bind def
% Print wiggly ordinary slur
/cvw{gsave cc cwd grestore}bind def
% Print editorial marking on slur; trivial when the y control point movements
% are equal; very messy otherwise. On stack: length-adjust, wiggle value (1, -1)
/cem{dup 1 eq cly cry eq and{pop 0 u cly add 0.75 mul /t2 0 def}
{/x1 v w sub clx add def /x2 w v sub crx add def
/y1 u cly add def u mul cry add /y2 exch def
/t 0.5 def
% Put x value on stack; dx value in /t1
/a 2 w mul x1 x2 sub 3 mul add def
/b x2 2 x1 mul sub w sub 3 mul def
/c x1 w add 3 mul def
a t mul b add t mul c add t mul w sub
/t1 a 3 mul t mul b 2 mul add t mul c add def
% Put y value on stack; dy value in /t2
/a y1 y2 sub 3 mul def
/b 3 y2 mul 6 y1 mul sub def
/c 3 y1 mul def
a t mul b add t mul c add t mul
/t2 a 3 mul t mul b 2 mul add t mul c add def
}ifelse
translate t2 0 ne {t2 t1 atan rotate} if
0 2 moveto 4 add neg 0 exch rlineto 0.4 Slw stroke}bind def
% Print editorial slur
/cve{gsave cc cd 0.8 1 cem grestore}bind def
% Print wiggly editorial slur
/cvwe{gsave cc cwd 0.8 -1 cem grestore}bind def
% Print straight dashed line: x1 y1 x0 y0 width [dash1 dash2]
% Do some device-specific stuff on the width, as this is used
% for dotted bar lines, which must all look the same width.
/dl{gsave 0 Sd 0 dtransform exch floor exch idtransform pop
Slw Mt Lt stroke grestore}bind def
% Print system bracket: x, ytop, ybot
/k{/y1 exch def/y2 exch def/x exch def
currentfont mf
y2 y1 sub dup 16 gt {pop 16}if
dup 1 sub /y exch def
dup y2 exch sub /y2 exch def
16 div 10 mul ss
x y2 Mt
(\260) show
{/y2 y2 y sub def
y2 y1 le {exit}if x y2 Mt (B)show}loop
x y1 Mt (\261)show
setfont}bind def
% Print straight line: x1 y1 x0 y0 width
/l{Slw Mt Lt stroke}bind def
% Print sequence of straight lines: xn yn ... count x0 y0 width
/ll{Slw Mt 1 1 3 -1 roll{pop Lt}for stroke}bind def
% Print beam: z x1 y1 x0 y0
/m{/y0 exch def/x0 exch def/y1 exch def/x1 exch def/z exch def
x0 y0 Mt x1 y1 Lt x1 y1 z add Lt x0 y0 z add Lt fill}bind def
% Print string relative to current point: string x y
/rs{rmoveto show}bind def
% Print string: string x y
/s{moveto show}bind def
% Print string at current point: string
/sh{show}bind def
% Print string relative to current point, widening spaces: string w x y
/wrs{rmoveto 0 32 4 -1 roll widthshow}bind def
% Print string, widening spaces: string w x y
/ws{moveto 0 32 4 -1 roll widthshow}bind def
% Print string at current point, widening spaces: string w
/wsh{0 32 4 -1 roll widthshow}bind def
% Print a stave: x y w t g n
/ST{/n exch def/g exch def/t exch def/w exch def/y exch def/x exch def
1 1 n {pop x y transform round exch round exch itransform Mt
w 0 Rl y g add /y exch def}for t Slw S}bind def
% End of PostScript header for PMW
|