| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- %
- % PostScript header for NASM documentation
- %
- % Avoid barfing on old PS implementations
- /pdfmark where
- {pop} {userdict /pdfmark /cleartomark load put} ifelse
- /setpagedevice where
- {pop} {userdict /setpagedevice /pop load put} ifelse
- % Useful definition
- /space 32 def
- %
- % This asks the PostScript interpreter for the proper size paper
- %
- /setpagesize {
- 1 dict dup /PageSize [pagewidth pageheight] put setpagedevice
- } def
- %
- % Code to handle links
- %
- /min { 2 copy gt { exch } if pop } def
- /max { 2 copy lt { exch } if pop } def
- /lkbegun 0 def
- /lktype null def
- /lkury 0 def
- /lkurx 0 def
- /lklly 0 def
- /lkllx 0 def
- /lkxmarg 1 def % Extra space for link in x dir
- /lkymarg 1 def % Extra space for link in y dir
- /lktarget () def
- % target type --
- /linkbegin {
- userdict begin
- /lkbegun 1 def
- /lktype exch def
- /lktarget exch def
- colorlinks { 0 0 0.4 setrgbcolor } if
- end
- } def
- % target --
- /linkbegindest {
- /Dest linkbegin
- } def
- % uristring --
- /linkbeginuri {
- /URI linkbegin
- } def
- % pageno --
- /linkbeginpage {
- /Page linkbegin
- } def
- % string spacepadding --
- /linkshow {
- userdict begin
- /lspad exch def /lss exch def
- lkbegun 0 ne {
- gsave lss true charpath flattenpath pathbbox grestore
- lkbegun 1 eq {
- /lkury exch def
- lss spacecount lspad mul add /lkurx exch def
- /lklly exch def
- /lkllx exch def
- /lkbegun 2 def
- } {
- lkury max /lkury exch def
- lss spacecount lspad mul add lkurx max /lkurx exch def
- lklly min /lklly exch def
- lkllx min /lkllx exch def
- } ifelse
- } if
- lspad 0 space lss widthshow
- end
- } def
- % --
- /linkend {
- userdict begin
- [ lktype /URI eq {
- /Action 2 dict dup /Subtype /URI put dup /URI lktarget put
- } {
- /Dest lktarget
- } ifelse
- /Border [0 0 0]
- /Rect [ lkllx lkxmarg sub
- lklly lkymarg sub
- lkurx lkxmarg add
- lkury lkymarg add ]
- /Subtype /Link
- /ANN pdfmark
- /lkbegun 0 def
- colorlinks { 0 setgray } if
- end
- } def
- % targetname --
- /linkdest {
- [ /Dest 3 -1 roll
- /View [ /XYZ currentpoint null ]
- /DEST pdfmark
- } def
- % A "fontset" is an array of fonts; a "stream" is an array of strings
- % and numbers or procedures:
- % [ 0 (Foo) ( ) (mani) ( ) 1 (padme) 0 ( ) (hum.) ]
- % A number choses a font from the current fontset.
- % A procedure is invoked as-is when printing the stream.
- %
- % When printing justified, an equal amount of space is added in
- % between each string.
- % string -- spacecount
- % Count space characters in a string
- /spacecount {
- 0 exch {
- space eq { 1 add } if
- } forall
- } def
- % stream fontset -- spacecount width
- % Get the width of a stream in the given fontset, and the
- % number of space characters in the stream
- /streamwidth {
- gsave
- 6 dict begin
- /f exch def
- /w 0 def
- /s 0 def
- f 0 get setfont
- /integertype {
- f exch get setfont
- } def
- /stringtype {
- dup stringwidth pop w add /w exch def
- spacecount s add /s exch def
- } def
- /arraytype { pop } def
- % The input stream is on the top of the stack now
- {
- dup type exec
- } forall
- s w
- end
- grestore
- } def
- % stream fontset spacer --
- % Show the stream in the given fontset, but add a certain amount
- % of space to each space character
- /showstreamspc {
- 5 dict begin
- /spc exch def
- /f exch def
- f 0 get setfont
- /integertype {
- f exch get setfont
- } def
- /stringtype {
- spc linkshow
- } def
- /arraytype {
- exec
- } def
- % Now stream is on the top of the stack
- {
- dup type exec
- } forall
- end
- } def
- % stream fontset --
- % Show the stream in the given fontset, with no extra spacing
- /showstream {
- 0 showstreamspc
- } def
- % stream fontset totalspace --
- % Show the stream justified to fit into a certain number of pixels
- /showstreamjust {
- userdict begin
- /ts exch def /fs exch def /st exch def
- st fs
- st fs streamwidth ts exch sub exch
- dup 0 gt { div } { pop } ifelse
- showstreamspc
- end
- } def
- /bullmarg lmarg bulladj add def
- /lwidth pagewidth lmarg sub rmarg sub def
- /bwidth lwidth bulladj sub def
- %
- % The various paragraph types
- % The number at the end indicates start (1) of para, end (2) of para
- %
- /chapline {
- currentpoint exch pop 10 sub lmarg exch moveto
- 0 setlinecap 3 setlinewidth
- lwidth 0 rlineto stroke
- } def
- /chap0 { lmarg exch moveto cfont lwidth showstreamjust } def
- /chap1 { lmarg exch moveto cfont lwidth showstreamjust } def
- /chap2 { lmarg exch moveto cfont showstream chapline } def
- /chap3 { lmarg exch moveto cfont showstream chapline } def
- /appn0 {chap0} def
- /appn1 {chap1} def
- /appn2 {chap2} def
- /appn3 {chap3} def
- % lbl ypos fontset -- ypos
- /headlbl {
- 3 -1 roll [exch ( )] exch % ypos strm fontset
- 2 copy % ypos strm fontset strm fontset
- streamwidth % ypos strm fontset spccount width
- lmarg exch sub % ypos strm fontset spccount xpos
- 4 index % ypos strm fontset spccount xpos ypos
- moveto % ypos strm fontset spccount
- pop % ypos strm fontset spccount
- showstream % ypos
- } def
- /head0 { lmarg exch moveto hfont lwidth showstreamjust } def
- /head1 { hfont headlbl lmarg exch moveto hfont lwidth showstreamjust } def
- /head2 { lmarg exch moveto hfont showstream } def
- /head3 { hfont headlbl lmarg exch moveto hfont showstream } def
- /subh0 { lmarg exch moveto sfont lwidth showstreamjust } def
- /subh1 { sfont headlbl lmarg exch moveto sfont lwidth showstreamjust } def
- /subh2 { lmarg exch moveto sfont showstream } def
- /subh3 { sfont headlbl lmarg exch moveto sfont showstream } def
- /norm0 { lmarg exch moveto bfont lwidth showstreamjust } def
- /norm1 { lmarg exch moveto bfont lwidth showstreamjust } def
- /norm2 { lmarg exch moveto bfont showstream } def
- /norm3 { lmarg exch moveto bfont showstream } def
- /code0 { lmarg exch moveto bfont showstream } def
- /code1 { lmarg exch moveto bfont showstream } def
- /code2 { lmarg exch moveto bfont showstream } def
- /code3 { lmarg exch moveto bfont showstream } def
- /bull0 { bullmarg exch moveto bfont bwidth showstreamjust } def
- /bull1 { dup lmarg exch moveto bullet bfont showstream
- bullmarg exch moveto bfont bwidth showstreamjust } def
- /bull2 { bullmarg exch moveto bfont showstream } def
- /bull3 { dup lmarg exch moveto bullet bfont showstream
- bullmarg exch moveto bfont showstream } def
- /indt0 { bullmarg exch moveto bfont bwidth showstreamjust } def
- /indt1 { bullmarg exch moveto bfont bwidth showstreamjust } def
- /indt2 { bullmarg exch moveto bfont showstream } def
- /indt3 { bullmarg exch moveto bfont showstream } def
- /bquo0 { bullmarg exch moveto qfont bwidth showstreamjust } def
- /bquo1 { bullmarg exch moveto qfont bwidth showstreamjust } def
- /bquo2 { bullmarg exch moveto qfont showstream } def
- /bquo3 { bullmarg exch moveto qfont showstream } def
- /tocw0 lwidth tocpnz sub def
- /tocw1 tocw0 tocind sub def
- /tocw2 tocw1 tocind sub def
- /tocx0 lmarg def
- /tocx1 tocx0 tocind add def
- /tocx2 tocx1 tocind add def
- /tocpn {
- bfont0 setfont
- 3 dict begin
- /s exch def
- /x s stringwidth pop pagewidth rmarg sub exch sub def
- currentpoint /y exch def
- lmarg sub tocdots div ceiling tocdots mul lmarg add
- tocdots x {
- y moveto (.) 0 linkshow
- } for
- x y moveto s 0 linkshow
- end
- linkend
- } def
- /toc00 { tocx0 exch moveto 0 rmoveto bfont showstream } def
- /toc01 { tocx0 exch moveto
- linkbegindest bfont0 setfont 0 linkshow bfont showstream } def
- /toc02 { tocx0 exch moveto 3 1 roll
- 0 rmoveto bfont showstream tocpn } def
- /toc03 { tocx0 exch moveto 4 1 roll
- linkbegindest bfont0 setfont 0 linkshow bfont showstream tocpn } def
- /toc10 { tocx1 exch moveto 0 rmoveto bfont showstream } def
- /toc11 { tocx1 exch moveto
- linkbegindest bfont0 setfont 0 linkshow bfont showstream } def
- /toc12 { tocx1 exch moveto 3 1 roll
- 0 rmoveto bfont showstream tocpn } def
- /toc13 { tocx1 exch moveto 4 1 roll
- linkbegindest bfont0 setfont 0 linkshow bfont showstream tocpn } def
- /toc20 { tocx2 exch moveto 0 rmoveto bfont showstream } def
- /toc21 { tocx2 exch moveto
- linkbegindest bfont0 setfont 0 linkshow bfont showstream } def
- /toc22 { tocx2 exch moveto 3 1 roll
- 0 rmoveto bfont showstream tocpn } def
- /toc23 { tocx2 exch moveto 4 1 roll
- linkbegindest bfont0 setfont 0 linkshow bfont showstream tocpn } def
- % Spacing between index columns
- /indexcolumn pagewidth lmarg sub rmarg sub idxgutter add idxcolumns div def
- % Width of an individual index column
- /indexcolwid indexcolumn idxgutter sub def
- /idx03 {
- 2 dict begin
- indexcolumn mul lmarg add
- /x exch def /y exch def x y moveto
- exch bfont showstream
- dup bfont streamwidth
- x indexcolwid add exch sub exch pop y moveto
- bfont showstream
- end
- } def
- /idx00 {idx03} def
- /idx01 {idx03} def
- /idx02 {idx03} def
- /idx13 {
- 2 dict begin
- indexcolumn mul lmarg add idxindent add
- /x exch def /y exch def x y moveto
- exch bfont showstream
- dup bfont streamwidth
- x indexcolwid idxindent sub add exch sub exch pop y moveto
- bfont showstream
- end
- } def
- /idx10 {idx13} def
- /idx11 {idx13} def
- /idx12 {idx13} def
- %
- % Page numbers
- %
- /pagey botmarg pymarg sub def
- /pagel lmarg plmarg sub def
- /pager pagewidth rmarg sub prmarg add def
- /pageeven { pagel pagey moveto bfont1 setfont show } def
- /pageodd { bfont1 setfont dup stringwidth pop pager exch sub
- pagey moveto show } def
- %
- % Functions invoked during parsing
- %
- /xa { linkdest } def
- /pa { 0 pageheight moveto linkdest } def
- /xl { linkbegindest } def
- /wl { linkbeginuri } def
- /pl { linkbeginpage } def
- /el { linkend } def
- %
- % PDF viewer options
- %
- [/PageMode /UseOutlines /DOCVIEW pdfmark % Display bookmarks
- %
- % Functions to include EPS
- %
- /BeginEPSF {
- /Before_EPSF_State save def
- /dict_count countdictstack def
- /op_count count 1 sub def
- userdict begin
- /showpage {} def
- 0 setgray 0 setlinecap
- 1 setlinewidth 0 setlinejoin
- 10 setmiterlimit [ ] 0 setdash newpath
- /languagelevel where
- {
- pop languagelevel
- 1 ne {
- false setstrokeadjust false setoverprint
- } if
- } if
- } bind def
- /EndEPSF {
- count op_count sub {pop} repeat
- countdictstack dict_count sub {end} repeat
- Before_EPSF_State restore
- } bind def
|