%%
%% This is file `flowfram.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% flowfram.dtx  (with options: `flowfram.sty,package')
%% Copyright (C) 2007 Nicola Talbot, all rights reserved.
%% If you modify this file, you must change its name first.
%% You are NOT ALLOWED to distribute this file alone. You are NOT
%% ALLOWED to take money for the distribution or use of either this
%% file or a changed version, except for a nominal charge for copying
%% etc.
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{flowfram}[2007/03/09 v1.07]
\RequirePackage{ifthen}
\RequirePackage{keyval}
\RequirePackage{graphics}
\RequirePackage{afterpage}
\@ifundefined{@ldc@l@r}{\RequirePackage{color}}{}
\newcommand{\setffdraftcolor}{\color[gray]{0.8}}
\newcommand{\setffdrafttypeblockcolor}{\color[gray]{0.9}}
\newlength\fflabelsep
\fflabelsep=1pt
\newcommand{\fflabelfont}{\small\sffamily}
\newif\ifshowtypeblock
\newif\ifshowmargins
\newif\ifshowframebbox
\newcommand{\@ffdraft}{%
\showtypeblocktrue
\showmarginstrue
\showframebboxtrue
}
\newcommand{\@ffnodraft}{%
\showtypeblockfalse
\showmarginsfalse
\showframebboxfalse
}
\newcommand{\@fr@meifdraft}[3][\setffdraftcolor]{%
\def\ff@backcol{{none}}%
\@ifundefined{color}{\frame{#2}}{#1\frame{#2}}%
\ifthenelse{\equal{#3}{}}{}{%
\makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}}}%
\newcommand{\@s@tffcol}{}
\newcommand{\@s@tfftextcol}{}
\newcommand{\@ffbackground}[1]{#1}
\DeclareOption{draft}{\@ffdraft}
\DeclareOption{final}{\@ffnodraft}
\newif\if@ttb@rotate
\@ttb@rotatetrue
\DeclareOption{rotate}{\@ttb@rotatetrue}
\DeclareOption{norotate}{\@ttb@rotatefalse}
\newcommand{\rotateframe}[2]{\if@ttb@rotate
\rotatebox{#1}{#2}%
\else
#2\relax
\fi}
\newif\if@ttb@num
\newif\if@ttb@title
\@ttb@numfalse
\@ttb@titletrue
\DeclareOption{ttbtitle}{\@ttb@titletrue}
\DeclareOption{ttbnotitle}{\@ttb@titlefalse}
\DeclareOption{ttbnum}{\@ttb@numtrue}
\DeclareOption{ttbnonum}{\@ttb@numfalse}
\DeclareOption{color}{%
\def\flowframecol{{black}}\def\flowframetextcol{{black}}
\renewcommand\@s@tffcol{\ifthenelse{\equal{\ff@col}{}}{}{%
\expandafter\color\ff@col}}
\renewcommand\@s@tfftextcol{\ifthenelse{\equal{\ff@txtcol}{}}{}{%
\expandafter\color\ff@txtcol}}
\renewcommand{\@ffbackground}[1]{\ifthenelse{\equal{\ff@backcol}{{none}}}{%
#1}{{\fboxsep=0pt\expandafter\colorbox\ff@backcol{#1}}}}
}
\DeclareOption{nocolor}{%
\def\flowframetextcol{}%
\def\flowframecol{}%
\renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}
\renewcommand{\@ffbackground}[1]{#1}
}
\ifdim\overfullrule=0pt
\ExecuteOptions{final}
\else
\ExecuteOptions{draft}
\fi
\ifx\normalcolor\relax
\ExecuteOptions{nocolor}
\else
\ExecuteOptions{color}
\fi
\ProcessOptions
\ifx\normalcolor\relax
\ifthenelse{\equal{\flowframetextcol}{}}{}{%
\RequirePackage{color}}
\fi
\@ifundefined{chapter}{}{%
\newcommand{\chapterfirstpagestyle}{plain}
\let\@ff@OLD@chapter\@chapter
\let\@ff@OLD@schapter\@schapter
\renewcommand{\@chapter}{%
\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@chapter}
\renewcommand{\@schapter}{%
\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@schapter}
}
\newcounter{maxflow}
\newcounter{thisframe}
\c@maxflow=0
\c@thisframe=0
\newcounter{maxstatic}
\c@maxstatic=0
\newcounter{maxdynamic}
\c@maxdynamic=0
\newcount\@colN
\newcount\@ff@tmpN
\newcount\ff@id
\newlength\@ff@offset
\newlength\@ff@tmp@x
\newlength\@ff@tmp@x@even
\newlength\@ff@tmp@y
\newlength\sdfparindent
\newlength\flowframesep
\flowframesep=\fboxsep
\newlength\flowframerule
\flowframerule=\fboxrule
\newcommand{\flowframeshowlayout}{%
\finishthispage
{\@ffdraft\mbox{}\finishthispage\clearpage}}
\newif\ifusedframebreak
\newcommand{\framebreak}[1][4]{%
\usedframebreaktrue
{\parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent}}
\newcommand{\finishthispage}{%
\@colN=\c@thisframe
\newpage
\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
\@ff@chckifthispg{\c@page}{\@colN}%
\if@notthiscol\else
\mbox{}\newpage%
\fi
}}
\def\cleardoublepage{\finishthispage
\if@twoside
\ifodd\c@page
\else
\hbox{}\finishthispage
\fi
\fi}
\@twocolumnfalse
\@mparswitchfalse
\newcommand{\globalreversemargin}{%
\global\@mparbottom\z@\global\@reversemargintrue}
\newcommand{\globalnormalmargin}{%
\global\@mparbottom\z@\global\@reversemarginfalse}
\newcommand{\@getmarginpos}[1]{%
\ifthenelse{\equal{#1}{inner}}{%
\if@twoside
\ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi
\else
\def\ff@margin{left}%
\fi
}{%
\ifthenelse{\equal{#1}{outer}}{%
\if@twoside
\ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi
\else
\def\ff@margin{right}%
\fi
}{%
\def\ff@margin{#1}}}%
}
\newcommand{\setmargin}{%
\@getmarginpos{%
\csname @ff@margin@\romannumeral\c@thisframe\endcsname}%
\ifthenelse{\equal{\ff@margin}{left}}%
{\globalreversemargin}{\globalnormalmargin}%
}
\newcommand{\newflowframe}{\@n@wflowframe}
\@onlypreamble{\newflowframe}
\newcommand{\@n@wflowframe}{%
\global\advance\c@maxflow by 1\relax
\expandafter\global\expandafter
\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname
\@ifstar\@snewflowframe\@newflowframe
}
\newcommand{\@snewflowframe}{%
\expandafter\global\expandafter
\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue
\@@newflowframe}
\newcommand{\@newflowframe}{%
\expandafter\global\expandafter
\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse
\@@newflowframe}
\newcommand{\@@newflowframe}[5][all]{%
\expandafter\global\expandafter
\newbox\csname column\romannumeral\c@maxflow\endcsname
\expandafter\global\expandafter
\newlength\csname colwidth\romannumeral\c@maxflow\endcsname
\expandafter\global\expandafter
\newlength\csname colheight\romannumeral\c@maxflow\endcsname
\expandafter\global\expandafter
\newlength\csname col@\romannumeral\c@maxflow @posx\endcsname
\expandafter\global\expandafter
\newlength\csname col@\romannumeral\c@maxflow @posy\endcsname
\expandafter\global\expandafter
\setlength\csname colwidth\romannumeral\c@maxflow\endcsname{#2}
\expandafter\global\expandafter
\setlength\csname colheight\romannumeral\c@maxflow\endcsname{#3}
\expandafter\global\expandafter
\setlength\csname col@\romannumeral\c@maxflow @posx\endcsname{#4}
\expandafter\global\expandafter
\setlength\csname col@\romannumeral\c@maxflow @posy\endcsname{#5}
\expandafter\global\expandafter
\newlength\csname col@\romannumeral\c@maxflow @evenx\endcsname
\expandafter\global\expandafter
\newlength\csname col@\romannumeral\c@maxflow @eveny\endcsname
\expandafter\global\expandafter
\setlength\csname col@\romannumeral\c@maxflow @evenx\endcsname{#4}
\expandafter\global\expandafter
\setlength\csname col@\romannumeral\c@maxflow @eveny\endcsname{#5}
\expandafter
\gdef\csname @ff@frametype@\romannumeral\c@maxflow\endcsname{fbox}%
\expandafter
\gdef\csname @ff@col@\romannumeral\c@maxflow\endcsname{\flowframecol}
\expandafter
\gdef\csname @ff@txtcol@\romannumeral\c@maxflow\endcsname{%
\flowframetextcol}
\expandafter
\gdef\csname @ff@backcol@\romannumeral\c@maxflow\endcsname{{none}}
\expandafter
\gdef\csname @ff@pages@\romannumeral\c@maxflow\endcsname{#1}
\expandafter
\gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute}
\expandafter
\gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}%
\expandafter
\gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right}
\ifnum\c@thisframe=0\relax
\ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}{%
\c@thisframe=\c@maxflow
\global\setlength{\hsize}{#2}%
\global\usedframebreaktrue
}{\ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}{}{%
\def\ff@pages{#1}%
\@for\@ff@pp:=\ff@pages\do{%
\def\@ff@numstart{0}\def\@ff@numend{0}%
\@ff@getrange{\@ff@pp}%
\ifnum\@ff@numstart=0\def\@ff@numstart{1}\fi
\ifnum\@ff@numstart=1\relax
\c@thisframe=\c@maxflow
\global\setlength{\hsize}{#2}%
\global\usedframebreaktrue
\fi
}}}%
\fi
\@ifnextchar[{\@s@tflowframeid{\c@maxflow}}{%
\@s@tflowframeid{\c@maxflow}[\number\c@maxflow]}}
\def\@s@tflowframeid#1[#2]{%
\edef\ff@label{#2}%
\@ff@checkuniqueidl{#1}{\ff@label}%
\expandafter
\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}%
}
\newcommand{\@ff@checkuniqueidl}[2]{%
{\@colN=0\relax
\whiledo{\@colN<\c@maxflow}{%
\advance\@colN by 1\relax
\ifnum\@colN=#1\relax
\else
\ifthenelse{\equal{#2}{%
\csname @col@id@\romannumeral\@colN\endcsname}}{%
\PackageError{flowfram}{Flow frame IDL '#2' already defined}{%
You can't assign this label, as it is already defined
for flow frame \number\@colN}}{}%
\fi
}}}
\newcommand{\@flowframeid}[1]{\@colN=0\relax
\ff@id=0\relax
\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
\ifthenelse{%
\equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}}{%
\ff@id=\@colN\relax
\@colN=\c@maxflow}{}}%
\ifnum\ff@id=0\relax
\PackageError{flowfram}{Can't find flow frame id '#1'}{}\fi}
\define@key{flowframe}{width}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'width' key}{}}{}%
\def\ff@width{#1}}
\define@key{flowframe}{height}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'height' key}{}}{}%
\def\ff@height{#1}}
\define@key{flowframe}{x}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'x' key}{}}{}%
\def\ff@x{#1}}
\define@key{flowframe}{y}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'y' key}{}}{}%
\def\ff@y{#1}}
\define@key{flowframe}{evenx}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'evenx' key}{}}{}%
\def\ff@evenx{#1}}
\define@key{flowframe}{eveny}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'eveny' key}{}}{}%
\def\ff@eveny{#1}}
\define@key{flowframe}{oddx}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'oddx' key}{}}{}%
\def\ff@oddx{#1}}
\define@key{flowframe}{oddy}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'oddy' key}{}}{}%
\def\ff@oddy{#1}}
\define@key{flowframe}{label}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'label' key}{}}{}%
\def\ff@label{#1}}
\define@key{flowframe}{border}[plain]{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'border' key - use
'none' for no border}{}}{}%
\ifthenelse{\equal{#1}{none}}{%
\def\ff@frame{false}}{\def\ff@frame{true}%
\ifthenelse{\equal{#1}{plain}}{\def\ff@frametype{fbox}}{%
\def\ff@frametype{#1}}}}
\define@key{flowframe}{bordercolor}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'bordercolor' key}{}}{}%
\def\ff@col{#1}}
\define@key{flowframe}{textcolor}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'textcolor' key}{}}{}%
\def\ff@txtcol{#1}}
\define@key{flowframe}{backcolor}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'backcolor' key}{}}{}%
\def\ff@backcol{#1}}
\define@key{flowframe}{pages}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'pages' key}{}}{}%
\def\ff@pages{#1}}
\define@key{flowframe}{offset}{\def\ff@offset{#1}%
\ifthenelse{\equal{#1}{}}{\PackageError{flowframe}{%
Invalid value for key 'offset'}{%
'offset' can either be 'compute' (to compute it according
to certain pre-defined rules) or a length}}{}}
\define@key{flowframe}{angle}{\def\ff@angle{#1}%
}
\define@key{flowframe}{margin}{%
\ifthenelse{\equal{#1}{left} \or \equal{#1}{right}
\or \equal{#1}{inner} \or \equal{#1}{outer}}{%
\def\ff@margin{#1}}{\PackageError{flowfram}{invalid value of
'margin' key}{Key 'margin' can only take the values
'left' or 'right'}}}
\define@key{flowframe}{clear}[true]{%
\ifthenelse{\equal{#1}{true}\or\equal{#1}{false}}{%
\def\ff@clear{#1}}{\PackageError{flowfram}{Key 'clear' is
boolean}{You can only specify the values 'true' or 'false'}}}
\define@key{flowframe}{style}{\ifthenelse{\equal{#1}{}}{%
\PackageError{flowfram}{Missing value for 'style' key}{}}{}%
\ifthenelse{\equal{#1}{none}}{\def\ff@style{relax}}{\def\ff@style{#1}}}
\define@key{flowframe}{shape}{\def\ff@shape{#1}%
}
\define@key{flowframe}{valign}{\ifthenelse{\equal{#1}{c} \or
\equal{#1}{t} \or \equal{#1}{b}}{\def\ff@valign{#1}}{%
\PackageError{flowfram}{Invalid value for 'valign' key}{You
may only specify 'c', 't' or 'b'}}}
\newcommand{\setallflowframes}[1]{%
\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
\@@setflowframe{\@colN}{#1}}}
\newcommand{\setflowframe}{\@ifstar\@ssetflowframe\@setflowframe}
\newcommand{\@ssetflowframe}[2]{%
\@for\@ff@id:=#1\do{%
\@flowframeid{\@ff@id}%
\@@setflowframe{\ff@id}{#2}}}
\newcommand{\@setflowframe}[2]{%
\ifthenelse{\equal{#1}{all}}{%
\setallflowframes{#2}}{%
\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
\@@setflowframe{\@colN}{#2}%
\advance\@colN by 2\relax}%
}{%
\@for\@ff@id:=#1\do{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{\@ff@id}%
\ifnum\@ff@numstart=0\relax
  \def\@ff@numstart{1}%
\fi
\ifnum\@ff@numend>\c@maxflow
  \def\@ff@numend{\c@maxflow}%
\fi
\@colN=\@ff@numstart
\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
\@@setflowframe{\@colN}{#2}%
\advance\@colN by 1\relax
}}}}}
\newcommand{\@@setflowframe}[2]{%
\def\ff@frame{}\def\ff@width{}\def\ff@height{}\def\ff@margin{}%
\def\ff@x{}\def\ff@y{}\def\ff@frametype{}\def\ff@col{}%
\def\ff@valign{}\def\ff@style{}%
\def\ff@txtcol{}\def\ff@clear{}\def\ff@offset{}\def\ff@pages{}%
\def\ff@label{}\def\ff@backcol{}\def\ff@evenx{}\def\ff@eveny{}%
\def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{\empty}%
\setkeys{flowframe}{#2}%
\ifthenelse{\equal{\ff@frame}{}}{}{%
\setboolean{columnframe\romannumeral#1}{\ff@frame}}%
\ifthenelse{\equal{\ff@width}{}}{}{%
\expandafter\setlength\csname colwidth\romannumeral#1\endcsname
{\ff@width}}%
\ifthenelse{\equal{\ff@height}{}}{}{%
\expandafter\setlength\csname colheight\romannumeral#1\endcsname
{\ff@height}}%
\ifthenelse{\equal{\ff@x}{}}{}{%
\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
{\ff@x}%
\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
{\ff@x}}
\ifthenelse{\equal{\ff@y}{}}{}{%
\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
{\ff@y}%
\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
{\ff@y}}
\ifthenelse{\equal{\ff@evenx}{}}{}{%
\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
{\ff@evenx}}
\ifthenelse{\equal{\ff@eveny}{}}{}{%
\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
{\ff@eveny}}
\ifthenelse{\equal{\ff@oddx}{}}{}{%
\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
{\ff@oddx}}
\ifthenelse{\equal{\ff@oddy}{}}{}{%
\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
{\ff@oddy}}
\ifthenelse{\equal{\ff@label}{}}{}{%
\@s@tflowframeid{#1}[\ff@label]}
\ifthenelse{\equal{\ff@frametype}{}}{}{%
\expandafter\edef\csname @ff@frametype@\romannumeral#1\endcsname
{\ff@frametype}}
\ifthenelse{\equal{\ff@col}{}}{}{%
\expandafter\@setframecol\ff@col\end{#1}{col}{ff}}
\ifthenelse{\equal{\ff@txtcol}{}}{}{%
\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{ff}}%
\ifthenelse{\equal{\ff@backcol}{}}{}{%
\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{ff}}%
\ifthenelse{\equal{\ff@margin}{}}{}{%
\expandafter\xdef\csname @ff@margin@\romannumeral#1\endcsname
{\ff@margin}}%
\ifthenelse{\equal{\ff@pages}{}}{}{%
\expandafter\xdef\csname @ff@pages@\romannumeral#1\endcsname
{\ff@pages}}%
\ifthenelse{\equal{\ff@offset}{}}{}{%
\expandafter\xdef\csname @ff@offset@\romannumeral#1\endcsname
{\ff@offset}}%
\ifthenelse{\equal{\ff@angle}{}}{}{%
\expandafter\xdef\csname @ff@angle@\romannumeral#1\endcsname
{\ff@angle}}%
\ifthenelse{\equal{\ff@clear}{}}{}{%
\PackageError{flowfram}%
{Key 'clear' not available for flow frames}{}}%
\ifthenelse{\equal{\ff@style}{}}{}{%
\PackageError{flowfram}%
{Key 'style' not available for flow frames}{}}%
\if\ff@shape\empty
\else
\PackageError{flowfram}%
{Key 'shape' not available for flow frames}{}%
\fi
\ifthenelse{\equal{\ff@valign}{}}{}{%
\PackageError{flowfram}%
{Key 'valign' not available for flow frames}{}}%
}
\newcommand{\@@flowframeswapcoords}[1]{%
\setlength{\@ff@tmp@x}%
{\csname col@\romannumeral#1@evenx\endcsname}
\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
{\csname col@\romannumeral#1@posx\endcsname}%
\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
{\@ff@tmp@x}%
\setlength{\@ff@tmp@y}%
{\csname col@\romannumeral#1@eveny\endcsname}
\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
{\csname col@\romannumeral#1@posy\endcsname}%
\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
{\@ff@tmp@y}%
}
\newcommand{\ffswapoddeven}{%
\@ifstar\@sflowframeswapcoords\@flowframeswapcoords}
\newcommand{\@sflowframeswapcoords}[1]{%
\@for\@ff@id:=#1\do{%
\@flowframeid{\@ff@id}%
\@@flowframeswapcoords{\ff@id}}}
\newcommand{\@flowframeswapcoords}[1]{%
\ifthenelse{\equal{#1}{all}}{%
\ff@id=0\relax
\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax
\@@flowframeswapcoords{\ff@id}}%
}{%
\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
\@@flowframeswapcoords{\@colN}%
\advance\@colN by 2\relax}%
}{%
\@for\@ff@id:=#1\do{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{\@ff@id}%
\ifnum\@ff@numstart=0\relax
  \def\@ff@numstart{1}%
\fi
\ifnum\@ff@numend>\c@maxflow
  \def\@ff@numend{\c@maxflow}%
\fi
\@colN=\@ff@numstart
\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
\@@flowframeswapcoords{\@colN}%
\advance\@colN by 1\relax
}}}}}
\newcommand{\flowframex}[1]{%
\csname col@\romannumeral#1@posx\endcsname}
\newcommand{\flowframey}[1]{%
\csname col@\romannumeral#1@posy\endcsname}
\newcommand{\flowframeevenx}[1]{%
\csname col@\romannumeral#1@evenx\endcsname}
\newcommand{\flowframeeveny}[1]{%
\csname col@\romannumeral#1@eveny\endcsname}
\newcommand{\flowframewidth}[1]{%
\csname colwidth\romannumeral#1\endcsname}
\newcommand{\flowframeheight}[1]{%
\csname colheight\romannumeral#1\endcsname}
\def\@setframecol{\@ifnextchar[\@@setframecol\@@setfr@mecol}
\def\@@setframecol[#1]#2\end#3#4#5{%
\expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{%
[#1]{#2}}}
\def\@@setfr@mecol#1\end#2#3#4{%
\expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}}
\newcommand{\newstaticframe}{\@n@wstaticframe}
\newcommand{\@n@wstaticframe}{%
\global\advance\c@maxstatic by 1\relax
\newboolean{staticframe\romannumeral\c@maxstatic}%
\@ifstar\@snewstaticframe\@newstaticframe
}
\newcommand{\@snewstaticframe}{%
\setboolean{staticframe\romannumeral\c@maxstatic}{true}%
\@@newstaticframe}
\newcommand{\@newstaticframe}{%
\setboolean{staticframe\romannumeral\c@maxstatic}{false}%
\@@newstaticframe}
\newcommand{\@@newstaticframe}[5][all]{%
\expandafter
\newbox\csname @staticframe@\romannumeral\c@maxstatic\endcsname
\expandafter
\newlength\csname @sf@\romannumeral\c@maxstatic @posx\endcsname
\expandafter
\newlength\csname @sf@\romannumeral\c@maxstatic @posy\endcsname
\expandafter\setlength
\csname @sf@\romannumeral\c@maxstatic @posx\endcsname{#4}%
\expandafter\setlength
\csname @sf@\romannumeral\c@maxstatic @posy\endcsname{#5}%
\expandafter\newlength
\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
\expandafter\newlength
\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname
\expandafter\setlength
\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{#4}%
\expandafter\setlength
\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname{#5}%
{\@ff@tmp@x=#2\relax
\@ff@tmp@y=#3\relax
\expandafter
\xdef\csname @sf@dim@\romannumeral\c@maxstatic\endcsname{%
[c][\the\@ff@tmp@y][c]{\the\@ff@tmp@x}}}%
\expandafter
\def\csname @sf@col@\romannumeral\c@maxstatic\endcsname{%
\flowframecol}%
\expandafter
\def\csname @sf@txtcol@\romannumeral\c@maxstatic\endcsname{%
\flowframetextcol}%
\expandafter
\def\csname @sf@backcol@\romannumeral\c@maxstatic\endcsname{%
{none}}%
\expandafter
\xdef\csname @sf@pages@\romannumeral\c@maxstatic\endcsname{#1}%
\expandafter
\gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{%
compute}%
\expandafter
\gdef\csname @sf@angle@\romannumeral\c@maxstatic\endcsname{0}%
\expandafter
\gdef\csname @sf@shape@\romannumeral\c@maxstatic\endcsname{\relax}%
\expandafter
\def\csname @sf@frametype@\romannumeral\c@maxstatic\endcsname{%
fbox}%
\newboolean{@sf@clear@\romannumeral\c@maxstatic}%
\setboolean{@sf@clear@\romannumeral\c@maxstatic}{false}
\@ifnextchar[{\@s@tstaticframeid{\c@maxstatic}}%
{\@s@tstaticframeid{\c@maxstatic}[\number\c@maxstatic]}}
\def\@s@tstaticframeid#1[#2]{%
\edef\ff@label{#2}%
\@sf@checkuniqueidl{#1}{\ff@label}%
\expandafter
\xdef\csname @sf@id@\romannumeral#1\endcsname{\ff@label}}
\newcommand{\@sf@checkuniqueidl}[2]{%
\@colN=0\relax
\whiledo{\@colN<\c@maxstatic}{%
\advance\@colN by 1\relax
\ifnum\@colN=#1\relax
\else
\ifthenelse{%
\equal{#2}{\csname @sf@id@\romannumeral\@colN\endcsname}}{%
\PackageError{flowfram}{Static frame IDL '#2' already defined}{%
You can't assign this label, as it is already defined
for static frame \number\@colN}}{}%
\fi
}}
\newcommand{\@staticframeid}[1]{\@colN=0\relax
\ff@id=0\relax
\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
\ifthenelse{%
\equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}}{%
\ff@id=\@colN\relax
\@colN=\c@maxstatic}{}}%
\ifnum\ff@id=0\PackageError{flowfram}{Can't find static frame
id '#1'}{}\fi}
\newcommand{\staticframex}[1]{%
\csname @sf@\romannumeral#1@posx\endcsname}
\newcommand{\staticframey}[1]{%
\csname @sf@\romannumeral#1@posy\endcsname}
\newcommand{\staticframeevenx}[1]{%
\csname @sf@\romannumeral#1@evenx\endcsname}
\newcommand{\staticframeeveny}[1]{%
\csname @sf@\romannumeral#1@eveny\endcsname}
\newcommand{\setallstaticframes}[1]{%
\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
\@@setstaticframe{\@colN}{#1}}}
\newcommand{\setstaticframe}{%
\@ifstar\@ssetstaticframe\@setstaticframe}
\newcommand{\@ssetstaticframe}[2]{%
\@for\@ff@id:=#1\do{%
\@staticframeid{\@ff@id}%
\@@setstaticframe{\ff@id}{#2}}}
\newcommand{\@setstaticframe}[2]{%
\ifthenelse{\equal{#1}{all}}{%
\setallstaticframes{#2}}{%
\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
\whiledo{\@colN<\c@maxstatic\TE@or\@colN=\c@maxstatic}{%
\@@setstaticframe{\@colN}{#2}%
\advance\@colN by 2\relax}%
}{%
\@for\@ff@id:=#1\do{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{\@ff@id}%
\ifnum\@ff@numstart=0\relax
  \def\@ff@numstart{1}%
\fi
\ifnum\@ff@numend>\c@maxstatic
  \def\@ff@numend{\c@maxstatic}%
\fi
\@colN=\@ff@numstart
\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
\@@setstaticframe{\@colN}{#2}%
\advance\@colN by 1\relax
}}}}}
\newcommand{\@@setstaticframe}[2]{%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
\def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}\def\ff@angle{}%
\edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}%
\def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}%
\def\ff@backcol{}\def\ff@shape{0}%
\def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}%
\def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}%
\def\ff@oddx{}\def\ff@oddy{}%
\setkeys{flowframe}{#2}%
\ifthenelse{\equal{\ff@frame}{}}{}{%
\setboolean{staticframe\romannumeral#1}{\ff@frame}}%
\ifthenelse{\equal{\ff@x}{}}{}{%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
{\ff@x}%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
{\ff@x}}%
\ifthenelse{\equal{\ff@y}{}}{}{%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
{\ff@y}%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
{\ff@y}}%
\ifthenelse{\equal{\ff@evenx}{}}{}{%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
{\ff@evenx}}%
\ifthenelse{\equal{\ff@eveny}{}}{}{%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
{\ff@eveny}}%
\ifthenelse{\equal{\ff@oddx}{}}{}{%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
{\ff@oddx}}%
\ifthenelse{\equal{\ff@oddy}{}}{}{%
\expandafter\global
\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
{\ff@oddy}}%
\expandafter
\xdef\csname @sf@dim@\romannumeral#1\endcsname{%
[c][\ff@height][\ff@valign]{\ff@width}}%
\ifthenelse{\equal{\ff@frametype}{}}{}{%
\expandafter
\xdef\csname @sf@frametype@\romannumeral#1\endcsname{%
\ff@frametype}}%
\ifthenelse{\equal{\ff@label}{}}{}{%
\@s@tstaticframeid{#1}[\ff@label]}
\ifthenelse{\equal{\ff@col}{}}{}{%
\expandafter\@setframecol\ff@col\end{#1}{col}{sf}}%
\ifthenelse{\equal{\ff@txtcol}{}}{}{%
\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{sf}}%
\ifthenelse{\equal{\ff@backcol}{}}{}{%
\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{sf}}%
\ifthenelse{\equal{\ff@offset}{}}{}{%
\expandafter
\xdef\csname @sf@offset@\romannumeral#1\endcsname{\ff@offset}}%
\ifthenelse{\equal{\ff@angle}{}}{}{%
\expandafter
\xdef\csname @sf@angle@\romannumeral#1\endcsname{\ff@angle}}%
\if0\ff@shape
\else
\expandafter\global\expandafter
\let\csname @sf@shape@\romannumeral#1\endcsname\ff@shape
\fi
\ifthenelse{\equal{\ff@pages}{}}{}{%
\expandafter
\xdef\csname @sf@pages@\romannumeral#1\endcsname{\ff@pages}}%
\ifthenelse{\equal{\ff@clear}{}}{}{%
\setboolean{@sf@clear@\romannumeral#1}{\ff@clear}}%
\ifthenelse{\equal{\ff@margin}{}}{}{%
\PackageError{flowfram}{Key 'margin' not available for
static frames}{Static frames don't have marginal notes}}%
\ifthenelse{\equal{\ff@style}{}}{}{%
\PackageError{flowfram}{Key 'style' not available for
static frames}{}}%
}
\newcommand*{\simpar}{\hfill\\\indent\mbox{}}
\let\orgpar\par
\newcommand{\ffpshpar}{\edef\next{\hangafter=\the\hangafter
\hangindent=\the\hangindent}\orgpar\next
\edef\next{\prevgraf=\the\prevgraf}\@ff@parshape\indent\mbox{}\next}
\def\@ff@parshape{\parshape=0}

\newcommand{\@ff@sectionhead}[1]{%
\def\ff@sechead{#1}%
\ffpshpar
\@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}}

\def\@s@ff@heading#1{%
\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown
heading command '\ff@sechead'}{}}{%
\begingroup
\edef\next{\hangafter=\the\hangafter
\hangindent=\the\hangindent}\orgpar\next
\let\par=\orgpar
\edef\next{\prevgraf=\the\prevgraf}%
\csname @ff@old\ff@sechead\endcsname*{\@ff@parshape\next
#1}%
\xdef\next{\@ff@parshape
\prevgraf=\the\prevgraf}%
\endgroup
}%
\mbox{}\next\let\next\undefined}

\def\@ff@heading[#1]#2{%
\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown
heading command '\ff@sechead'}{}}{%
\begingroup
\edef\next{\hangafter=\the\hangafter
\hangindent=\the\hangindent}\orgpar\next
\let\par=\orgpar
\edef\next{\prevgraf=\the\prevgraf}%
\csname @ff@old\ff@sechead\endcsname[#1]{\@ff@parshape\next
#2}%
\xdef\next{\@ff@parshape
\prevgraf=\the\prevgraf}%
\endgroup}%
\mbox{}\next\let\next\undefined}
\newcommand*{\@ff@setsecthead}{%
\let\@ff@oldsection=\section
\let\@ff@oldsubsection=\subsection
\let\@ff@oldsubsubsection=\subsubsection
\let\@ff@oldparagraph=\paragraph
\let\@ff@oldsubparagraph=\subparagraph
\def\section{\@ff@sectionhead{section}}%
\def\subsection{\@ff@sectionhead{subsection}}%
\def\subsubsection{\@ff@sectionhead{subsubsection}}%
\def\paragraph{\@ff@sectionhead{paragraph}}%
\def\subparagraph{\@ff@sectionhead{subparagraph}}%
}
\def\@ff@getshape#1#2\relax{%
\ifx#1\parshape
\def\ff@shape{1}%
\else
\ifx#1\shapepar
\def\ff@shape{2}%
\else
\ifx#1\relax
\def\ff@shape{0}%
\else
\PackageError{flowfram}{Unknown shape \string#1}{}%
\def\ff@shape{2}%
\fi
\fi
\fi}
\newcommand*{\@ff@disablesec}{%
\def\section{\PackageError{flowfram}{You can't have
sectioning commands within a \string\shapepar}{}}%
\def\subsection{\PackageError{flowfram}{You can't have
sectioning commands within a \string\shapepar}{}}%
\def\subsubsection{\PackageError{flowfram}{You can't have
sectioning commands within a \string\shapepar}{}}%
\def\paragraph{\PackageError{flowfram}{You can't have
sectioning commands within a \string\shapepar}{}}%
\def\subparagraph{\PackageError{flowfram}{You can't have
sectioning commands within a \string\shapepar}{}}%
}
\newbox\staticframe
\newenvironment{staticcontents}[1]{%
\@ifundefined{@staticframe@\romannumeral#1}{%
\PackageError{flowfram}{Static frame '#1' not defined}{}}{}%
\expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname
\expandafter\@ff@getshape\@ff@parshape\relax
\ifcase\ff@shape
\edef\@sf@mpg{%
\noexpand
\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
\noexpand\begingroup
\noexpand\let\noexpand\orgpar=\noexpand\par
}%
\or
\edef\@sf@mpg{%
\noexpand
\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
\@ff@parshape
\noexpand\begingroup
\noexpand\let\noexpand\orgpar=\noexpand\par
\noexpand\let\noexpand\par=\noexpand\ffpshpar
\noexpand\@ff@setsecthead
}%
\or
\edef\@sf@mpg{%
\noexpand
\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
\noexpand\begingroup
\noexpand\@ff@disablesec
\noexpand\@ff@parshape
}%
\fi
\edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}%
\begin{lrbox}{\staticframe}%
\edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}%
\@s@tfftextcol\noindent
\@sf@mpg
\setlength\parindent\sdfparindent
}{\ifnum\ff@shape=2\par
\else\orgpar\fi\endgroup\end{minipage}\end{lrbox}%
\expandafter\global\expandafter\sbox\@sf@thisframe{%
\usebox\staticframe}\ignorespaces
}
\newenvironment{staticcontents*}[1]{\@staticframeid{#1}%
\begin{staticcontents}{\ff@id}}{\end{staticcontents}}
\newcommand{\setstaticcontents}{%
\@ifstar\@sstaticconts\@staticconts}
\newcommand{\@sstaticconts}[1]{\@staticframeid{#1}%
\@staticconts{\ff@id}}
\newcommand{\@staticconts}[2]{\begin{staticcontents}{#1}%
#2\end{staticcontents}}
\newcommand{\@@staticframeswapcoords}[1]{%
\setlength{\@ff@tmp@x}%
{\csname @sf@\romannumeral#1@evenx\endcsname}
\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
{\csname @sf@\romannumeral#1@posx\endcsname}%
\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
{\@ff@tmp@x}%
\setlength{\@ff@tmp@y}%
{\csname @sf@\romannumeral#1@eveny\endcsname}
\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
{\csname @sf@\romannumeral#1@posy\endcsname}%
\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
{\@ff@tmp@y}%
}
\newcommand{\sfswapoddeven}{%
\@ifstar\@sstaticframeswapcoords\@staticframeswapcoords}
\newcommand{\@sstaticframeswapcoords}[1]{%
\@for\@ff@id:=#1\do{%
\@staticframeid{\@ff@id}%
\@@staticframeswapcoords{\ff@id}}}
\newcommand{\@staticframeswapcoords}[1]{%
\ifthenelse{\equal{#1}{all}}{%
\ff@id=0\relax
\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax
\@@staticframeswapcoords{\ff@id}}%
}{%
\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
\@@staticframeswapcoords{\@colN}%
\advance\@colN by 2\relax}%
}{%
\@for\@ff@id:=#1\do{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{\@ff@id}%
\ifnum\@ff@numstart=0\relax
  \def\@ff@numstart{1}%
\fi
\ifnum\@ff@numend>\c@maxflow
  \def\@ff@numend{\c@maxflow}%
\fi
\@colN=\@ff@numstart
\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
\@@staticframeswapcoords{\@colN}%
\advance\@colN by 1\relax
}}}}}
\newcommand{\newdynamicframe}{%
\global\advance\c@maxdynamic by 1\relax
\newboolean{dynamicframe\romannumeral\c@maxdynamic}
\@ifstar\@snewdynamicframe\@newdynamicframe
}
\newcommand{\@snewdynamicframe}{%
\setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}%
\@@newdynamicframe}
\newcommand{\@newdynamicframe}{%
\setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}%
\@@newdynamicframe}
\newcommand{\@@newdynamicframe}[5][all]{%
\expandafter
\gdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{}%
\expandafter
\newlength\csname @df@\romannumeral\c@maxdynamic @posx\endcsname
\expandafter
\newlength\csname @df@\romannumeral\c@maxdynamic @posy\endcsname
\expandafter\setlength
\csname @df@\romannumeral\c@maxdynamic @posx\endcsname{#4}%
\expandafter\setlength
\csname @df@\romannumeral\c@maxdynamic @posy\endcsname{#5}%
\expandafter\newlength
\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
\expandafter\newlength
\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname
\expandafter\setlength
\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname{#4}%
\expandafter\setlength
\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname{#5}%
{\@ff@tmp@x=#2\relax
\@ff@tmp@y=#3\relax
\expandafter
\xdef\csname @df@dim@\romannumeral\c@maxdynamic\endcsname{%
[c][\the\@ff@tmp@y][t]{\the\@ff@tmp@x}}}%
\expandafter
\gdef\csname @df@col@\romannumeral\c@maxdynamic\endcsname{%
\flowframecol}%
\expandafter
\gdef\csname @df@txtcol@\romannumeral\c@maxdynamic\endcsname{%
\flowframetextcol}%
\expandafter
\gdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname{%
{none}}%
\expandafter
\gdef\csname @df@pages@\romannumeral\c@maxdynamic\endcsname{#1}%
\expandafter
\gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{%
fbox}%
\expandafter
\gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}%
\expandafter
\gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}%
\expandafter
\gdef\csname @df@angle@\romannumeral\c@maxdynamic\endcsname{0}%
\expandafter
\gdef\csname @df@shape@\romannumeral\c@maxdynamic\endcsname{\relax}%
\newboolean{@df@clear@\romannumeral\c@maxdynamic}%
\setboolean{@df@clear@\romannumeral\c@maxdynamic}{false}%
\@ifnextchar[{\@s@tdynamicframeid{\c@maxdynamic}}%
{\@s@tdynamicframeid{\c@maxdynamic}[\number\c@maxdynamic]}}
\def\@s@tdynamicframeid#1[#2]{%
\edef\ff@label{#2}%
\@df@checkuniqueidl{#1}{\ff@label}%
\expandafter
\xdef\csname @df@id@\romannumeral#1\endcsname{\ff@label}}
\newcommand{\@df@checkuniqueidl}[2]{%
\@colN=0\relax
\whiledo{\@colN<\c@maxdynamic}{%
\advance\@colN by 1\relax
\ifnum\@colN=#1\relax
\else
\ifthenelse{\equal{#2}%
{\csname @df@id@\romannumeral\@colN\endcsname}}{%
\PackageError{flowfram}{Dynamic frame IDL '#2' already defined}{%
You can't assign this label, as it is already defined
for dynamic frame \number\@colN}}{}%
\fi
}}
\newcommand{\@dynamicframeid}[1]{\@colN=0\relax
\ff@id=0\relax
\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
\ifthenelse{%
\equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}}{%
\ff@id=\@colN\relax
\@colN=\c@maxdynamic}{}}%
\ifnum\ff@id=0\PackageError{flowfram}{Can't find dynamic frame
id '#1'}{}\fi}
\newcommand{\dynamicframex}[1]{%
\csname @df@\romannumeral#1@posx\endcsname}
\newcommand{\dynamicframey}[1]{%
\csname @df@\romannumeral#1@posy\endcsname}
\newcommand{\dynamicframeevenx}[1]{%
\csname @df@\romannumeral#1@evenx\endcsname}
\newcommand{\dynamicframeeveny}[1]{%
\csname @df@\romannumeral#1@eveny\endcsname}
\newcommand{\setalldynamicframes}[1]{%
\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
\@@setdynamicframe{\@colN}{#1}}}
\newcommand{\setdynamicframe}{%
\@ifstar\@ssetdynamicframe\@setdynamicframe}
\newcommand{\@ssetdynamicframe}[2]{%
\@for\@ff@id:=#1\do{%
\@dynamicframeid{\@ff@id}%
\@@setdynamicframe{\ff@id}{#2}}}
\newcommand{\@setdynamicframe}[2]{%
\ifthenelse{\equal{#1}{all}}{%
\setalldynamicframes{#2}}{%
\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
\whiledo{\@colN<\c@maxdynamic\TE@or\@colN=\c@maxdynamic}{%
\@@setdynamicframe{\@colN}{#2}%
\advance\@colN by 2\relax}%
}{%
\@for\@ff@id:=#1\do{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{\@ff@id}%
\ifnum\@ff@numstart=0\relax
  \def\@ff@numstart{1}%
\fi
\ifnum\@ff@numend>\c@maxdynamic
  \def\@ff@numend{\c@maxdynamic}%
\fi
\@colN=\@ff@numstart
\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
\@@setdynamicframe{\@colN}{#2}%
\advance\@colN by 1\relax
}}}}}
\newcommand{\@@setdynamicframe}[2]{%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
\def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}%
\edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}%
\def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}\def\ff@backcol{}%
\def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}%
\def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}%
\def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{0}%
\setkeys{flowframe}{#2}%
\ifthenelse{\equal{\ff@frame}{}}{}{%
\setboolean{dynamicframe\romannumeral#1}{\ff@frame}}%
\ifthenelse{\equal{\ff@x}{}}{}{%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@posx\endcsname{\ff@x}%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@evenx\endcsname{\ff@x}}%
\ifthenelse{\equal{\ff@y}{}}{}{%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@posy\endcsname{\ff@y}%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@eveny\endcsname{\ff@y}}%
\ifthenelse{\equal{\ff@evenx}{}}{}{%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@evenx\endcsname{\ff@evenx}}%
\ifthenelse{\equal{\ff@eveny}{}}{}{%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@eveny\endcsname{\ff@eveny}}%
\ifthenelse{\equal{\ff@oddx}{}}{}{%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@posx\endcsname{\ff@oddx}}%
\ifthenelse{\equal{\ff@oddy}{}}{}{%
\expandafter\global\expandafter\setlength
\csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}}%
\expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{%
[c][\ff@height][\ff@valign]{\ff@width}}%
\ifthenelse{\equal{\ff@label}{}}{}{%
\@s@tdynamicframeid{#1}[\ff@label]}
\ifthenelse{\equal{\ff@frametype}{}}{}{%
\expandafter
\xdef\csname @df@frametype@\romannumeral#1\endcsname{%
\ff@frametype}}%
\ifthenelse{\equal{\ff@col}{}}{}{%
\expandafter\@setframecol\ff@col\end{#1}{col}{df}}%
\ifthenelse{\equal{\ff@txtcol}{}}{}{%
\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{df}}%
\ifthenelse{\equal{\ff@backcol}{}}{}{%
\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{df}}%
\ifthenelse{\equal{\ff@offset}{}}{}{%
\expandafter
\xdef\csname @df@offset@\romannumeral#1\endcsname{\ff@offset}}%
\ifthenelse{\equal{\ff@angle}{}}{}{%
\expandafter
\xdef\csname @df@angle@\romannumeral#1\endcsname{\ff@angle}}%
\if0\ff@shape
\else
\expandafter\global\expandafter
\let\csname @df@shape@\romannumeral#1\endcsname\ff@shape
\fi
\ifthenelse{\equal{\ff@pages}{}}{}{%
\expandafter\xdef\csname @df@pages@\romannumeral#1\endcsname{%
\ff@pages}}%
\ifthenelse{\equal{\ff@style}{}}{}{%
\@ifundefined{\ff@style}{\PackageError{flowfram}%
{Unknown style '\ff@style'}{The command \expandafter
\string\csname\ff@style\endcsname\space has not been defined}}{%
\expandafter
\xdef\csname @df@style@\romannumeral#1\endcsname{\ff@style}}}%
\ifthenelse{\equal{\ff@clear}{}}{}{%
\setboolean{@df@clear@\romannumeral\c@maxdynamic}{true}%
}%
\ifthenelse{\equal{\ff@margin}{}}{}{%
\PackageError{flowfram}{Key 'margin' not available for dynamic
frames}{dynamic frames don't have marginal notes}}%
}
\newcommand{\@@dynamicframeswapcoords}[1]{%
\setlength{\@ff@tmp@x}%
{\csname @df@\romannumeral#1@evenx\endcsname}%
\expandafter\setlength
\csname @df@\romannumeral#1@evenx\endcsname
{\csname @df@\romannumeral#1@posx\endcsname}%
\expandafter\setlength
\csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}%
\setlength{\@ff@tmp@y}%
{\csname @df@\romannumeral#1@eveny\endcsname}%
\expandafter\setlength
\csname @df@\romannumeral#1@eveny\endcsname
{\csname @df@\romannumeral#1@posy\endcsname}%
\expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname
{\@ff@tmp@y}%
}
\newcommand{\dfswapoddeven}{%
\@ifstar\@sdynamicframeswapcoords\@dynamicframeswapcoords}
\newcommand{\@sdynamicframeswapcoords}[1]{%
\@for\@ff@id:=#1\do{%
\@dynamicframeid{\@ff@id}%
\@@dynamicframeswapcoords{\ff@id}}}
\newcommand{\@dynamicframeswapcoords}[1]{%
\ifthenelse{\equal{#1}{all}}{%
\ff@id=0\relax
\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax
\@@dynamicframeswapcoords{\ff@id}}%
}{%
\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
\@@dynamicframeswapcoords{\@colN}%
\advance\@colN by 2\relax}%
}{%
\@for\@ff@id:=#1\do{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{\@ff@id}%
\ifnum\@ff@numstart=0\relax
  \def\@ff@numstart{1}%
\fi
\ifnum\@ff@numend>\c@maxflow
  \def\@ff@numend{\c@maxflow}%
\fi
\@colN=\@ff@numstart
\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
\@@dynamicframeswapcoords{\@colN}%
\advance\@colN by 1\relax
}}}}}
\newcommand{\setdynamiccontents}{%
\@ifstar\@ssetdynamiccontents\@setdynamiccontents}
\newcommand{\@ssetdynamiccontents}[2]{%
\@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}}
\newcommand{\@setdynamiccontents}[2]{%
\ifnum#1>\c@maxdynamic
\PackageError{flowfram}{Dynamic frame \number#1\ does not exist}{%
You have specified dynamic frame number \number#1, but there are
only \number\c@maxdynamic\space dynamic frames currently defined}%
\else
\expandafter
\gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}%
\fi}
\newcommand{\appenddynamiccontents}{%
\@ifstar\@sappenddynamic\@appenddynamic}
\newcommand{\@sappenddynamic}[2]{%
\@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}}
\newcommand{\@appenddynamic}[2]{%
\ifnum#1>\c@maxdynamic
\PackageError{flowfram}{Dynamic frame \number#1 does not exist}{%
You have specified dynamic frame number \number#1,
but there are only
\number\c@maxdynamic\space dynamic frames currently defined}%
\else
\expandafter\@ff@addtolist
\csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}%
\fi}
\toksdef\flf@ta=0 \toksdef\flf@tb=2
\long\def\@ff@addtolist#1\entry#2{\flf@ta={{#2}}%
\flf@tb=\expandafter{#1}%
\xdef#1{\the\flf@tb\the\flf@ta}}
\newcommand{\setinitialframe}[1]{\c@thisframe=#1%
\global\usedframebreaktrue
\global\setlength{\hsize}{%
\csname colwidth\romannumeral\c@thisframe\endcsname}}
\newif\if@setfr@mes
\@setfr@mesfalse
\newcommand{\setframes}{%
\ifnum\c@thisframe=0\relax
\PackageWarning{flowfram}{Can't find a flow frame on page 1.
\MessageBreak
Attempting to find the first page with a flow frame}%
\@nxtcol=1\relax
\c@curpg=1\relax
\@g@tnextcol{\@nxtcol}%
\advance\c@curpg by -1\relax
  \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax
  \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
\@outputpage}%
\c@thisframe=\@nxtcol
\fi
\@setcol{\c@thisframe}\relax
\@setfr@mestrue
\edef\ff@txtcol{%
\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}%
\@s@tfftextcol
}
\newcommand{\emulatetwocolumn}[1][]{%
\finishthispage
\setallflowframes{pages=none}%
\settoheight{\@ff@staticH}{#1}%
\settodepth{\@ff@tmp@y}{#1}%
\addtolength{\@ff@staticH}{\@ff@tmp@y}%
\ifdim\@ff@staticH>0pt\relax
\twocolumnStop[\c@page]{\@ff@staticH}%
\c@thisframe=\c@maxflow
\advance\c@thisframe by -1\relax
\@twocolumn[>\c@page]%
\setstaticcontents{\c@maxstatic}{#1}%
\else
\@twocolumn
\c@thisframe=\c@maxflow
\advance\c@thisframe by -1\relax
\fi
\@setcol{\c@thisframe}\relax
}
\newcommand{\emulateonecolumn}[1][]{%
\finishthispage
\setallflowframes{pages=none}%
\settoheight{\@ff@staticH}{#1}%
\settodepth{\@ff@tmp@y}{#1}%
\addtolength{\@ff@staticH}{\@ff@tmp@y}%
\ifdim\@ff@staticH>0pt\relax
\onecolumnStop[\c@page]{\@ff@staticH}%
\c@thisframe=\c@maxflow
\advance\c@thisframe by -1\relax
\@onecolumn[>\c@page]%
\setstaticcontents{\c@maxstatic}{#1}%
\else
\@twocolumn
\c@thisframe=\c@maxflow
\advance\c@thisframe by -1\relax
\fi
\@setcol{\c@thisframe}\relax
}
\AtBeginDocument{%
\ifnum\c@maxflow=0\relax
\PackageWarning{flowfram}{No flow frames, adding one}%
\@onecolumn
\fi
\setframes
\renewcommand{\onecolumn}[1][]{\PackageWarning{flowfram}{%
Ignoring \string\onecolumn\space found in document environment.
Frames must be defined in the preamble}#1}%
\renewcommand{\twocolumn}[1][]{\PackageWarning{flowfram}{%
Ignoring \string\twocolumn\space found in document environment.
Frames must be defined in the preamble}#1}%
}
\newcommand{\@setcol}[1]{%
\ifnum\c@maxflow<#1\relax
\PackageError{flowfram}{Can't set frame '\number#1', doesn't
exist}{}%
\else
\expandafter\global\expandafter\columnwidth
\csname colwidth\romannumeral#1\endcsname
\ifdim\hsize=\columnwidth
\else
 \ifusedframebreak
 \else
   \PackageWarning{flowfram}{Moving to flow frame of unequal
width,\MessageBreak use of \string\framebreak\space advised,
or text might not appear correctly}%
 \fi
\fi
\global\usedframebreakfalse
\global\hsize\columnwidth
\expandafter\global
\expandafter\vsize\csname colheight\romannumeral#1\endcsname
\global\@colht\vsize
\global\@colroom\@colht
\global\linewidth\columnwidth
\setmargin
\fi
}
\output={\let\par\@@par
\ifnum\outputpenalty <-\@M
  \@specialoutput
\else
  \@makecol
  \@opcol \@startcolumn
  \@whilesw \if@fcolmade \fi {\@opcol \@startcolumn }%
\fi
\ifnum\outputpenalty>-\@Miv
  \ifdim\@colroom<1.5\baselineskip
    \ifdim\@colroom<\vsize
      \@latex@warning@no@line{Text page \thepage \space
      contains only floats}\@emptycol
    \else
      \global\vsize\@colroom
    \fi
  \else
    \global\vsize\@colroom
  \fi
\else
  \global\vsize\maxdimen
\fi
}
\def\@doclearpage{%
\ifvoid\footins
  \setbox\@tempboxa\vsplit\@cclv to\z@
  \unvbox\@tempboxa
  \setbox\@tempboxa\box\@cclv
  \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
\global\let\@toplist\@empty
\global\let\@botlist\@empty
\global\@colroom\@colht
  \ifx\@currlist\@empty
  \else
    \@latexerr{Float(s) lost}\@ehb
    \global\let\@currlist\@empty
  \fi
  \@makefcolumn
  \@deferlist
  \@whilesw \if@fcolmade \fi {\@opcol
     \@makefcolumn
     \@deferlist}%
\if@firstcolumn
     \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}%
\global\let\@dbltoplist\@empty
\global\@colht\vsize
\begingroup
  \@dblfloatplacement
  \@makefcolumn
  \@dbldeferlist
  \@whilesw \if@fcolmade \fi {\@outputpage
\@makefcolumn\@dbldeferlist}%
\endgroup
\else
  \vbox{}\clearpage
\fi
\else
  \setbox\@cclv\vbox{\box\@cclv\vfil}%
\@makecol\@opcol\clearpage\fi}
\newcommand{\@dothehead}{\vbox to \headheight{%
\color@hbox\normalcolor\hbox to \textwidth{%
\@thehead}\color@endbox}}
\newcommand{\@dothefoot}{%
\color@hbox\normalcolor\hbox to \textwidth{%
\@thefoot}\color@endbox}
\newcommand{\@dodynamicthehead}{}
\newcommand{\@dodynamicthefoot}{}
\def\@outputpage{%
\begingroup
  \let\protect\noexpand
  \@resetactivechars
  \global\let\@@if@newlist\if@newlist
  \global\@newlistfalse\@parboxrestore
  \shipout\vbox{\set@typeset@protect
  \aftergroup
  \endgroup
  \aftergroup
  \set@typeset@protect
  \reset@font\normalsize\normalsfcodes
  \let\label\@gobble
  \let\index\@gobble
  \let\glossary\@gobble
  \baselineskip\z@skip
  \lineskip\z@skip
  \lineskiplimit\z@
  \@begindvi
    \vskip\topmargin\moveright\@themargin
    \vbox{%
    \vskip\headheight
    \vskip\headsep
    \box\@outputbox
    }}\global\let\if@newlist\@@if@newlist
    \stepcounter{page}\let\firstmark\botmark}
\newcommand{\makedfheaderfooter}{%
\setlength{\@ff@tmp@y}{\textheight}%
\addtolength{\@ff@tmp@y}{\headsep}%
\newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]%
\newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]%
\renewcommand{\@dothehead}{}%
\renewcommand{\@dothefoot}{}%
\renewcommand{\@dodynamicthehead}{%
\@dynamicframeid{header}%
\expandafter
\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{%
\vfill\@thehead\vfill}%
}%
\renewcommand{\@dodynamicthefoot}{%
\@dynamicframeid{footer}%
\expandafter
\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{%
\vfill\@thefoot\vfill}%
}%
}
\@onlypreamble{\makedfheaderfooter}
\newcommand{\footnotecolor}{%
\@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}{%
\normalcolor}{%
\edef\ff@txtcol{%
\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}%
\@s@tfftextcol}}
\renewcommand{\@makecol}{%
\ifvoid\footins
  \setbox\@outputbox\box\@cclv
\else
  \setbox\@outputbox\vbox{%
\boxmaxdepth\@maxdepth\@tempdima\dp\@cclv
    \unvbox\@cclv
    \vskip\skip\footins
    \color@begingroup
      \footnotecolor
      \footnoterule
      \unvbox\footins
    \color@endgroup
}\fi
\xdef\@freelist{\@freelist \@midlist }%
\global\let\@midlist\@empty
\@combinefloats
\ifvbox\@kludgeins
  \@makespecialcolbox
\else
  \setbox\@outputbox\vbox to\@colht{%
\@texttop\dimen@\dp\@outputbox
  \unvbox \@outputbox
  \vskip -\dimen@\@textbottom
}\fi
\global\maxdepth\@maxdepth}
\def\@opcol{\@outputdblcol
\global\@mparbottom\z@
\global\@textfloatsheight\z@
\@floatplacement
}
\newif\if@ff@moreframes
\newcommand{\@ff@checkifmoreframes}{%
\@ff@moreframesfalse
\@colN=\c@thisframe
\whiledo{\@colN<\c@maxflow}{%
\advance\@colN by 1\relax
\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
\@ff@checkpages{\ff@pages}%
}%
\if@ff@moreframes
\else
\@ff@tmpN=\c@page
\advance\@ff@tmpN by 1\relax
\@colN=0\relax
\whiledo{\@colN<\c@thisframe}{%
\advance\@colN by 1\relax
\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
\@ff@checkpages[\@ff@tmpN]{\ff@pages}%
}%
\fi
}
\newcommand{\@ff@checkpages}[2][\c@page]{%
\@for\@ff@pp:=#2\do{%
\@ff@checkthispage{#1}{\@ff@pp}}}
\newcommand{\@ff@checkthispage}[2]{%
\ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}{%
\@ff@moreframestrue}{%
\ifthenelse{\equal{#2}{none}}{}{%
\@ff@checknumrange{#1}{#2}}}}
\newcommand{\@ff@checknumrange}[2]{%
\def\@ff@numstart{0}\def\@ff@numend{10000}%
\@ff@getrange{#2}%
\ifnum\@ff@numend>#1\relax
\@ff@moreframestrue
\else
\ifnum\@ff@numend=#1\relax
\@ff@moreframestrue
\fi
\fi
}
\newcount\c@ffrangenum
\newcommand{\@ff@getrange}[1]{%
\expandafter\@ff@@getrange#1-\relax\end}
\def\@ff@@getrange#1#2\end{%
\ifx#1<%
\@ff@getrangeless#1#2\end
\else
\ifx#1>%
\@ff@getrangegreater#1#2\end
\else
\@@ff@getrange#1#2\end
\fi
\fi
}
\def\@ff@getrangeless<#1-\relax\end{%
\c@ffrangenum=#1\relax
\advance\c@ffrangenum by -1\relax
\def\@ff@numstart{0}%
\edef\@ff@numend{\number\c@ffrangenum}}
\def\@ff@getrangegreater>#1-\relax\end{%
\c@ffrangenum=#1\relax
\advance\c@ffrangenum by 1\relax
\edef\@ff@numstart{\number\c@ffrangenum}%
\def\@ff@numend{10000}}
\def\@@ff@getrange#1-#2\end{%
\ifx\relax#2\relax
\def\@ff@numstart{#1}\def\@ff@numend{#1}%
\else
\def\@ff@numstart{#1}%
\@@@ff@getrange#2\end
\fi
}
\def\@@@ff@getrange#1-\relax\end{%
\def\@ff@numend{#1}}
\newif\if@notthiscol
\newif\if@ff@nwpg
\newcount\c@curpg
\newcommand{\@g@tnextcol}[1]{%
\@ff@checkifmoreframes
\if@ff@moreframes
\else
\PackageWarning{flowfram}{Run out of flows frames,
adding new one}%
\@onecolumn
#1=\c@maxflow
\fi
\@notthiscoltrue
\@ff@nwpgfalse
\@colN=#1\relax
\c@curpg=\c@page
\loop
\ifnum\@colN=\c@maxflow
 \@colN=1\@ff@nwpgtrue
 \advance\c@curpg by 1\relax
\else
 \advance\@colN by 1\relax
\fi
\@ff@chckifthispg{\c@curpg}{\@colN}%
\if@notthiscol
\repeat
#1=\@colN
}
\newcommand{\@ff@chckifthispg}[2]{%
\@notthiscoltrue
\edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}%
\@@ff@chckifthispg{#1}%
}
\newcommand{\@@ff@chckifthispg}[1]{%
\ifthenelse{\equal{\ff@pages}{none}}{}{%
\ifthenelse{\equal{\ff@pages}{all}}{\@notthiscolfalse}{%
\ifthenelse{\equal{\ff@pages}{odd}}{%
\ifodd#1\@notthiscolfalse\fi}{%
\ifthenelse{\equal{\ff@pages}{even}}{%
\ifodd#1\else\@notthiscolfalse\fi}{%
\@for\@ff@pp:=\ff@pages\do{%
\def\@ff@numstart{0}\def\@ff@numend{0}%
\@ff@getrange{\@ff@pp}%
\ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}{}{%
\@notthiscolfalse}%
}%
}}}}%
}
\newcommand{\@sf@chckifthispg}[1]{%
\@notthiscoltrue
\edef\ff@pages{\csname @sf@pages@\romannumeral#1\endcsname}%
\@@ff@chckifthispg{\c@page}%
}
\newcommand{\@df@chckifthispg}[1]{%
\@notthiscoltrue
\edef\ff@pages{\csname @df@pages@\romannumeral#1\endcsname}%
\@@ff@chckifthispg{\c@page}%
}
\newcommand{\@setcolbox}[1]{%
\expandafter\global\expandafter\setbox
\csname column\romannumeral#1\endcsname\box\@outputbox
}
\newcommand{\@docolbox}[1]{%
\edef\ff@frametype{%
\csname @ff@frametype@\romannumeral#1\endcsname}%
\edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}%
\edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}%
\edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}%
\@ff@setoffset{#1}%
\rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}{%
\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
\@ff@fbox{\csname colwidth\romannumeral#1\endcsname}%
{\csname colheight\romannumeral#1\endcsname}{%
\expandafter\box\csname column\romannumeral#1\endcsname}{%
\csname\ff@frametype\endcsname}%
}{%
\@ff@box{\csname colwidth\romannumeral#1\endcsname}%
{\csname colheight\romannumeral#1\endcsname}{%
\expandafter\box\csname column\romannumeral#1\endcsname}%
}}}
\newcommand{\@docolbbox}[1]{%
\@ff@setoffset{#1}%
\def\ff@col{}\def\ff@txtcol{}%
\@fr@meifdraft{%
\@ff@box{\csname colwidth\romannumeral#1\endcsname}%
{\csname colheight\romannumeral#1\endcsname}{%
\expandafter\box\csname column\romannumeral#1\endcsname}}%
{F:\number#1;\csname @col@id@\romannumeral#1\endcsname}}
\newcommand{\@ff@fbox}[4]{{%
\fboxsep=\flowframesep\fboxrule=\flowframerule\@s@tffcol
\kern\@ff@offset
#4{\@ff@box{#1}{#2}{#3}}}}
\newcommand{\@ff@box}[3]{{\@ffbackground{\vbox to#2
{\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}}}}
\newcommand{\@putcolbox}[1]{%
\@ff@chckifthispg{\c@page}{#1}%
\if@notthiscol
\else
\@killglue
\if@twoside
\ifodd\c@page
\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
\@docolbox{#1}\hss}%
\else
\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname
\@docolbox{#1}\hss}%
\fi
\else
\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
\@docolbox{#1}\hss}%
\fi
\fi
}
\newcommand{\@putcolbbox}[1]{%
\@ff@chckifthispg{\c@page}{#1}%
\if@notthiscol
\else
\@killglue
\if@twoside
\ifodd\c@page
\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
\@docolbbox{#1}\hss}%
\else
\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname
\@docolbbox{#1}\hss}%
\fi
\else
\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
\@docolbbox{#1}\hss}%
\fi
\fi
}
\newcommand{\@ff@s@t@doubleboxoffset}{%
\setlength{\@ff@offset}{-\flowframesep}%
\addtolength{\@ff@offset}{-3.75\flowframerule}%
\addtolength{\@ff@offset}{-.5pt}%
}
\newcommand{\@ff@s@t@ovalboxoffset}{%
\@ff@offset=-\fontdimen 8\tenln
\advance\@ff@offset by -\flowframesep
}
\newcommand{\@ff@s@t@Ovalboxoffset}{%
\@ff@offset=-\fontdimen 8\tenlnw
\advance\@ff@offset by -\flowframesep
}
\newcommand{\@ff@s@t@defaultoffset}{%
\@ff@offset=-\flowframesep
\addtolength{\@ff@offset}{-\flowframerule}%
}
\newcommand{\@ff@setoffset}[1]{%
\ifthenelse{\equal{\csname @ff@offset@\romannumeral#1\endcsname}%
{compute}}{%
\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
\ifthenelse{%
\equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
{doublebox}}{%
\@ff@s@t@doubleboxoffset
}{%
\ifthenelse{%
\equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
{ovalbox}}{%
\@ff@s@t@ovalboxoffset
}{%
\ifthenelse{%
\equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
{Ovalbox}}{%
\@ff@s@t@Ovalboxoffset}{%
\@ff@s@t@defaultoffset
}}}%
}{}%
}{%
\setlength{\@ff@offset}%
{\csname @ff@offset@\romannumeral#1\endcsname}}%
}
\newcommand{\@sf@setoffset}[1]{%
\ifthenelse{%
\equal{\csname @sf@offset@\romannumeral#1\endcsname}%
{compute}}{%
\ifthenelse{\boolean{staticframe\romannumeral#1}}{%
\ifthenelse{%
\equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
{doublebox}}{%
\@ff@s@t@doubleboxoffset
}{%
\ifthenelse{%
\equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
{ovalbox}}{%
\@ff@s@t@ovalboxoffset
}{%
\ifthenelse{%
\equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
{Ovalbox}}{%
\@ff@s@t@Ovalboxoffset
}{%
\@ff@s@t@defaultoffset
}}}%
}{}%
}{%
\setlength{\@ff@offset}%
{\csname @sf@offset@\romannumeral#1\endcsname}}%
}
\newcommand{\@df@setoffset}[1]{%
\ifthenelse{%
\equal{\csname @df@offset@\romannumeral#1\endcsname}%
{compute}}{%
\setlength{\@ff@offset}{0pt}%
\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{%
\ifthenelse{%
\equal{\csname @df@frametype@\romannumeral#1\endcsname}%
{doublebox}}{%
\@ff@s@t@doubleboxoffset
}{%
\ifthenelse{%
\equal{\csname @df@frametype@\romannumeral#1\endcsname}%
{ovalbox}}{%
\@ff@s@t@ovalboxoffset
}{%
\ifthenelse{%
\equal{\csname @df@frametype@\romannumeral#1\endcsname}%
{Ovalbox}}{%
\@ff@s@t@Ovalboxoffset}{%
\@ff@s@t@defaultoffset
}}}%
}{}%
}{%
\setlength{\@ff@offset}%
{\csname @df@offset@\romannumeral#1\endcsname}}%
}
\newcommand{\@putmarginbox}[1]{%
\@ff@chckifthispg{\c@page}{#1}%
\if@notthiscol
\else
\@killglue
\if@twoside
\ifodd\c@page
\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}%
\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}%
\else
\edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}%
\edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}%
\fi
\else
\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}%
\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}%
\fi
\setlength{\@ff@tmp@x}{\ff@x}%
\setlength{\@ff@tmp@y}{\ff@y}%
\@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}%
\ifthenelse{\equal{\ff@margin}{left}}{%
\addtolength{\@ff@tmp@x}{-\marginparwidth}%
\addtolength{\@ff@tmp@x}{-\marginparsep}%
\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
}{}%
}{%
\addtolength{\@ff@tmp@x}%
{\csname colwidth\romannumeral#1\endcsname}%
\addtolength{\@ff@tmp@x}{\marginparsep}%
\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
}{}%
}%
\raise\@ff@tmp@y
\hb@xt@\z@{%
\expandafter\kern\@ff@tmp@x
\@fr@meifdraft{\@ff@box{\marginparwidth}%
{\csname colheight\romannumeral#1\endcsname}{}}%
{M:\number#1}\hss}\fi
\ignorespaces}
\newcommand{\@ff@drawmargins}{%
\@colN=0\relax
\whiledo{\@colN<\c@maxflow}{%
\advance\@colN by 1\relax
\makebox[0pt][l]{\@putmarginbox{\@colN}}%
}%
}
\def\@ff@getstaticpos[#1][#2][#3]#4{\@ff@tmp@x=#4\relax
\@ff@tmp@y=#2\relax
\def\ff@valign{#3}}
\newcommand{\@dostaticbox}[1]{%
\edef\ff@frametype{%
\csname @sf@frametype@\romannumeral#1\endcsname}%
\edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}%
\edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}%
\@sf@setoffset{#1}%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
\rotateframe{\csname @sf@angle@\romannumeral#1\endcsname}{%
\ifthenelse{\boolean{staticframe\romannumeral#1}}{%
\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}{%
\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}
{\csname\ff@frametype\endcsname}%
}{%
\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}%
}}}
\newcommand{\@dostaticbbox}[1]{%
\edef\ff@col{}%
\@sf@setoffset{#1}%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
\@fr@meifdraft{%
\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}%
}{S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}}
\newcommand{\@putstaticbox}[1]{%
\@sf@chckifthispg{#1}%
\if@notthiscol\else
\@killglue
\if@twoside
\ifodd\c@page
\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
\@dostaticbox{#1}\hss}%
\else
\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname
\@dostaticbox{#1}\hss}%
\fi
\else
\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
\@dostaticbox{#1}\hss}%
\fi
\fi}
\newcommand{\@putstaticbbox}[1]{%
\@sf@chckifthispg{#1}%
\if@notthiscol\else
\@killglue
\if@twoside
\ifodd\c@page
\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
\@dostaticbbox{#1}\hss}\ignorespaces
\else
\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname
\@dostaticbbox{#1}\hss}\ignorespaces
\fi
\else
\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
\@dostaticbbox{#1}\hss}\ignorespaces
\fi
\fi}
\newcommand{\@resetst@tics}{%
\@colN=0\relax
\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
\ifthenelse{\boolean{@sf@clear@\romannumeral\@colN}}{%
\global\sbox{%
\csname @staticframe@\romannumeral\@colN\endcsname}{}}{}}}
\newcommand{\@resetdyn@mics}{%
\@colN=0\relax
\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
\ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}{%
\expandafter\global\expandafter
\gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}}{}}}
\newcommand{\@dodfparbox}[1]{%
\expandafter\let\expandafter
\@ff@parshape\csname @df@shape@\romannumeral#1\endcsname
\expandafter\@ff@getshape\@ff@parshape\relax
\ifcase\ff@shape
\expandafter\expandafter\expandafter
\parbox\csname @df@dim@\romannumeral#1\endcsname
{%
\setlength\parindent\sdfparindent
\csname\ff@style\endcsname{\ff@contents}}%
\or
\expandafter\expandafter\expandafter
\parbox\csname @df@dim@\romannumeral#1\endcsname
{%
\setlength\parindent\sdfparindent
\csname\ff@style\endcsname{{%
\let\oldpar=\par
\let\par=\ffpshpar
\@ff@setsecthead
\@ff@parshape
\ff@contents\oldpar}}}%
\or
\expandafter\expandafter\expandafter
\parbox\csname @df@dim@\romannumeral#1\endcsname
{%
\setlength\parindent\sdfparindent
\csname\ff@style\endcsname{{\@ff@disablesec\@ff@parshape
\ff@contents\par}}}%
\fi
}
\newcommand{\@dodynamicbox}[1]{%
\edef\ff@frametype{%
\csname @df@frametype@\romannumeral#1\endcsname}%
\edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}%
\edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}%
\edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}%
\edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}%
\def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}%
\@df@setoffset{#1}%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
\rotateframe{\csname @df@angle@\romannumeral#1\endcsname}{%
\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{%
\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}%
{\@dodfparbox{#1}}%
{\csname\ff@frametype\endcsname}%
}{%
\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{%
\@dodfparbox{#1}}%
}}}
\newcommand{\@dodynamicbbox}[1]{%
\edef\ff@col{}%
\@df@setoffset{#1}%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
\@fr@meifdraft{%
\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{%
\expandafter\expandafter\expandafter
\parbox\csname @df@dim@\romannumeral#1\endcsname
{}}%
}{D:\number#1;\csname @df@id@\romannumeral#1\endcsname}}
\newcommand{\@putdynamicbox}[1]{%
\@df@chckifthispg{#1}%
\if@notthiscol\else
\@killglue
\if@twoside
\ifodd\c@page
\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
\@dodynamicbox{#1}\hss}\ignorespaces
\else
\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname
\@dodynamicbox{#1}\hss}\ignorespaces
\fi
\else
\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
\@dodynamicbox{#1}\hss}\ignorespaces
\fi
\fi}
\newcommand{\@putdynamicbbox}[1]{%
\@df@chckifthispg{#1}%
\if@notthiscol\else
\@killglue
\if@twoside
\ifodd\c@page
\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
\@dodynamicbbox{#1}\hss}\ignorespaces
\else
\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname
\@dodynamicbbox{#1}\hss}\ignorespaces
\fi
\else
\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
\hb@xt@\z@{%
\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
\@dodynamicbbox{#1}\hss}\ignorespaces
\fi
\fi}
\newcommand{\@@doheader}{%
\setlength\@ff@tmp@y{\textheight}%
\addtolength{\@ff@tmp@y}{\headsep}%
\def\ff@col{}%
\def\ff@txtcol{}%
\def\ff@backcol{{none}}%
\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}%
}
\newcommand{\@@dofooter}{%
\setlength\@ff@tmp@y{-\footskip}%
\def\ff@col{}%
\def\ff@txtcol{}%
\def\ff@backcol{{none}}%
\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}%
}
\newcommand{\@s@tfr@mes}[1]{{\@picht\textheight
\setbox\@picbox\hb@xt@ \textwidth
\bgroup \hbox \bgroup #1\relax
\egroup
\hss \egroup
\ht\@picbox\@picht \dp\@picbox
\z@ \mbox{\box \@picbox}}}
\newcommand{\@ff@doallflowframes}{%
\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
\@putcolbox{\@colN}}%
}
\newcommand{\@ff@doallflowframesbbox}{%
\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
\@putcolbbox{\@colN}}%
}
\newcommand{\@ff@doallstatics}{%
\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1%
\@putstaticbox{\@colN}}%
}
\newcommand{\@ff@doallstaticsbbox}{%
\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1%
\@putstaticbbox{\@colN}}%
}
\newcommand{\@ff@doalldynamics}{%
\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1%
\@putdynamicbox{\@colN}}%
}
\newcommand{\@ff@doalldynamicsbbox}{%
\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1%
\@putdynamicbbox{\@colN}}%
}
\newcommand{\@ff@dotypeblock}{%
\makebox[0pt][l]{\@fr@meifdraft[\setffdrafttypeblockcolor]{%
\vbox to \textheight{\hbox to \textwidth{}}}{}}}
\newlength\ffevenoffset
\newcommand{\@ff@do@allframes}{%
\ffevenoffset=0pt\relax
\if@twoside
\ifodd\c@page
\else
\ffevenoffset=-\oddsidemargin\relax
\advance\ffevenoffset by \evensidemargin\relax
\kern\ffevenoffset\relax
\fi
\fi
\setlength{\@ff@tmp@x}{\textwidth}%
\advance\@ff@tmp@x by -\ffevenoffset\relax
\makebox[\@ff@tmp@x][l]{%
\@s@tfr@mes{%
\@ff@doallstatics
\@@doheader
\@@dofooter
\@ff@doallflowframes
\@ff@doalldynamics
\ifshowtypeblock
\@ff@dotypeblock
\fi
\ifshowframebbox
\@ff@doallstaticsbbox
\@ff@doallflowframesbbox
\@ff@doalldynamicsbbox
\fi
\ifshowmargins
\@ff@drawmargins
\fi
}}}
\newcount\@nxtcol
\def\@outputdblcol{%
\@nxtcol=\c@thisframe
\c@curpg=\c@page
\@g@tnextcol{\@nxtcol}%
\if@ff@nwpg % next flow frame starts on new page
  \global\@firstcolumntrue
  \@setcolbox\c@thisframe
  \if@specialpage
    \global\@specialpagefalse
    \@nameuse{ps@\@specialstyle}\relax
  \fi
  \if@twoside
    \ifodd\count\z@
      \let\@thehead\@oddhead
      \let\@thefoot\@oddfoot
    \else
      \let\@thehead\@evenhead
      \let\@thefoot\@evenfoot
    \fi
  \else
    \let\@thehead\@oddhead
    \let\@thefoot\@oddfoot
  \fi
  \@dodynamicthehead\@dodynamicthefoot
  \vbadness=\@M
  \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
  \@combinedblfloats
  \@outputpage
\advance\c@curpg by -\c@page\relax
  \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax
  \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
\@outputpage}
  \begingroup
    \@dblfloatplacement
    \@startdblcolumn
    \@whilesw \if@fcolmade \fi
       {\@outputpage \@startdblcolumn }\endgroup
  \@resetst@tics
  \@resetdyn@mics
\else % still on same page, save contents of box255
  \global\@firstcolumnfalse
  \@setcolbox\c@thisframe
\fi
\global\c@thisframe=\@nxtcol
\@setcol{\c@thisframe}\relax
\global\@colht\vsize
}
\def\@dblfloatplacement{%
  \global\@dbltopnum\c@dbltopnumber
  \global\@dbltoproom\dbltopfraction\@colht\@textmin
  \@colht\advance\@textmin -\@dbltoproom
  \@fpmin\dblfloatpagefraction\vsize
  \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot}
\newenvironment{statictable}{\def\@captype{table}}{}
\newenvironment{staticfigure}{\def\@captype{figure}}{}
\newif\ifffvadjust
\ffvadjusttrue
\renewcommand*{\onecolumn}{\@onecolumn}
\newcommand*{\@onecolumn}[1][all]{%
\@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}}
\newlength\columnheight
\newcommand*{\onecolumninarea}{\@onecolumninarea}
\@onlypreamble{\onecolumninarea}

\newcommand*{\@onecolumninarea}[5][all]{%
\setlength{\columnheight}{#3}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}}
\renewcommand{\twocolumn}{\@twocolumn}
\newcommand*{\@twocolumn}[1][all]{%
\@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}}
\newcommand{\twocolumninarea}{\@twocolumninarea}
\newcommand*{\@twocolumninarea}[5][all]{%
\setlength{\columnheight}{#3}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\setlength{\columnwidth}{#2}%
\addtolength{\columnwidth}{-\columnsep}%
\divide\columnwidth by 2\relax
\setlength{\@ff@tmp@x}{#4}%
\addtolength{\@ff@tmp@x}{\columnwidth}%
\addtolength{\@ff@tmp@x}{\columnsep}%
\@n@wflowframe[#1]{\columnwidth}{\columnheight}{#4}{#5}%
\setflowframe{\c@maxflow}{margin=left}%
\@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#5}%
\setflowframe{\c@maxflow}{margin=right}%
}
\@onlypreamble{\twocolumninarea}
\newcommand*{\Ncolumn}[2][all]{%
\Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\Ncolumn}
\newcommand{\Ncolumninarea}[6][all]{%
\ifnum#2>2\relax
\@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}%
\else
\ifcase#2
\PackageError{flowfram}{%
You have requested 0 flowframes!}{%
It does not make much sense to ask to create 0 flow frames}%
\or
\onecolumninarea[#1]{#3}{#4}{#5}{#6}%
\or
\twocolumninarea[#1]{#3}{#4}{#5}{#6}%
\else
\PackageError{flowfram}{%
Can't create a negative number of flow frames!}{%
You have asked for \number#2 \space flow frames
which really doesn't make sense}%
\fi
\fi
}

\@onlypreamble{\Ncolumninarea}
\newcommand{\@Ncolumninarea}[6][all]{%
\@colN=#2\relax
\advance\@colN by -1\relax
\setlength{\columnwidth}{#3}%
\addtolength{\columnwidth}{-\@colN\columnsep}%
\divide\columnwidth by #2\relax
\setlength{\@ff@tmp@x}{#5}
\setlength{\columnheight}{#4}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\@colN=0\relax
\loop
\advance\@colN by 1\relax
\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#6}
\addtolength{\@ff@tmp@x}{\columnwidth}
\addtolength{\@ff@tmp@x}{\columnsep}
\ifnum\@colN<#2
\repeat
}
\newlength{\vcolumnsep}
\setlength{\vcolumnsep}{\columnsep}
\newcommand{\onecolumntop}[3][all]{%
\onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\onecolumntop}
\newcommand{\onecolumnStop}[2][all]{%
\onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
\newcommand{\onecolumnDtop}[2][all]{%
\onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
\newcommand{\newframe}[6][all]{%
\ifthenelse{\equal{#2}{flow}}{%
\@n@wflowframe[#1]{#3}{#4}{#5}{#6}%
}{%
\ifthenelse{\equal{#2}{dynamic}}{%
\newdynamicframe[#1]{#3}{#4}{#5}{#6}}{%
\ifthenelse{\equal{#2}{static}}{%
\@n@wstaticframe[#1]{#3}{#4}{#5}{#6}}{%
\PackageError{flowfram}{Unknown frame type '#2'}{%
Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
\newlength\@ff@staticH

\newcommand{\onecolumntopinarea}[7][all]{%
\setlength{\@ff@staticH}{#3}%
\setlength{\@ff@tmp@y}{#5}%
\addtolength{\@ff@tmp@y}{-\@ff@staticH}%
\setlength{\columnheight}{\@ff@tmp@y}%
\addtolength{\columnheight}{-\vcolumnsep}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\addtolength{\@ff@tmp@y}{#7}%
\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}%
\@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}%
}

\@onlypreamble{\onecolumntopinarea}
\newcommand{\onecolumnStopinarea}[6][all]{%
\onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\onecolumnDtopinarea}[6][all]{%
\onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\twocolumntop}[3][all]{%
\twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\twocolumntop}
\newcommand{\twocolumnStop}[2][all]{%
\@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
\newcommand{\twocolumnDtop}[2][all]{%
\twocolumntop[#1]{dynamic}{#2}}
\newcommand{\twocolumntopinarea}{\@twocolumntopinarea}
\newcommand{\@twocolumntopinarea}[7][all]{%
\setlength{\@ff@staticH}{#3}%
\setlength{\@ff@tmp@y}{#5}
\addtolength{\@ff@tmp@y}{-\@ff@staticH}
\setlength{\columnheight}{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{#7}%
\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}%
\addtolength{\columnheight}{-\vcolumnsep}
\ifffvadjust\adjustheight{\columnheight}\fi%
\setlength{\columnwidth}{#4}%
\addtolength{\columnwidth}{-\columnsep}%
\divide\columnwidth by 2\relax
\setlength{\@ff@tmp@x}{\columnwidth}%
\addtolength{\@ff@tmp@x}{\columnsep}%
\addtolength{\@ff@tmp@x}{#6}%
\@n@wflowframe[#1]{\columnwidth}{\columnheight}{#6}{#7}%
\setflowframe{\c@maxflow}{margin=left}%
\@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#7}%
\setflowframe{\c@maxflow}{margin=right}%
}
\@onlypreamble{\twocolumntopinarea}
\newcommand{\twocolumnStopinarea}[6][all]{%
\twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\twocolumnDtopinarea}[6][all]{%
\twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\Ncolumntop}[4][all]{%
\Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\Ncolumntop}
\newcommand{\NcolumnStop}[3][all]{%
\Ncolumntop[#1]{static}{#2}{#3}}
\newcommand{\NcolumnDtop}[3][all]{%
\Ncolumntop[#1]{dynamic}{#2}{#3}}
\newcommand{\Ncolumntopinarea}[8][all]{%
\ifnum#3>2\relax
\@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
\else
\ifcase#3
\PackageError{flowfram}{%
You have requested 0 flowframes!}{%
It does not make much sense to ask to create 0 flow frames}
\or
\onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
\or
\twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
\else
\PackageError{flowfram}{%
Can't create a negative number of flow frames!}{%
You have asked for \number#3 \space flow frames
which really doesn't make sense}%
\fi
\fi
}
\@onlypreamble{\Ncolumntopinarea}
\newcommand{\@Ncolumntopinarea}[8][all]{%
\setlength{\@ff@staticH}{#4}%
\setlength{\@ff@tmp@y}{#6}%
\addtolength{\@ff@tmp@y}{-\@ff@staticH}%
\setlength{\columnheight}{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{#8}%
\newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{\@ff@tmp@y}%
\addtolength{\columnheight}{-\vcolumnsep}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\@colN=#3\relax
\advance\@colN by -1\relax
\setlength{\columnwidth}{#5}%
\addtolength{\columnwidth}{-\@colN\columnsep}%
\divide\columnwidth by #3\relax
\setlength{\@ff@tmp@x}{#7}%
\@colN=0\relax
\loop
\advance\@colN by 1\relax
\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#8}%
\addtolength{\@ff@tmp@x}{\columnwidth}%
\addtolength{\@ff@tmp@x}{\columnsep}%
\ifnum\@colN<#3
\repeat
}
\newcommand{\NcolumnStopinarea}[7][all]{%
\Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}}
\newcommand{\NcolumnDtopinarea}[7][all]{%
\Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}}
\newcommand{\onecolumnbottom}[3][all]{%
\onecolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\onecolumnbottom}
\newcommand{\onecolumnSbottom}[2][all]{%
\onecolumnbottom[#1]{static}{#2}}
\newcommand{\onecolumnDbottom}[2][all]{%
\onecolumnbottom[#1]{dynamic}{#2}}
\newcommand{\onecolumnbottominarea}[7][all]{%
\setlength{\@ff@staticH}{#3}%
\setlength{\columnheight}{#5}%
\addtolength{\columnheight}{-\@ff@staticH}%
\addtolength{\columnheight}{-\vcolumnsep}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\setlength{\@ff@tmp@y}{#5}%
\addtolength{\@ff@tmp@y}{-\columnheight}%
\addtolength{\@ff@tmp@y}{#7}%
\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{#7}%
\newflowframe[#1]{#4}{\columnheight}{#6}{\@ff@tmp@y}%
}
\@onlypreamble{\onecolumnbottominarea}
\newcommand{\onecolumnSbottominarea}[6][all]{%
\onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\onecolumnDbottominarea}[6][all]{%
\onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\twocolumnbottom}[3][all]{%
\twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\twocolumnbottom}
\newcommand{\twocolumnSbottom}[2][all]{%
\twocolumnbottom[#1]{static}{#2}}
\newcommand{\twocolumnDbottom}[2][all]{%
\twocolumnbottom[#1]{dynamic}{#2}}
\newcommand{\twocolumnbottominarea}[7][all]{%
\setlength{\@ff@staticW}{#4}%
\setlength{\@ff@staticH}{#3}%
\setlength{\columnheight}{#5}
\addtolength{\columnheight}{-\@ff@staticH}
\addtolength{\columnheight}{-\vcolumnsep}
\ifffvadjust\adjustheight{\columnheight}\fi%
\newframe[#1]{#2}{\@ff@staticW}{\@ff@staticH}{#6}{#7}%
\setlength{\@ff@tmp@y}{#5}%
\addtolength{\@ff@tmp@y}{-\columnheight}%
\addtolength{\@ff@tmp@y}{#7}%
\setlength{\columnwidth}{\@ff@staticW}%
\addtolength{\columnwidth}{-\columnsep}%
\divide\columnwidth by 2\relax
\setlength{\@ff@tmp@x}{\columnwidth}%
\addtolength{\@ff@tmp@x}{\columnsep}%
\addtolength{\@ff@tmp@x}{#6}%
\newflowframe[#1]{\columnwidth}{\columnheight}{#6}{\@ff@tmp@y}%
\setflowframe{\c@maxflow}{margin=left}%
\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{\@ff@tmp@y}%
\setflowframe{\c@maxflow}{margin=right}%
}
\@onlypreamble{\twocolumnbottominarea}
\newcommand{\twocolumnSbottominarea}[6][all]{%
\twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\twocolumnDbottominarea}[6][all]{%
\twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
\newcommand{\Ncolumnbottom}[4][all]{%
\Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}}
\@onlypreamble{\Ncolumnbottom}
\newcommand{\NcolumnSbottom}[3][all]{%
\Ncolumnbottom[#1]{static}{#2}{#3}}
\newcommand{\NcolumnDbottom}[3][all]{%
\Ncolumnbottom[#1]{dynamic}{#2}{#3}}
\newcommand{\Ncolumnbottominarea}[8][all]{%
\ifnum#3>2\relax
\@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
\else
\ifcase#3
\PackageError{flowfram}{%
You have requested 0 flowframes!}{%
It does not make much sense to ask to create 0 flow frames}
\or
\onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
\or
\twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
\else
\PackageError{flowfram}{%
Can't create a negative number of flow frames!}{%
You have asked for \number#3 \space flow frames
which really doesn't make sense}%
\fi
\fi
}
\@onlypreamble{\Ncolumnbottominarea}
\newcommand{\@NcolumnSbottominarea}[8][all]{%
\setlength{\@ff@staticH}{#4}%
\setlength{\columnheight}{#6}%
\addtolength{\columnheight}{-\@ff@staticH}%
\addtolength{\columnheight}{-\vcolumnsep}%
\ifffvadjust\adjustheight{\columnheight}\fi%
\newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{#8}%
\setlength{\@ff@tmp@y}{#6}%
\addtolength{\@ff@tmp@y}{-\columnheight}%
\addtolength{\@ff@tmp@y}{#8}%
\@colN=#3\relax
\advance\@colN by -1\relax
\setlength{\columnwidth}{#5}%
\addtolength{\columnwidth}{-\@colN\columnsep}%
\divide\columnwidth by #3\relax
\setlength{\@ff@tmp@x}{#7}%
\@colN=0\relax
\loop
\advance\@colN by 1\relax
\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{\@ff@tmp@y}%
\addtolength{\@ff@tmp@x}{\columnwidth}%
\addtolength{\@ff@tmp@x}{\columnsep}%
\ifnum\@colN<#3
\repeat
}
\newcommand{\NcolumnSbottominarea}[1][all]{%
\Ncolumnbottominarea[#1]{static}}
\newcommand{\NcolumnDbottominarea}[1][all]{%
\Ncolumnbottominarea[#1]{dynamic}}
\newcount\@ff@adjh
\newcommand{\adjustheight}[1]{%
\@ff@adjh=#1\relax
\divide\@ff@adjh by \baselineskip
#1=\baselineskip
\multiply#1 by \@ff@adjh}
\newcommand{\adjustcolsep}{%
\multiply\columnsep by 2\relax
\addtolength{\columnsep}{\marginparwidth}}
\newlength\@ff@staticW
\newcommand{\vtwotone}[1][all]{%
\def\ff@pages{#1}\@vtwotone}

\newcommand{\@vtwotone}[1][0pt]{\@@vtwotonebottom{#1}{\paperheight}}
\newcommand{\@@vtwotonebottom}[8]{%
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@x}{#1}%
\addtolength{\@ff@tmp@x@even}{#1}%
\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}%
\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}%
}

\@onlypreamble{\vtwotone}
\newcommand{\vtwotonebottom}[1][all]{%
\def\ff@pages{#1}\@vtwotonebottom}

\@onlypreamble{\vtwotonebottom}

\newcommand{\@vtwotonebottom}[2][0pt]{\@@vtwotonebottom{#1}{#2}}
\newcommand{\vtwotonetop}[1][all]{%
\def\ff@pages{#1}\@vtwotonetop}

\newcommand{\@vtwotonetop}[2][0pt]{\@@vtwotonetop{#1}{#2}}

\newcommand{\@@vtwotonetop}[8]{%
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computetopedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{-#2}%
\addtolength{\@ff@tmp@x}{#1}%
\addtolength{\@ff@tmp@x@even}{#1}%
\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}%
\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}%
}
\newcommand{\@nextvband}[5]{%
\setlength{\@ff@staticW}{#3}%
\ifthenelse{\equal{#5}{}}{%
\newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}}%
{\newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}%
\expandafter\global\expandafter\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{\@ff@tmp@x@even}%
\@setframecol#4\end{\c@maxstatic}{backcol}{sf}%
\addtolength{\@ff@tmp@x}{\@ff@staticW}%
\addtolength{\@ff@tmp@x@even}{\@ff@staticW}%
}
\newcount\@thisstrip
\newcommand{\vNtone}[1][all]{%
\def\ff@pages{#1}\@vNtone}
\newcommand{\@vNtone}[2][0pt]{%
\@@vNtone{#1}{#2}{\paperheight}}
\newcommand{\@@vNtone}[3]{%
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@x}{#1}%
\addtolength{\@ff@tmp@x@even}{#1}%
\@thisstrip=#2\relax
\setlength{\@ff@staticH}{#3}%
\@nextvNband%
}
\newcommand{\@nextvNband}{%
\ifnum\@thisstrip>0\relax
 \let\next\@@nextvNband%
\else
 \let\next\relax%
\fi
\advance\@thisstrip by -1\relax
\next}
\newcommand{\@@nextvNband}[3]{%
\@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}\@nextvNband}

\@onlypreamble{\vNtone}
\newcommand{\vNtonebottom}[1][all]{%
\def\ff@pages{#1}\@vNtonebottom}

\@onlypreamble{\vNtonebottom}

\newcommand{\@vNtonebottom}[3][0pt]{%
\@@vNtone{#1}{#2}{#3}}
\newcommand{\vNtonetop}[1][all]{%
\def\ff@pages{#1}\@vNtonetop}

\@onlypreamble{\vNtonetop}
\newcommand{\@vNtonetop}[3][0pt]{%
\@@vNtonetop{#1}{#2}{#3}}
\newcommand{\@@vNtonetop}[3]{%
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computetopedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{-#3}%
\addtolength{\@ff@tmp@x}{#1}%
\addtolength{\@ff@tmp@x@even}{#1}%
\@thisstrip=#2\relax
\setlength{\@ff@staticH}{#3}%
\@nextvNband%
}
\newcommand{\htwotone}[1][all]{%
\def\ff@pages{#1}\@htwotone}

\newcommand{\@htwotone}[1][0pt]{\@@htwotoneleft{#1}{\paperwidth}}
\newcommand{\@@htwotoneleft}[8]{%
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{#1}%
\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}%
\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}%
}

\@onlypreamble{\htwotone}
\newcommand{\htwotoneleft}[1][all]{%
\def\ff@pages{#1}\@htwotoneleft}

\newcommand{\@htwotoneleft}[2][0pt]{\@@htwotoneleft{#1}{#2}}

\@onlypreamble{\htwotoneleft}
\newcommand{\htwotoneright}[1][all]{%
\def\ff@pages{#1}\@htwotoneright}

\newcommand{\@htwotoneright}[2][0pt]{\@@htwotoneright{#1}{#2}}

\newcommand{\@@htwotoneright}[8]{%
\computerightedgeodd{\@ff@tmp@x}%
\if@twoside
\computerightedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{#1}%
\addtolength{\@ff@tmp@x}{-#2}%
\addtolength{\@ff@tmp@x@even}{-#2}%
\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}%
\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}%
}

\@onlypreamble{\htwotoneright}
\newcommand{\hNtone}[1][all]{%
\def\ff@pages{#1}\@hNtone}

\newcommand{\@hNtone}[2][0pt]{%
\@@hNtone{#1}{#2}{\paperwidth}}

\newcommand{\@@hNtone}[3]{%
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{#1}%
\@thisstrip=#2\relax
\setlength{\@ff@staticW}{#3}%
\@nexthNband%
}

\@onlypreamble{\hNtone}
\newcommand{\hNtoneleft}[1][all]{%
\def\ff@pages{#1}\@hNtoneleft}

\@onlypreamble{\hNtoneleft}

\newcommand{\@hNtoneleft}[3][0pt]{%
\@@hNtone{#1}{#2}{#3}}
\newcommand{\hNtoneright}[1][all]{%
\def\ff@pages{#1}\@hNtoneright}

\@onlypreamble{\hNtoneright}

\newcommand{\@hNtoneright}[3][0pt]{%
\@@hNtoneright{#1}{#2}{#3}}

\newcommand{\@@hNtoneright}[3]{%
\computerightedgeodd{\@ff@tmp@x}%
\if@twoside
\computerightedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\addtolength{\@ff@tmp@y}{#1}%
\addtolength{\@ff@tmp@x}{-#3}%
\addtolength{\@ff@tmp@x@even}{-#3}%
\@thisstrip=#2\relax
\setlength{\@ff@staticW}{#3}%
\@nexthNband%
}
\newcommand{\@nexthband}[5]{%
\setlength{\@ff@staticH}{#3}%
\ifthenelse{\equal{#5}{}}{%
\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}}%
{\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}%
\expandafter\global\expandafter
\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{%
\@ff@tmp@x@even}%
\@setframecol#4\end{\c@maxstatic}{backcol}{sf}%
\addtolength{\@ff@tmp@y}{\@ff@staticH}%
}
\newcommand{\@nexthNband}{%
\ifnum\@thisstrip>0\relax
 \let\next\@@nexthNband%
\else
 \let\next\relax%
\fi
\advance\@thisstrip by -1\relax
\next}

\newcommand{\@@nexthNband}[3]{%
\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband}
\newcommand{\makebackgroundframe}[1][all]{%
\ifnum\c@maxstatic>0\relax
\PackageWarning{flowfram}{Background frame is not
first static frame to be defined. All previously defined
static frames may be obscured.}%
\fi
\computeleftedgeodd{\@ff@tmp@x}%
\if@twoside
\computeleftedgeeven{\@ff@tmp@x@even}%
\else
\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
\fi
\computebottomedge{\@ff@tmp@y}%
\newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}%
{\@ff@tmp@y}%
\expandafter\global\expandafter
\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
{\@ff@tmp@x@even}}
\setlength{\columnseprule}{2pt}
\newcommand{\insertvrule}{\@ifstar\@sinsertvrule\@insertvrule}
\newcommand{\@insertvrule}[1][0pt]{%
\@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}}
\newlength\@ff@left@x
\newlength\@ff@left@y
\newlength\@ff@left@evenx
\newlength\@ff@left@eveny
\newlength\@ff@left@width
\newlength\@ff@left@height
\def\@@insertvrule[#1][#2]#3#4#5#6{%
\ifthenelse{\equal{#3}{flow}}{%
\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{%
\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{%
\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame
type '#3'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\ifthenelse{\equal{#5}{flow}}{%
\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{%
\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{%
\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame
type '#5'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}%
}
\newcommand{\@@insert@vrule}[6]{
\@ff@getdim{#3}{#4}%
\setlength{\@ff@left@x}{\ffareax}%
\setlength{\@ff@left@y}{\ffareay}%
\setlength{\@ff@left@width}{\ffareawidth}%
\setlength{\@ff@left@height}{\ffareaheight}%
\@ff@getdim{#5}{#6}%
\ifnum\@ff@left@x>\ffareax
\@ff@swaplen{\@ff@left@x}{\ffareax}%
\@ff@swaplen{\@ff@left@y}{\ffareax}%
\@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}%
\@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}%
\@ff@swaplen{\@ff@left@width}{\ffareawidth}%
\@ff@swaplen{\@ff@left@height}{\ffareaheight}%
\fi
\setlength{\@ff@tmp@x}{\@ff@left@x}
\addtolength{\@ff@tmp@x}{\@ff@left@width}%
\setlength{\@ff@staticW}{\ffareax}%
\addtolength{\@ff@staticW}{-\@ff@tmp@x}%
\setlength{\@ff@staticH}{\@ff@left@y}%
\addtolength{\@ff@staticH}{\@ff@left@height}%
\setlength{\@ff@tmp@y}{\ffareay}%
\addtolength{\@ff@tmp@y}{\ffareaheight}%
\ifnum\@ff@tmp@y>\@ff@staticH
\setlength{\@ff@staticH}{\@ff@tmp@y}%
\fi
\ifnum\@ff@left@y<\ffareay
\setlength{\@ff@tmp@y}{\@ff@left@y}%
\else
\setlength{\@ff@tmp@y}{\ffareay}%
\fi
\addtolength{\@ff@staticH}{-\@ff@tmp@y}%
\newstaticframe{\@ff@staticW}{\@ff@staticH}%
{\@ff@tmp@x}{\@ff@tmp@y}%
\addtolength{\@ff@staticH}{#1}%
\addtolength{\@ff@staticH}{#2}%
\setstaticcontents{\c@maxstatic}{\hfill
\rule[-#2]{\columnseprule}{\@ff@staticH}\hfill\mbox{}}
\ifcase#3
\or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}
\or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}
\or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}
\fi
\setstaticframe{\c@maxstatic}{pages=\@ff@pages}%
\addtolength{\@ff@tmp@x}{\@ff@left@evenx}
\addtolength{\@ff@tmp@x}{-\@ff@left@x}
\addtolength{\@ff@tmp@y}{\@ff@left@eveny}
\addtolength{\@ff@tmp@y}{-\@ff@left@y}
\setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}%
}
\newcommand{\@ff@swaplen}[2]{%
\setlength{\@ff@tmp@x}{#1}%
\setlength{#1}{#2}%
\setlength{#2}{\@ff@tmp@x}}
\newcommand{\@ff@getdim}[2]{%
\ifnum#2<1\relax
\PackageError{flowfram}{Frame IDNs start from 1}{%
You have specified a frame IDN of '\number#2'}%
\fi
\ifcase#1
\PackageError{flowfram}{Unknown frame ID type '#1'}{%
Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}
\or
\ifnum#2>\c@maxflow
\PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{%
Flow frame IDNs go from 1 to \number\c@maxflow}
\else
\setlength{\ffareax}{\flowframex{#2}}
\setlength{\ffareay}{\flowframey{#2}}
\setlength{\ffareawidth}{\flowframewidth{#2}}
\setlength{\ffareaheight}{\flowframeheight{#2}}
\fi
\or
\ifnum#2>\c@maxstatic
\PackageError{flowfram}{Invalid static frame IDN '\number#2'}{%
Static frame IDNs go from 1 to \number\c@maxstatic}
\else
\setlength{\ffareax}{\staticframex{#2}}
\setlength{\ffareay}{\staticframey{#2}}
\expandafter\expandafter\expandafter
\@ff@getstaticpos
\csname @sf@dim@\romannumeral#2\endcsname
\setlength{\ffareawidth}{\@ff@tmp@x}%
\setlength{\ffareaheight}{\@ff@tmp@y}%
\fi
\or
\ifnum#2>\c@dynamic
\PackageError{flowfram}{Invalid dynamic frame IDN '\number#2'}{%
Dynamic frame IDNs go from 1 to \number\c@maxdynamic}
\else
\setlength{\ffareax}{\dynamicframex{#2}}
\setlength{\ffareay}{\dynamicframey{#2}}
\expandafter\expandafter\expandafter
\@ff@getstaticpos
\csname @df@dim@\romannumeral#2\endcsname
\setlength{\ffareawidth}{\@ff@tmp@x}%
\setlength{\ffareaheight}{\@ff@tmp@y}%
\fi
\else
\PackageError{flowfram}{Unknown frame ID type '#1'}{%
Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}
\fi
}
\newcommand{\@sinsertvrule}[1][0pt]{%
\@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}}
\def\@@sinsertvrule[#1][#2]#3#4#5#6{%
\ifthenelse{\equal{#3}{flow}}{%
\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{%
\ifthenelse{\equal{#3}{static}}{%
\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{%
\ifthenelse{\equal{#3}{dynamic}}{%
\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{%
\PackageError{flowfram}{Unknown frame
type '#3'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\ifthenelse{\equal{#5}{flow}}{%
\def\@ff@type@ii{1}\@flowframeid{#6}}{%
\ifthenelse{\equal{#5}{static}}{%
\def\@ff@type@ii{2}\@staticframeid{#6}}{%
\ifthenelse{\equal{#5}{dynamic}}{%
\def\@ff@type@ii{3}\@dynamicframeid{#6}}{%
\PackageError{flowfram}{Unknown frame
type '#5'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}%
{\@ff@type@ii}{\ff@id}%
}
\newcommand{\inserthrule}{\@ifstar\@sinserthrule\@inserthrule}
\newcommand{\@inserthrule}[1][0pt]{%
\@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}}
\def\@@inserthrule[#1][#2]#3#4#5#6{%
\ifthenelse{\equal{#3}{flow}}{%
\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{%
\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{%
\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame
type '#3'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\ifthenelse{\equal{#5}{flow}}{%
\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{%
\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{%
\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame
type '#5'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}%
}
\newcommand{\@@insert@hrule}[6]{
\@ff@getdim{#3}{#4}%
\setlength{\@ff@left@x}{\ffareax}%
\setlength{\@ff@left@y}{\ffareay}%
\setlength{\@ff@left@width}{\ffareawidth}%
\setlength{\@ff@left@height}{\ffareaheight}%
\@ff@getdim{#5}{#6}%
\ifnum\@ff@left@y>\ffareay
\@ff@swaplen{\@ff@left@x}{\ffareax}%
\@ff@swaplen{\@ff@left@y}{\ffareay}%
\@ff@swaplen{\@ff@left@width}{\ffareawidth}%
\@ff@swaplen{\@ff@left@height}{\ffareaheight}%
\fi
\setlength{\@ff@tmp@y}{\@ff@left@y}
\addtolength{\@ff@tmp@y}{\@ff@left@height}%
\setlength{\@ff@staticH}{\ffareay}%
\addtolength{\@ff@staticH}{-\@ff@tmp@y}%
\setlength{\@ff@staticW}{\@ff@left@x}%
\addtolength{\@ff@staticW}{\@ff@left@width}%
\setlength{\@ff@tmp@x}{\ffareax}%
\addtolength{\@ff@tmp@x}{\ffareawidth}%
\ifnum\@ff@tmp@x>\@ff@staticW
\setlength{\@ff@staticW}{\@ff@tmp@x}%
\fi
\ifnum\@ff@left@x<\ffareax
\setlength{\@ff@tmp@x}{\@ff@left@x}%
\else
\setlength{\@ff@tmp@x}{\ffareax}%
\fi
\addtolength{\@ff@staticW}{-\@ff@tmp@x}%
\newstaticframe{\@ff@staticW}{\@ff@staticH}%
{\@ff@tmp@x}{\@ff@tmp@y}%
\addtolength{\@ff@staticW}{#1}%
\addtolength{\@ff@staticW}{#2}%
\setstaticcontents{\c@maxstatic}{%
\hspace*{-#1}\rule{\@ff@staticW}{\columnseprule}}
\ifcase#3
\or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}
\or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}
\or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}
\fi
\setstaticframe{\c@maxstatic}{pages=\@ff@pages}%
\addtolength{\@ff@tmp@x}{\@ff@left@evenx}
\addtolength{\@ff@tmp@x}{-\@ff@left@x}
\addtolength{\@ff@tmp@y}{\@ff@left@eveny}
\addtolength{\@ff@tmp@y}{-\@ff@left@y}
\setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}%
}
\newcommand{\@sinserthrule}[1][0pt]{%
\@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}}
\def\@@sinserthrule[#1][#2]#3#4#5#6{%
\ifthenelse{\equal{#3}{flow}}{%
\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{%
\ifthenelse{\equal{#3}{static}}{%
\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{%
\ifthenelse{\equal{#3}{dynamic}}{%
\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{%
\PackageError{flowfram}{Unknown frame
type '#3'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\ifthenelse{\equal{#5}{flow}}{%
\def\@ff@type@ii{1}\@flowframeid{#6}}{%
\ifthenelse{\equal{#5}{static}}{%
\def\@ff@type@ii{2}\@staticframeid{#6}}{%
\ifthenelse{\equal{#5}{dynamic}}{%
\def\@ff@type@ii{3}\@dynamicframeid{#6}}{%
\PackageError{flowfram}{Unknown frame
type '#5'}{Available frame types are: 'flow', 'static'
or 'dynamic'}}}}%
\@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}%
{\@ff@type@ii}{\ff@id}%
}
\newcommand*{\computeleftedgeodd}[1]{%
\setlength{#1}{-1in}%
\addtolength{#1}{-\hoffset}%
\addtolength{#1}{-\oddsidemargin}}
\newcommand*{\computeleftedgeeven}[1]{%
\setlength{#1}{-1in}%
\addtolength{#1}{-\hoffset}%
\addtolength{#1}{-\evensidemargin}}
\newcommand*{\computetopedge}[1]{%
\setlength{#1}{\textheight}%
\addtolength{#1}{\headheight}%
\addtolength{#1}{\headsep}%
\addtolength{#1}{1in}%
\addtolength{#1}{\voffset}%
\addtolength{#1}{\topmargin}}
\newcommand*{\computebottomedge}[1]{%
\computetopedge{#1}%
\addtolength{#1}{-\paperheight}}
\newcommand*{\computerightedgeodd}[1]{%
\computeleftedgeodd{#1}%
\addtolength{#1}{\paperwidth}}
\newcommand*{\computerightedgeeven}[1]{%
\computeleftedgeeven{#1}%
\addtolength{#1}{\paperwidth}}
\newlength\ffareawidth
\newlength\ffareaheight
\newlength\ffareax
\newlength\ffareay
\newcommand{\computeflowframearea}{%
\@ifstar\@scomputeffarea\@computeffarea}
\newcommand{\@scomputeffarea}[1]{%
\setlength{\ffareax}{\paperwidth}%
\setlength{\ffareay}{\paperheight}%
\setlength{\@ff@tmp@x}{0pt}%
\setlength{\@ff@tmp@y}{0pt}%
\@for\@ff@id:=#1\do{\@flowframeid{\@ff@id}%
\ifnum\ffareax>\flowframex{\ff@id}%
\setlength{\ffareax}{\flowframex{\ff@id}}%
\fi
\ifnum\ffareay>\flowframey{\ff@id}%
\setlength{\ffareay}{\flowframey{\ff@id}}%
\fi
\setlength{\@ff@offset}{\flowframex{\ff@id}}%
\addtolength{@ff@offset}{\flowframewidth{\ff@id}}%
\ifnum\@ff@tmp@x<\@ff@offset
\setlength{\@ff@tmp@x}{\@ff@offset}%
\fi
\setlength{\@ff@offset}{\flowframey{\ff@id}}%
\addtolength{@ff@offset}{\flowframeheight{\ff@id}}%
\ifnum\@ff@tmp@y<\@ff@offset
\setlength{\@ff@tmp@y}{\@ff@offset}%
\fi
}%
\setlength{\ffareawidth}{\@ff@tmp@x}%
\addtolength{\ffareawidth}{-\ffareax}%
\setlength{\ffareaheight}{\@ff@tmp@y}%
\addtolength{\ffareaheight}{-\ffareay}}
\newcommand{\@computeffarea}[1]{%
\setlength{\ffareax}{\paperwidth}%
\setlength{\ffareay}{\paperheight}%
\setlength{\@ff@tmp@x}{0pt}%
\setlength{\@ff@tmp@y}{0pt}%
\@for\@ff@id:=#1\do{%
\ff@id=\@ff@id\relax
\setlength{\@ff@offset}{\flowframex{\ff@id}}%
\ifdim\ffareax>\@ff@offset
\setlength{\ffareax}{\@ff@offset}%
\fi
\setlength{\@ff@offset}{\flowframey{\ff@id}}%
\ifdim\ffareay>\@ff@offset
\setlength{\ffareay}{\@ff@offset}%
\fi
\setlength{\@ff@offset}{\flowframex{\ff@id}}%
\addtolength{\@ff@offset}{\flowframewidth{\ff@id}}%
\ifdim\@ff@tmp@x<\@ff@offset
\setlength{\@ff@tmp@x}{\@ff@offset}%
\fi
\setlength{\@ff@offset}{\flowframey{\ff@id}}%
\addtolength{\@ff@offset}{\flowframeheight{\ff@id}}%
\ifdim\@ff@tmp@y<\@ff@offset
\setlength{\@ff@tmp@y}{\@ff@offset}%
\fi
}%
\setlength{\ffareawidth}{\@ff@tmp@x}%
\addtolength{\ffareawidth}{-\ffareax}%
\setlength{\ffareaheight}{\@ff@tmp@y}%
\addtolength{\ffareaheight}{-\ffareay}}
\newcommand{\dfchaphead}{%
\@ifstar\@sdynamicchap\@dynamicchap}
\newcommand{\DFchapterstyle}[1]{#1}
\newcommand{\DFschapterstyle}[1]{#1}
\newcommand{\@dynamicchap}[1]{%
\@ifundefined{chapter}{\PackageError{flowfram}{Chapters aren't defined}{The document
class you are using does not define chapters}}{%
\let\@ff@OLDmakechapterhead\@makechapterhead
\let\@ff@OLDmakeschapterhead\@makeschapterhead
\renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}%
\renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}%
\xdef\@makechapterhead##1{%
\noexpand\@setdynamiccontents{\number#1}{%
\noexpand\DFchapterstyle{##1}}}%
\xdef\@makeschapterhead##1{%
\noexpand\@setdynamiccontents{\number#1}{%
\noexpand\DFschapterstyle{##1}}}%
}}
\newcommand{\@sdynamicchap}[1]{%
\@dynamicframeid{#1}\@dynamicchap{\ff@id}}
\newcounter{maxthumbtabs}
\@ifundefined{chapter}{%
\newcommand{\defaultthumbtabtype}{section}}{
\newcommand{\defaultthumbtabtype}{chapter}
}
\newcommand{\@ttb@type}{\defaultthumbtabtype}
\newcommand{\makethumbtabs}[2][0pt]{%
\@ifnextchar[{\@makethumbtabs[#1]{#2}}{%
\@makethumbtabs[#1]{#2}[\defaultthumbtabtype]}%
}
\def\@makethumbtabs[#1]#2[#3]{%
\@ifundefined{#3}{\PackageError{flowfram}{%
Unknown section type '#3'}{}}{%
\renewcommand{\@ttb@type}{#3}%
\ifthenelse{\equal{#3}{chapter}}{\@makethumbchapter}{%
\ifthenelse{\equal{#3}{part}}{\@makethumbpart}{%
\@makethumbsection{#3}}}}
\@starttoc{ttb}%
\@dothumbtabs{#1}{#2}%
}
\newcommand{\@makethumbchapter}{
\let\@ttb@old@chapter\@chapter
\def\@chapter[##1]##2{%
\@ttb@old@chapter[##1]{##2}%
\addtocontents{ttb}{\protect\thumbtab{\thepage}{\thechapter}{##1}{chapter.\thechapter}}%
\@afterheading
}}
\newcommand{\@makethumbpart}{
\let\@ttb@old@part\@part
\@ifundefined{@endpart}{%
\def\@part[##1]##2{\@ttb@old@part[##1]{##2}%
\addtocontents{ttb}{\protect\thumbtab{\thepage}{\thepart}{##1}{part.\thepage}}%
\@afterheading}}{%
\let\@ttb@old@endpart\@endpart
\def\@part[##1]##2{%
\def\@parttitle{##1}%
\@ttb@old@part[##1]{##2}%
}%
\def\@endpart{%
\addtocontents{ttb}{%
\protect\thumbtab{\thepage}%
{\thepart}{\@parttitle}{part.\thepage}}%
\@ttb@old@endpart
}}}
\newcommand{\@makethumbsection}[1]{%
\let\@ttb@old@sect=\@sect
\def\@sect##1##2##3##4##5##6[##7]##8{%
\@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}%
\ifthenelse{\equal{##1}{#1}}{%
\addtocontents{ttb}{%
\protect\thumbtab{\thepage}{\csname the#1\endcsname}%
{##7}{#1.\csname the#1\endcsname}}%
\@afterheading}{}%
}}
\newcommand{\thumbtab}[4]{%
\stepcounter{maxthumbtabs}%
\expandafter
\gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname
{#1}%
\expandafter
\gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname
{#2}%
\expandafter
\gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname
{#3}%
\expandafter
\gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname
{#4}}
\newcommand{\@dothumbtabs}[2]{%
\@colN=0\relax
\whiledo{\@colN<\c@maxthumbtabs}{%
\advance\@colN by 1\relax
\edef\ff@pages{%
\csname thumbtab@pages@\romannumeral\@colN\endcsname}%
\ifnum\@colN=\c@maxthumbtabs
\expandafter
\xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{%
\ff@pages,>\ff@pages}%
\else
\advance\@colN by 1\relax
\edef\ff@endpage{%
\csname thumbtab@pages@\romannumeral\@colN\endcsname}%
\advance\@colN by -1\relax
\@ff@tmpN=\ff@endpage
\advance\@ff@tmpN by -1\relax
\ifnum\@ff@tmpN>\ff@pages
\expandafter
\xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{%
\ff@pages-\number\@ff@tmpN}%
\fi
\fi}%
\@@dothumbtabs{#1}{#2}%
}
\newlength{\thumbtabwidth}
\setlength{\thumbtabwidth}{1cm}
\@ifundefined{hyperlink}{%
\newcommand{\thumbtabindexformat}[3]{%
\thumbtabformat{#2}{#3}}}{%
\newcommand{\thumbtabindexformat}[3]{%
\hyperlink{#1}{\thumbtabformat{#2}{#3}}}
}
\newcommand{\thumbtabformat}[2]{%
\if@ttb@rotate
\rotatebox{-90}{\parbox[c][\thumbtabwidth]{#2}{%
\centering#1}}%
\else
\parbox[c][#2]{\thumbtabwidth}{%
\centering\@ttb@stack{#1}}%
\fi}
\newcommand{\@ttb@stack}[1]{%
{\obeyspaces\expandafter\@@ttb@stack#1\end}}

\def\@@ttb@stack#1{%
\ifx#1\end\let\next\relax
\else
#1\par
\let\next\@@ttb@stack
\fi
\next}
\newcount\@greyscale

\newcommand{\@@dothumbtabs}[2]{%
\setlength{\@ff@tmp@y}{\textheight}%
\addtolength{\@ff@tmp@y}{-#2}%
\addtolength{\@ff@tmp@y}{-#1}%
\computerightedgeodd{\@ff@tmp@x}%
\addtolength{\@ff@tmp@x}{-\thumbtabwidth}%
\computeleftedgeeven{\@ff@tmp@x@even}%
\@ff@tmpN=0\relax
\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
\advance\@ff@tmpN by 1\relax
\@greyscale=\@ff@tmpN\relax
\multiply\@greyscale by 60\relax
\divide\@greyscale by \c@maxthumbtabs
\advance\@greyscale by 25\relax
\edef\@ff@greyscale{0.\number\@greyscale}%
\newdynamicframe[none]{\thumbtabwidth}{#2}%
{\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]%
\expandafter\global\expandafter
\setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
{\@ff@tmp@x@even}%
\ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{%
\expandafter
\xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
\noexpand\thumbtabformat{%
\csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\
\csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
}{#2}}
}{%
\if@ttb@title
\expandafter
\xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
\noexpand\thumbtabformat{%
\csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
}{#2}}
\fi
\if@ttb@num
\expandafter
\xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
\noexpand\thumbtabformat{%
\csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname
}{#2}}
\fi
}%
\expandafter
\xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname
{[gray]{\@ff@greyscale}}
\newdynamicframe[none]{\thumbtabwidth}{#2}%
{\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]%
\expandafter\global\expandafter
\setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
{\@ff@tmp@x@even}%
\expandafter
\ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{%
\expandafter
\xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
\noexpand\thumbtabindexformat{%
\csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{%
\csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\
\csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
}{#2}}
}{%
\if@ttb@title
\expandafter
\xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
\noexpand\thumbtabindexformat{%
\csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{%
\csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
}{#2}}
\fi
\if@ttb@num
\expandafter
\xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
\noexpand\thumbtabindexformat{%
\csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{%
\csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname
}{#2}}
\fi
}%
\expandafter
\xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname
{[gray]{\@ff@greyscale}}
\addtolength{\@ff@tmp@y}{-#2}%
}%
}%
\newcommand{\enablethumbtabs}{%
\ifnum\c@maxthumbtabs>0
\@ff@tmpN=0\relax
\@dynamicframeid{thumbtab1}%
\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
\advance\@ff@tmpN by 1\relax
\edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}%
\@@setdynamicframe{\ff@id}{pages=\@ff@pages}%
\advance\ff@id by 2\relax
}%
\else\PackageWarning{flowfram}{No thumb tabs defined}\fi}
\newcommand{\disablethumbtabs}{%
\ifnum\c@maxthumbtabs>0
\@ff@tmpN=0\relax
\@dynamicframeid{thumbtab1}%
\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
\advance\@ff@tmpN by 1\relax
\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname
{none}%
\advance\ff@id by 1\relax
\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname
{none}%
\advance\ff@id by 1\relax
}\fi}
\newcommand{\thumbtabindex}{%
\ifnum\c@maxthumbtabs>0\relax
\@ff@tmpN=0\relax
\@dynamicframeid{thumbtabindex1}%
\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
\advance\@ff@tmpN by 1\relax
\expandafter
\xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}%
\edef\@ff@doafter{%
\noexpand\afterpage{%
\noexpand\setdynamicframe{\number\ff@id}{pages=none}}}
\@ff@doafter
\advance\ff@id by 2\relax
}\fi}
\newcommand{\setthumbtab}[2]{%
\ifthenelse{\equal{#1}{all}}{%
\@ff@tmpN=0\relax
\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
\advance\@ff@tmpN by 1\relax
\@setthumbtab{\@ff@tmpN}{#2}}}{%
\@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}}}
\newcommand{\@setthumbtab}[2]{%
\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{%
\PackageWarning{flowfram}{Can't find thumbtab number '#1',
ttb file may not be up-to-date}}{%
\@dynamicframeid{thumbtab\number#1}%
\@@setdynamicframe{\ff@id}{#2}%
\@dynamicframeid{thumbtabindex\number#1}%
\@@setdynamicframe{\ff@id}{#2}}}
\newcommand{\setthumbtabindex}[2]{%
\ifthenelse{\equal{#1}{all}}{%
\@ff@tmpN=0\relax
\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
\advance\@ff@tmpN by 1\relax
\@setthumbtabindex{\@ff@tmpN}{#2}}}{%
\@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}}}
\newcommand{\@setthumbtabindex}[2]{%
\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{%
\PackageWarning{flowfram}{Can't find thumbtab number '#1',
ttb file may not be up-to-date}}{%
\@dynamicframeid{thumbtabindex\number#1}%
\@@setdynamicframe{\ff@id}{#2}}}
\newcommand{\tocandthumbtabindex}{%
\aligntoctrue
\tableofcontents
\thumbtabindex
\aligntocfalse
}
\newcommand{\@ttb@minitoctype}{\@ttb@type}
\let\@ttb@old@starttoc\@starttoc
\newif\if@storetoc
\@storetocfalse
\renewcommand{\@starttoc}[1]{%
\if@storetoc
\@ttb@storetoc{#1}%
\else
\@ttb@old@starttoc{#1}%
\fi}
\newcommand{\@ttb@storetoc}[1]{%
\begingroup
\makeatletter
\@storefileconts{\jobname.#1}%
\if@filesw
 \expandafter\newwrite\csname tf@#1\endcsname
 \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax
\fi
\@nobreakfalse
\endgroup}
\newcommand{\@storefileconts}[1]{\IfFileExists{#1}{%
\@@storefileconts\@filef@und}{%
\typeout{No file #1.}}}
\newcount\c@maxtocunits
\newcount\c@maxminitoc
\newcommand{\@@storefileconts}[1]{%
\@ifundefined{\@ttb@minitoctype}{\@ttb@minitoclevel=6}{%
\expandafter\@ttb@minitoclevel\expandafter=\csname @ttb@\@ttb@minitoctype @level\endcsname}%
\newread\@ttb@toc
\openin\@ttb@toc=#1\relax
\c@maxtocunits=0\relax
\c@maxminitoc=0\relax
\whiledo{\not\boolean{eof}\@ttb@toc}{%
\read\@ttb@toc to\tocline
\@addtotoclist{\tocline}{\c@maxtocunits}%
}%
\closein\@ttb@toc}
\newif\if@contsline
\newcount\@ttb@level
\newcount\@ttb@minitoclevel

\newcommand{\@addtotoclist}[2]{%
\expandafter\@checkcontentsline#1\end
\if@contsline
\expandafter\@gettype#1\end
\ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}{%
\global\advance#2 by 1\relax
}{%
}%
\fi
\@ifundefined{@toc@\romannumeral#2}{%
\flf@ta=\expandafter{#1}%
\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}}{%
\flf@ta=\expandafter{#1}%
\flf@tb=\expandafter\expandafter\expandafter{\csname @toc@\romannumeral#2\endcsname}%
\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@tb\the\flf@ta}}%
\if@minitoc
\if@contsline
\@ifundefined{\@ttb@contstype}{\@ttb@level=6}{%
\@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname}%
\relax
\ifnum\@ttb@level=\@ttb@minitoclevel
  \global\advance\c@maxminitoc by 1\relax
  \expandafter\gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}\relax
\else
  \ifnum\@ttb@level>\@ttb@minitoclevel
    \flf@ta=\expandafter{#1}\relax
    \flf@tb=\expandafter\expandafter\expandafter{\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax
    \expandafter\xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{\the\flf@tb\the\flf@ta}
   \fi
\fi
\fi
\fi
}
\def\@ttb@part@level{-1}
\def\@ttb@chapter@level{0}
\def\@ttb@section@level{1}
\def\@ttb@subsection@level{2}
\def\@ttb@subsubsection@level{3}
\def\@ttb@paragraph@level{4}
\def\@ttb@subparagraph@level{5}
\long\def\@checkcontentsline#1#2\end{%
\ifx#1\contentsline
\@contslinetrue
\else
\@contslinefalse
\fi}
\def\@gettype\contentsline#1#2\end{%
\def\@ttb@contstype{#1}}
\newif\ifaligntoc
\aligntocfalse

\let\@ttb@old@tableofcontents\tableofcontents
\renewcommand{\tableofcontents}{
\@storetoctrue
\@ttb@old@tableofcontents
\ifaligntoc
\@printalignedtoc
\else
\@printtoc
\fi
\@storetocfalse
\global\c@minitoc=0\relax}
\newlength\beforeminitocskip
\setlength{\beforeminitocskip}{0pt}
\newlength\afterminitocskip
\setlength{\afterminitocskip}{\baselineskip}
\newcommand{\dominitoc}[1]{%
\if@minitoc \@dominitoc{#1} \fi}
\newcommand{\@dominitoc}[1]{\@@dominitoc{#1}}
\newcommand{\minitocstyle}[1]{\normalfont\normalsize\normalcolor
#1}
\newcommand{\@@dominitoc}[1]{%
{\minitocstyle{%
\vskip\beforeminitocskip
\csname @minitoc@\romannumeral#1\endcsname}}
\vskip\afterminitocskip}
\newcommand{\appenddfminitoc}{%
\renewcommand{\beforeminitocskip}{\baselineskip}%
\@ifstar\@sappendminitocdf\@appendminitocdf}
\newcommand{\@sappendminitocdf}[1]{%
\renewcommand{\@dominitoc}[1]{%
\@sappenddynamic{#1}{\@@dominitoc{##1}}}}
\newcommand{\@appendminitocdf}[1]{%
\renewcommand{\@dominitoc}[1]{%
\@appenddynamic{#1}{\@@dominitoc{##1}}}}
\newcommand{\@printtoc}{%
\@colN=0\relax
\csname @toc@\romannumeral\@colN\endcsname
\whiledo{\@colN<\c@maxtocunits}{%
\advance\@colN by 1\relax
\csname @toc@\romannumeral\@colN\endcsname}}
\newcommand{\@printalignedtoc}{%
\@ff@tmpN=0\relax
\@ifundefined{@toc@\romannumeral\@ff@tmpN}{%
}{%
\csname @toc@\romannumeral\@ff@tmpN\endcsname
\par\noindent\hrulefill
}%
\whiledo{\@ff@tmpN<\c@maxtocunits}{%
\advance\@ff@tmpN by 1\relax
\ifnum\@ff@tmpN>\c@maxthumbtabs
\csname @toc@\romannumeral\@ff@tmpN\endcsname
\else
\@dynamicframeid{thumbtabindex\number\@ff@tmpN}%
\expandafter\expandafter\expandafter
\@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname
\vbox to \@ff@tmp@y{%
\noindent\parbox{\linewidth}{%
\csname @toc@\romannumeral\@ff@tmpN\endcsname}%
\vfill
\par\noindent\hrulefill
}%
\fi}}
\newcounter{minitoc}
\newif\if@minitoc
\@minitocfalse

\newcommand{\enableminitoc}[1][\@ttb@type]{%
\@minitoctrue
\setcounter{minitoc}{0}%
\@ifundefined{#1}{
\PackageError{flowfram}{Sectioning type '#1' not defined}{}}{%
\renewcommand{\@ttb@minitoctype}{#1}%
\ifthenelse{\equal{#1}{chapter}}{\@makeminitocchapter}{%
\ifthenelse{\equal{#1}{part}}{\@makeminitocpart}{%
\@makeminitocsection{#1}}}}
}
\@onlypreamble{\enableminitoc}
\newcommand{\@makeminitocchapter}{
\let\@mtoc@old@chapter\@chapter
\def\@chapter[##1]##2{%
\@mtoc@old@chapter[##1]{##2}%
\stepcounter{minitoc}%
\dominitoc{\c@minitoc}%
\@afterheading
}}
\newcommand{\@makeminitocpart}{
\@ifundefined{@endpart}{%
\let\@mtoc@old@part\@part
\def\@part[##1]##2{%
\@mtoc@old@part[##1]{##2}%
\stepcounter{minitoc}%
\dominitoc{\c@minitoc}%
\@afterheading
}}{%
\let\@mtoc@old@endpart\@endpart
\def\@endpart{%
\stepcounter{minitoc}%
\dominitoc{\c@minitoc}%
\@mtoc@old@endpart
}}}
\newcommand{\@makeminitocsection}[1]{%
\let\@mtoc@old@sect=\@sect
\def\@sect##1##2##3##4##5##6[##7]##8{%
\@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}%
\ifthenelse{\equal{##1}{#1}}{%
\stepcounter{minitoc}%
\dominitoc{\c@minitoc}\@afterheading}{}%
}}
\endinput
%%
%% End of file `flowfram.sty'.
