% This macro source file is from the four volume series
% "TeX in Practice" by Stephan von Bechtolsheim, published
% 1993 by Springer-Verlag, New York.
% Copyright 1993 Stephan von Bechtolsheim.
% No warranty or liability is assumed.
% This macro may be copied freely if no fees other than
% media cost or shipping charges are charged and as long
% as this copyright and the following source code itself
% is not changed. Please see the series for further information.
%
% Version: 1.0
% Date: May 1, 1993
%
%
% This source code is documented in 27.3.2, p. III-424.
% Original source in file "macros7.TEX", starting line 1362.
\wlog{L: "boxrqu.tip" ["macros7.TEX," l. 1362, p. III-424]}%
% This file DOES belong to format "texip."
\InputD{namedef.tip}
\InputD{doloop.tip}
\InputD{newoutfr.tip}
\InputD{mspaces.tip}
\catcode`\@ = 11
\newcount\@BoxRQStart
\newcount\@BoxRQEnd
\newcount\@BoxRQLength
\newcount\@BoxRQCount
\newcount\@BoxRQLast
\newcount\@BoxRQFirst
\def\@LoadBRQCounters #1{%
   \if\NameDefinedConditional{@BoxRQ-Start-#1}%
       \@BoxRQStart = \NameUse{@BoxRQ-Start-#1}%
       \@BoxRQEnd   = \NameUse{@BoxRQ-End-#1}%
       \@BoxRQLength= \NameUse{@BoxRQ-Length-#1}%
       \@BoxRQCount = \NameUse{@BoxRQ-Count-#1}%
       \@BoxRQLast  = \NameUse{@BoxRQ-Last-#1}%
       \@BoxRQFirst = \NameUse{@BoxRQ-First-#1}%
   \else
       \errmessage{\string\@LoadBRQCounters: no queue "#1".}%
   \fi
}
\def\@RestoreBRQCounters #1{%
   \NameXdef{@BoxRQ-Start-#1}{\the\@BoxRQStart}%
   \NameXdef{@BoxRQ-End-#1}{\the\@BoxRQEnd}%
   \NameXdef{@BoxRQ-Length-#1}{\the\@BoxRQLength}%
   \NameXdef{@BoxRQ-Count-#1}{\the\@BoxRQCount}%
   \NameXdef{@BoxRQ-Last-#1}{\the\@BoxRQLast}%
   \NameXdef{@BoxRQ-First-#1}{\the\@BoxRQFirst}%
}
\newcount\@BoxRQTempA           \newcount\@BoxRQTempB
\def\SetUpBoxRegisterQueue #1#2{%
   \@BoxRQStart = \count14
   \advance\@BoxRQStart by 1
   \@BoxRQTempA = \@BoxRQStart
   \DoLoop{\@BoxRQTempB}{1}{1}{#2}%
       {\newboxOF\@WhoCaresBoxRegisterIndexA
       \advance\@BoxRQTempA by 1 }
   \advance\@BoxRQTempA by -1
   \@BoxRQEnd = \@BoxRQTempA
   \wlog{\string\SetUpBoxRegisterQueue: queue "#1."}%
   \wlog{\EightSpaces Box registers
       \the\@BoxRQStart\space through
       \the\@BoxRQEnd\space allocated.}%
   \wlog{\EightSpaces (#2 registers).}%
   \@BoxRQCount = 0
   \@BoxRQLength = #2
   \@RestoreBRQCounters{#1}%
}
\def\AddBoxToQueue #1#2{%
   \@LoadBRQCounters{#1}%
   \wlog{\string\AddBoxToQueue: length: \the\@BoxRQLength,
       count: \the\@BoxRQCount}%
   \ifnum\@BoxRQCount  = \@BoxRQLength
       \errmessage{\string\AddBoxToQueue: Queue "#1" is full.}%
   \else
       \ifnum\@BoxRQCount = 0
           \@BoxRQLast  = \@BoxRQStart
           \@BoxRQFirst = \@BoxRQStart
       \fi
       \global\setbox\@BoxRQLast = #2%
       \advance\@BoxRQLast by 1
       \ifnum\@BoxRQLast > \@BoxRQEnd
           \@BoxRQLast = \@BoxRQStart
       \fi
       \advance\@BoxRQCount by 1
       \@RestoreBRQCounters{#1}%
   \fi
}
\def\CopyFirstElementFromQueue #1#2{%
   \@LoadBRQCounters{#1}%
   \ifnum\@BoxRQCount = 0
       \errmessage{\string\CopyFirstElementFromQueue: empty "#1"}%
   \else
       \setbox #2 = \copy\@BoxRQFirst
   \fi
}
\def\DropFirstBoxOfQueue #1{%
   \@LoadBRQCounters{#1}%
   \ifnum\@BoxRQCount = 0
       \errmessage{\string\DropFirstBoxOfQueue: "#1" is empty.}%
   \else
       \advance\@BoxRQCount by -1
       \ifnum\@BoxRQCount = 0
       \else
           \advance\@BoxRQFirst by 1
           \ifnum\@BoxRQFirst > \@BoxRQEnd
               \@BoxRQFirst = \@BoxRQStart
           \fi
       \fi
   \fi
   \@RestoreBRQCounters{#1}%
}
\def\EmptyBoxRegisterQueueConditional #1{%
   TT\fi
   \@LoadBRQCounters{#1}%
   \ifnum\@BoxRQCount = 0
}
\catcode`\@ = 12