summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/base/ltdirchk.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/base/ltdirchk.dtx')
-rw-r--r--Master/texmf-dist/source/latex/base/ltdirchk.dtx911
1 files changed, 911 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/base/ltdirchk.dtx b/Master/texmf-dist/source/latex/base/ltdirchk.dtx
new file mode 100644
index 00000000000..ce899b0d361
--- /dev/null
+++ b/Master/texmf-dist/source/latex/base/ltdirchk.dtx
@@ -0,0 +1,911 @@
+% \iffalse meta-comment
+%
+% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the LaTeX base system.
+% -------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2003/12/01 or later.
+%
+% This file has the LPPL maintenance status "maintained".
+%
+% The list of all files belonging to the LaTeX base distribution is
+% given in the file `manifest.txt'. See also `legal.txt' for additional
+% information.
+%
+% The list of derived (unpacked) files belonging to the distribution
+% and covered by LPPL is defined by the unpacking scripts (with
+% extension .ins) which are part of the distribution.
+%
+% \fi
+%
+% \ProvidesFile{ltdirchk.dtx}
+% [2001/06/04 v1.0y LaTeX Kernel (System Dependent Parts)]
+%
+% \iffalse
+%%% From File: ltdirchk.dtx
+%
+%<*unstripped>
+\ifx\documentclass\undefined\let\next\relax\else\def\next{%
+%</unstripped>
+%<*driver>
+% \fi
+\ProvidesFile{ltdirchk.dtx}
+ [2001/06/04 v1.0y LaTeX Kernel (System Dependent Parts)]
+% \iffalse
+\documentclass{ltxdoc}
+\GetFileInfo{ltdirchk.dtx}
+\title{\filename\thanks{%
+ this document also includes the source for
+ texsys.cfg and ltxcheck.tex}}
+\author{David Carlisle}
+\date{\filedate}
+\begin{document}
+ \maketitle
+ \DocInput{\filename}
+\end{document}
+%</driver>
+%<*unstripped>
+}\fi\next
+%</unstripped>
+% \fi
+%
+% \changes{v0.2j}{1994/02/25}
+% {Remove need for drv file}
+% \changes{v0.2k}{1994/03/01}
+% {Add unstripped module,
+% so that dircheck.dtx may be used with initex}
+% \changes{v1.0a}{1994/03/08}
+% {Reorganise driver module into `new style'}
+% \changes{v1.0b}{1994/03/12}
+% {Change name from dircheck.dtx}
+% \changes{v1.0b}{1994/03/12}
+% {Minor edits to the typeouts in ltxcheck}
+% \changes{v1.0d}{1994/03/28}
+% {Improve documentation}
+% \changes{v1.0i}{1994/11/03}
+% {Generate an error if latex.ltx not used with clean initex}
+% \changes{v1.0j}{1994/11/17}
+% {\cs{@tempa} to \cs{reserved@a}}
+% \changes{v1.0r}{1996/06/13}
+% {documentation improvements mainly from internal/2174}
+% \changes{v1.0v}{1997/06/16}
+% {documentation improvements mainly from internal/2520}
+% \changes{v1.0w}{1998/08/17}{(RmS) Documentation improvements.}
+%
+% \CheckSum{595}
+%
+% \section{\LaTeX\ System Dependent Initialisations}
+%
+% \changes{v0.2g}{1994/01/21}
+% {Improve documentation, reorganise docstrip module}
+%
+% This file implements the semi-automatic determination of various
+% system dependent parts of the initialisation. The actual definitions
+% may be placed in a file |texsys.cfg|. Thus for operating systems for
+% which the tests here do not result in acceptable settings, a `hand
+% written' |texsys.cfg| may be produced.
+%
+% The macros that must be defined are:
+%
+% \DescribeMacro{\@currdir}
+% |\@currdir|\meta{filename}\meta{space} should expand to a form of the
+% filename that uniquely refers to the `current directory' if this is
+% possible. (The expansion should also end with a space.) on UNIX,
+% this is |\def\@currdir{./}|. For more exotic operating systems you may
+% want to make |\@currdir| a macro with arguments delimited by |.|
+% and/or \meta{space}. If the operating system has no concept of
+% directory structure, this macro should be defined to be empty.
+%
+%
+% \DescribeMacro{\input@path}
+% If the primitive |\openin| searches the same directories as the
+% primitive |\input|, then it is possible to tell (using |\ifeof|)
+% whether a file exists before trying to input it. For systems like
+% this, |\input@path| should be left undefined.
+%
+% If |\openin| does not `follow' |\input| then |\input@path| must be
+% defined to be a list of directories to search for input files. The
+% format for each directory is as for |\@currdir|, normally just a
+% prefix is required, but it may be a macro with space-delimited
+% argument. That is, if \meta{dir} is an entry in the input path,
+% \TeX\ will try to load the expansion of
+% \meta{dir}\meta{filename}\meta{space}
+%
+% So either \meta{dir} should be defined as a macro with argument
+% delimited by space, or it should just expand to a directory name,
+% including the final directory separator, so that it may be
+% concatenated with the \meta{filename}. This means that for UNIX-like
+% syntax, each \meta{dir} should end with a slash, |/|.
+%
+% |\input@path| should expand to a list of such directories, each in a
+% |{}| group.
+%
+% \DescribeMacro{\filename@parse}
+% After a call of the form: |\filename@parse{|\meta{filename}|}|, the
+% three macros |\filename@area|,|\filename@base|,|\filename@ext| should
+% be defined to be the `area' (or directory), basename and
+% extension respectively. If there was no extension specified in
+% \meta{filename}, |\filename@ext| should be |\let| to |\relax| (so this
+% case may be tested with |\@ifundefined{filename@ext}| and, perhaps a
+% default extension substituted).
+%
+% Normally one would not need to define this macro in |texsys.cfg| as
+% the automatic tests can supply parsers that work with UNIX and VMS and
+% Macintosh syntax, as well as a basic parser that will cover many other
+% cases. However some operating systems may need a `hand produced'
+% parser in which case it should be defined in this file.
+%
+% The UNIX parser also works for most MSDOS \TeX\ versions.
+% Currently if the UNIX, VMS or Macintosh parser is not used,
+% |\filename@parse| is defined to always return an empty area, and to
+% split the argument into basename and extension at the first `|.|'
+% that occurs in the name.
+% Parsers for other formats may be defined in |texsys.cfg|,
+% in which case they will be used in preference to the default
+% definitions.
+%
+% \DescribeMacro{\@TeXversion}
+% \changes{v1.0f}{1994/05/23}{Document \cs{@TeXversion}}
+% |\@TeXversion| is now set automatically by the initialisation tests
+% in this file. You should not need to set it in |texsys.cfg|, however
+% the following documentation is left for information. \LaTeX\ does
+% not set this variable exactly, the automatic tests set it to:\\
+% |2| for any version, $v$, $v < 3.0$\\
+% |3| for any version, $v$, $3.0 \leq v \leq 3.14$\\
+% \meta{undefined} otherwise.\\
+% However these values are accurate enough for \LaTeX\ to take
+% appropriate action for these old \TeX{}s.
+%
+% If your \TeX\ is older than version 3.141, then you should define
+% |\@TeXversion| (using |\def|) to be the version number. If you do not
+% do this\footnote
+% {Actually if your \TeX\ is really old, version~2, \LaTeX\ can
+% detect this, and sets \cs{@TeXversion} to~2 if it is not set in
+% the \texttt{cfg} file.}
+%, \LaTeX\ will not work around a bug in old \TeX\ versions, and
+% so error messages will appear in a very strange format, with |^^J|
+% appearing instead of line breaks:
+% \begingroup\catcode`\==\active \def=#1#2{}\hfuzz\maxdimen
+%\begin{verbatim}
+%! LaTeX Error: \rubbish undefined.^^J^^JSee the LaTeX manual or LaTeX=
+% Companion
+% for explanation.^^JType H <return> for immediate help.
+% ...
+%
+%l.3 \renewcommand{\rubbish}
+% {}
+%?
+%\end{verbatim}
+% \endgroup\noindent
+% However if you put |\def\@TeXversion{3.14}| in \texttt{texsys.cfg}
+% the following format will be used:
+%\begin{verbatim}
+%! LaTeX Error: \rubbish undefined.
+%
+%See the LaTeX manual or LaTeX Companion for explanation.
+%Type H <return> for immediate help.
+%! .
+% ...
+%
+%l.3 \renewcommand{\rubbish}
+% {}
+%?
+%\end{verbatim}
+% Note that this has an extra line |! .| which does not appear in
+% error messages that use the default settings with a current version of
+% \TeX, but this should not cause any confusion we hope.
+%
+% \StopEventually{}
+%
+% \section{Initialisation}
+% As this file is read at a very early stage, some definitions that
+% are normally considered to be part of the format must be made here.
+%
+% \subsection{INITEX}
+% \changes{v0.2i}{1994/01/25}
+% {Protect against looping on \cs{@@input} and \cs{@@end}.}
+% \begin{macrocode}
+%<*dircheck>
+%<*initex>
+%<initex>\ifnum\catcode`\{=1
+%<initex> \errmessage
+%<initex> {LaTeX must be made using an initex with no format preloaded}
+%<initex>\fi
+\catcode`\{=1
+\catcode`\}=2
+\catcode`\#=6
+\catcode`\^=7
+\chardef\active=13
+\catcode`\@=11
+\countdef\count@=255
+\let\bgroup={ \let\egroup=}
+\ifx\@@input\@undefined\let\@@input\input\fi
+\ifx\@@end\@undefined\let\@@end\end\fi
+\chardef\@inputcheck0
+\chardef\sixt@@n=16
+\newlinechar`\^^J
+\def\typeout{\immediate\write17}
+\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\_\do\%\do\~}
+\def\@makeother#1{\catcode`#1=12\relax}
+\def\space{ }
+\def\@tempswafalse{\let\if@tempswa\iffalse}
+\def\@tempswatrue{\let\if@tempswa\iftrue}
+\let\if@tempswa\iffalse
+\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
+ \iterate \let\iterate\relax}
+\let\repeat\fi
+%</initex>
+% \end{macrocode}
+%
+% \subsection{Some bits of 2e}
+% \begin{macrocode}
+%<*2ekernel>
+\def\two@digits#1{\ifnum#1<10 0\fi\number#1}
+\long\def\@firstoftwo#1#2{#1}
+\long\def\@secondoftwo#1#2{#2}
+% \end{macrocode}
+% \changes{v1.0e}{1994/05/11}
+% {Add \cs{ProvidesFile} as used in fd files.}
+% \changes{v1.0l}{1995/10/17}
+% {Modify initex version of \cs{ProvidesFile}}
+% \changes{v1.0n}{1995/11/01}
+% {Initialise \cs{@addtofilelist} to \cs{@gobble}}
+% This is a special version of |\ProvidesFile| for initex use.
+% \changes{v1.0x}{2001/05/25}{Explicitly set catcode of
+% \cs{endlinechar} to 10 (pr/3334)}
+% \changes{v1.0y}{2001/06/04}{But only if it is a char (pr/3334)}
+% \begin{macrocode}
+\def\ProvidesFile#1{%
+ \begingroup
+ \catcode`\ 10 %
+ \ifnum \endlinechar<256 %
+ \ifnum \endlinechar>\m@ne
+ \catcode\endlinechar 10 %
+ \fi
+ \fi
+ \@makeother\/%
+ \@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}}
+\def\@providesfile#1[#2]{%
+ \wlog{File: #1 #2}%
+ \@addtofilelist{ #2}%
+ \endgroup}
+\long\def\@addtofilelist#1{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@empty{}
+\catcode`\%=12
+\def\@percentchar{%}
+\catcode`\%=14
+\let\@currdir\@undefined
+\let\input@path\@undefined
+\let\filename@parse\@undefined
+% \end{macrocode}
+% \begin{macro}{\strip@prefix}
+% \changes{v0.2a}{1993/12/13}
+% {modified, name changed from \cs{stripmeaning}.}
+% \changes{v0.2e}{1994/01/19}
+% {name changed from \cs{strip@meaning}, to match NFSS.}
+% \begin{macrocode}
+\def\strip@prefix#1>{}
+%</2ekernel>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{texsys.cfg}
+% As mentioned above, any site specific definitions required to describe
+% the filename handling must be entered into a file |texsys.cfg|. If
+% |texsys.cfg| can not be located by |\openin|, we write a default
+% version out. The default version only contains comments, so we do not
+% actually input the file in that case. The automatic tests later will,
+% hopefully, correctly define the required macros.
+%
+% The tricky code below checks to see if |texsys.cfg| exists. If it does
+% not, all the text in this file between START and END is copied
+% verbatim to a new file |texsys,cfg|. If |texsys.cfg| is found, then it
+% is simply input. This is only done when this file is being used
+% unstripped.
+% \begin{macrocode}
+%<*docstrip>
+\openin15=texsys.cfg
+\ifeof15
+\typeout{** Writing a default texsys.cfg}
+\immediate\openout15=texsys.cfg
+\begingroup
+\catcode`\^^M\active%
+\let^^M\par%
+\def\reserved@a#1^^M{%
+ \def\reserved@b{#1}%
+ \ifx\reserved@b\reserved@c\endgroup\else%
+ \immediate\write15{#1}%
+ \expandafter\reserved@a\fi}%
+\def\reserved@d#1START^^M{\let\do\@makeother\dospecials\reserved@a}%
+\catcode`\%=12
+\def\reserved@c{%END}
+\reserved@d
+% \end{macrocode}
+%START
+% \subsection{texsys.cfg}
+%
+% This file contains the site specific definitions of the four macros\\
+% |\@currdir|, |\input@path|, |\filename@parse| and |\@TeXversion|.
+%
+% As distributed it only contains comments, however this `empty'
+% file will work on many systems because of the automatic tests built
+% into |ltdirchk.dtx|. You \emph{are} allowed to edit this file to add
+% definitions of these macros appropriate to your system.
+%
+%
+% The macros that must be defined are:
+%
+% \DescribeMacro{\@currdir}
+% |\@currdir|\meta{filename}\meta{space} should expand to a form of the
+% filename that uniquely refers to the `current directory' if this is
+% possible. (The expansion should also end with a space.) on UNIX,
+% this is |\def\@currdir{./}|. For more exotic operating systems you may
+% want to make |\@currdir| a macro with arguments delimited by |.|
+% and/or \meta{space}. If the operating system has no concept of
+% directory structure, this macro should be defined to be empty.
+%
+%
+% \DescribeMacro{\input@path}
+% If the primitive |\openin| searches the same directories as the
+% primitive |\input|, then it is possible to tell (using |\ifeof|)
+% whether a file exists before trying to input it. For systems like
+% this, |\input@path| should be left undefined.
+%
+% If |\openin| does not `follow' |\input| then |\input@path| must be
+% defined to be a list of directories to search for input files. The
+% format for each directory is as for |\@currdir|, normally just a
+% prefix is required, but it may be a macro with space-delimited
+% argument. That is, if \meta{dir} is an entry in the input path,
+% \TeX will try to load the expansion of
+%
+% \meta{dir}\meta{filename}\meta{space}
+%
+% So either \meta{dir} should be defined as a macro with argument
+% delimited by space, or it should just expand to a directory name,
+% including the final directory separator, so that it may be
+% concatenated with the \meta{filename}. This means that for UNIX-like
+% syntax, each \meta{dir} should end with a slash, |/|. One exception to
+% this rule is that the input path should \emph{always} contain the
+% empty directory |{}| as this will allow `full pathnames' to be used,
+% and the `current directory' to be searched.
+%
+% |\input@path| should expand to a list of such directories, each in a
+% |{}| group.
+%
+%
+% \DescribeMacro{\filename@parse}
+% After a call of the form: |\filename@parse{|\meta{filename}|}|, the
+% three macros |\filename@area|,|\filename@base|,|\filename@ext| should
+% be defined to be the `area' (or directory), basename and
+% extension respectively. If there was no extension specified in
+% \meta{filename}, |\filename@ext| should be |\let| to |\relax| (so this
+% case may be tested with |\@ifundefined{filename@ext}| and, perhaps a
+% default extension substituted).
+%
+% Normally one would not need to define this macro in |texsys.cfg| as
+% the automatic tests can supply parsers that work with UNIX and VMS
+% syntax, as well as a basic parser that willcover many other cases.
+% However some operating systems may need a `hand produced' parser
+% in which case it should be defined in this file.
+%
+% The UNIX parser also works for most MSDOS \TeX\ versions.
+% Currently if the UNIX or VMS parser is not used, |\filename@parse| is
+% defined to always return an empty area, and to split the argument into
+% basename and extension at the first `|.|' that occurs in the name.
+% Parsers for other formats may be defined in |texsys.cfg|,
+% in which case they will be used in preference to the default
+% definitions.
+%
+%
+% \DescribeMacro{\@TeXversion}
+% You should not need to set this macro in |texsys.cfg|. \LaTeX\
+% tests to set this automatically. See the comments in the opening
+% section of \texttt{ltdirchk.dtx}.
+%
+%
+% The following sections give examples of definitions which might
+% work on various systems. These are currently mainly untested as I only
+% have access to a few systems, all of which do not need this file as
+% the automatic tests work. All the code is commented out.
+%
+% \subsection{UNIX (web2c)}
+% This implementation does make |\openin| and |\input| look in the same
+% places. Acceptable settings are made by |ltdirchk.dtx|, and so this
+% file may be empty. The definitions below are therefore just for
+% information.
+% \begin{macrocode}
+%\def\@currdir{./}
+%\let\input@path\@undefined
+% \end{macrocode}
+%
+% \subsection{UNIX (other)}
+% Apparently some commercial UNIX implementations have different paths
+% for |\openin| and |\input|. For these one could use definitions like
+% the following (with whatever directories are used at your site):
+% note that the directory names should end with |/|.
+% \begin{macrocode}
+% \def\@currdir{./}
+% \def\input@path{%
+% {/usr/local/lib/tex/inputs/distrib/}%
+% {/usr/local/lib/tex/inputs/contrib/}%
+% {/usr/local/lib/tex/inputs/local/}%
+% }
+% \end{macrocode}
+%
+% \subsection{MSDOS (emtex)}
+% This implementation does make |\openin| and |\input| look in the same
+% places. Acceptable settings are made by |ltdirchk.dtx|, and so this
+% file may be empty. The definitions below are therefore just for
+% information.
+% \begin{macrocode}
+% \def\@currdir{./}
+% \let\input@path\@undefined
+% \end{macrocode}
+%
+% \subsection{MSDOS (other)}
+% Some PC implementations have different paths
+% for |\openin| and |\input|. For these one could use definitions like
+% the following (with whatever directories are used at your site):
+% note that the directory names should end with |/|.
+% This assumes the implementation uses UNIX style |/| as the directory
+% separator.
+% \begin{macrocode}
+% \def\@currdir{./}
+% \def\input@path{%
+% {c:/tex/inputs/distrib/}%
+% {c:/tex/inputs/contrib/}%
+% {c:/tex/inputs/local/}%
+% }
+% \end{macrocode}
+%
+% \subsection{VMS (DECUS \TeX, PD VMS 3.6)}
+% This implementation does make |\openin| and |\input| look in the same
+% places. Acceptable settings are made by |ltdirchk.dtx|, and so this
+% file may be empty. The definitions below are therefore just for
+% information.
+% \begin{macrocode}
+% \def\@currdir{[]}
+% \let\input@path\@undefined
+% \end{macrocode}
+%
+% \subsection{VMS (???)}
+% Some VMS implementations have different paths
+% for |\openin| and |\input|. For these one could use definitions like
+% the following:
+% \begin{macrocode}
+% \def\@currdir{[]}
+% \def\input@path{%
+% {tex_inputs:}%
+% {SOMEDISK:[SOME.TEX.DIRECTORY]}%
+% }
+% \end{macrocode}
+%
+% \subsection{MACINTOSH (OzTeX 1.6)}
+% This implementation does make |\openin| and |\input| look in the same
+% places. Acceptable settings are made by |ltdirchk.dtx|, and so this
+% file may be empty. The definitions below are therefore just for
+% information.
+% \begin{macrocode}
+% \def\@currdir{:}
+% \let\input@path\@undefined
+% \end{macrocode}
+%
+% \subsection{MACINTOSH (other)}
+% Some Macintosh implementations have different paths
+% for |\openin| and |\input|. For these one could use definitions like
+% the following (with whatever folders are used on your machine):
+% note that the directory names should end with |:|, and they should
+% contain {\em no\/} spaces.
+% \begin{macrocode}
+% \def\@currdir{:}
+% \def\input@path{%
+% {Hard-Disk:Applications:TeX:TeX-inputs:}%
+% {Hard-Disk:Applications:TeX:My-inputs:}%
+% }
+% \end{macrocode}
+%
+% \subsection{FAKE EXAMPLE}
+% This example is for an operating system that has filenames of the
+% form |<area>name| For maximum compatability with macro sets,
+% you want |name.ext| to be mapped to |<ext>name|.
+% and |<area>name.ext| to be mapped to |<area.ext>name|.
+% |\input| does this mapping automatically, but |\openin| does not, and
+% does not look in the same places as |\input|.
+% |<>name| is the desired `current directory' syntax.
+%
+% the following code would possibly work:
+% \begin{macrocode}
+% \def\@dir#1#2 {%
+% \@d@r{#1}#2..\@nil}
+% \def\@d@r#1#2.#3.#4\@nil{%
+% <\ifx\@dir#1\@dir\else#1\ifx\@dir#3\@dir\else.\fi\fi#3>#2 }
+%
+% \def\@currdir{\@dir{}}
+% \def\input@path{%
+% {\@dir{area.one}}%
+% {\@dir{area.two}}%
+% }
+% \end{macrocode}
+%END
+% \begin{macrocode}
+\immediate\closeout15
+% \end{macrocode}
+% If |texsys.cfg| did exist, then input it.
+% \begin{macrocode}
+\else
+\typeout{** Using the existing texsys.cfg}
+\closein15
+\input texsys.cfg
+\fi
+%</docstrip>
+% \end{macrocode}
+%
+% If the stripped version of this file is being used (in latex2e.ltx)
+% then texsys.cfg should be there, so just input it.
+% \begin{macrocode}
+%<dircheck>\input texsys.cfg
+% \end{macrocode}
+%
+% \changes{v0.2f}{1994/01/20}
+% {\cs{@copytexsys} and the texsys.new file removed}
+%
+% \section{Setting \texttt{\cs{@currdir}}}
+%
+% \begin{macro}{\@currdir}
+% \begin{macro}{\IfFileExists}
+% \changes{v0.2e}{1994/01/19}
+% {name changed from \cs{test}}
+% This is a local definition of |\IfFileExists|. It tries to relocate
+% |texsxys.aux|. If it succeeds, then the |\@currdir| syntax has been
+% determined. If all the tests fail then |\@currdir| will be set to
+% |\@empty|, and |ltxcheck| will warn of this when it checks the format.
+% \begin{macrocode}
+\begingroup
+\count@\time
+\divide\count@ 60
+\count2=-\count@
+\multiply\count2 60
+\advance\count2 \time
+% \end{macrocode}
+%
+% \begin{macro}{\today}
+% The current date and time stamp.
+% \changes{v0.2g}{1994/01/21}
+% {Name changed from \cs{stamp}, to save memory}
+% \begin{macrocode}
+\edef\today{%
+ \the\year/\two@digits{\the\month}/\two@digits{\the\day}:%
+ \two@digits{\the\count@}:\two@digits{\the\count2}}
+% \end{macrocode}
+% \end{macro}
+%
+% Create a file |texsys.aux| (hopefully in the current directory),
+% then try to locate it again.
+% \begin{macrocode}
+\immediate\openout15=texsys.aux
+\immediate\write15{\today^^J}
+\immediate\closeout15 %
+% \end{macrocode}
+%
+% |#1| is the file to try, |#2| is what to do on success, |#3| on
+% failure.
+% \begin{macrocode}
+\def\IfFileExists#1#2#3{%
+ \openin\@inputcheck#1 %
+ \ifeof\@inputcheck
+ #3\relax
+ \else
+ \read\@inputcheck to \reserved@a
+ \ifx\reserved@a\today
+ \typeout{#1 found}#2\relax
+ \else
+ \typeout{BAD: old file \reserved@a (should be \today)}%
+ #3\relax
+ \fi
+ \fi
+ \closein\@inputcheck}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\endlinechar=-1
+% \end{macrocode}
+%
+% If |\@currdir| has not been pre-defined in |texsys.cfg| then test for
+% UNIX, VMS and Oz-\TeX-Mac. syntax.
+% \changes{v0.2h}{1994/01/24}
+% {Stop testing once texsys.aux has been found}
+% \begin{macrocode}
+\ifx\@currdir\@undefined
+ \IfFileExists{./texsys.aux}{\gdef\@currdir{./}}%
+ {\IfFileExists{[]texsys.aux}{\gdef\@currdir{[]}}%
+ {\IfFileExists{:texsys.aux}{\gdef\@currdir{:}}{}}}
+% \end{macrocode}
+% If it is still undefined at this point, all the above tests failed.
+% Earlier versions interactively prompted for a definition at this
+% point, but it seems impossible to reliably obtain information from
+% users at this point in the installation. This version of the file
+% produces a format with no user-interaction. Later if the format is not
+% suitable for the system, |texsys.cfg| may be edited and the format
+% re-made.
+% \changes{v0.2a}{1993/12/13}
+% {Removed interactive prompting for current directory syntax}
+% \changes{v0.2f}{1994/01/20}
+% {\cs{@copytexsys} removed}
+% \changes{v1.0u}{1996/12/06}
+% {*** removed from various messages for GNU Make.
+% internal/2338}
+% \begin{macrocode}
+ \ifx\@currdir\@undefined
+ \global\let\@currdir\@empty
+ \typeout{^^J^^J%
+ !! No syntax for the current directory could be found^^J%
+ }%
+ \fi
+% \end{macrocode}
+% Otherwise |\@currdir| was defined in |texsys.cfg|. In this case check
+% that the syntax specified works on this system. (In case a complete
+% \LaTeX\ system has been copied from one system to another.) If the
+% test fails, give up. The installer should remove or correct the
+% offending |texsys.cfg| and try again.
+% \begin{macrocode}
+\else
+ \IfFileExists{\@currdir texsys.aux}{}{%
+ \edef\reserved@a{\errhelp{%
+ texsys.cfg specifies the current directory syntax to be^^J%
+ \meaning\@currdir^^J%
+ but this does not work on this system.^^J%
+ Remove texsys.cfg and restart.}}\reserved@a
+ \errmessage{Bad texsys.cfg file: \noexpand\@currdir}\@@end}
+% \end{macrocode}
+% The version of |\@currdir| in |texsys.cfg| looks OK.
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+% \changes{v0.2d}{1994/01/14}
+% {Close the texsys.aux output stream}
+% \begin{macrocode}
+\immediate\closeout15 %
+\endgroup
+% \end{macrocode}
+%
+% \begin{macrocode}
+\typeout{^^J^^J%
+ \noexpand\@currdir set to:
+ \expandafter\strip@prefix\meaning\@currdir.^^J%
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \changes{v0.2a}{1993/12/13}
+% {on the `docstrip' pass, do not check openin path}
+%
+% Stop here if the file is being used unstripped.
+% \begin{macrocode}
+%<*docstrip>
+\relax\endinput
+%</docstrip>
+% \end{macrocode}
+%
+% \section{Setting \texttt{\cs{input@path}}}
+%
+% Earlier versions of this file attempted to automatically test whether
+% |\input@path| was required, and interactively prompt for a path if
+% necessary. This was not found to be very reliable The first-time
+% installer of \LaTeXe\ can not be expected to have enough information
+% to supply the correct information to the prompts. Now the interaction
+% is omitted. After the format is made the installer can attempt to run
+% the test document |ltxcheck.tex| through \LaTeXe. This will check,
+% amongst other things, whether |texsys.cfg| will need to be edited and
+% the format remade.
+%
+% \begin{macro}{\input@path}
+% Now set up the |\input@path|.
+%
+% |\input@path| should either be undefined, or a list of directories as
+% described in the introduction.
+% \changes{v0.2e}{1994/01/19}
+% {No longer check that an empty group is in the path}
+% \begin{macrocode}
+ \typeout{^^J%
+ Assuming \noexpand\openin and \noexpand\input^^J%
+ \ifx\input@path\@undefined
+% \end{macrocode}
+% |\input@path| has not been pre-defined.
+% \begin{macrocode}
+ have the same search path.^^J%
+ \else
+% \end{macrocode}
+% |\input@path| has been defined in |texsys.cfg|.
+% \begin{macrocode}
+ have different search paths.^^J%
+ LaTeX will use the path specified by \noexpand\input@path:^^J%
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Filename Parsing}
+%
+% \begin{macro}{\filename@parse}
+% Split a filename into its components.
+% \changes{v0.2g}{1994/01/21}
+% {Minor changes, and add Mac version (:)}
+% \begin{macrocode}
+\ifx\filename@parse\@undefined
+ \def\reserved@a{./}\ifx\@currdir\reserved@a
+% \end{macrocode}
+% |\filename@parse| was not specified in |texsys.cfg|, but |\@currdir|
+% looks like UNIX\ldots
+% \begin{macrocode}
+ \typeout{^^JDefining UNIX/DOS style filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@path#1/\\}
+% \end{macrocode}
+%
+% Search for the last |/|.
+% \begin{macrocode}
+ \def\filename@path#1/#2\\{%
+ \ifx\\#2\\%
+ \def\reserved@a{\filename@simple#1.\\}%
+ \else
+ \edef\filename@area{\filename@area#1/}%
+ \def\reserved@a{\filename@path#2\\}%
+ \fi
+ \reserved@a}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \else\def\reserved@a{[]}\ifx\@currdir\reserved@a
+% \end{macrocode}
+% |\filename@parse| was not specified in |texsys.cfg|, but |\@currdir|
+% looks like VMS\ldots
+% \begin{macrocode}
+ \typeout{^^JDefining VMS style filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@path#1]\\}
+% \end{macrocode}
+%
+% Search for the last |]|.
+% \begin{macrocode}
+ \def\filename@path#1]#2\\{%
+ \ifx\\#2\\%
+ \def\reserved@a{\filename@simple#1.\\}%
+ \else
+ \edef\filename@area{\filename@area#1]}%
+ \def\reserved@a{\filename@path#2\\}%
+ \fi
+ \reserved@a}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \else\def\reserved@a{:}\ifx\@currdir\reserved@a
+% \end{macrocode}
+% |\filename@parse| was not specified in |texsys.cfg|, but |\@currdir|
+% looks like Macintosh\ldots
+% \begin{macrocode}
+ \typeout{^^JDefining Mac style filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@path#1:\\}
+% \end{macrocode}
+%
+% Search for the last |:|.
+% \changes{v1.0g}{1994/05/25}
+% {Mac parser had " typo for :}
+% \begin{macrocode}
+ \def\filename@path#1:#2\\{%
+ \ifx\\#2\\%
+ \def\reserved@a{\filename@simple#1.\\}%
+ \else
+ \edef\filename@area{\filename@area#1:}%
+ \def\reserved@a{\filename@path#2\\}%
+ \fi
+ \reserved@a}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \else
+% \end{macrocode}
+% |\filename@parse| was not specified in |texsys.cfg|.
+% So just make a simple parser that always sets |\filename@area| to
+% empty.
+% \begin{macrocode}
+ \typeout{^^JDefining generic filename parser.^^J}
+ \def\filename@parse#1{%
+ \let\filename@area\@empty
+ \expandafter\filename@simple#1.\\}
+ \fi\fi\fi
+% \end{macrocode}
+%
+% |\filename@simple| is used by all three versions.
+% Finally we can split off the extension.
+% \begin{macrocode}
+ \def\filename@simple#1.#2\\{%
+ \ifx\\#2\\%
+ \let\filename@ext\relax
+ \else
+ \edef\filename@ext{\filename@dot#2\\}%
+ \fi
+ \edef\filename@base{#1}}
+% \end{macrocode}
+%
+% Remove a final dot, added earlier.
+% \begin{macrocode}
+ \def\filename@dot#1.\\{#1}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\else
+% \end{macrocode}
+% Otherwise, |\filename@parse| was specified in |texsys.cfg|.
+% \begin{macrocode}
+ \typeout{^^J^^J%
+ \noexpand\filename@parse was defined in texsys.cfg:^^J%
+ \expandafter\strip@prefix\meaning\filename@parse.^^J%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \section{\TeX\ Versions}
+%
+% \begin{macro}{\@TeXversion}
+% \TeX\ versions older than than 3.141 require |\@TeXversion| to be
+% set. This can be determined automatically due to a trick suggested
+% by Bernd Raichle. (Actually this will not always get the correct
+% version number, eg \TeX3.14 would be detected as \TeX3, but \LaTeX\
+% only needs to take account of \TeX's older than 3, or between 3 and
+% 3.14.
+% \changes{v1.0h}{1994/10/11}
+% {Check for TeX3.14}
+% \begin{macrocode}
+\ifx\@TeXversion\@undefined
+ \ifx\@undefined\inputlineno
+ \def\@TeXversion{2}
+ \else
+ {\catcode`\^^J=\active
+ \def\reserved@a#1#2\@@{\if#1\string^3\fi}
+ \edef\reserved@a{\expandafter\reserved@a\string^^J\@@}
+ \ifx\reserved@a\@empty\else\gdef\@TeXversion{3}\fi}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</dircheck>
+% \end{macrocode}
+%
+% \section{ltxcheck.tex}
+% After the format has been made, and article.cls moved with the
+% other files to the `standard input directory' as specified in
+% |install.txt|, the format may be checked by running the file
+% |ltxcheck.tex|.
+% \changes{v0.2f}{1994/01/20}
+% {Modify all of ltxcheck}
+% \changes{v1.0h}{1994/10/11}
+% {Modify all of ltxcheck again}
+% \changes{v1.0t}{1996/09/25}
+% {Move ltxcheck to separate file}
+%
+%
+%
+% \Finale
+%