% \iffalse meta-comment
%<=*COPYRIGHT>
%% Copyright (C) 2011 by Martin Scharrer <martin@scharrer.me>
%% ---------------------------------------------------------------------------
%% This work 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 2005/12/01 or later.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Martin Scharrer.
%%
%% This work consists of the files ifetex.dtx and ifetex.ins
%% and the derived filebase ifetex.sty.
%%
%<=/COPYRIGHT>
% \fi
%
% \iffalse
%<*driver>
\ProvidesFile{ifetex.dtx}[%
%<=*DATE>
    2011/12/15
%<=/DATE>
%<=*VERSION>
    v1.2
%<=/VERSION>
    Conditional to test for e-TeX]
\documentclass{ydoc}
\GetFileInfo{ifetex.dtx}
\usepackage{ifetex}[\filedate]
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\begin{document}
  \DocInput{\jobname.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{73}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \changes{v1.0}{2011/10/31}{First version.}
% \changes{v1.1}{2011/11/06}{Changed to manual, local declaration of \cs{ifetex}.}
% \changes{v1.2}{2011/12/15}{Added \cs{NeedsETeX} \protect\LaTeX\ macro.}
%
% \DoNotIndex{\newcommand,\newenvironment}
%
% \GetFileInfo{ifetex.dtx}
% \author{Martin Scharrer}
% \email{martin@scharrer.me}
% \ifdefined\repository
%   \repository{https://bitbucket.org/martin_scharrer/ifetex}
% \fi
%
% \maketitle
%
% \providecommand\eTeX{$\epsilon$-\TeX}
% \begin{abstract}\noindent
% This small package provides the if-switch \Macro\ifetex which
% indicated whether \eTeX\ is available or not.
% \end{abstract}
%
% \section{Usage}
% The package can be loaded as \LaTeX\ package using \Macro\usepackage{ifetex} or in plain\TeX\ using \Macro\input' ifetex'.
% In both cases it aborts silently if the \Macro\ifetex macro is already defined.
%
% The package currently test if \Macro\eTeXversion is defined as a primitive and assumes \eTeX\ if so.
%
% Note that almost all modern \LaTeX\ distributions use \eTeX.
% The two major distributions \TeX\ Live and Mik\TeX\ support it and use it by default (except for the classic |tex|).
% The \LaTeX\ which comes with \emph{Scientific Work Place} by MacKichan seems to not support \eTeX\ yet.
% Package authors can use this package to test for missing \eTeX\ and provide fall-back code.
%
% \DescribeMacro\NeedsETeX[<version>]
% The \LaTeX\ package provides this macro which can be used in packages or classes to produce an error if \eTeX\ is not available,
% similar to \Macro\NeedsTeXFormat. In addition an optional version number can be given in the format x.y, where x is the main version and y the revision.
% This number is checked against \Macro\eTeXversion and \Macro\eTeXrevision and an appropriate error is raised if the available
% \eTeX\ is too old.
%
% \StopEventually{}
% \section{Implementation}
%
% \subsection{\texttt{ifetex.sty}}
% \iffalse
%<*ifetex.sty>
% \fi
%    \begin{macrocode}
%<!COPYRIGHT>
\ProvidesPackage{ifetex}[%
%<!DATE>
%<!VERSION>
%<*DRIVER>
    2099/01/01 develop
%</DRIVER>
    ifetex]
%    \end{macrocode}
%
%    \begin{macrocode}
\@@input ifetex
%    \end{macrocode}
%
%
% \begin{macro}{\NeedsETeX}[1]{optional version number (x.y)}
% Produces error if e-TeX is not available or if its version is too old.
%    \begin{macrocode}
\newcommand*\NeedsETeX[1][]{%
  \ifetex
    \ifx\@nnil#1\@nnil\else
    \ifdim\the\eTeXversion\eTeXrevision\p@<#1\p@\relax
      \@latex@error{This file needs e-TeX with version #1%
      \MessageBreak but only version \the\eTeXversion\eTeXrevision is available}{%
        The current input file will not be processed
        further,\MessageBreak
        because it was written for a newer version of e-TeX.
        \MessageBreak\@ehd}%
      \endinput
    \fi\fi
  \else
    \@latex@error{This file needs e-TeX}{%
      The current input file will not be processed
      further,\MessageBreak
      because it was written for e-TeX which is not available.
      \MessageBreak\@ehd}%
    \endinput
  \fi
}
%    \end{macrocode}
% \end{macro}
%
% \iffalse
%</ifetex.sty>
% \fi
%
% \subsection{\texttt{ifetex.tex}}
% \iffalse
%<*ifetex.tex>
% \fi
%    \begin{macrocode}
%<!COPYRIGHT>
%    \end{macrocode}
%
% Abort if \Macro{ifetex} is already defined.
%    \begin{macrocode}
\expandafter\ifx\csname ifetex\endcsname\relax\else
    \expandafter\endinput
\fi
%    \end{macrocode}
%
% \begin{macro}{ifetex}
% Checks if \Macro\eTeXversion is a primitive.
%    \begin{macrocode}
\begingroup
\edef\tempa{\meaning\eTeXversion}%
\edef\tempb{\string\eTeXversion}%
\ifx\tempa\tempb
    \endgroup
    \expandafter\let\csname ifetex\expandafter\endcsname\csname iftrue\endcsname
\else
    \endgroup
    \expandafter\let\csname ifetex\expandafter\endcsname\csname iffalse\endcsname
\fi
%    \end{macrocode}
% \end{macro}
% \iffalse
%</ifetex.tex>
% \fi
%
% \Finale
\endinput
