%%
%% This is file `pst-fill.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% pst-fill.dtx  (with options: `pst-fill')
%% 
%% IMPORTANT NOTICE:
%% 
%% For the copyright see the source file.
%% 
%% Any modified versions of this file must be renamed
%% with new filenames distinct from pst-fill.tex.
%% 
%% For distribution of the original source see the terms
%% for copying and modification in the file pst-fill.dtx.
%% 
%% This generated file may be distributed as long as the
%% original source files, as listed above, are part of the
%% same distribution. (The sources need not necessarily be
%% in the same archive or directory.)
%%
%% Package `pst-fill.dtx'
%%
%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
%% Herbert Voss <voss@pstricks.de>
%%
%% This program can be redistributed and/or modified under the terms
%% of the LaTeX Project Public License Distributed from CTAN archives
%% in directory macros/latex/base/lppl.txt.
%%
%% DESCRIPTION:
%%   `pst-fill' is a PSTricks package for filling and tiling areas
%%
%%     \pscircle[linestyle=none,fillstyle=solid,fillcolor=yellow,fillsep=0.5,
%%               addfillstyle=boxfill](2,2){2}
\def\fileversion{1.01}
\def\filedate{2007/03/10}
\message{`PST-Fill' v\fileversion, \filedate\space (tvz,dg,hv)}
\csname PSTboxfillLoaded\endcsname
\let\PSTboxfillLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi
\edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax

\pst@addfams{pst-fill}
\def\pst@@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}

\define@key[psset]{pst-fill}{boxfillsize}{%
  \def\pst@tempg{#1}\def\pst@temph{auto}%
  \ifx\pst@tempg\pst@temph
    \let\psk@boxfillsize\relax
  \else
    \pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil
  \fi}
\psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}}
\define@key[psset]{pst-fill}{boxfillcolor}{\pst@getcolor{#1}\psboxfillcolor}
\psset{boxfillcolor=black}% hv
\define@key[psset]{pst-fill}{boxfillangle}{\pst@getangle{#1}\psk@boxfillangle}
\psset{boxfillangle=0}
\define@key[psset]{pst-fill}{fillsepx}{%
  \pst@getlength{#1}\psk@fillsepx}
\define@key[psset]{pst-fill}{fillsepy}{%
  \pst@getlength{#1}\psk@fillsepy}
\define@key[psset]{pst-fill}{fillsep}{%
  \pst@getlength{#1}\psk@fillsepx%
  \let\psk@fillsepy\psk@fillsepx}
\psset{fillsep=2pt}

\ifx\PstTiling\@undefined
  \define@key[psset]{pst-fill}{fillcycle}{\pst@getint{#1}\psk@fillcycle}
  \psset{fillcycle=0}
\else
  \define@key[psset]{pst-fill}{fillangle}{\pst@getangle{#1}\psk@boxfillangle}
  \define@key[psset]{pst-fill}{fillsize}{%
      \def\pst@tempg{#1}\def\pst@temph{auto}%
      \ifx\pst@tempg\pst@temph\let\psk@boxfillsize\relax
      \else\pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil\fi}
  \psset{fillsep=0,fillsize=auto}
  \define@key[psset]{pst-fill}{fillcyclex}{\pst@getint{#1}\psk@fillcyclex}
  \define@key[psset]{pst-fill}{fillcycley}{\pst@getint{#1}\psk@fillcycley}
  \define@key[psset]{pst-fill}{fillcycle}{%
    \pst@getint{#1}\psk@fillcyclex\let\psk@fillcycley\psk@fillcyclex}
  \psset{fillcycle=0}
  \define@key[psset]{pst-fill}{fillmovex}{\pst@getlength{#1}\psk@fillmovex}
  \define@key[psset]{pst-fill}{fillmovey}{\pst@getlength{#1}\psk@fillmovey}
  \define@key[psset]{pst-fill}{fillmove}{%
      \pst@getlength{#1}\psk@fillmovex\let\psk@fillmovey\psk@fillmovex}
  \psset{fillmove=0pt}
  \define@key[psset]{pst-fill}{fillloopaddx}{\pst@getint{#1}\psk@fillloopaddx}
  \define@key[psset]{pst-fill}{fillloopaddy}{\pst@getint{#1}\psk@fillloopaddy}
  \define@key[psset]{pst-fill}{fillloopadd}{%
    \pst@getint{#1}\psk@fillloopaddx\let\psk@fillloopaddy\psk@fillloopaddx}
  \psset{fillloopadd=0}
%%    \define@key[psset]{pst-fill}{PstDebug}{\pst@getint{#1}\psk@PstDebug}
    \psset{PstDebug=0}
\fi

\newbox\pst@fillbox
\def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i}
\def\psboxfill@i{\setbox\pst@fillbox\box\pst@hbox\ignorespaces}
\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}
\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
%% DG modification begin - Dec. 11, 1997 - Patch 2
    \ifx\PstTiling\@undefined
      \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi
    \else
      \ifnum\psk@fillcyclex=\z@\pst@ManualFillCycle\fi
    \fi
%% DG modification end
    \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{%
  \ifx\PstTiling\@undefined
    \pst@cntg=\psk@fillcycle
  \else
    \pst@cntg=\psk@fillcyclex
  \fi
  \pst@dimg=\wd\pst@fillbox
  \ifnum\pst@cntg=\z@
  \else
  \divide\pst@dimg\pst@cntg
  \fi
  \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
%% DG addition begin - Apr. 8, 1997 and Dec. 1997 - Patch 2
\ifx\PstTiling\@undefined
\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
%% patch 4   hv --------------
        \ifx\VTeXversion\undefined
        \else
%%============ mv: 09-10-01 ??? this is likely to be a right change
        neg
%%============
        \fi
%% end patch 4
T moveto Box restore
        /x x w add def
      } repeat
      /y1 y1 h add def
    } repeat
    % Next line not useful... To see that, suppress clipping (DG)
    CP x y1 T moveto Box
  currentpoint currentfont grestore setfont moveto>
\else
%% DG modification begin - Apr. 8, 1997 and Nov. / Dec. 1997 - Patch 2
\pst@def{AutoFillCycleX}<%
  /cX ED
  /nX 0 def
  /CycleX {
    /x x w cX div nX mul add def
    /nX nX cX abs 1 sub lt { nX 1 add } { 0 } ifelse def
  } def>
\pst@def{AutoFillCycleY}<%
  /cY ED
  /mY 0 def
  /nY 0 def
  /CycleY {
    /y1 y1 h cY div mY mul sub def
    nY cY abs 1 sub lt { /nY nY 1 add def /mY 1 def }
                       { /nY 0 def        /mY cY abs 1 sub neg def } ifelse
  } 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
    /CoefLoopX 0 def
    /CoefLoopY 0 def
    /CoefMoveX 0 def
    /CoefMoveY 0 def
    \psk@boxfillangle\space 0 ne {/CoefLoopX 8 def /CoefLoopY 8 def} if
    \psk@fillcyclex\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if
    \psk@fillcycley\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if
    \psk@fillmovex\space 0 ne
      {/CoefLoopX CoefLoopX 2 add def
       \psk@fillmovex\space 0 gt {/CoefMoveX CoefLoopX def}
                           {/CoefMoveX CoefLoopX neg def} ifelse} if
    \psk@fillmovey\space 0 ne
      {/CoefLoopY CoefLoopY 2 add def
       \psk@fillmovey\space 0 gt {/CoefMoveY CoefLoopY def}
                           {/CoefMoveY CoefLoopY neg def} ifelse} if
    \psk@fillsepx\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if
    \psk@fillsepy\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if
    /CoefLoopX CoefLoopX \psk@fillloopaddx\space add def
    /CoefLoopY CoefLoopY \psk@fillloopaddy\space add def
    /x2 x2 x1 sub 4 sub CoefLoopX 2 mul add def
    /y2 y2 y1 sub 4 sub CoefLoopY 2 mul add def
%% We must fix the origin of tiling, as it must not vary according other stuff
%% in the page!
    w x1 CoefLoopX add CoefMoveX add mul
      h y1 y2 add 1 sub CoefLoopY sub CoefMoveY sub mul moveto
    CP
    y1 h mul sub neg /y1 ED
    x1 w mul sub neg /x1 ED
%%  hv 2004-06-22   to prevent clash with pst-gr3d
%%    \psk@PstDebug 0 eq {clip} if
    \Pst@Debug 0 eq {clip} if
%% end hv
    \psk@fillmovex\space \psk@fillmovey
    gsave \tx@STV CM grestore dtransform CM idtransform
    /hmove ED /wmove ED
    /row 0 def
   y2 {
       /row row 1 add def
       /column 0 def
       /x x1 def
       CycleX
       save
       x2 {
          /column column 1 add def
          CycleY
          save CP x y1
%% patch 4   hv --------------
          \ifx\VTeXversion\undefined
          \else
%%============ mv: 09-10-01 ??? this is likely to be a right change
          neg
%%============
          \fi
  T moveto Box restore
          /x x w add def
          0 hmove translate
          } repeat
       restore
       /y1 y1 h add def
       wmove 0 translate
       } repeat
  currentpoint currentfont grestore setfont moveto>
\fi

\def\pst@AutoBoxFill{%
  \leavevmode
  \begingroup
    \pst@stroke
    \pst@FlushCode
    \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}%
    \pstVerb{\pst@dict /Box \pslbrace end}%
    \ifx\PstTiling\@undefined
    \else
      \ifx\pst@tempa\@undefined % Undefined for instance for \pscharpath
      \else\ifx\pst@tempa\@empty\else
        \def\pst@temph{0}%
        \ifx\pst@tempa\pst@temph
        \else
          \pstVerb{/TR {pop pop currentpoint translate \pst@tempa\space translate } def}%
        \fi
      \fi\fi
    \fi
    \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}%
    \ifx\PstTiling\@undefined
      \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\space add
        \pst@number{\ht\pst@fillbox}%
        \pst@number{\dp\pst@fillbox}%
        \psk@fillsepy\space add add
        \tx@BoxFill
        end}%
      \else
      \pstVerb{%
        tx@Dict begin \psrbrace def
        \ifnum\psk@fillcyclex=\z@
          /CycleX {} def
        \else
          \psk@fillcyclex\space \tx@AutoFillCycleX
        \fi
        \ifnum\psk@fillcycley=\z@
          /CycleY {} def
        \else
          \psk@fillcycley\space \tx@AutoFillCycleY
        \fi
        \pst@number{\wd\pst@fillbox}%
        \psk@fillsepx\space add
        \pst@number{\ht\pst@fillbox}%
        \pst@number{\dp\pst@fillbox}%
        \psk@fillsepy\space add add
        \tx@BoxFill
        end}%
    \fi
    \pst@Verb{\tx@RotEnd}%
  \endgroup}
\catcode`\@=\PstAtCode\relax
\endinput
%%
%% End of file `pst-fill.tex'.
