% 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 18.3.13, p. III-45.
% Original source in file "tokens1.TEX", starting line 2639.
\wlog{L: "verbdisp.tip" ["tokens1.TEX," l. 2639, p. III-45]}%
% This file DOES belong to format "texip."
\InputD{everypar.tip}
\InputD{futpar.tip}
\InputD{parin.tip}
\InputD{verb-bas.tip}
\InputD{testdef.tip}
\InputD{gobble.tip}
\InputD{loadedla.tip}
\newdimen\LeftSkipVerbatim
\LeftSkipVerbatim = 0.3in
\def\VerbatimFont{\tt}
\newcount\VerbatimTab
\VerbatimTab = 8
\newif\ifVerbLineNum
\VerbLineNumtrue
\newskip\DisplayVerbatimVskip
\DisplayVerbatimVskip = 0pt plus 2pt minus 1pt
\newif\ifCaretTab
\CaretTabfalse
\newtoks\VerbatimTokBegin   \VerbatimTokBegin = {}
\newtoks\VerbatimTokLine    \VerbatimTokLine = {}
\newtoks\VerbatimTokEnd     \VerbatimTokEnd = {}
\catcode`\@ = 11
\newdimen\@VerbatimLr
\@VerbatimLr = 1.5pt
\newif\if@IgnoreFirstNewLine
\if\FormatIsLaTeXConditional
   \def\@VerbatimPar{\par\@@par}%
   \def\@VerbatimNlf{\tiny}%
\else
   \def\@VerbatimPar{\par}%
   \def\@VerbatimNlf{\tiny}%
\fi
\newcount\@VerbatimLineNumber
\newif\if@VerbatimL
\newdimen\Verb@TabSize
\def\@VObeySpaces{%
   \MakeActive{\ }%
   \@@VObeySpaces
}
{%
\MakeActive{\ }%
\gdef\@@VObeySpaces{%
\def {\VerbControlSpace}%
}%
}
\def\@VObeyTabs{%
   \MakeTabActive
   \@@VObeyTabs
}
{
   \MakeTabActive
   \gdef\@@VObeyTabs{%
       \def^^I{\Verb@Tab}%
   }
}
\def\Verb@Tab{%
   \leavevmode
   \egroup
   \dimen0 = \wd0
   \divide\dimen0 by \Verb@TabSize
   \advance\dimen0 by 1sp
   \multiply\dimen0 by \Verb@TabSize
   \wd0 = \dimen0
   \box0
   \setbox 0 = \hbox\bgroup
}
\def\@VObeyEol{%
   \MakeEolActive %
   \@@VObeyEol
}
{
   \MakeEolActive %
   \gdef\@@VObeyEol{%
       \let^^M = \Verb@Eol%
   }%
}
\def\Verb@Eol{%
   \if@IgnoreFirstNewLine
   \else
       \leavevmode
       \egroup
       \box 0
       \endgraf
   \fi
   \@IgnoreFirstNewLinefalse
}
\def\@VCaret{%
   \MakeActive{\^}%
   \@@VCaret
}
{
   \MakeActive{\^}%
   \gdef\@@VCaret{%
       \def^{%
           \futurelet\@VSymbol\@@VCaretTwo
       }%
       \def\@@VCaretTwo{%
           \ifx \@VSymbol^%
               \let\@VerbNext = \@@VCaretThree
           \else
               \CaretText
               \let\@VerbNext = \relax
           \fi
           \@VerbNext
       }%
       \def\@@VCaretThree ^{%
           \futurelet\@VSymbol\@@VCaretFour
       }%
       \def\@@VCaretFour{%
           \ifx \@VSymbol I%
               \Verb@Tab
           \else
               \CaretText\CaretText\@VSymbol
           \fi
           \GobbleOne
       }%
   }%
}
\def\@StartVerbatim #1{%
   \begingroup
   \@VerbatimPar
   \vskip\DisplayVerbatimVskip
   \if\FormatIsLaTeXConditional
   \else
       \CancelSuppressNextParIndent
   \fi
   \setbox0 = \hbox{\VerbatimFont X}
   \Verb@TabSize = \wd0
   \multiply\Verb@TabSize by \VerbatimTab
   \parskip = 0pt
   \parindent = 0pt
   \leftskip = \LeftSkipVerbatim
   \rightskip = 0pt
   \parfillskip = 0pt plus 1fil
   \spaceskip = 0pt
   \xspaceskip = 0pt
   \VerbatimFont
   \if@VerbatimL
   \else
       \global\@VerbatimLineNumber = 0
   \fi
   \global\@VerbatimLfalse
   \ifnum #1 = 0
       \@IgnoreFirstNewLinetrue
   \else
       \@IgnoreFirstNewLinefalse
   \fi
   \if\FormatIsLaTeXConditional
       \everypar = {\EveryParZ}%
   \fi
   \def\EveryParZ{%
       \the\VerbatimTokLine
       \global\advance\@VerbatimLineNumber by 1
       \ifVerbLineNum
           \raise \@VerbatimLr \hbox to 0pt{%
               \hss
               \@VerbatimNlf
               \the\@VerbatimLineNumber
               \hskip 10pt
           }%
       \fi
       \setbox 0 = \hbox\bgroup
   }%
   \MkOthers
   \@VObeySpaces
   \@VObeyTabs
   \@VObeyEol
   \ifCaretTab
       \@VCaret
   \fi
}
\def\@DoneVerbatim{%
   \endgroup
   \vskip\DisplayVerbatimVskip
   \def\@VerbatimEndSpecialDeal{}%
   \if\FormatIsLaTeXConditional
   \else
       \def\@VerbatimEndSpecialDeal{%
           \ParLookAhead
               {\SuppressNextParIndent}%
               {}
       }%
   \fi
   \@VerbatimEndSpecialDeal
}
\def\BeginVerbatim{%
   \@StartVerbatim{0}%
   \@BeginVerbatim
}
{   \catcode `| = 0 % | becomes escape character.
   \catcode`\\ =12 % \ becomes regular character.
   |gdef|@BeginVerbatim #1\EndVerbatim{%
       #1%
       |@DoneVerbatim
   }
}
\def\BVerB{%
   \@StartVerbatim{0}%
   \@BVerB
}
{
   \catcode `| = 0 % | becomes escape character.
   \catcode`\\ =12 % \ becomes regular character.
   |gdef|@BVerB #1\EVerB{%
       #1%
       |@DoneVerbatim
   }
}
\def\AppendVerbatimL #1{%
   \global\@VerbatimLtrue
   \global\advance\@VerbatimLineNumber by #1\relax
}
\def\StartVerbatimL #1{%
   \global\@VerbatimLtrue
   \global\@VerbatimLineNumber = #1\relax
}
\newcount\@SaveVerbatimLineNumber
\def\PushVerbatimL{%
   \global\@SaveVerbatimLineNumber = \@VerbatimLineNumber
   \global\VerbLineNumfalse
}
\def\PopVerbatimL{%
   \global\@VerbatimLineNumber = \@SaveVerbatimLineNumber
   \global\VerbLineNumtrue
}
\catcode`\@ = 12