1%% 2%% This is file `psfrag.pro', 3%% generated with the docstrip utility. 4%% 5%% The original source files were: 6%% 7%% psfrag.dtx (with options: `filepro') 8%% 9%% Copyright (c) 1996 Craig Barratt, Michael C. Grant, and David Carlisle. 10%% All rights reserved. 11%% 12%% This file is part of the PSfrag package. 13%% 14userdict begin 15/PSfragLib 90 dict def 16/PSfragDict 6 dict def 17/PSfrag { PSfragLib begin load exec end } bind def 18end 19PSfragLib begin 20/RO /readonly load def 21/CP /currentpoint load def 22/CM /currentmatrix load def 23/B { bind RO def } bind def 24/X { exch def } B 25/MD { { X } forall } B 26/OE { end exec PSfragLib begin } B 27/S false def 28/tstr 8 string def 29/islev2 { languagelevel } stopped { false } { 2 ge } ifelse def 30[ /sM /tM /srcM /dstM /dM /idM /srcFM /dstFM ] { matrix def } forall 31sM currentmatrix RO pop 32dM defaultmatrix RO idM invertmatrix RO pop 33srcFM identmatrix pop 34/Hide { gsave { CP } stopped not newpath clip { moveto } if } B 35/Unhide { { CP } stopped not grestore { moveto } if } B 36/setrepl islev2 {{ /glob currentglobal def true setglobal array astore 37 globaldict exch /PSfrags exch put glob setglobal }} 38 {{ array astore /PSfrags X }} ifelse B 39/getrepl islev2 {{ globaldict /PSfrags get aload length }} 40 {{ PSfrags aload length }} ifelse B 41/convert { 42 /src X src length string 43 /c 0 def src length { 44 dup c src c get dup 32 lt { pop 32 } if put /c c 1 add def 45 } repeat 46} B 47/Begin { 48 /saver save def 49 srcFM exch 3 exch put 50 0 ne /debugMode X 0 setrepl 51 dup /S exch dict def { S 3 1 roll exch convert exch put } repeat 52 srcM CM dup invertmatrix pop 53 mark { currentdict { end } stopped { pop exit } if } loop 54 PSfragDict counttomark { begin } repeat pop 55} B 56/End { 57 mark { currentdict end dup PSfragDict eq { pop exit } if } loop 58 counttomark { begin } repeat pop 59 getrepl saver restore 60 7 idiv dup /S exch dict def { 61 6 array astore /mtrx X tstr cvs /K X 62 S K [ S K known { S K get aload pop } if mtrx ] put 63 } repeat 64} B 65/Place { 66 tstr cvs /K X 67 S K known { 68 bind /proc X tM CM pop 69 CP /cY X /cX X 70 0 0 transform idtransform neg /aY X neg /aX X 71 S K get dup length /maxiter X 72 /iter 1 def { 73 iter maxiter ne { /saver save def } if 74 tM setmatrix aX aY translate 75 [ exch aload pop idtransform ] concat 76 cX neg cY neg translate cX cY moveto 77 /proc load OE 78 iter maxiter ne { saver restore /iter iter 1 add def } if 79 } forall 80 /noXY { CP /cY X /cX X } stopped def 81 tM setmatrix noXY { newpath } { cX cY moveto } ifelse 82 } { 83 Hide OE Unhide 84 } ifelse 85} B 86/normalize { 87 2 index dup mul 2 index dup mul add sqrt div 88 dup 4 -1 roll exch mul 3 1 roll mul 89} B 90/replace { 91 aload pop MD 92 CP /bY X /lX X gsave sM setmatrix 93 str stringwidth abs exch abs add dup 0 eq 94 { pop } { 360 exch div dup scale } ifelse 95 lX neg bY neg translate newpath lX bY moveto 96 str { /ch X ( ) dup 0 ch put false charpath ch Kproc } forall 97 flattenpath pathbbox [ /uY /uX /lY /lX ] MD 98 CP grestore moveto 99 currentfont /FontMatrix get dstFM copy dup 100 0 get 0 lt { uX lX /uX X /lX X } if 101 3 get 0 lt { uY lY /uY X /lY X } if 102 /cX uX lX add 0.5 mul def 103 /cY uY lY add 0.5 mul def 104 debugMode { gsave 0 setgray 1 setlinewidth 105 lX lY moveto lX uY lineto uX uY lineto uX lY lineto closepath 106 lX bY moveto uX bY lineto lX cY moveto uX cY lineto 107 cX lY moveto cX uY lineto stroke 108 grestore } if 109 dstFM dup invertmatrix dstM CM srcM 110 2 { dstM concatmatrix } repeat pop 111 getrepl /temp X 112 S str convert get { 113 aload pop [ /rot /scl /loc /K ] MD 114 /aX cX def /aY cY def 115 loc { 116 dup 66 eq { /aY bY def } { % B 117 dup 98 eq { /aY lY def } { % b 118 dup 108 eq { /aX lX def } { % l 119 dup 114 eq { /aX uX def } { % r 120 dup 116 eq { /aY uY def } % t 121 if } ifelse } ifelse } ifelse } ifelse pop 122 } forall 123 K srcFM rot tM rotate dstM 124 2 { tM concatmatrix } repeat aload pop pop pop 125 2 { scl normalize 4 2 roll } repeat 126 aX aY transform 127 /temp temp 7 add def 128 } forall 129 temp setrepl 130} B 131/Rif { 132 S 3 index convert known { pop replace } { exch pop OE } ifelse 133} B 134/XA { bind [ /Kproc /str } B /XC { ] 2 array astore def } B 135/xs { pop } XA XC 136/xks { /kern load OE } XA /kern XC 137/xas { pop ax ay rmoveto } XA /ay /ax XC 138/xws { c eq { cx cy rmoveto } if } XA /c /cy /cx XC 139/xaws { ax ay rmoveto c eq { cx cy rmoveto } if } 140 XA /ay /ax /c /cy /cx XC 141/raws { xaws { awidthshow } Rif } B 142/rws { xws { widthshow } Rif } B 143/rks { xks { kshow } Rif } B 144/ras { xas { ashow } Rif } B 145/rs { xs { show } Rif } B 146/rrs { getrepl dup 2 add -1 roll //restore exec setrepl } B 147PSfragDict begin 148islev2 not { /restore { /rrs PSfrag } B } if 149/show { /rs PSfrag } B 150/kshow { /rks PSfrag } B 151/ashow { /ras PSfrag } B 152/widthshow { /rws PSfrag } B 153/awidthshow { /raws PSfrag } B 154end PSfragDict RO pop 155end