%%% Derived from the original fncychap.sty,
%%% but changed ``TWELV'' to ``TWELVE''.

%%% Copyright   Ulf A. Lindgren
%%%             Department of Applied Electronics
%%%             Chalmers University of Technology
%%%             S-412 96 Gothenburg, Sweden
%%%             E-mail lindgren@ae.chalmers.se
%%%
%%% Note        Permission is granted to modify this file under
%%%             the condition that it is saved using another
%%%             file and package name.
%%%
%%% Revision    1.1
%%%
%%%             Jan. 8th Modified package name base date option
%%%             Jan. 22th Modified FmN and FmTi for error in book.cls
%%%                  \MakeUppercase{#}->{\MakeUppercase#}
%%%             Apr. 6th Modified Lenny option to prevent undesired 
%%%                  skip of line.
%%%             Nov. 8th Fixed \@chapapp for AMS
%%%             Feb. 11th Fixed appendix problem related to Bjarne
%%% Last modified    Feb. 11th 1998

\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesPackage{fncychap}
             [1997/04/06 v1.11
                 LaTeX package (Revised chapters)]

%%%% DEFINITION OF Chapapp variables
\newcommand{\CNV}{\huge\bfseries}
\newcommand{\ChNameVar}[1]{\renewcommand{\CNV}{#1}}


%%%% DEFINITION OF TheChapter variables
\newcommand{\CNoV}{\huge\bfseries}
\newcommand{\ChNumVar}[1]{\renewcommand{\CNoV}{#1}}

\newif\ifUCN
\UCNfalse
\newif\ifLCN
\LCNfalse
\def\ChNameLowerCase{\LCNtrue\UCNfalse}
\def\ChNameUpperCase{\UCNtrue\LCNfalse}
\def\ChNameAsIs{\UCNfalse\LCNfalse}

%%%%% Fix for AMSBook 971008

\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}


%%%%% Fix for Bjarne and appendix 980211

\newif\ifinapp
\inappfalse
\renewcommand\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \inapptrue%
  \renewcommand\@chapapp{\appendixname}%
  \renewcommand\thechapter{\@Alph\c@chapter}}

%%%%%

\newcommand{\FmN}[1]{%
\ifUCN
   {\MakeUppercase#1}\LCNfalse
\else
   \ifLCN
      {\MakeLowercase#1}\UCNfalse
   \else #1
   \fi
\fi}


%%%% DEFINITION OF Title variables
\newcommand{\CTV}{\Huge\bfseries}
\newcommand{\ChTitleVar}[1]{\renewcommand{\CTV}{#1}}

%%%% DEFINITION OF the basic rule width
\newlength{\RW}
\setlength{\RW}{1pt}
\newcommand{\ChRuleWidth}[1]{\setlength{\RW}{#1}}

\newif\ifUCT
\UCTfalse
\newif\ifLCT
\LCTfalse
\def\ChTitleLowerCase{\LCTtrue\UCTfalse}
\def\ChTitleUpperCase{\UCTtrue\LCTfalse}
\def\ChTitleAsIs{\UCTfalse\LCTfalse}
\newcommand{\FmTi}[1]{%
\ifUCT

   {\MakeUppercase#1}\LCTfalse
\else
   \ifLCT
      {\MakeLowercase#1}\UCTfalse
   \else #1
   \fi
\fi}



\newlength{\mylen}
\newlength{\myhi}
\newlength{\px}
\newlength{\py}
\newlength{\pyy}
\newlength{\pxx}


\def\mghrulefill#1{\leavevmode\leaders\hrule\@height #1\hfill\kern\z@}

\newcommand{\DOCH}{%
  \CNV\FmN{\@chapapp}\space \CNoV\thechapter
  \par\nobreak
  \vskip 20\p@
  }
\newcommand{\DOTI}[1]{%
    \CTV\FmTi{#1}\par\nobreak
    \vskip 40\p@
    }
\newcommand{\DOTIS}[1]{%
    \CTV\FmTi{#1}\par\nobreak
    \vskip 40\p@
    }

%%%%%% SONNY DEF

\DeclareOption{Sonny}{%
  \ChNameVar{\Large\sf}
  \ChNumVar{\Huge}
  \ChTitleVar{\Large\sf}
  \ChRuleWidth{0.5pt}
  \ChNameUpperCase
  \renewcommand{\DOCH}{%
    \raggedleft
    \CNV\FmN{\@chapapp}\space \CNoV\thechapter
    \par\nobreak
    \vskip 40\p@}
  \renewcommand{\DOTI}[1]{%
    \CTV\raggedleft\mghrulefill{\RW}\par\nobreak
    \vskip 5\p@
    \CTV\FmTi{#1}\par\nobreak
    \mghrulefill{\RW}\par\nobreak
    \vskip 40\p@}
  \renewcommand{\DOTIS}[1]{%
    \CTV\raggedleft\mghrulefill{\RW}\par\nobreak
    \vskip 5\p@
    \CTV\FmTi{#1}\par\nobreak
    \mghrulefill{\RW}\par\nobreak
    \vskip 40\p@}
}

%%%%%% LENNY DEF

\DeclareOption{Lenny}{%

  \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont}
  \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont}
  \ChTitleVar{\Huge\bfseries\rm}
  \ChRuleWidth{1pt}
  \renewcommand{\DOCH}{%
    \settowidth{\px}{\CNV\FmN{\@chapapp}}
    \addtolength{\px}{2pt}
    \settoheight{\py}{\CNV\FmN{\@chapapp}}
    \addtolength{\py}{1pt}

    \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter}
    \addtolength{\mylen}{1pt}
    \settowidth{\pxx}{\CNoV\thechapter}
    \addtolength{\pxx}{-1pt}

    \settoheight{\pyy}{\CNoV\thechapter}
    \addtolength{\pyy}{-2pt}
    \setlength{\myhi}{\pyy}
    \addtolength{\myhi}{-1\py}
    \par
    \parbox[b]{\textwidth}{%
    \rule[\py]{\RW}{\myhi}%
    \hskip -\RW%
    \rule[\pyy]{\px}{\RW}%
    \hskip -\px%
    \raggedright%
    \CNV\FmN{\@chapapp}\space\CNoV\thechapter%
    \hskip1pt%
    \mghrulefill{\RW}%
    \rule{\RW}{\pyy}\par\nobreak%
    \vskip -\baselineskip%
    \vskip -\pyy%
    \hskip \mylen%
    \mghrulefill{\RW}\par\nobreak%
    \vskip \pyy}%
    \vskip 20\p@}
 

  \renewcommand{\DOTI}[1]{%
    \raggedright
    \CTV\FmTi{#1}\par\nobreak
    \vskip 40\p@}

  \renewcommand{\DOTIS}[1]{%
    \raggedright
    \CTV\FmTi{#1}\par\nobreak
    \vskip 40\p@}
 }


%%%%%%% GLENN DEF


\DeclareOption{Glenn}{%
  \ChNameVar{\bfseries\Large\sf}
  \ChNumVar{\Huge}
  \ChTitleVar{\bfseries\Large\rm}
  \ChRuleWidth{1pt}
  \ChNameUpperCase
  \ChTitleUpperCase
  \renewcommand{\DOCH}{%
    \settoheight{\myhi}{\CTV\FmTi{Test}}
    \setlength{\py}{\baselineskip}
    \addtolength{\py}{\RW}
    \addtolength{\py}{\myhi}
    \setlength{\pyy}{\py}
    \addtolength{\pyy}{-1\RW}
     
    \raggedright
    \CNV\FmN{\@chapapp}\space\CNoV\thechapter
    \hskip 3pt\mghrulefill{\RW}\rule[-1\pyy]{2\RW}{\py}\par\nobreak}

  \renewcommand{\DOTI}[1]{%
    \addtolength{\pyy}{-4pt}
    \settoheight{\myhi}{\CTV\FmTi{#1}}
    \addtolength{\myhi}{\py}
    \addtolength{\myhi}{-1\RW}
    \vskip -1\pyy
    \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt
    \raggedleft\CTV\FmTi{#1}\par\nobreak
    \vskip 80\p@}

  \renewcommand{\DOTIS}[1]{%
    \setlength{\py}{10pt}
    \setlength{\pyy}{\py}
    \addtolength{\pyy}{\RW}
    \setlength{\myhi}{\baselineskip}
    \addtolength{\myhi}{\pyy}
    \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak
%    \addtolength{}{}
\vskip -1\baselineskip
    \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt
    \raggedleft\CTV\FmTi{#1}\par\nobreak
    \vskip 60\p@}
  }

%%%%%%% CONNY DEF

\DeclareOption{Conny}{%
  \ChNameUpperCase
  \ChTitleUpperCase  
  \ChNameVar{\centering\Huge\rm\bfseries}
  \ChNumVar{\Huge}
  \ChTitleVar{\centering\Huge\rm}
  \ChRuleWidth{2pt}

  \renewcommand{\DOCH}{%
    \mghrulefill{3\RW}\par\nobreak
    \vskip -0.5\baselineskip
    \mghrulefill{\RW}\par\nobreak
    \CNV\FmN{\@chapapp}\space \CNoV\thechapter
    \par\nobreak
    \vskip -0.5\baselineskip
   }
  \renewcommand{\DOTI}[1]{%
    \mghrulefill{\RW}\par\nobreak
    \CTV\FmTi{#1}\par\nobreak
    \vskip 60\p@
    }
  \renewcommand{\DOTIS}[1]{%
    \mghrulefill{\RW}\par\nobreak
    \CTV\FmTi{#1}\par\nobreak
    \vskip 60\p@
    }
  }

%%%%%%% REJNE DEF

\DeclareOption{Rejne}{%

  \ChNameUpperCase
  \ChTitleUpperCase  
  \ChNameVar{\centering\Large\rm}
  \ChNumVar{\Huge}
  \ChTitleVar{\centering\Huge\rm}
  \ChRuleWidth{1pt}
  \renewcommand{\DOCH}{%
    \settoheight{\py}{\CNoV\thechapter}
    \addtolength{\py}{-1pt}
    \CNV\FmN{\@chapapp}\par\nobreak
    \vskip 20\p@
    \setlength{\myhi}{2\baselineskip}
    \setlength{\px}{\myhi}
    \addtolength{\px}{-1\RW}
    \rule[-1\px]{\RW}{\myhi}\mghrulefill{\RW}\hskip
    10pt\raisebox{-0.5\py}{\CNoV\thechapter}\hskip
10pt\mghrulefill{\RW}\rule[-1\px]{\RW}{\myhi}\par\nobreak
     \vskip -1\p@
    }
  \renewcommand{\DOTI}[1]{%
    \setlength{\mylen}{\textwidth}
    \addtolength{\mylen}{-2\RW}
    {\vrule width\RW}\parbox{\mylen}{\CTV\FmTi{#1}}{\vrule
width\RW}\par\nobreak
    \vskip
-1pt\rule{\RW}{2\baselineskip}\mghrulefill{\RW}\rule{\RW}{2\baselineskip}
    \vskip 60\p@
    }
  \renewcommand{\DOTIS}[1]{%
    \setlength{\py}{\fboxrule}
    \setlength{\fboxrule}{\RW}
    \setlength{\mylen}{\textwidth}
    \addtolength{\mylen}{-2\RW}
    \fbox{\parbox{\mylen}{\vskip
2\baselineskip\CTV\FmTi{#1}\par\nobreak\vskip \baselineskip}} 
    \setlength{\fboxrule}{\py}
    \vskip 60\p@
    }
  }


%%%%%%% BJARNE DEF

\DeclareOption{Bjarne}{%
  \ChNameUpperCase
  \ChTitleUpperCase  
  \ChNameVar{\raggedleft\normalsize\rm}
  \ChNumVar{\raggedleft \bfseries\Large}
  \ChTitleVar{\raggedleft \Large\rm}
  \ChRuleWidth{1pt}


%% Note thechapter -> c@chapter fix appendix bug

  \newcounter{AlphaCnt}
  \newcounter{AlphaDecCnt}
  \newcommand{\AlphaNo}{%
    \ifcase\number\theAlphaCnt
      \ifnum\c@chapter=0
        ZERO\else{}\fi
    \or ONE\or TWO\or THREE\or FOUR\or FIVE
    \or SIX\or SEVEN\or EIGHT\or NINE\or TEN
    \or ELEVEN\or TWELVE\or THIRTEEN\or FOURTEEN\or FIFTEEN
    \or SIXTEEN\or SEVENTEEN\or EIGHTEEN\or NINETEEN\fi
}

  \newcommand{\AlphaDecNo}{%
    \setcounter{AlphaDecCnt}{0}
    \@whilenum\number\theAlphaCnt>0\do
      {\addtocounter{AlphaCnt}{-10}
       \addtocounter{AlphaDecCnt}{1}}
     \ifnum\number\theAlphaCnt=0
     \else
       \addtocounter{AlphaDecCnt}{-1}
       \addtocounter{AlphaCnt}{10}
     \fi
     
     
    \ifcase\number\theAlphaDecCnt\or TEN\or TWENTY\or THIRTY\or
    FORTY\or FIFTY\or SIXTY\or SEVENTY\or EIGHTY\or NINETY\fi
    }
  \newcommand{\TheAlphaChapter}{%
    
    \ifinapp 
      \thechapter
    \else
      \setcounter{AlphaCnt}{\c@chapter}
      \ifnum\c@chapter<20
        \AlphaNo
      \else
        \AlphaDecNo\AlphaNo
      \fi
    \fi
    }  
  \renewcommand{\DOCH}{%
    \mghrulefill{\RW}\par\nobreak
    \CNV\FmN{\@chapapp}\par\nobreak 
    \CNoV\TheAlphaChapter\par\nobreak
    \vskip -1\baselineskip\vskip 5pt\mghrulefill{\RW}\par\nobreak
    \vskip 20\p@
    }
  \renewcommand{\DOTI}[1]{%
    \CTV\FmTi{#1}\par\nobreak
    \vskip 40\p@
    }
  \renewcommand{\DOTIS}[1]{%
    \CTV\FmTi{#1}\par\nobreak
    \vskip 40\p@
    }
}

\DeclareOption*{%
  \PackageWarning{fancychapter}{unknown style option}
  }

\ProcessOptions* \relax

\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \DOCH
    \fi
    \interlinepenalty\@M
    \DOTI{#1}
  }}
\def\@schapter#1{\if@twocolumn
                   \@topnewpage[\@makeschapterhead{#1}]%
                 \else
                   \@makeschapterhead{#1}%
                   \@afterheading
                 \fi}
\def\@makeschapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright
    \normalfont
    \interlinepenalty\@M
    \DOTIS{#1}
    \vskip 40\p@
  }}

\endinput


