summaryrefslogtreecommitdiff
path: root/dviware/dvi-augsburg/pc/bb.ps
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /dviware/dvi-augsburg/pc/bb.ps
Initial commit
Diffstat (limited to 'dviware/dvi-augsburg/pc/bb.ps')
-rw-r--r--dviware/dvi-augsburg/pc/bb.ps314
1 files changed, 314 insertions, 0 deletions
diff --git a/dviware/dvi-augsburg/pc/bb.ps b/dviware/dvi-augsburg/pc/bb.ps
new file mode 100644
index 0000000000..332eae0036
--- /dev/null
+++ b/dviware/dvi-augsburg/pc/bb.ps
@@ -0,0 +1,314 @@
+%!
+% bb.ps -- $Header: bb.ps,v 1.6 88/01/19 17:02:37 van Exp $
+%
+% Prints a file, but keeps track of bounding box info, and prints the box at
+% the end (around the figure.)
+%
+
+/$BoundingBox 50 dict def
+
+$BoundingBox begin
+/bb$_llx 99999 def
+/bb$_lly 99999 def
+/bb$_urx -99999 def
+/bb$_ury -99999 def
+
+/bb$_mtx matrix defaultmatrix def
+end
+
+/bb$_xdef {
+ exch def
+} def
+
+/bb$_put {
+ exch $BoundingBox 3 1 roll put
+} def
+
+/bb$_pt+ {
+ exch
+ 4 -1 roll add
+ 3 1 roll add
+} def
+
+%
+% Stubs of old functions.
+%
+
+/-stroke /stroke load def
+/-fill /fill load def
+/-eofill /eofill load def
+/-image /image load def
+/-show /show load def
+/-awidthshow /awidthshow load def
+/-showpage /showpage load def
+/-restore /restore load def
+
+%
+% New Functions.
+%
+
+% make sure we remember bb around save-restores
+/restore {
+ $BoundingBox begin bb$_ury bb$_urx bb$_lly bb$_llx end
+ 5 -1 roll
+ -restore
+ $BoundingBox begin
+ /bb$_llx bb$_put
+ /bb$_lly bb$_put
+ /bb$_urx bb$_put
+ /bb$_ury bb$_put
+ end
+} def
+
+/stroke {
+ gsave
+ {
+ flattenpath
+ strokepath % Make sure to take line width into account.
+ } stopped { % strokepath often hits a limitcheck.
+ grestore % Restore the original path
+ gsave
+ } if
+ bb$_path % Accumulate it into our box.
+ grestore
+
+ -stroke
+} def
+
+/fill {
+ gsave
+ bb$_path
+ grestore
+
+ -fill
+} def
+
+/eofill {
+ gsave
+ bb$_path
+ grestore
+
+ -eofill
+} def
+
+%
+% Text is implemented by reducing everything to an `awidthshow'.
+%
+
+/show {
+ 0 0 0 0 0 % Extra parameters for awidthshow
+ 6 -1 roll % Bring the string back up
+ awidthshow
+} def
+
+/widthshow {
+ 0 0 % Extra parameters for awidthshow
+ 3 -1 roll % Bring the string back up.
+ awidthshow
+} def
+
+/ashow {
+ 0 0 0
+ 6 3 roll
+ awidthshow
+} def
+
+/awidthshow {
+ 5 dict begin
+ gsave
+ currentpoint
+ 2 copy /@starty bb$_xdef /@startx bb$_xdef
+ 2 index stringwidth % Get the natural length of the string
+ bb$_pt+ % Add to the start to get the end.
+
+ 2 index length % How many characters?
+
+ dup % Add the offsets to each character
+ 6 index mul
+ exch 5 index mul
+ bb$_pt+
+
+ 5 index 3 index
+ bb$_chcount % How many padding characters?
+
+ dup % Add the offsets for each pad.
+ 9 index mul
+ exch 8 index mul
+ bb$_pt+
+
+ /@endy bb$_xdef /@endx bb$_xdef
+
+ bb$_fontheight % Get the height and depth of the current font.
+
+ 4 copy
+ @startx @starty bb$_pt+ bb$_point
+ @startx @starty bb$_pt+ bb$_point
+ @endx @endy bb$_pt+ bb$_point
+ @endx @endy bb$_pt+ bb$_point
+
+ grestore
+ end
+
+ -awidthshow
+} def
+
+%
+% `image':
+%
+% Assume here that the image lands in the unit square.
+%
+
+/image {
+ 0 0 bb$_point
+ 1 1 bb$_point
+
+ -image
+} def
+
+%
+% `showpage':
+%
+% Just draw the box around the figure and print the page, and then initialize
+% the bounding box variables again.
+%
+
+/bb$_string 10 string def
+
+/showpage {
+ $BoundingBox begin
+ initgraphics bb$_mtx setmatrix
+
+ % Convert to default coords.
+ bb$_llx bb$_lly itransform
+ bb$_urx bb$_ury itransform
+ /bb$_lly bb$_put /bb$_urx bb$_put
+ /bb$_ury bb$_put /bb$_llx bb$_put
+
+ bb$_llx bb$_lly moveto % Make the box
+ bb$_llx bb$_ury lineto
+ bb$_urx bb$_ury lineto
+ bb$_urx bb$_lly lineto
+ closepath
+
+ bb$_bwstroke % Draw the box.
+
+ 0 setgray
+ /Courier findfont 10 scalefont setfont
+ bb$_llx bb$_lly 12 sub moveto
+ bb$_llx bb$_string cvs -show ( ) -show
+ bb$_lly bb$_string cvs -show ( ) -show
+ bb$_urx bb$_string cvs -show ( ) -show
+ bb$_ury bb$_string cvs -show
+
+ (%%BoundingBox: ) print
+ bb$_llx bb$_string cvs print ( ) print
+ bb$_lly bb$_string cvs print ( ) print
+ bb$_urx bb$_string cvs print ( ) print
+ bb$_ury bb$_string cvs print (\n) print
+
+ end
+ 99999 /bb$_llx bb$_put
+ 99999 /bb$_lly bb$_put
+ -99999 /bb$_urx bb$_put
+ -99999 /bb$_ury bb$_put
+ -showpage
+} def
+
+%/copypage {showpage} def
+
+%
+% BoundingBox functions:
+%
+% We accumulate the information about the bounding box into four variables.
+% The data is stored in device coordinates.
+%
+
+%
+% x y `bb$_point' -
+%
+% Takes a point in user coordinates and adds it into the bounding box info.
+%
+/bb$_point {
+ $BoundingBox begin
+ transform % Convert to device coords.
+
+ dup bb$_lly lt {dup /bb$_lly bb$_put}if
+ dup bb$_ury gt {dup /bb$_ury bb$_put}if
+ pop
+ dup bb$_llx lt {dup /bb$_llx bb$_put}if
+ dup bb$_urx gt {dup /bb$_urx bb$_put}if
+ pop
+
+ end
+} def
+
+%
+% - `bb$_path' -
+%
+% Incorporates the bounding box of the path into the bounding box info.
+%
+
+/bb$_path {
+ gsave
+ {
+ 0 setlinejoin
+ flattenpath
+ pathbbox
+ bb$_point
+ bb$_point
+ } stopped {
+ grestore
+ gsave
+ } if
+ grestore
+} def
+
+%
+% Stuff for text.
+%
+
+%
+% char-code string `bb$_chcount' occurs
+%
+% Counts the number of times a character appears in a string.
+%
+
+/bb$_chcount {
+ 0 exch
+ {
+ 2 index eq {
+ 1 add
+ } if
+ } forall
+ exch pop
+} def
+
+%
+% - `bb$_fontheight' heightx heighty depthx depthy
+%
+% Returns the offsets to the lowest point and highest point in the current
+% font.
+%
+
+/bb$_fontheight {
+ currentfont begin
+ FontBBox
+ exch pop 0 exch
+ FontMatrix transform
+ 4 2 roll
+ exch pop 0 exch
+ FontMatrix transform
+ end
+} def
+
+/bb$_bwstroke {
+ 0 setlinewidth
+ 1 setgray
+ [5] 0 setdash
+ gsave -stroke grestore
+ 0 setgray
+ [5] 5 setdash
+ -stroke
+} def
+
+% end of bb.ps