%Tools database to cooperate with blue.tex
%Januari 95, [email protected]
%To print the formats properly, copy
%the following 11-lines job and
%substitute the semicolon token
%(=escape char) for `semi-col'. (2x)
%                         ---Kees---
%\input blue.tex
%\hfuzz25pt
%\title{File: tools.dat}
%\issue{Version 1.0}
%\beginscript
%\thisverbatim={\catcode`\`semicol'=0
%  \catcode`\!=12
%  \catcode`\|=12
%  \input tools.dat}
%\beginverbatim
%`semi-col'endverbatim
%\endscript
%
%
%
%Syntax included tools
%\tool\<name>tool
%...the file which otherwise would
%...have been input
%\endinput
%Disadvantages:
%-No outer defs allowed.
% (\newtoks\x via \csname x\endcsname)
%-No \par-s, use \endgraf
%
%
%
%Contents:
%- binarytreetool
%- bridgetool
%- crosswordstool
%- hanoitool
%- indextool
%  (Sorting in BLUe, quick.tex
%   heap.tex and BLUe's Index)
%- language english, russian
%- ntglogo
%- smileys
%- toc
%- xyztool
%- partlogotool
%- pascaltool
%
%
%
%Tools are sorted on name.       %;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%binarytree%
\tool\bintreetool
%Because redefined in manmac & BLUe's system.
\catcode`\^=7
%
\def\startbintree{\catcode`\^^M=9
           \nodes}%neglect e-o-l
%
\def\nodes#1#2{\ifx\sedon#2
              \levelone#1 \sedon\fi
  \ea\def\csname#1\endcsname{#2}\nodes}
\def\sedon#1\nodes{\fi
             \setbintree\endgroup}
\let\endbintree\sedon
%
\def\fork{\vbox{\offinterlineskip
%Connection lines       ____|____
%                       |        |
\hbox{\ea%empty branche?
  \ifx\csname\the\ltree\the\m
      \endcsname\relax
     \vrule width\tophnshalf
            height0pt depth0pt
  \else%non-empty branche
     \vrule height\vnodesep
     \vbox to\vnodesep{\hrule
         width\tophnshalf\vss}%
     \kern-.2pt\vrule height
                    2\vnodesep
          depth-\vnodesep\relax
  \fi\advance\m1 \ea%empty branche
  \ifx\csname\the\ltree\the\m
      \endcsname\relax
     \vrule width\tophnshalf
            height0pt depth0pt
  \else%non-empty branch
     \kern-.4pt\vrule height
                   2\vnodesep
        depth-\vnodesep\relax
     \vbox to\vnodesep{\hrule
       width\tophnshalf\vss}%
     \vrule height\vnodesep\relax
  \fi}\kern1ex%Separation below
              %connection lines
%The sibling nodes
\hbox to\tophns
 {\hbox to0pt{\strut\hss
    \csname\the\ltree\the\m
    \endcsname\hss}\hss
  \global\advance\m1
  \hbox to0pt{\strut\hss
    \csname\the\ltree\the\m
    \endcsname\hss}}}}
%
\def\setbintree{%level >=1
\ltree0 \m0
%bounds for recursion
\lu1 %dynamic for the rows
\advance\levelone1
%defaults
\tophns30ex \vnodesep3ex
%hook to override defaults if neede
\the\everybintree
\the\thisbintree
%dependent quantities
\treewidth3\tophns
\tophnshalf\tophns \divide\tophnshalf2
%root, level 00
\vbox{\levelline{\vbox{\offinterlineskip
  \hbox to0pt{\strut\hss
     \csname\the\ltree\the\m
     \endcsname\hss}}}%
\loop\advance\ltree1 \multiply\lu2
\levelline{\noindent\m1 \fork
  \loop\ifnum\m<\lu
    \kern\tophns \advance\m1 \fork
  \repeat}\tophns\tophnshalf
  \divide\tophnshalf2
\ifnum\ltree<\levelone
\repeat}\thisbintree{}}%end \bintree
%
\def\levelline#1{\hbox to\treewidth{\hss#1\hss}}
\endinput
%end%%%%%%%%%%%%%%%%%%%%binarytreel%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%b(inary)t(ree)l%!cgl;newcol
\tool\bttool
\message{ ---bttool, Aug 95, cgl--- }
\def\drawbt{\whiteS{120}%
  \trttxt{\hss{\small\csname\node\endcsname}}%
  \ea\ifx\csname\node0\endcsname\relax
         \tbward\fi%Backtrack
  \S{80}\advance\k-125
  {\W{\the\k}\S{80}\edef\node{\node0}%
   \drawbt}%
   \E{\the\k}\S{80}\edef\node{\node1}%
   \drawbt\relax}
\def\tbward#1\relax{\fi}
%
\everybt{\k1024\unitlength.02ex\x0pt\y0pt}
%\thisbt{}
\prebt{$$\multiply\count1by280
  \ea\ydim\ea{\the\count1}
  \ea\yoffset\ea{\ea-\the\count1}}
\postbt{$$}
\obeylines%
\def\bt#1 #2
  {\ifx\endbt#2\count1=#1 \tbdne\fi%
   \ea\def\csname#1\endcsname{#2}\bt}%
\def\tbdne#1\bt{\fi\def\node{1}%
   \the\prebt\the\everybt\the\thisbt%
   \beginpicture\drawbt\endpicture%
   \the\postbt\endgroup}%
\endinput
%end%%%%%%%%%%%%%%%%%b(inary)t(ree)l%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%brd%
\tool\bridgetool
\message{ ---bridgetool, Jan 95, cgl--- }
%Typesetting bridge publications
%via (plain) TeX. Version May 92.
%The macros can als be used within LaTeX.
%Version: 1.1 March 1994 (basically
%unmodified since publication in 1990)
%Author: Kees van der Laan
%        Hunzeweg 57, 9893PB, Garnwerd (Gr)
%        The Netherlands. 05941-1525,
%        [email protected]
%Examples of use have been published in
%TUGboat, 11, 2, 265--276, and MAPS 91.2.
%(A few are appended at the end.)
%The macros consists of 3 indep. parts:
%- dec.tex   ((language) declarations,
%             used register and
%             control sequences)
%- bid.tex   (macros for bidding and
%             layout of games)
%- play.tex  (macros for discussing the
%             course of a play)
%                             %;numvrb
%%%%%%%dec.tex%%%%%%%
%Card definitions
\def\sp{$\spadesuit$}
\def\h{$\heartsuit$}
\def\d{$\diamondsuit$}
\def\cl{$\clubsuit$}
%(Toks register) control sequences
%for hands used by play macros:
%showgame, pc, strip
\ea\let\ea\NT\csname newtoks\endcsname
\NT\hnd%Dynamically one of:
\NT\Ns\NT\Es\NT\Ss\NT\Ws
\NT\Nh\NT\Eh\NT\Sh\NT\Wh
\NT\Nd\NT\Ed\NT\Sd
     \NT\Wd %Beware! Already
%in TUGboat.sty in lower case
\NT\Nc\NT\Ec\NT\Sc\NT\Wc
%
\def\bridgeenglish{
%In central figure NESW
\def\N{N}\def\E{E}\def\S{S}\def\W{W}
%In heading bplay
\def\NS{NS}\def\EW{EW}
\def\TRICK{Trick}
%Definition of hands
%used by bbid
\def\FIH{North}\def\SEH{East}
\def\THH{South}\def\FOH{West}
}% end \bridgeenglish
\bridgeenglish%default
%
\def\LEADN{\gdef\FIP{N}\gdef\SEP{E}%
         \gdef\THP{S}\gdef\FOP{W}}
\def\LEADE{\gdef\FIP{E}\gdef\SEP{S}%
         \gdef\THP{W}\gdef\FOP{N}}
\def\LEADS{\gdef\FIP{S}\gdef\SEP{W}%
         \gdef\THP{N}\gdef\FOP{E}}
\def\LEADW{\gdef\FIP{W}\gdef\SEP{N}%
         \gdef\THP{E}\gdef\FOP{S}}
%Definition  of counters
%used by bplay
\csname newcount\endcsname\trno
%trick number
%Definition of dimensions used in bbid
\csname newdimen\endcsname\wr %width column
\wr=7ex \relax
\def\bidwidth{4\wr}
%used in crdima
\csname newbox\endcsname\NESW
%
\def\dutch{
\def\FIH{Noord}\def\SEH{Oost}
\def\THH{Zuid}\def\FOH{West}
\def\N{N}\def\E{O}\def\S{Z}
\def\W{W}\def\EW{OW}\def\NS{NZ}
\def\TRICK{Slag}
\setbox\NESW\hbox{\NESWfig}
}%end \dutch
%
\def\french{
\def\FIH{Nord}\def\SEH{Est}
\def\THH{Sud}\def\FOH{Ouest}
\def\N{N}\def\E{E}\def\S{S}
\def\W{O}\def\EW{EO}\def\NS{NS}
\def\TRICK{Lev\'ee}
\setbox\NESW\hbox{\NESWfig}
}%end \french
%end input dec.tex
%
%%%%%%%bid.tex%%%%%%%
%Modified central figure
\def\hand#1#2#3#4{%
%Example: \hand{AKJ765}{AK9}{--}{T983}
\vtop{\hbox{\strut\sp\enspace#1}
\hbox{\strut\h\enspace#2}
\hbox{\strut\d\enspace#3}
\hbox{\strut\cl\enspace#4}}%end \vtop
}%end \hand
%
\def\crdima#1#2#3#4#5#6{%
%purpose: layout bridge hand
%#1 left upper text
%#2 right upper text
%#3, #4, #5, #6: N, E, S, W hands
\vbox{\halign{              &##\quad\cr
            #1&          #3&     #2\cr
$\vcenter{#6}$&$\vcenter{\copy\NESW}$&
                     $\vcenter{#4}$\cr
              &          #5&       \cr
             }%end \halign
     }%end \vbox
}%end \crdima
%
\def\NESWfig{%
\hbox{\vrule
\vbox{\offinterlineskip\tabskip0pt
\hrule\kern.25ex\halign{\hskip.5ex
##\tabskip.5ex&\hfil##\hfil&
##\hskip.5ex  \tabskip0pt\cr
\noalign{\vskip.5ex}
 &\hbox to 2ex{\hss\N\hss}&  \cr
\noalign{\vskip.25ex}
\kern.25ex\W&              &\E\kern.25ex
\cr\noalign{\vskip.25ex}
 &\hbox to 2ex{\hss\S\hss}&  \cr
\noalign{\vskip.5ex}
      }%end \halign
\kern.25ex\hrule}%end \vbox
\vrule}%end \hbox
}% end \NESWfig
\setbox\NESW\hbox{\NESWfig}
%
\def\ebid{\errormessage{%
  bbid command is missing}}
%
\def\bbid{\bgroup%
\def\ebid{\egroup\egroup\egroup}
\def\alert{$^A$}
\def\think{$\ldots$\thinspace}
% etc.
\vtop\bgroup
\halign to\bidwidth\bgroup \tabskip2ex
     plus 1ex minus 1ex&    ##\hfil\cr
   \FIH\hfil& \SEH\hfil&
                \THH\hfil&\FOH\hfil\cr
   \noalign{\vskip.5ex}
}%end \bbid
%end input bid.tex%
%
%%%%%%%play.tex%%%%%%%
%\input{play.tex}
%Modified 11/11/91 Central table
%\bplay etc
%      bplay, showgame, pc, strip
\def\eplay{\errormessage{%
  bplay command is missing}}
%
\def\bplay{\bgroup\global\trno=0
\def\eplay{\egroup\egroup}
\def\bintermezzo{\noalign\bgroup
                 \smallskip\noindent}
\def\eintermezzo{\smallskip\egroup}
\tabskip1ex plus 1fill
\halign to\hsize\bgroup
\tabskip1ex plus 1ex minus 1ex
\global\advance\trno by 1 %
\hbox to.5\wr{\hss\the\trno\hss}%<=!
\hbox to\wr{\pc\FIP##\hss}\hfil&
\hbox to\wr{\pc\SEP##\hss}\hfil&
\hbox to\wr{\pc\THP##\hss}\hfil&
\hbox to\wr{\pc\FOP##\hss}\hfil
\tabskip4ex plus2ex minus1ex&
\hbox to.5\wr{\hss##\hss}
\tabskip1ex plus 1ex minus 1ex&
\hbox to.5\wr{\hss##\hss}
\tabskip1ex plus 1fill\cr
%End template line, next is headline
\omit\hbox to1\wr{\TRICK\hss}\hfil&
  \omit\hfil&\omit\hfil&\omit\hfil&
  %Note only 3 \omits
              \NS&\EW\cr%Headline
}% end \bplay
%
\def\pc#1#2#3{%      Version 3/3/90
%Function: prints card #2#3 and
%          deletes it from player #1
%#1 the hand N, E, S, W(uppercase)
%#2 colour s, h, d, or c
%#3 card value A K Q ... 2, or x
%(or your (consistent/language) choice)
%%%% 1. Update hand \#1#2; e.g. \Ns %%%
\xdef\hnd{\csname #1#2\endcsname}
\strip{#3}{\hnd}%
%%%% 2. print card in table         %%%
\xdef\colour{\csname #2\if#2cl\else
  \if#2sp\fi\fi\endcsname}
\colour\thinspace #3%
% %Needed for immediate postfix mark(s)
}% end \pc
%
\def\strip#1#2{%        Version 3/3/90
%Function: deletes card value #1
%          from #2, i.e., \Ns, or ...
 \def\wis##1#1##2\wis{%
 %Function: #1 is deleted from argument
 %          in \wis ... \wis and result
 %          is assigned to \hnd
 %        (last card is replaced by --)
     \global\hnd={##1##2}
     \xdef\pa{##1} \xdef\pb{##2}
     \ifx\pa\empty {\ifx\pb\empty
        \global\hnd={--}% void colour
     \fi}\fi
  }% end \wis
  \expandafter\wis\the #2\wis
}% end \strip
%
\def\showgame{
%Purpose: Shows all cards still active
%       in the play, via \Ns, ..., \Wc,
%  (note use of upper case for players)
%Used: \crdima, \hand, \LFTINF, \RGTINF
%      \Ns, ..., \Wc
$$\crdima{\LFTINF}{\RGTINF}%
  {\hand{\the\Ns}{\the\Nh}{\the\Nd}%
        {\the\Nc}}%
  {\hand{\the\Es}{\the\Eh}{\the\Ed}%
        {\the\Ec}}%
  {\hand{\the\Ss}{\the\Sh}{\the\Sd}%
        {\the\Sc}}%
  {\hand{\the\Ws}{\the\Wh}{\the\Wd}%
        {\the\Wc}}%
$$}% end \showgame
%end input play.tex %In total: 215 lines
\endinput
%Examples: diagram, bidding, course of play.
%
%\hsize=.5\hsize
%1. Diagram
%$$\crdima{N/None}{\vtop{\hbox{Deal:}
%                 \hbox{demo}}}%
%  {\hand{J74}{AJ}{QJT2}{Q874}}%N
%  {\hand{K86}{T9542}{874}{T3}}%E
%  {\hand{QT952}{Q83}{AK5}{A6}}%S
%  {\hand{A3}{K76}{963}{KJ952}}%W
%$$
%2. Bidding
%$$\bbid
%1\cl\alert& ? no& 1\sp&\think no\cr
%       2\sp&  no& 4\sp&     a.p.\cr
%\noalign{\vskip.5ex}
%\alert\ means Alert,
%   conventional bid\hidewidth\cr
%? means explanation
%              asked\hidewidth\cr
%\think means think
%%              pause\hidewidth\cr
%\ebid $$
%3. Course of play
%\def\LFTINF{Puzzle}
%\def\RGTINF{\vtop{\hbox{6NT,}
%             \hbox{by East}}}
%
%\Ns={KQ76}\Es={T9}\Ss={8542}\Ws={AJ3}
%\Nh={J98} \Eh={A2}\Sh={QT74}\Wh={K653}
%\Nd={J942}\Ed={T5}\Sd={Q876}\Wd={AK3}
%\Nc={65}\Ec={KJ9xxxx}\Sc={2}\Wc={AQT}
%
%\showgame
%
%*Problem* How must NS defend in
%order to guarantee 1 trick?
%
%*Solution* Start with a \h\
%lead in order to break communication.
%N must discard \h s
%and S must discard \sp s.
%\smallskip\noindent
%\LEADS
%\bplay
%%\noalign{\LEADS}
%h4! & hK & h8 & h2 & -- & 1\LEADW\cr
%%\noalign{\LEADW}
%cA  & c5 & cx & c2 & -- & 2\cr
%cQ  & c6 & cx & s2 & -- & 3\cr
%cT  & h9 & cK & s4 & -- & 4\LEADE\cr
%%\noalign{\LEADE}
%cJ  & s5 & s3 & s6 & -- & 5\cr
%c9  & s8 & h5 & s7 & -- & 6\cr
%cx  & d6 & sJ & d2 & -- & 7\cr
%\bintermezzo
%On lead of the next \cl\
%neither South nor North can be
%squeezed as can be seen from%
%\def\RGTINF{\vtop{\hbox{NS squeezed on}
%             \hbox{\c\ continuation?}}}
%\showgame
%with continuation
%\eintermezzo
%cx & h7 & h6 & hJ & -- & 8\cr
%dT & d7 & dA & d4 & -- & 9\LEADW\cr
%%\noalign{\LEADW}
%dK & d9 & d5 & d8 & -- & 10\cr
%h3 & dJ & hA & hT & -- & 11\LEADE\cr
%\noalign{\LEADE}
%sT & hQ & sA & sQ & -- & 12\LEADW\cr
%\noalign{\LEADW}
%d3 & sK & s9 & dQ & 1  & 12\cr
%\eplay
%\bye                         %;nonum
%
%Contents
%
%Declarations.
%  Newtoks, \NT alias.............10
%     \hnd, \Ns, \Es, \Ss, \Ws....12
%           \Nh, \Eh, \Sh, \Wh....13
%           \Nd, \Ed, \Sd, \Wd....14
%           \Nc, \Ec, \Sc, \Wc....17
%  \bridgeenglish..............19-30
%  \dutch......................51-58
%  \french.....................60-67
%     \N, \E, \S, \W..............21
%     \NS, \EW....................23
%     \TRICK......................24
%     \FIH, \SEH, \THH, \FOH...27-28
%  \sp, \h, \cl, \d..............3-6
%  \LEADN \LEADE \LEADS \LEADW 32-38
% Newcount
%     \trno.......................42
% Newdimen
%     \wr.........................46
%     \bidwidth{4\wr}.............47
% Newbox
%    \NESW...................49, 111
%
% \hand........................72-78
% \crdima......................80-92
% \bbid, \ebid......116-127, 113-114
%   \alert.......................118
%   \think.......................119
%%%%%%%play.tex%%%%%%%
% \bplay, \eplay....138-162, 135-136
% \bintermezzo, \eintermezzo 140-142
% \pc........................164-179
%   \hnd.........................172
%   \colour......................175
% \strip.....................181-196
% \showgame..................198-213
% Examples
%   diagram..................219-226
%   bidding..................227-238
%   course of play...........239-289
%
%History of changes
%July 1994 \c and \s changed into
%          \cl and \sp,
%          \colour adapted
%March 1994 Prepared for NTG's CD-ROM
%           Examples of use added
%           NESW figure adapted
%Jan   1994 Submitted to CTAN.
%end%%%%%%%%%%%%%%%%%%%%%%%bridge%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%crs%
\tool\crosswordstool
\message{ ---crosswordstool,
                  Jan 95, cgl--- }
%From Typesetting crosswords via TeX
%EuroTeX 92, MAPS 92.1
%NOTE In order to use natural input,
%spaces except for the last one, and not
%let this choice for ;] (space=\relax)
%work through globally, start with
%\bgroup\obeyspaces\let =\relax
%\bdata
%<natural data>
%\edata
%$$\crw$$%(or \sol)
%\egroup
%;numvrb
\puzzletrue
\csize3ex
%                   %;numvrb %;vrblin99
\def\bdata{\bgroup\obeylines\obeyspaces%
\store}
\def\store#1\edata{\egroup\def\data{#1}}
%{\obeyspaces\global\let =\relax}
\def\usersize{}
%                            ;vrblin=199
{\catcode`\^=7 \catcode`\^^M=13 %local scope
\gdef\crw{\cnt0\relax\boxit{\usersize%
\hrule\ea\fifol\data\lofif^^M}}%
\gdef\sol{\boxit{\def\num{}\puzzlefalse%
\usersize\hrule\ea\fifol\data\lofif^^M}}%
\gdef\fifol#1^^M{\ifx\lofif#1\lofif\fi%
\processl{#1}\fifol}}%end local scope%
%                            %;vrblin=299
\def\lofif#1\fifol{\fi}
\def\processl#1{\hbox{\fifo#1\ofif}\hrule}
\def\fifo#1{\ifx\ofif#1\ofif\fi%
\process#1\fifo}  \def\ofif#1\fifo{\fi}
%
\def\process#1{\if*#1\cc\else%
\ifx\relax#1\cc\else%
\ifnum`#1=\uccode`#1\capchar#1\else%
\lowchar#1\fi\fi\fi}
\def\lowchar#1{\hbox to\csize{\vrule
height.8\csize depth.2\csize\relax%
\ifpuzzle\null\else\hss\uppercase{#1}%
\fi\hss\vrule}}
\def\capchar#1{\hbox to\csize{\vrule
height.8\csize depth.2\csize\relax%
\num\ifpuzzle\null\else\hss#1\fi%
\hss\vrule}}
\def\cc{\vrule height.8\csize depth%
2\csize width\csize}
%
\def\num{\global\advance\cnt1\relax%
\vbox to.8\csize{\rlap{\kern1pt%
\fiverm\the\cnt\hss}\vfil}}%
%                            %;vrblin=399
\def\boxit#1{\vbox{\hrule\hbox{\vrule%
\vbox{#1}\vrule}\hrule}}%   cgl, oct92
\endinput                      %;nonum
%Contents
%\newif
%  \ifpuzzle              (blue.tex)
%\newcount
%  \cnt                   (blue.tex)
%\newdimen
%  \csize                 (blue.tex)
%Data
%  \bdata........................100
%  \store........................102
%  \edata........................102
%  \usersize.....................104
%Crw
%  \crw..........................201
%  \sol..........................203
%Auxiliaries
%  \fifol........................205
%  \process, \processl......305, 301
%  \lofif........................300
%  \lowchar......................309
%  \capchar......................313
%  \cc...........................317
%  \num..........................320
%  \boxit........................400
%History of changes
%July 1994 In tools.dat to cooperate
%          with blue.tex
%          \global\let =\relax removed.
%Jan 1994 Submitted CTAN
%1992 Submitted to EuroTeX and MAPS
%end%%%%%%%%%%%%%%%%%%%%%%%%%crs%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%hanoi%
\tool\hanoitool
\message{ ---hanoitool, Jan 95, cgl---}
%Tower of Hanoi macros
%hanoi.tex version 19 dec 91  %;numvrb
%\hanoi changed into \sethanoi June 95
%\n=number of disks \brd=breadth towers
%\hgt=height tower  \dskhgt=height disk
\csname newcount\endcsname\n
\csname newcount\endcsname\brd
\csname newcount\endcsname\hgt
\csname newcount\endcsname\dskhgt
\def\preloop{%To create loopcnt, a
            %local loopcounter
            %(see also loopy.TeX).
  \bgroup \advance\count10 by 1
  \countdef\loopcnt=\count10
           %Symbolic name
  \loopcnt=1 %(default)
}%end \preloop
\def\postloop{\loopcnt=0 %Restore
  \egroup}%end \postloop
%
%Hanoi macros, top level
\def\sethanoi#1{%Argument can be digit(s)
            %or a counter (numeric)
\n=#1 %Assign argument value to \n
\def\II{}\def\III{}%Empty towers
%Next is inspired by the TeXbook,
%p374, 378
%The initial tower for \I is created
%The initial tower for \I is created
%   \def\I{\disksep\i\disksep\ii
%        \disksep\iii...\disksep\`n'}
%next to the defs for \i,\ii,...\`n'.
\preloop\ag\def\ag\I\ag{%
 \loop
   \ea\xdef\csname\romannumeral\loopcnt
           \endcsname{\the\loopcnt}
   \ag\disksep%separator
   \ea\ag\csname
        \romannumeral\loopcnt\endcsname
   \ifnum\loopcnt<\n
   \advance\loopcnt by 1
 \repeat   \ag}
\postloop
%For printing, values are needed for
\brd=\n %Breadth of largest disk
\advance\brd by 3 %Little room extra
\dskhgt=1 %Height of disks
\hgt=\n\multiply\hgt by2 %\hgt is height
      \advance\hgt by1   %of towers
\showtowers %Print initial state
\Hanoi\I\II\III\n
}%end \sethanoi
%
\def\Hanoi#1#2#3#4{%Moves from #1 to #2,
                  %with aid of tower #3.
%The number of disks is #4, in a counter.
\ifnum#4=1 %For Tower of 1 disk,
           %just move the disk
  \movedisk\from#1\to#2%
  \showtowers%Print towers after move
\else%Problem of #4 disks is solved by
     %- problem of (#4-1) disks,
     %- a move, and
     %- a problem of (#4-1) disks.
  {\advance#4 by-1 \Hanoi#1#3#2#4}%
  \movedisk\from#1\to#2%
  \showtowers%Print towers after move
  {\advance#4 by-1 \Hanoi#3#2#1#4}%
\fi}%end \Hanoi
%
%Moving of the disks, TeXbook, App. D.2
%Slightly adapted versions of \lop (
%called \movedisk with function that
%first element of #1 is prefixed to #2)
%and \lopoff modification
\def\movedisk\from#1\to#2{%Move disk from
                  %tower #1 to tower #2
 \ea\lopoffx#1\lopoffx#1#2}
\def\lopoffx\disksep#1#2\lopoffx#3#4{\ea
 \gdef\ea#4\ea{\ea\disksep\ea#1#4}
 \gdef#3{#2}%restore stub}%end\lopoffx
}%end \movedisk
%
%Printing tower status
\def\showtowers{%Display pyramids
\endgraf\quad\hbox{\pt\I\ \pt\II\ \pt\III
              }\endgraf
}%end \showtowers
%
%Auxiliaries
\def\gobble#1{}%To eat character
%
\def\disksep#1{\hbox to\brd ex{\hss
 \vrule width#1ex height\dskhgt ex
                        \hss}%
}%end \disksep
%
\def\pt#1{%Print Tower.
%#1 is \I, \II, or \III
\vbox to\hgt ex{\baselineskip=.2ex\vss
     #1%
     %Format pointer underneath
     \hbox to\brd ex{\hss
             \ea\gobble\string#1\hss}%
     }%end vbox
}%end \pt
\endinput                       %;nonum
%Contents
%\Hanoi .........................51--66
%\hanoi .........................19--49
%\movedisk ......................73--79
%\showtowers ....................82--85
%Auxiliaries
%   \preloop .....................8--15
%   \postloop ...................16--17
%   \lopoffx ....................76--78
%   \gobble .........................88
%   \disksep.....................90--93
%   \pt ........................95--103
%History of changes
%Jan 95 \\ changed into \disksep
%March 1994 Contents added
%           From tugboat.sty into tug.ppt
%      1991 MAPS and TUGboat versions
%end**%%%%%%%%%%%%%%%%%%%%%%%sort%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sort%
\tool\indextool
\message{ ---indextool, Jan 95, cgl--- }
%Shorthands                       ;numvrb
%Counters in blue.tex
%\newcount\n
%\newcount\k
%\newcount\kk\n=0
%\newcount\kzero\kzero0 %Bias value
%\newcount\pk
%\newcount\pkone%Used in sortcs
%\newcount\frst%First value of range
%\newcount\last %Last value of range
%\newcount\slast%Successor \last
%\newcount\dif %Difference \last-\frst
%\newcount\nw  %Number of words
%\newcount\nc  %Number of chars/comp
%\newcount\numex %Number of exchanges
%\newcount\rndval%Random number
%\newcount\rndnum%Seed random generator
%\newcount\rndtmp%Temporary value
%\newcount\status%Status comparison
%;vrblin=100
%Storing: from copy
\def\seq#1\qes{\k0 \fifow#1 \wofif{} }
%Auxiliaries: FIFO
\def\fifow#1 {\ifx\wofif#1\n\k\wofif\fi
\processw{#1}\fifow}
\def\wofif#1\fifow{\fi}
\def\processw#1{\advance\k1 \ea
\gdef\csname\the\k\endcsname{#1}}
%
%Storing: from file
\def\storefrom#1{%#1 is file name
\immediate\openin\inx=#1 \k\kzero
\continuetrue
\loop\ifeof\inx\continuefalse\fi
\ifcontinue\advance\k1{}%
\read\inx t\ea o\csname\the\k\endcsname
\repeat\advance\k-1\n\k
\immediate\closein\inx}
%
%Storing: random numbers
\def\storerandomn#1{%#1 number of numbers
\n#1\k0
\loop\ifnum\k<\n\advance\k1 \rnd\ea
 \xdef\csname\the\k\endcsname{\the\rndval}
\repeat}
%
%With, due to Reid, 1987
%Moved into kernel blue.tex
%\def\rnd{\global\multiply\rndnum371{}%
% \global\advance\rndnum1{}%
% \ifnum\rndnum>99999\relax
%  \rndtmp\rndnum \divide\rndtmp100000
%  \multiply\rndtmp100000
%  \global\advance\rndnum-\rndtmp
% \fi\global\rndval\rndnum
% \global\divide\rndval1000 }
%
%Storing: random words
\def\storerandomw#1{%#1 number of words
\n#1\nw\n\def\defarr{\ea\gdef
 \csname\the\nw\endcsname}
{\loop\ifnum0<\nw{\ag\defarr\ag{%
  \randomword}}\advance\nw-1
\repeat}}%end s-r-w.
%
\def\randomword{\rnd \nc\rndval
\divide\nc15 \advance\nc2
\loop\ifnum0<\nc\randomchar
  \advance\nc-1
\repeat}%end r-word
%
%Random character is modified
\def\randomchar{\rnd
\multiply\rndval29 \divide\rndval100
\ifnum26=\rndval\rndval0 \fi
\ifnum26<\rndval\rndval4 \fi
%Mod cgl: I \ag-ed the letter
\ea\ag\ifcase\rndval
a\or b\or c\or d\or e\or f\or g\or h\or
i\or j\or k\or l\or m\or n\or o\or p\or
q\or r\or s\or t\or u\or v\or w\or x\or
y\or z\fi}%end r-char
%;vrblin=200Typeset
%Parameters: Separators
\def\sepn{, }%Number separator
\def\sepw{ } %Word separator
%\csname newtoks\endcsname\indword
\let\sep\sepw
%
\def\prc#1{\init{#1}\def\prc##1{%
\ifnum\last=##1{}\else\ifnum\slast=##1{}%
 \last\slast\advance\slast1{}\else
 \prtfl\sepn\init{##1}\fi\fi}}
%
\def\init#1{\frst=#1\last=#1\slast=#1{}%
  \advance\slast1{}}
%
%Print range: \frst-\last (or \last).
\def\prtfl{\the\frst\ifnum\frst<\last
\advance\frst1{}\ifnum\frst=\last\sepn
\else\nobreak--\nobreak\fi\the\last\fi}
%
%Printing sequences
\def\prts{{\k\kzero%print \1...\n
\def\sep{\let\sep=\sepw}%
\loop\ifnum\k<\n\advance\k1
 \sep\csname\the\k\endcsname
\repeat}}%end \prts
%
\let\prtw=\prts
%
\def\prtn{{\k\kzero%Print number sequence
\loop\ifnum\k<\n\advance\k1
 \ea\prc\csname\the\k\endcsname
\repeat\prtfl}}%end \prtn
%
\def\typindentry#1{%#1 a def
\ea\splitintoks#1%
\ifcase\digit\the\indword\or
        {\tt\the\indword}\or
 {\tt\char92\the\indword}\or
 $\langle\hbox{\the\indword}\rangle$\fi{}
 {\oldstyle\pagenrs}.}
\def\hyphen{{\rm-}}
\def\comma{{\rm, }}
%
\def\splitintoks#1 !#2 #3.{\indword{#1}%
 \chardef\digit=#2{}\def\pagenrs{#3}}
%
\def\prtind{{\k\kzero
\def\sep{\let\sep\sepw}%
\loop\ifnum\k<\n\advance\k1
 \sep\ea\typindentry\csname\the\k\endcsname%
\repeat}}
%;vrblin=300
%Sorting in O(nlog n)
\def\sortn{\let\cmp\cmpn\sort\prtn}
%
\def\sortaw{\let\cmp\cmpaw\sort\prtw}
%
\def\sortw{\let\cmp\cmpw{\accdef\sort}\prtw}
%
\def\sort{\heapsort}
%
%Paramaters: ij and accent string
\def\accstr{\`\'\"\^\c}
%
\def\accdef{\def\i{i}\def\j{j}%
\def\'##1{##1a}\def\`##1{##1g}%
\def\"##1{##1t}\def\^##1{##1h}%
\def\c##1{##1c}}
%
\def\ij{ij}
%
%Sorting parameters: exchange macro
\def\xch#1#2{%#1, #2 counter variables
\ea\let\ea\auxone\csname\the#1\endcsname
\ea\let\ea\auxtwo\csname\the#2\endcsname
\ea\global\ea\let\csname\the#2\endcsname
\auxone
\ea\global\ea\let\csname\the#1\endcsname
\auxtwo}
%
%Sorting parameters: number comparison
\def\cmpn#1#2{%#1, #2 are def-s
%Result: \status= 0, 1, 2, if
%        \val{#1} =, >, < \val{#2}
\ifnum#1=#2\global\status0 \else
  \ifnum#1>#2\global\status1 \else
               \global\status2 \fi\fi}
%
%Parameters: comparison of words
\def\cmpw#1#2{%#1, #2 are def-s
%Result: \status= 0, 1, 2, if
%        \val{#1} =, >, < \val{#2}
\let\nxt\nxtw\cmpc#1#2}
%
\def\cmpaw#1#2{%#1, #2 are defs with as
%replacement text the words.
%Result: \status= 0, 1, 2, if
%        \val{#1} =, >, < \val{#2}
\let\nxt\nxtaw\cmpc#1#2}
%
\def\cmpc#1#2{%#1, #2 are def-s
%Result: \status= 0, 1, 2, if
%        \val{#1} =, >, < \val{#2}
\ifproof\global\advance\nc1
       \let\aa#1\let\bb#2\fi
\global\status0 \continuetrue
{\loop\ifx\empty#1\continuefalse\fi
      \ifx\empty#2\continuefalse\fi
 \ifcontinue\nxt#1\nxtt\nxt#2\nxtu
            \lge\nxtt\nxtu
 \repeat}\ifnum0=\status
\ifx\empty#1\ifx\empty#2\else
                 \global\status2 \fi
\else\ifx\empty#2\global\status1 \fi
\fi\fi
% \ifproof\immediate\write16{\aa
%  \ifnum0=\status=\else
%   \ifnum1=\status>\else
%                  <\fi\fi\bb}
% \fi%end ifproof
}
%
\def\lge#1#2{%#1 and #2 letter values
%Result: \status= 0, 1, 2, if
%              #1 =, >, <  #2.
%and \continuefalse if #1=/#2.
\ifnum#1=#2{}\else\continuefalse
 \ifnum#1<#2\global\status2 \else
            \global\status1 \fi
\fi}
%
\def\nxtw#1#2{\def\pop##1##2\pop{%
\gdef#1{##2}\def\head{##1}}%head and tail
\ea\pop#1\pop%split in head and tail
\ea\loc\head\accstr%\head is an accent cs?
\if<\head\ea\pop#1\pop\fi
\iffound\let\acs\head
 \ea\pop#1\pop%next head and tail
 \ea\let\ea#2\csname ot\acs\head\endcsname
\else\ea\let\ea#2\csname ot\head\endcsname
\fi}
%
\def\loc#1#2{\def\locate##1#1##2\end
{\ifx\empty##2\empty\foundfalse
\else\foundtrue\fi}\ea\locate#2.#1\end}
%
%Parameters:  for ASCII words
\def\nxtaw#1#2{%Result: value of first
%letter of string supplied in #1 is delivered
%in #2. (To be used as a number (\chardef)).
%#1, #2 are control sequences.
\def\pop##1##2\pop{\gdef#1{##2}%
 \chardef#2=`##1{}}\ea\pop#1\pop}
%
\def\cmpir#1#2{%#1, #2 defs
%Result: \status= 0, 1, 2 if
%        \val{#1} =, >, < \val{#2}
%\immediate\write16{Compared are: #1 and #2}%
\ea\ea\ea\decom\ea#1#2}
%
\def\decom#1 !#2 #3.#4 !#5 #6.{%
\def\one{#1}\def\four{#4}\cmpw\one\four
\ifnum0=\status%Compare secondary keys
  \ifnum#2<#5{}\global\status2{}\else
    \ifnum#2>#5{}\global\status1{}\else
               %Compare tertiary keys
      \ifnum#3<#6{}\global\status2{}\else
        \ifnum#3>#6{}\global\status1{}\fi
      \fi
    \fi
  \fi
\fi}
%
\def\red{%Reduction of \1,...,\n
\k0\kk0\let\refer\empty
\loop\ifnum\k<\n\advance\k1
 \ea\let\ea\record\csname\the\k\endcsname
 \ea\splitwn\record%
 \ifx\refer\word%extend with number
   \ea\xdef\csname\the\kk\endcsname{%
      \csname\the\kk\endcsname, \num}%
 \else%write record to \kk
  \advance\kk1\let\refer\word\ea\global
  \ea\let\csname\the\kk\endcsname\record
 \fi
\repeat\n=\kk}
%
\def\redrng{%Reduction of \1,...,\n, with
%range representation of page numbers
{\k1\kk0 \ifnum\n>0
\ea\let\ea\record\csname\the\k\endcsname
\ea\splitwn\record\let\refer\word
\let\nrsrng\empty\prcrng\num\fi
\loop\ifnum\k<\n\advance\k1
 \ea\let\ea\record\csname\the\k\endcsname
 \ea\splitwn\record%
 \ifx\refer\word%extend \nrsrng with number
   \prcrng\num
 \else%write record to \kk
   \advance\kk1 \strnrs
   \ea\xdef\csname\the\kk\endcsname{\refer{}
     \nrsrng.}\let\nrsrng\empty\init\num
     \prcrng\num\let\refer\word
 \fi
\repeat\ifnum1<\n
 \advance\kk1 \strnrs
 \ea\xdef\csname\the\kk\endcsname{\word{}
   \nrsrng.}
\global\n\kk\fi}}
%
\def\prcrng#1{\init{#1}\def\prcrng##1{%
\ifnum##1=\last\else\ifnum##1=\slast
 \last\slast\advance\slast1 \else
 \strnrs\init{##1}\fi\fi}}
%
\let\sepn\comma
\def\strnrs{\dif\last\advance\dif-\frst
\edef\nrsrng{\ifx\nrsrng\empty\else
   \nrsrng\nx\nx\nx\sepn\fi\the\frst\ifnum0<\dif
  \ifnum1=\dif\nx\nx\nx\sepn\the\last
  \else\nx\nx\nx\hyphen\the\last
  \fi
 \fi}}
%
\def\splitwn#1 !#2 #3.{\def\word{#1 !#2}%
\def\num{#3}}
%
\def\getdig#1 !#2 #3.{\def\dig{#2}}
%
\def\sortcs{\global\k0\global\pk\n
\global\pkone\pk\global\advance\pkone1
%Invariant: 1:k non-cs
%        pk+1:n control seq-s
\loop\global\advance\k1
\ifnum\k<\pkone
\ea\ea\ea\getdig\csname\the\k\endcsname.%
\if2\dig{\continuetrue
 \loop
  \ifnum\k=\pk\continuefalse
  \else\ea\ea\ea\getdig\csname\the\pk
                         \endcsname.%
   \if2\dig
   \else\xch\k\pk\continuefalse
   \fi
  \fi\global\pkone\pk\global\advance\pk-1
 \ifcontinue
 \repeat}%
\fi
\repeat}%Result\1:\pk non-cs, \pkone:\n cs
%;vrblin=500
%Parameters: Ordering table
%suffix g stands for grave, `
%       a stands for aigue, '
%       h stands for hat, ^
%       t stands for trema, "
%       c stands for cedille.
\ea\chardef\csname ot=\endcsname=12
\ea\chardef\csname ot/\endcsname=11
\ea\chardef\csname ot-\endcsname=13
\ea\chardef\csname ot,\endcsname=14
\ea\chardef\csname ot.\endcsname=15
\ea\chardef\csname ot"\endcsname=9
\ea\chardef\csname ot&\endcsname=5
\ea\chardef\csname ot'\endcsname=7
\ea\chardef\csname ot`\endcsname=8
\ea\chardef\csname ot*\endcsname=10
\ea\chardef\csname ot<\endcsname=28
\ea\chardef\csname ot>\endcsname=29
\ea\chardef\csname ot!\endcsname=30
\ea\chardef\csname ot?\endcsname=31
\ea\chardef\csname ot[\endcsname=13
\ea\chardef\csname ot]\endcsname=14
\ea\chardef\csname ot0\endcsname=16
\ea\chardef\csname ot1\endcsname=17
\ea\chardef\csname ot2\endcsname=18
\ea\chardef\csname ot3\endcsname=19
\ea\chardef\csname ot4\endcsname=20
\ea\chardef\csname ot5\endcsname=21
\ea\chardef\csname ot6\endcsname=22
\ea\chardef\csname ot7\endcsname=23
\ea\chardef\csname ot8\endcsname=24
\ea\chardef\csname ot9\endcsname=25
\chardef\ota=35 \chardef\otA=35
\chardef\otaa=35 \chardef\otag=35
\chardef\otat=35\chardef\otah=35
\chardef\otb=40 \chardef\otB=40
\chardef\otc=46 \chardef\otC=46
\chardef\otcc=46
\chardef\otd=53 \chardef\otD=53
\chardef\ote=60 \chardef\otE=60
\chardef\otea=60 \chardef\oteg=60
\chardef\otet=60 \chardef\oteh=60
\chardef\otf=67 \chardef\otF=67
\chardef\otg=74 \chardef\otG=74
\chardef\oth=81 \chardef\otH=81
\chardef\oti=88 \chardef\otI=88
\chardef\otit=88 \chardef\otih=88
\chardef\otj=95 \chardef\otJ=95
\chardef\otjt=95
\chardef\otk=102 \chardef\otK=102
\chardef\otl=109 \chardef\otL=109
\chardef\otm=116 \chardef\otM=116
\chardef\otn=123 \chardef\otN=123
\chardef\oto=130 \chardef\otO=130
\chardef\otoa=130 \chardef\otog=130
\chardef\otot=130 \chardef\otoh=130
\chardef\otp=137 \chardef\otP=137
\chardef\otq=143 \chardef\otQ=143
\chardef\otr=150 \chardef\otR=150
\chardef\ots=157 \chardef\otS=157
\chardef\ott=164 \chardef\otT=164
\chardef\otu=171 \chardef\otU=171
\chardef\otut=171 \chardef\otuh=171
\chardef\otv=178 \chardef\otV=178
\chardef\otw=185 \chardef\otW=185
\chardef\otx=192 \chardef\otX=192
\chardef\otij=199 \chardef\otIJ=199
\chardef\oty=200 \chardef\otY=200
\chardef\otz=206 \chardef\otZ=206
%\endinput%;nonum %[email protected]
%Contents sort.tex
%Counters (blue.tex).............5--19
%newifs ..(blue.tex)............20--23
%Storing
%from copy ...................101--108
%   \seq...\qes ...................102
%from file ...................110--117
%   \storefrom ...............112--117
%random generated items
%   \storerandomn ............124--125
%   \rnd .....................128--134
%   \storerandomw ............138--143
%   \randomword ..............145--149
%   \randomchar ..............152--161
%Typeset
%   parameters ................202-205
%   \prc .....................207--210
%   \init ....................212--213
%   \prtfl ...................216--218
%   \prts ....................221--225
%   \prtw .........................227
%   \prtn ....................229--232
%   \typeindentry.............234--240
%   \splitintoks..............244--245
%   \prtind ..................247--251
%Sorting
%   \sortn ........................302
%   \sortaw .......................304
%   \sortw ........................306
%   \sort .........................308
%   \accstr .......................311
%   \accdef ..................313--316
%   \ij ...........................318
%   \xch .....................321--327
%   \cmpn ....................330--335
%   \cmpw ....................338--341
%   \cmpaw ...................343--347
%   \cmpc ....................349--369
%   \lge .....................371--378
%   \nxtw ....................380--388
%   \loc .....................391--393
%   \nxtaw ...................396--401
%   \cmpir ...................403--407
%   \decom ...................409--420
%   \red .....................421--434
%   \redrng ..................436--457
%   \prcrng ..................459--462
%   \strnrs ..................465--471
%   \splitwn .................473--474
%   \getdig .......................476
%   \sortcs ..................478--497
%Ordering table ..............501--569
%History of changes
%Oct    1994 OT modified with respect to
%            Index sorting.
%            Sorting macros adapted and
%            extended.
%March  1994 Contents added to file sort.tex.
%Jan    1994 Macros released for CTAN.
%Spring 1993 Abridged version Sorting in BLUe
%       for TUG'93 (Aston) TB 14.3, 1993.
%Fall   1992 Release for MAPS 93.1.
%end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%sort%;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%heap%
%heapsort.tex                     Jan, 93
%\newcount\n\newcount\lc\newcount\r
%\newcount\ic\newcount\uone
%\newcount\jc\newcount\jj\newcount\jjone
%\newif\ifgoon
%Non-descending sorting
\def\heapsort{%data in \1 to \n
\r=\n\heap\ic=1{}%
{\loop\ifnum\r>1{}\xch\ic\r
  \advance\r-1{}\sift\ic\r
\repeat}}
%
\def\heap{%Transform \1..\n into heap
\lc=\n\divide\lc2{}\advance\lc1{}%
{\loop\ifnum\lc>1{}\advance\lc-1{}%
 \sift\lc\n\repeat}}
%
\def\sift#1#2{%#1, #2 counter variables
\jj=#1\uone=#2\advance\uone1{}\goontrue
{\loop\jc=\jj \advance\jj by\jj
 \ifnum\jj<\uone
  \jjone=\jj \advance\jjone1{}%
  \ifnum\jj<#2{}\cmpval\jj\jjone
        \ifnum2=\status\jj=\jjone\fi\fi
  \cmpval\jc\jj\ifnum2>\status\goonfalse\fi
\else\goonfalse\fi
\ifgoon\xch\jc\jj\repeat}}
%
\def\cmpval#1#2{%#1, #2 counter variables
%Result: \status= 0, 1, 2 if
%        \val{#1} =, >, < \val{#2}
\ea\let\ea\aone\csname\the#1\endcsname
\ea\let\ea\atwo\csname\the#2\endcsname
\cmp\aone\atwo}
%\endinput        %[email protected]
%end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%heap%;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%quick%
%quick.tex                        Jan 93
%\newcount\low\newcount\up\newcount\m
\def\quicksort{%Values given in
%\low,...,\up are sorted, non-descending.
%Parameters: \cmp, comparison.
\ifnum\low<\up\else\brk\fi
%\refval, a reference value selected at random.
\m=\up\advance\m-\low%Size-1 of array part
\ifnum10<\m\rnd\multiply\m\rndval
  \divide\m99{}\advance\m\low \xch\low\m
\fi
\ea\let\ea\refval\csname\the\low\endcsname
\m=\low\k=\low\let\refvalcop=\refval
{\loop\ifnum\k<\up\advance\k1{}%
  \ea\let\ea\oneqs\csname\the\k\endcsname
  \cmp\refval\oneqs\ifnum1=\status
     \global\advance\m1{}\xch\m\k\fi
  \let\refval=\refvalcop
 \repeat}\xch\low\m
{\up=\m\advance\up-1{}\quicksort}%
{\low=\m\advance\low1{}\quicksort}\krb}
%
\def\brk#1\krb{\fi}\def\krb{\relax}
%\endinput         %[email protected]
%end%%%%%%%%%%%%%%%%%%%%%%%%quick%;nonum!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%index%
%From BLUe's Index         Oct 94%;numvrb
\catcode`\@=11
%Some unused macros are left in.
%\newread\inxin
%\newtoks\indword
%\newtoks\indexfile
  %To parameterize the resulting index
%\newtoks\irfile
  %To parameterize the IRs
%\newtoks\indexname
%\newtoks\preindex
%\newtoks\postindex
%\newtoks\ignores
%\newtoks\conseqs
%\newtoks\consyms
%\newtoks\srtkeys
%\newtoks\srtkeypairs
%Initializations
\proofmodetrue
\irfile{index}
\indexfile{index.elm}
\preindex{\head{\the\indexname}}
\postindex{}
\immediate\openout\inx=index
\conseqs{\c\space\bf\it\rm\tt\sub\relax}
\consyms{\`\'\"\^\~}
\srtkeypairs{\AmSTeX{amstex}
            \LAMSTeX{lamstex}
            \LaTeX{latex}
            \PS{PostScript}
            \TeX{tex}}
\srtkeys{\AmSTeX\LAMSTeX\LaTeX\PS\TeX}
\let\sub\relax
%Macros
%
%User level
%;vrblin=100
\def\sortindex{%Nov 1994, cgl
%Purpose:
%To sort IR file.
%Input: default index is sorted
%      ( file specified in \irfile)
%Output: file index.elm.
  \newpage\immediate\closeout\inx
  \filetoarray{\the\irfile}
  \immediate\write16{Sorting n=\the\n.
     Please wait, O(nlog n) process.}
  \let\cmp\cmpir\let\nxtw\nxtwindex
  \otindex\let\ \space
  {%Make sortkey defs
   \ea\sokdef\the\srtkeypairs\fedkos\relax
   \sort
   \let\spaceseparator\space
   \setupnxtokens\def\ {\nx\ }%
   \immediate\write16{Range reduction.}
   \redrngtofile{index.srt}
   \immediate\write16{After reduction and
      writing to file index.srt; n=\the\n.}
   \immediate\write16{Transform
        index.srt-->index.elm.}
   \tawfiletofile{index.srt}{\the
                  \indexfile}}}
%
%Set up set of \srtkeys
\def\setupsrtkeys{\ea
\sok\the\srtkeypairs\kos\relax}
%;vrblin=150
\def\pasteupindex{%May 1995, cgl
%Purpose:
%To set index in (balanced) doublecolumn.
%The index is preceded by
%\chapterhead{\the\indexname}
%and by the contents of
%\preindex and followed by contents of
%\postindex.
%Input: default index.elm is set
%       (file specified in \indexfile).
%Biased by manmac's \begindoublecolumns
%\chapterhead{\the\indexname}%in preindex
\begingroup\def\space{{\tt\char32 }}%
\the\preindex\endgraf
\pageheight\vsize
\pagewd\hsize
\pagewidth\pagewd%anachronism
\parindent1em
\output={\global\setbox\partialpage=
 \vbox{\unvbox255\bigskip}}%
\eject
\output={\bluedoublecolumnout}%
% \hsize=8.5cm \vsize=51cm%blue.tex values
%2*\hsize+(\hfil)=\pagewd
\divide\hsize2  \advance\hsize-1cm
\advance\vsize\vsize \advance\vsize1cm
\parskip0pt plus.8pt\relax
\obeylines\everypar{%
   \hangindent2\parindent}%
\ea\let\csname par\endcsname\endgraf
\let\sub\endgraf
%
\input\the\indexfile\relax
%
%endpasteupindex part biased by
%manmac's \enddoublecolumns
\output={\balancecolumns}\eject
\endgroup
\pagegoal=\vsize\the\postindex}
%
%Add an element #1 to toks var #2
\def\add#1to#2{#2\ea{\the#2#1}}
%
%Inner level
%
%IR creation
%
\let\spaceseparator\space
%;vrblin=200
%Things are set up within \makexref to
%allow dynamical use.
\def\makexref{\ifproofmode%Mod cgl oct 94
\setupsrtkeys
\bgroup\def\ {\string\ }%
\def\process##1{\def##1{\string##1 }}%
 \ea\ea\ea\fifo\ea\the\ea\conseqs
               \the\srtkeys\ofif
\def\process##1{\def##1{\string##1}}%
\ea\fifo\the\consyms\ofif
\xdef\writeit{\write\inx{\text{}
   !\xreftype\spaceseparator
   \nx\number\pageno.}}\writeit
\egroup
\else\ifhmode\kern0pt\fi\fi
\ifsilent\ignorespaces\else{\next}\fi}
%
%Sorting
%;vrblin=250
\def\cmpir#1#2{%#1, #2 defs
%Result: \status= 0, 1, 2 if
%        \val{#1} =, >, < \val{#2}
%\immediate\write16{Compared are: *#1*
%                   and *#2*}%
\ea\ea\ea\decom\ea#1#2}
%
\def\nxtwindex#1#2{%
%Function:
%On input: #1 contains the `word'
%As result: #2 contains the value
%   of the first non-ignored token as given
%   in the ordering table.
%#1 contains the rest of the `word'
\def\pop##1##2\pop{%
\gdef#1{##2}\def\pophead{##1}}%head and tail
\ea\pop#1\pop%split in head and tail
\ignores\ea\ea\ea{\ea
 \the\ea\conseqs\the\consyms}%
\ea\loc\pophead{\the\ignores}%
\iffound\ifx\empty#1 \chardef#2=0
        \else\nxtwindex#1#2 \fi
\else
\ea\loc\pophead{\the\srtkeys}%
 \iffound\xdef\pophead{\pophead}%
   \ea\ea\ea\gdef\ea\ea\ea#1\ea\ea\ea
     {\ea\pophead#1}%
   \nxtwindex#1#2
 \else
 \ea\let\ea#2\csname ot\pophead\endcsname
 \fi
\fi}
%
\def\otindex{%Parameters: Ordering `table'
%Special cases
\ea\chardef\csname ot \endcsname=0
\ea\chardef\csname ot\space\endcsname=0
%{|}~(\char126) in ASCII after lowercase
%^ active character
%Bulk according to ACII
\def\process##1{\ea\chardef
  \csname ot##1\endcsname=`##1 }
%lowercase letters
\fifo abcdefghijklmnopqrstuvwxyz\ofif
\chardef\otij=`y \chardef\otIJ=`y
%other characters
\fifo !"##$&'()*+,-./0123456789:;<=>?@
     []_`\ofif
%uppercase letters equal lowercase
\def\process##1{\ea\chardef
 \csname ot##1\endcsname=\lccode`##1 }
\uppercase{\fifo
 abcdefghijklmnopqrstuvwxyz\ofif}
}
%
%Range reduction
%;vrblin=400
\def\redrngtofile#1{%Reduction of \1,...,\n,
%with range representation of page numbers
\immediate\openout\inx=#1
{\k1\kk0 \ifnum\n>0
\ea\ea\ea\splitwn\csname\the\k\endcsname
\let\refer\word
\let\nrsrng\empty\prcrng\num\fi
\loop\ifnum\k<\n\advance\k1
 \ea\ea\ea\splitwn\csname\the\k\endcsname
 \ifx\refer\word%extend \nrsrng with number
   \prcrng\num
 \else%write record to \kk
  \advance\kk1 \strnrs
  \immediate\write\inx{\refer\spaceseparator
     \nrsrng.}%
  \let\nrsrng\empty\init\num
  \prcrng\num\let\refer\word
 \fi
\repeat\ifnum1<\n
 \advance\kk1 \strnrs
 \immediate\write\inx{\refer\spaceseparator
   \nrsrng.}%
\global\n\kk\fi
}\immediate\closeout\inx}
%
%Copying
%;vrblin=500
\def\filetoarray#1{%#1 is file name
\immediate\openin\inxin=#1\relax
\ifeof\inxin\immediate\write16{File #1 empty
  or non-existent.}%
\fi \n\kzero\continuetrue
\loop\ifeof\inxin\continuefalse\fi
\ifcontinue\advance\n1 \immediate
\read\inxin t\ea o\csname\the\n\endcsname
%\immediate\write16{k: \number\n:
%     \csname\the\n\endcsname}%
\repeat\advance\n-1
\immediate\closein\inxin}
%
\def\tawfiletofile#1#2{\continuetrue
\immediate\openin\inxin=#1\relax
\immediate\openout\inx=#2\relax
\loop\read\inxin to\IR
  \ifeof\inxin\continuefalse\fi
\ifcontinue\trfandwrite\IR
\repeat
\immediate\closein\inxin
\immediate\closeout\inx
}
%
\def\setupnxtokens{%
\def\process##1{\def##1{\nx##1}}%
 \ea\ea\ea\fifo\ea\the\ea\conseqs
               \the\srtkeys\ofif
\def\process##1{\def##1{\string##1}}%
\ea\fifo\the\consyms\ofif
}
%
\def\trfandwrite#1{\ea\splitintoks#1%
\immediate\write\inx{\nx\noindent
 \ifcase\digit{\the\indword}\or
  {\nx\tt\the\indword}\or
  \nx\cs{\the\indword}\or
  $\nx\langle\hbox{\the\indword}\nx\rangle
   $\fi\spaceseparator{\nx
   \oldstyle\pagenrs}}}%Period deleted
%
\def\splitintoks#1 !#2 #3.{\indword{#1}%
 \chardef\digit=#2\relax\def\pagenrs{#3}}
%
%Typesetting;vrblin=600
\def\bluedoublecolumnout{%
%Biased by manmac's doublecolumnout
\splittopskip=\topskip
\splitmaxdepth=\maxdepth \dimen@\pageheight
\advance\dimen@ by-\ht\partialpage
\setbox0=\vsplit255 to\dimen@
\setbox2=\vsplit255 to\dimen@
\blueonepageout\pagesofar
\unvbox255 \penalty\outputpenalty}
%
\def\blueonepageout#1{%
%Biased by manmac's \onepageout
\shipout\vbox{%
\vbox to\baselineskip{\null
        \the\headline\vss}%
\kern2ex
\vbox to\pageheight{#1\vss}%
\kern1ex
\the\footline
}\advancepageno}
%
%Auxiliaries;vrblin=700
%SetOfKeys
\def\sok#1#2{%Function:
%Build from \srtkeykpairs \srtkeys
%via \ea\sok\srtkeypairs\kos\relax
\ifx#1\kos\kos\fi
 \srtkeys\ea{\the\srtkeys#1}\sok}
\def\kos#1\sok{\fi}
%
\def\sokdef#1#2{%Function:
%Build from \srtkeypairs srtkey defs
\ifx#1\fedkos\fedkos\fi
 \def#1{#2}\sokdef}
\def\fedkos#1\sokdef{\fi}
\endinput%;nonum
%Table of contents: blue.ind
%Variables
%   \indexname...........(blue.tex)
%   \preindex....................21
%   \postindex...................22
%   \indword.............(blue.tex)
%   \indexfile...........(blue.tex)
%   \irfile..............(blue.tex)
%   \conseqs.....................24
%   \consyms.....................25
%   \srtkeys.....................31
%   \srtkeypairs..............26-30
%   \ignores.............(blue.tex)
%User level macros
%   \sortindex..............101-125
%   \pasteupindex...........151-187
%   \add#1to#2..................190
%Lower level macros
%IR Creation
%   \makexref...............203-216
%Sorting
%   \cmpir..................251-256
%   \nxtwindex..............258-282
%   \otindex................284-304
%Range reduction
%   \redrngtofile...........401-424
%Copying
%   \filetoarray............501-512
%   \tawfiletofile..........514-523
%   \trfandwrite............533-540
%   \setupnxtokens..........525-531
%   \splitintoks............542-543
%OTR doublecolumns
%   \bluedoublecolumnout....601-609
%   \blueonepageout.........611-620
%Auxiliaries
%   \sok....................702-707
%   \sokdef.................709-713
%History of changes
%Nov    1994 Set up.
%end%%%%%%%%%%%%%%%%%%%index%;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%ntglogo%
\tool\ntglogotool           %;numvrb
\message{ ---ntglogo, Jan 95, cgl--- }
\font\calx=cmsy10 scaled \magstep4
\def\ntglogo{\vbox{%
 \hbox{{\calx N}ederlandstalige}
 \hbox{\hskip1em{\calx T}\kern-.2ex
       \raise-.5ex\hbox{E}\kern.1exX}
 \hbox{\hskip2em{\calx G}ebruikersgroep}}}
\setbox\ntglogobox\ntglogo
%end%%%%%%%%%%%%%%%%%%%ntglogo%!cgl;nonum
\endinput
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%ntginfo%
\tool\ntginfotool           %;numvrb
\message{ ---ntginfo, Jan 95, cgl--- }
\def\dropntglogo{\noindent
 \hangindent5\generalindent\hangafter-5
 \smash{\lower3.5\baselineskip
   \hbox to0pt{\hskip-.9\hangindent
   \copy\ntglogobox\hss}}}
\def\ntginfo{%
\dropntglogo is the Dutch-language-oriented
            \TeX{} \UG, founded in
            {\oldstyle1988}. The activities
            comprise two meetings per year,
            with the wealthy MAPS\Dash Minutes
            and APpendiceS\Dash
            sent out before each meeting.\\
The activities are biased by sharing experience
in using  \AllTeX, \MF, literate programming,
SGML, Adobe's \PS{} and PDF, next to
multi-media, in short, sharing knowledge about
Electronic Publishing, biased by \AllTeX.
The intricacies of the World-Wide-Web in
relation to using \AllTeX{} is also explored.
Less than {\oldstyle5}\% of our energy was
devoted to organizational matters in the past.
Apart from the regular MAPS we enjoy MAPS specials.
Up till {\oldstyle1994} NTG's PR set and David
Salomon's courseware\Dash
Advanced \TeX: Insights and Hindsights\Dash
have appeared in this series.
The {\oldstyle 1994} special has the title
{\oldstyle 100} FAQ: Everything you will ever
have to know about \AllTeX.\ftn{Courtesy Bobby Bodenheimer
  and ukTUG,
  Reprint Baskerville, {\oldstyle4}, {\oldstyle6}.}
\smallskip
Important activities, listed in historical
order, have been
\bigskip
{\generalindent5\generalindent
\item{\oldstyle1988\quad} NTG's discussion
     list and fileserver on the air
\item{\oldstyle1989\quad} NTG days, various
     courses have been offered since
\item{\oldstyle1990\quad} SGML-\TeX{} conference,
     Babel emerges
\item{\oldstyle1992\quad} Belgian commissioner
     for Flemish \AllTeX ies
\item{\oldstyle1993\quad} Goddijn's Bulletin Board
\item{\oldstyle1994\quad} 4All\TeX{} CD-ROM
     with turnkey-\TeX{} system
\item{\oldstyle1995\quad} Euro\TeX,
     BLUe's system emerges
\smallskip
}\bigskip
Close contacts have been maintained over the
years with the TUG\Dash \TUG\Dash and the
other LUGs\Dash Language-oriented \TUG s.
One can subscribe for a joint membership of
NTG and TUG.
\smallskip
The regular subscription fee for an individual
NTG membership is in the order of
{\it f}~{\oldstyle90} per year.
Students are granted a discount.
An institutional membership is possible.
\smallskip
Enquiries, casu quo a registration form,
can be obtained from
  NTG's secretary Postbus {\oldstyle394},
  {\oldstyle1740} AJ Schagen,
  [email protected].}
\endinput
%end%%%%%%%%%%%%%%%%%%%ntginfo%;nonum!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%smileys%
\tool\smileystool           %;numvrb
\message{ ---smileys, July 95, cgl--- }%
%Assumed \mfs etc. available
\def\eyes{{\x250\unitlength\y150\unitlength
          \putatxy}%l-eye
         {\x750\unitlength\y150\unitlength
          \putatxy}%r-eye
}%
\def\lefteyes{{\x200\unitlength\y150\unitlength
              \putatxy}%l-eye
             {\x700\unitlength\y150\unitlength
              \putatxy}%r-eye
}%
\def\squinteyes{{\x300\unitlength\y150\unitlength
               \putatxy}%l-eye
               {\x700\unitlength\y150\unitlength
               \putatxy}%r-eye
}%
\def\winkeye{\initialize
 {100}{150}{250}{75}{250}{75}{400}{150}%
 {\k0\kmax2\x0pt\y0pt\mfs}%l-winkeye
 {\x750\unitlength\y150\unitlength\putatxy}%r-eye
}%
\def\mouth{\initialize
 {250}{-250}{500}{-350}{500}{-350}{750}{-250}%
 \k0\x0pt\y0pt\mfs}
%
\def\sadmouth{\initialize
  {250}{-350}{500}{-250}{500}{-250}{750}{-350}%
  \k0\x0pt\y0pt\mfs}
%
\kmax5 %level
\setbox\smileybox=\hbox{\unitlength.01pt
 \initialize
 000{650}{1000}{650}{1000}0%
 \k0\putatxy\mfs
 \initialize
  000{-650}{1000}{-650}{1000}0%
 \k0\mfs\y0pt\x\X4\putatxy
 \kmax3
 \initialize
 {100}{200}{250}{250}{250}{250}{400}{200}%
 \k0\x0pt\y0pt\mfs%l-brow
 \initialize
 {600}{200}{750}{250}{750}{250}{900}{200}%
  \k0\x0pt\y0pt\mfs%r-brow
 {\x500\unitlength\y150\unitlength\S{250}}%Nose
}%
\endinput
%end%%%%%%%%%%%%%%%%%%%smileys%!cgl;newcol;nonum
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%toc%
\tool\toctool                    %;numvrb
\message{---(mini-)ToC,
        Sept 95, March 96 cgl---}
%March 96 writing to file is replaced by
%         maintaining \toksvar tocvar.
\let\bh\bluehead
\long\def\bluehead#1\par{\bh#1\par
\tocvar\ea{\the\tocvar\par#1}}
\let\bsh\bluesubhead
\long\def\bluesubhead#1\par{\bsh#1\par
\tocvar\ea{\the\tocvar\par\quad#1}}
\let\bssh\bluesubsubhead
\long\def\bluesubsubhead#1\par{\bssh#1\par
\tocvar\ea{\the\tocvar\par\qquad#1}}
\let\be\blueexample
\long\def\blueexample#1\par{\be#1\par
\tocvar\ea{\the\tocvar\par\qquad ex: #1}}
\long\def\pasteuptoc{\newcol
  \bluehead Contents\par
  \the\tocvar
  \let\makesignature\relax}
\endinput
%end**%%%%%%%%%%%%%%%%%%%%%%%toc%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%english%
\tool\englishtool            %;numvrb
\message{ ---English , Jan 95, cgl--- }
\abstractname{Abstract}
\acknowledgementsname{Acknowledgements}
\contentsname{Contents}
\indexname{Index}
\examplename{Example}
\keywordsname{Keywords}
\referencesname{References}
\endinput
%end%%%%%%%%%%%%%%%%%%%%english%;nonum
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%russian%
\tool\russiantool            %;numvrb
\message{ ---Russian , %Jan 95,
         not yet available, cgl--- }
%\abstractname{Abstract}
%\acknowledgementsname{Acknowledgements}
%\contentsname{Contents}
%\indexname{Index}
%\examplename{Example}
%\keywordsname{Keywords}
%\referencesname{References}
%end%%%%%%%%%%%%%%%%%%%%russian%;nonum
\endinput                 %!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%%%xyz%
\tool\xyztool              %;numvrb
\def\xyz#1#2#3{\leavevmode%
\message{ ---xyz, jan 95, cgl--- }%
  \setbox0\vbox{\hbox{/}\kern0pt}%
  \lower2.65\ht0\hbox{\copy0%
            \rlap{\qquad#1}}%
  \kern-.185\ht0\lower1.8\ht0\copy0%
  \kern-.185\ht0\lower0.95\ht0\copy0%
  \kern-.11\ht0%
  \vrule height9ex depth0pt\relax%
  \raise7ex\rlap{\qquad#3}%
  \vrule height.1pt depth.1pt width 8ex%
  \qquad\lower.6ex\hbox{#2}}%
\endinput                   %;nonum
%end%%%%%%%%%%%%%%%%%%%%%xyz%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%partlogo%
\tool\partlogotool      %;numvrb
%from TeX book
\def\partlogo#1{\goodbreak
   \bigskip\noindent
  \vbox{\line{\hrulefill}%
     \kern-.5\baselineskip
\line{\hrulefill{ \phantom{\bf #1}} %
           \hrulefill}%
     \kern-.5\baselineskip
     \line{\hrulefill{ \bf #1}
            \hrulefill}%
     \kern-.5\baselineskip
     \line{\hrulefill}%
}\nobreak\smallskip\noindent}
\endinput                  %;nonum
%end%%%%%%%%%%%%%%%%%%%%%partlogo%!cgl;newcol
%
%
%
%begin%%%%%%%%%%%%%%%%%%%%%%%pascal%
\tool\pascaltool
\message{ ---pascaltool, Jan, Aug 95, cgl--- }
%C.G. van der Laan, Jan, Oct 95.%;numvrb
%Processing (first set of macros)
%\let\beginpascal\fifol
\def\lofif#1\fifol{\fi
  \the\postpascal\endgroup}
\let\endpascal\lofif
\def\lf{x}%toggle for last font to insert \/
\def\processw#1{%
\ifnum\commentstatus>0
 \if p\lf\leavevmode\/\fi#1\def\lf{c}\else
 \ifx\relax#1\relax{ }%space
 \else\foundfalse
  \loc{ #1 }{\the\reservedset}%
   \iffound{\if p\lf\leavevmode\/\fi
     \reservedwordsfont#1}\def\lf{r}%
   \else\if=#1${}={}$\else
    {\pascalprogramfont#1{}}\def\lf{p}\fi\fi
\fi\fi}%end processw;vrblin50
%for the rest of listing use
%another escape char;endinput
%Typesetting : ;= ; . ^
\def\becomes{:=}
\catcode`\:=\active
\def:#1{\if=#1${}\becomes{}$\else
             {\rm\char`\:}#1\fi}
\catcode`\;=\active
    \def;{{\/\rm\char`\;}}
\catcode`\.=\active \def.{{\pascalprogramfont
                     \char`\.}}
\catcode`\^=\active \def^{\char'\active6}
   %\def^{{\enspace$\uparrow$}}
\catcode`\[=\active \catcode`\]=\active
   \def[{{\rm \char`\[}}
   \def]{{\rm\/\char`\]}}
\def\leftbrace{(}
\catcode`\(=\active \catcode`\*=\active
\def(#1{\ifx*#1$\{\,$\global
  \advance\commentstatus1
  \pascalcommentfont
  \else\leftbrace#1\fi}
%Reserved words       ;vrblin100
\reservedset{ and array begin case const
div do downto else end. end; file for
function goto if in label mod nil not of
or otherwise packed procedure program record
repeat set step string then to type until
var while with}%
%Handling of >= <= <> > <  ;vrblin150
\def\lt{<}\def\gt{>}
\catcode`\>=\active
\def>#1{\if=#1${}\geq{}$\else
             ${}\gt{}$#1\fi}
\catcode`\<=\active
\def<#1{\ifx>#1${}\ne{}$\else
       \if=#1${}\leq{}$\else
       ${}\lt{}$#1\fi\fi}
%Handling of + - *          ;vrblin200
\def\-{-}%Save for hyphen use
\def\plus{+}\def\minus{-}
\catcode`\+=\active \def+{${}\plus{}$}
\def*#1{\if)#1$\,\}$\global
  \advance\commentstatus-1
  \else${}\times{}$#1\fi}
%{\catcode`\-=\active \gdef-{${}\minus{}$}}
%Later catcode is set for minus
%Last part of processing    ;vrblin250
\obeyspaces\let =\
\def\fifow#1 {\ifx
\wofif#1\wofif\fi\processw{#1}\ \fifow}%
\def\processl#1{\fifow#1 \wofif
\endgraf}%First space is needed
%                           ;vrblin300
\let\zero0 \catcode`\0=\active\def0{{\rm\zero}}
\let\one1  \catcode`\1=\active\def1{{\rm\one}}
\let\two2  \catcode`\2=\active\def2{{\rm\two}}
\let\three3\catcode`\3=\active\def3{{\rm\three}}
\let\four4 \catcode`\4=\active\def4{{\rm\four}}
\let\five5 \catcode`\5=\active\def5{{\rm\five}}
\let\six6  \catcode`\6=\active\def6{{\rm\six}}
\let\seven7\catcode`\7=\active\def7{{\rm\seven}}
\let\eight8\catcode`\8=\active\def8{{\rm\eight}}
\let\nine9 \catcode`\9=\active\def9{{\rm\nine}}
\catcode`\-=\active \def-{${}\minus{}$}%
\obeylines\smallskip%
\the\prepascal\relax%;nonum
\endinput%[email protected]
%
%
%
%Contents Pascal
%   \beginpascal
%   \lofif
%   \endpascal
%   \processw
%Typesetting : := ;semicol . ^
%   \becomes
%   :
%   ;
%   .
%   ^
%Reserved words
%Handling of >= <= <> > <
%   \lt
%   \gt
%   >
%   <
%Handling of + - *
%   -
%  \plus
%  \minus
%  \times
%  +
%  *
%  -
%Last part of processing
%  \fifow#
%   \processl
%Keeping track of comments, and
%using comment fonts
%  {, }
%  [, ]
%  \commentstatus
%  \pascalcommentfont
%  \prepascal
%
%Use of the above file via
%\input pascal.tex
%\beginpascal
%(*Print length of third side of
% triangle given two sides and
% enclosed angle*)
%program EX4A(input, output);
%var a, b, c angle : real;
%begin read(a, b, angle);
%   c:=sqrt(sqr(a)+sqr(b)-
%                2*a*b*cos(angle));
%   writeln(`The third side is', c)
%end.
%\endpascal
%\beginpascal
%(*heap creation*)
%l := n div 2 + 1;
%while l <> 1 do
%begin l := l-1; sift(a, l, n) end;
%(*sorting*)
%r := n;
%while r <> 1 do
%begin swap(a[1], a[r]);
%      r := r-1; sift(a, 1, r)
%end;
%(*sift arg1 through arg2*)
%j:= arg1;
%while 2j >= arg2 and
%      (a[j] < a[2j] or a[j] < a[2j+1])
%do begin mi := 2j + if a[2j] > a[2j+1]
%                    then 0
%                    else 1;
%    exchange(a[j], a[mi]); j := mi
%end.
%\endpascal
%\bye
%Together with blue.tex and tools.dat
%replace
%\input pascal.tex
%by
%\input blue.tex
%End pascal.tex
%
%
%History of changes
%Jan 95 Designed
%end%%%%%%%%%%%%%%%%%%%%pascal%!cgl;newcol
%
%
%
\tool\efg
phoney tool, for test purpose
\endinput%end \efg