diff options
Diffstat (limited to 'doc/head.ps')
-rw-r--r-- | doc/head.ps | 391 |
1 files changed, 391 insertions, 0 deletions
diff --git a/doc/head.ps b/doc/head.ps new file mode 100644 index 0000000..48b7af2 --- /dev/null +++ b/doc/head.ps @@ -0,0 +1,391 @@ +% +% 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 + +/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 |