nasm/doc/head.ps
2002-05-20 19:50:34 +00:00

393 lines
9.5 KiB
PostScript

% $Id$
%
% 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 sfont0 setfont show } def
/pageodd { sfont0 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