% 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