summaryrefslogtreecommitdiff
path: root/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex
diff options
context:
space:
mode:
Diffstat (limited to 'usergrps/uktug/baskervi/6_2/spqr/boxfill.tex')
-rw-r--r--usergrps/uktug/baskervi/6_2/spqr/boxfill.tex232
1 files changed, 232 insertions, 0 deletions
diff --git a/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex b/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex
new file mode 100644
index 0000000000..fbc02b5799
--- /dev/null
+++ b/usergrps/uktug/baskervi/6_2/spqr/boxfill.tex
@@ -0,0 +1,232 @@
+%% BEGIN boxfill.tex
+%%
+%% Defines the \psboxfill macro.
+%% For use with PSTricks v0.94 (or perhaps later).
+%%
+\def\fileversion{0.94}
+\def\filedate{94/06/08}
+%%
+%% COPYRIGHT 1994, by Timothy Van Zandt, tvz@Princeton.EDU
+%% See pstricks.tex or pstricks.doc for copying restrictions.
+
+% Preliminaries:
+
+\message{ v\fileversion, \filedate}
+
+\csname PSTboxfillLoaded\endcsname
+\let\PSTboxfillLoaded\endinput
+
+\ifx\PSTricksLoaded\endinput\else
+ \def\next{\input pstricks.tex}
+ \expandafter\next
+\fi
+
+\edef\TheAtCode{\the\catcode`\@}
+\catcode`\@=11
+
+% The box:
+
+\newbox\pst@fillbox
+\def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i}
+\def\psboxfill@i{\setbox\pst@fillbox\box\pst@hbox\ignorespaces}
+
+% Parameters:
+
+\def\psset@boxfillsize#1{%
+ \def\pst@tempg{#1}\def\pst@temph{auto}%
+ \ifx\pst@tempg\pst@temph
+ \let\psk@boxfillsize\relax
+ \else
+ \psset@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil
+ \fi}
+\def\psset@@boxfillsize#1(#2,#3)#4(#5,#6)#7(#8\@nil{%
+ \begingroup
+ \ifx\@empty#7\relax
+ \pst@dima\z@
+ \pst@dimb\z@
+ \pssetxlength\pst@dimc{#2}%
+ \pssetylength\pst@dimd{#3}%
+ \else
+ \pssetxlength\pst@dima{#2}%
+ \pssetylength\pst@dimb{#3}%
+ \pssetxlength\pst@dimc{#5}%
+ \pssetylength\pst@dimd{#6}%
+ \fi
+ \xdef\pst@tempg{%
+ \pst@dima=\number\pst@dima sp
+ \pst@dimb=\number\pst@dimb sp
+ \pst@dimc=\number\pst@dimc sp
+ \pst@dimd=\number\pst@dimd sp }%
+ \endgroup
+ \let\psk@boxfillsize\pst@tempg}
+
+\psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}}
+
+\def\psset@boxfillcolor#1{\pst@getcolor{#1}\psboxfillcolor}
+\psset@boxfillcolor{black}
+
+\def\psset@boxfillangle#1{\pst@getangle{#1}\psk@boxfillangle}
+\psset@boxfillangle{0}
+
+\def\psset@fillsepx#1{\pst@getlength{#1}\psk@fillsepx}
+\def\psset@fillsepy#1{\pst@getlength{#1}\psk@fillsepy}
+\def\psset@fillsep#1{\psset@fillsepx{#1}\let\psk@fillsepy\psk@fillsepx}
+\psset@fillsep{2pt}
+
+\def\psset@fillcycle#1{\pst@getint{#1}\psk@fillcycle}
+\psset@fillcycle{0}
+
+% Main macro:
+
+\def\psfs@boxfill{%
+ \ifvoid\pst@fillbox
+ \@pstrickserr{Fill box is empty. Use \string\psboxfill\space first.}\@ehpa
+ \else
+ \ifx\psk@boxfillsize\relax
+ \pst@AutoBoxFill
+ \else
+ \pst@ManualBoxFill
+ \fi
+ \fi}
+
+% Manual box fill:
+
+\def\pst@ManualBoxFill{%
+ \leavevmode
+ \begingroup
+ \pst@FlushCode
+ \begin@psclip
+ \pstVerb{clip}%
+ \expandafter\pst@AddFillBox\psk@boxfillsize
+ \end@psclip
+ \endgroup}
+
+\def\pst@FlushCode{%
+ \pst@Verb{%
+ /mtrxc CM def
+ CP CP T
+ \tx@STV
+ \psk@origin
+ \psk@swapaxes
+ \pst@newpath
+ \pst@code
+ mtrxc setmatrix
+ moveto
+ 0 setgray}%
+ \gdef\pst@code{}}
+
+\def\pst@AddFillBox#1 #2 #3 #4 {%
+ \begingroup
+ \setbox\pst@fillbox=\vbox{%
+ \hbox{\unhcopy\pst@fillbox\kern\psk@fillsepx\p@}%
+ \vskip\psk@fillsepy\p@}%
+ \psk@boxfillsize
+ \pst@cnta=\pst@dimc
+ \advance\pst@cnta-\pst@dima
+ \divide\pst@cnta\wd\pst@fillbox
+ \pst@cntb=\pst@dimd
+ \advance\pst@cntb-\pst@dimb
+ \pst@dimd=\ht\pst@fillbox
+ \divide\pst@cntb\pst@dimd
+ \def\pst@tempa{%
+ \pst@tempg
+ \copy\pst@fillbox
+ \advance\pst@cntc\@ne
+ \ifnum\pst@cntc<\pst@cntd\expandafter\pst@tempa\fi}%
+ \let\pst@tempg\relax
+ \pst@cntc-\tw@
+ \pst@cntd\pst@cnta
+ \setbox\pst@fillbox=\hbox to \z@{%
+ \kern\pst@dima
+ \kern-\wd\pst@fillbox
+ \pst@tempa
+ \hss}%
+ \pst@cntd\pst@cntb
+ \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi
+ \global\setbox\pst@boxg=\vbox to\z@{%
+ \offinterlineskip
+ \vss
+ \pst@tempa
+ \vskip\pst@dimb}%
+ \endgroup
+ \setbox\pst@fillbox\box\pst@boxg
+ \pst@rotate\psk@boxfillangle\pst@fillbox
+ \box\pst@fillbox}
+
+\def\pst@ManualFillCycle{%
+ \pst@cntg=\psk@fillcycle
+ \pst@dimg=\wd\pst@fillbox
+ \divide\pst@dimg\pst@cntg
+ \ifnum\pst@cntg<\z@\pst@cntg=-\pst@cntg\fi
+ \advance\pst@cntg\m@ne
+ \pst@cnth=\pst@cntg
+ \def\pst@tempg{%
+ \ifnum\pst@cnth<\pst@cntg\advance\pst@cnth\@ne\else\pst@cnth\z@\fi
+ \moveright\pst@cnth\pst@dimg}}
+
+% Auto box fill: !! Fix dictionary
+
+\pst@def{AutoFillCycle}<%
+ /c ED
+ /n 0 def
+ /s {
+ /x x w c div n mul add def
+ /n n c abs 1 sub lt { n 1 add } { 0 } ifelse def
+ } def>
+
+\pst@def{BoxFill}<%
+ gsave
+ gsave \tx@STV CM grestore dtransform CM idtransform
+ abs /h ED abs /w ED
+ pathbbox
+ h div round 2 add cvi /y2 ED
+ w div round 2 add cvi /x2 ED
+ h div round 2 sub cvi /y1 ED
+ w div round 2 sub cvi /x1 ED
+ /y2 y2 y1 sub def
+ /x2 x2 x1 sub def
+ CP
+ y1 h mul sub neg /y1 ED
+ x1 w mul sub neg /x1 ED
+ clip
+ y2 {
+ /x x1 def
+ s
+ x2 {
+ save CP x y1 T moveto Box restore
+ /x x w add def
+ } repeat
+ /y1 y1 h add def
+ } repeat
+ CP x y1 T moveto Box
+ currentpoint currentfont grestore setfont moveto>
+
+\def\pst@AutoBoxFill{%
+ \leavevmode
+ \begingroup
+ \pst@FlushCode
+ \pst@Verb{\psk@boxfillangle \tx@RotBegin}%
+ \pstVerb{\pst@dict /Box \pslbrace end}%
+ \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}%
+ \pstVerb{%
+ tx@Dict begin \psrbrace def
+ \ifnum\psk@fillcycle=\z@
+ /s {} def
+ \else
+ \psk@fillcycle \tx@AutoFillCycle
+ \fi
+ \pst@number{\wd\pst@fillbox}%
+ \psk@fillsepx add
+ \pst@number{\ht\pst@fillbox}%
+ \pst@number{\dp\pst@fillbox}%
+ \psk@fillsepy add add
+ \tx@BoxFill
+ end}%
+ \pst@Verb{\tx@RotEnd}%
+ \endgroup}
+
+\catcode`\@=\TheAtCode\relax
+
+\endinput
+
+%% END boxfill.tex