% This is MLTEXTST.TEX (Version 1.2) in text format, as of Dec 07, 1995.
% Test file to check MLTeX implementations.
%
% Copyright (C) 1995 by B.Raichle; all rights are reserved.
%
% Usage:
%
%   Run iniTeX on this file.  Do not try to use plain-TeX or LaTeX.
%   Needs the font metric files:  cmr10.tfm, cmti10.tfm
%
%
% Changes:
%
%  95/12/05 v1.0
%           - initial version
%  95/12/06 v1.1
%           - don't show tracing output
%           - \nonstopmode and additional test for bug 2.
%  95/12/07 v1.2
%           - added MLTeX version numbers (and release dates)
%           - added test for MLTeX version 2.2
%
%
% History of MLTeX for TeX 3.x:
%
%  90/04/02 Version ??   (for TeX 3.0)
%           \charsublist, \charsublistmax
%  ??/??/?? Version 1.0
%  92/02/03 Version 2    (for TeX 3.1--3.141)
%           |effective_char| uses explicit font information
%  93/10/29 Version 2.01
%           fix \*leaders problem
%  95/12/06 Version 2.2  (for TeX 3.14159)
%           fix font loading bug
%           fix invalid |font_info| access
%  in work  Version 3.0
%           complete re-implementation
%
%
\catcode`\{=1 \catcode`\}=2 \catcode`\#=6
%
\immediate\write16{}
\immediate\write16{Test for bugs in MLTeX (1995/12/07 v1.2 [br])}
\immediate\write16{}
%
% check for plain-TeX:
% we have to ensure that _no_ fonts are preloaded
\expandafter\ifx\csname active\endcsname\relax \else
  \message{Please (Ini)TeX this file, no plain-TeX, no LaTeX!}
  \expandafter\endinput\expandafter\end\fi
% check for MLTeX
\expandafter\ifx\csname charsubdef\endcsname\relax
  \message{This test file can only be used with MLTeX!}
  \expandafter\endinput\fi
%
\nonstopmode
%%%\tracingonline=1 \tracingoutput=1 \showboxbreadth=255
%%%\tracinglostchars=100 \tracingcharsubdef=1
\hsize=5in
%
%
% 1. Check for bug accessing the wrong character metrics:
%    (in versions before Feb 1992)
%
\font\tenrm=cmr10\relax
%
% The group is only necessary, if you want to use this
% test in your own macros.  \charsubdefmax is saved
% explicitly for very old versions of MLTeX which have
% an additional bug when assigning this special integer.
\begingroup
  \count255=\charsubdefmax
  \charsubdefmax=256 % enable all substitutions
  % very old versions of MLTeX will
  \charsubdef`\i=1 `\M % substitute "i" by "M"
  \setbox0=\hbox{\tenrm i}% <-- here
  \dimen0=\wd0 % get width of box (either "i" or "M")
  % get width of "i"
  \charsubdefmax=-1 % disable all substitutions
  \setbox0=\hbox{\tenrm i}%
  \dimen2=\wd0 % get width of box
  % restore former value of \charsubdefmax
  \charsubdefmax=\count255
\expandafter\endgroup
\ifdim\dimen0=\dimen2\relax
  \immediate\write16{..... Ok, this is a newer MLTeX version (>= 2.0).}
  \immediate\write16{}
\else
  \immediate\write16{%
..... This is a very old version of MLTeX < 2.0 (released before Feb. 1992)}
  \immediate\write16{%
..... immediately update to the newest MLTeX version!}
  \immediate\write16{}
  \expandafter\endinput\expandafter\end
\fi
%
%
% 2. Check for font loading bug:
%    (in versions before Dec 1995)
%
%    - Define a \charsubdef of an existing character with
%      a non-existing base character
%
\charsubdef `A=`a 128
%%%\message{now: \string\charsubdefmax=\number\charsubdefmax}
%
%    - now load font  (do not preload this font!!!!!!)
%
\immediate\write16{}
\immediate\write16{..... If there will be an error "Bad metric (TFM) file",}
\immediate\write16{..... please update to the newest MLTeX version!}
\immediate\write16{}
\font\test=cmti10\relax
\begingroup
  \setbox0=\hbox{\test A}
\expandafter\endgroup
\ifdim\wd0>0pt\relax \else
  \immediate\write16{}
  \immediate\write16{%
..... This seems to be MLTeX version 2.0 or 2.01 (released before Dec. 1995)}
  \immediate\write16{%
..... this version has bugs,}
  \immediate\write16{%
..... please update to the newest MLTeX version!}
  \immediate\write16{}
  \expandafter\endinput\expandafter\end
\fi
\immediate\write16{..... Good, no "Bad metric (TFM) file" bug,}
\immediate\write16{..... seems to be the a MLTeX version > 2.01.}
%
%
% 3. Check for invalid |font_info| access:
%
\immediate\write16{}
\font\tenrm=cmr10\relax
%
\setbox0=\hbox{\tenrm \char`a}\dimen1=\wd0
\setbox0=\hbox{\tenrm \char`M}\dimen3=\wd0
\setbox0=\hbox{\tenrm \char0}\dimen5=\wd0
%
\charsubdef 128=`a `a
\setbox0=\hbox{\tenrm \char128}
\dimen0=\wd0 % get width of `a
%
% Now the \charsubdef is changed using
% an existing base character:
\charsubdef 128=`a `M
\setbox0=\hbox{\unhbox0}
\dimen2=\wd0 % get width of `a or `M
%
% And then we remove it.  MLTeX will try to access the 128th
% entry in the |char_base| array, which is the first entry in
% the width index array.
% For MLTeX 2.2 this was "fixed", now it will report a warning
% "Missing char... no substitution for ..." and MLTeX will use
% the first character of the font.
\charsubdefmax=-1
\setbox0=\hbox{\unhbox0}%
\dimen4=\wd0
%
%%%\message{\the\dimen0-\the\dimen1-\the\dimen2-\the\dimen3-%
%%%  \the\dimen4-\the\dimen5-}
%
\def\x#1\fi\fi{\fi\fi#1}
\ifdim\dimen0=\dimen2\relax \ifdim\dimen0=\dimen4\relax
  \immediate\write16{}
  \immediate\write16{%
...... Seems to be MLTeX version 3.x (unreleased),}
  \immediate\write16{%
...... from whom did you get this version? :-)}
  \immediate\write16{}
  \immediate\write16{%
Congratulations, you have the best MLTeX version!}
  \immediate\write16{}
  \x{\endinput\csname end\endcsname}%
\fi\fi
%
\def\x#1\fi{\fi#1}
\ifdim\dimen4=\dimen5\relax \else
  \immediate\write16{}
  \immediate\write16{%
..... Seems to be MLTeX version 2.0 or 2.01 (released before Dec. 1995)}
  \immediate\write16{%
..... this version has bugs,}
  \immediate\write16{%
..... please update to the newest MLTeX version!}
  \immediate\write16{}
  \expandafter\endinput\expandafter\end
\fi
%
\immediate\write16{}
\immediate\write16{%
...... Seems to be MLTeX version 2.2 (released Dec. 1995).}
\immediate\write16{}
\immediate\write16{%
Congratulations, you have a MLTeX version with all known bugs fixed.}
\immediate\write16{}
\end
%
%%% END OF FILE %%%
