% \iffalse meta-comment
%
% Copyright (C) 2006 by Heiko Oberdiek <oberdiek@uni-freiburg.de>
%
% 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".
%
% This Current Maintainer of this work is Heiko Oberdiek.
%
% This work consists of the main source file embedfile.dtx
% and the derived files
%    embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv,
%    dtx-attach.sty, embedfile-example-plain.tex.
%
% Distribution:
%    CTAN:macros/latex/contrib/oberdiek/embedfile.dtx
%    CTAN:macros/latex/contrib/oberdiek/embedfile.pdf
%
% Unpacking:
%    (a) If embedfile.ins is present:
%           tex embedfile.ins
%    (b) Without embedfile.ins:
%           tex embedfile.dtx
%    (c) If you insist on using LaTeX
%           latex \let\install=y\input{embedfile.dtx}
%        (quote the arguments according to the demands of your shell)
%
% Documentation:
%    (a) If embedfile.drv is present:
%           latex embedfile.drv
%    (b) Without embedfile.drv:
%           latex embedfile.dtx; ...
%    The class ltxdoc loads the configuration file ltxdoc.cfg
%    if available. Here you can specify further options, e.g.
%    use A4 as paper format:
%       \PassOptionsToClass{a4paper}{article}
%
%    Programm calls to get the documentation (example):
%       pdflatex embedfile.dtx
%       makeindex -s gind.ist embedfile.idx
%       pdflatex embedfile.dtx
%       makeindex -s gind.ist embedfile.idx
%       pdflatex embedfile.dtx
%
% Installation:
%    TDS:tex/latex/oberdiek/embedfile.sty
%    TDS:tex/latex/oberdiek/dtx-attach.sty
%    TDS:doc/latex/oberdiek/embedfile.pdf
%    TDS:doc/latex/oberdiek/embedfile-example-plain.tex
%    TDS:source/latex/oberdiek/embedfile.dtx
%
%<*ignore>
\begingroup
  \def\x{LaTeX2e}
\expandafter\endgroup
\ifcase 0\ifx\install y1\fi\expandafter
         \ifx\csname processbatchFile\endcsname\relax\else1\fi
         \ifx\fmtname\x\else 1\fi\relax
\else\csname fi\endcsname
%</ignore>
%<*install>
\input docstrip.tex
\Msg{************************************************************************}
\Msg{* Installation}
\Msg{* Package: embedfile 2006/08/16 v1.0 embed files into PDF (HO)}
\Msg{************************************************************************}

\keepsilent
\askforoverwritefalse

\preamble

This is a generated file.

Copyright (C) 2006 by Heiko Oberdiek <oberdiek@uni-freiburg.de>

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".

This Current Maintainer of this work is Heiko Oberdiek.

This work consists of the main source file embedfile.dtx
and the derived files
   embedfile.sty, embedfile.pdf, embedfile.ins, embedfile.drv,
   dtx-attach.sty, embedfile-example-plain.tex.

\endpreamble

\generate{%
  \file{embedfile.ins}{\from{embedfile.dtx}{install}}%
  \file{embedfile.drv}{\from{embedfile.dtx}{driver}}%
  \usedir{tex/latex/oberdiek}%
  \file{embedfile.sty}{\from{embedfile.dtx}{package}}%
  \file{dtx-attach.sty}{\from{embedfile.dtx}{dtxattach}}%
  \usedir{doc/latex/oberdiek}%
  \file{embedfile-example-plain.tex}{\from{embedfile.dtx}{exampleplain}}%
}

\obeyspaces
\Msg{************************************************************************}
\Msg{*}
\Msg{* To finish the installation you have to move the following}
\Msg{* files into a directory searched by TeX:}
\Msg{*}
\Msg{*     embedfile.sty, dtx-attach.sty}
\Msg{*}
\Msg{* To produce the documentation run the file `embedfile.drv'}
\Msg{* through LaTeX.}
\Msg{*}
\Msg{* Happy TeXing!}
\Msg{*}
\Msg{************************************************************************}

\endbatchfile
%</install>
%<*ignore>
\fi
%</ignore>
%<*driver>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{embedfile.drv}%
  [2006/08/16 v1.0 embed files into PDF (HO)]
\documentclass{ltxdoc}
\usepackage{holtxdoc}
\begin{document}
  \DocInput{embedfile.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{430}
%
% \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         \~}
%
% \GetFileInfo{embedfile.drv}
%
% \title{The \xpackage{embedfile} package}
% \date{2006/08/16 v1.0}
% \author{Heiko Oberdiek\\\xemail{oberdiek@uni-freiburg.de}}
%
% \maketitle
%
% \begin{abstract}
% This package embeds files to a PDF document.
% Currently \pdfTeX\ >= 1.30 in PDF mode is supported only.
% \end{abstract}
%
% \tableofcontents
%
% \section{Documentation}
%
% \subsection{Introduction}
%
%    The PDF format (\cite{pdfspec}) allows the inclusion of files
%    inside the PDF document. The included files can be bound to an
%    annotation on a page. Or they can be recorded in a sorted
%    list of embedded files. The packages \xpackage{attachfile}
%    or \xpackage{attachfile2} follow the first approach, this
%    package uses the latter method.
%
% \subsubsection{Future development}
%
%    My dream is a large package that merges the features of
%    all these packages meantioned before:
%    \begin{itemize}
%    \item Files can be attached to a page.
%    \item Files can be attached to the document.
%    \item An easy user interface for simple, common tasks and
%          beginners.
%    \item An interface for the advanced users that want to setup
%          every detail.
%    \item Support of many drivers (pdftex, dvips, dvipdfm, \dots).
%    \item \dots
%    \end{itemize}
%    However, I have not managed to take the time for this project.
%    Instead:
%    \begin{itemize}
%    \item First I experimented with package \xpackage{attachfile},
%          adding driver support, fixing bugs, \dots. The result is
%          currently named as \xpackage{attachfile2}. It uses an external
%          script to get file properties (size, date, checksum, \dots).
%    \item In order to avoid an external program for getting basic
%          file properties I provided a patch ``EscapeAndOther'' for
%          pdfTeX that was accepted for version 1.30.
%    \item This package closes a gap left by the packages for attaching
%          files and allows the embedding of files to the document.
%          Also it makes use of the new primitives of \pdfTeX.
%    \end{itemize}
%
% \subsection{User interface}
%
%    This package \xpackage{embedfile} can be used with both
%    \LaTeX\ and \plainTeX. See \autoref{sec:plain} that
%    explains the use with \plainTeX\ by an example.
%    In \LaTeX\ the package is loaded as usually. There are no options.
%    \begin{quote}
%      \verb|\usepackage{embedfile}|
%    \end{quote}
%
%    \begin{declcs}{embedfile}
%      |[|\meta{options}|]| \M{file}
%    \end{declcs}
%    The macro \cs{embedfile} includes file \meta{file} and
%    attaches it to the PDF document. At the end of the document
%    the sorted list of embedded files are written. Thus you can
%    safely use \cs{embedfile} before \verb|\end{document}|.
%    Embedding files using \cs{AtEndDocument} will only work,
%    if \cs{AtEndDocument} is called before loading the package
%    \xpackage{embedfile}
%
%    The \meta{options} are give as key value pairs. The following
%    keys are supported:
%    \begin{description}
%    \item[\xoption{filespec}]
%      This allows to override the file name
%      that appears in the PDF file. If you are using other than
%      simple file names (8bit, path separators, \dots), look into
%      the PDF specification (\cite{pdfspec}).
%      There are rules how these file names
%      must be written/encoded.
%    \item[\xoption{filesystem}]
%      This sets the entry \verb|/FS| in
%      the file specification dictionary, see PDF specification
%      (\cite{pdfspec}).
%      Example: \verb|filesystem=URL|.
%    \item[\xoption{mimetype}]
%      This sets the mime type (\cite{mime}) of the file,
%      see \autoref{sec:plain} for examples and \cite{types}
%      for a list of officially registered types.
%    \item[\xoption{desc}]
%      The description for the file.
%    \item[\xoption{stringmethod}]
%      The package must convert the values of the keys \xoption{filespec}
%      and \xoption{desc} into a PDF string. If \xpackage{hyperref}
%      is found, then its \cs{pdfstringdef} will be used, otherwise
%      \pdfTeX's \cs{pdfescapestring} is used. Value \verb|psd|
%      forces the use of \cs{pdfstringdef}, value \verb|escape|
%      the use of \cs{pdfescapestring}.
%    \end{description}
%
% \subsection{Examples}
%
% \subsubsection{\plainTeX}\label{sec:plain}
%
%    The package can be used with \plainTeX. Because is uses
%    package \xpackage{keyval} and \cs{@ifnextchar}, it needs
%    a little help from \xfile{miniltx.tex}.
%
%    If additionally package \xpackage{keyval} (\xpackage{graphicx})
%    is needed, load it first. Then package \xpackage{embedfile} avoids
%    a duplicate loading of package \xpackage{keyval}.
%
%    Because \plainTeX\ does not provide a hook at end of the document,
%    you have to call \cs{embedfilefinish} manually at the end
%    after the last embedded file.
%    \begin{macrocode}
%<*exampleplain>
  % Load packages
\input miniltx
  % \def\Gin@driver{pdftex.def}
  % \input graphicx.sty
\input embedfile.sty
\resetatcatcode

  % default setting
\embedfilesetup{
  mimetype=text/plain
}

  % Embed files
\embedfile[
  filespec=example.tex,
  desc={Source code (plain-TeX) of this example}
]{embedfile-example-plain.tex}

\embedfile[
  desc={Source of package `embedfile'}
]{embedfile.dtx}

\embedfile[
  mimetype=application/pdf,
  desc={Documentation of package `embedfile'}
]{embedfile.pdf}

  % Some text
This example document contains three embedded files.

  % End of document
\embedfilefinish % don't forget
\bye
%</exampleplain>
%    \end{macrocode}
%
% \subsection{Package \xpackage{dtx-attach}}
%
% Package \xpackage{dtx-attach} is just a small application of
% package \xpackage{embedfile}. I am using it for the CTAN
% documentation of my packages in \CTAN{macros/latex/contrib/oberdiek/}.
% It also serves as small example for the use of the package with \LaTeX.
%
%    \begin{macrocode}
%<*dtxattach>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dtx-attach}
  [2006/08/16 v1.0 Embed \string\jobname.dtx (HO)]
\RequirePackage{embedfile}[2006/08/16]
\embedfile[
  stringmethod=escape,
  mimetype=plain/text,
  desc={LaTeX docstrip source archive for package `\jobname'}
]{\jobname.dtx}
%</dtxattach>
%    \end{macrocode}
%
% \StopEventually{
% }
%
% \section{Implementation}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
% \subsection{Reload check and package identification}
%    Reload check, especially if the package is not used with \LaTeX.
%    \begin{macrocode}
\begingroup
  \expandafter\let\expandafter\x\csname ver@embedfile.sty\endcsname
  \ifcase 0%
    \ifx\x\relax % plain
    \else
      \ifx\x\empty % LaTeX
      \else
        1%
      \fi
    \fi
  \else
    \expandafter\ifx\csname PackageInfo\endcsname\relax
      \def\x#1#2{%
        \immediate\write-1{Package #1 Info: #2.}%
      }%
    \else
      \def\x#1#2{\PackageInfo{#1}{#2, stopped}}%
    \fi
    \x{embedfile}{The package is already loaded}%
    \endgroup
    \expandafter\endinput
  \fi
\endgroup
%    \end{macrocode}
%    Package identification:
%    \begin{macrocode}
\begingroup
  \expandafter\ifx\csname ProvidesPackage\endcsname\relax
    \def\x#1#2#3[#4]{\endgroup
      \immediate\write-1{Package: #3 #4}%
      \xdef#1{#4}%
    }%
  \else
    \def\x#1#2[#3]{\endgroup
      #2[{#3}]%
      \ifx#1\relax
        \xdef#1{#3}%
      \fi
    }%
  \fi
\expandafter\x\csname ver@embedfile.sty\endcsname
\ProvidesPackage{embedfile}%
  [2006/08/16 v1.0 embed files into PDF (HO)]
%    \end{macrocode}
%
%    \begin{macrocode}
\edef\EmbedFileRestoreCatcodes{%
  \catcode39 \the\catcode39 % '
  \catcode40 \the\catcode40 % (
  \catcode41 \the\catcode41 % )
  \catcode47 \the\catcode47 % /
  \catcode60 \the\catcode60 % <
  \catcode62 \the\catcode62 % >
  \catcode64 \the\catcode64 % @
  \catcode91 \the\catcode91 % [
  \catcode93 \the\catcode93 % ]
  \catcode96 \the\catcode96 % `
}
\catcode39 12 % '
\catcode40 12 % (
\catcode41 12 % )
\catcode47 12 % /
\catcode60 12 % <
\catcode62 12 % >
\catcode64 11 % @
\catcode91 12 % [
\catcode93 12 % ]
\catcode96 12 % `
%    \end{macrocode}
%
% \subsection{Tools}
%
%    \begin{macro}{\EmbedFile@PackageError}
%    \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname PackageError\endcsname\relax
  \def\EmbedFile@PackageError#1#2{%
    \errhelp{#2}%
    \errmessage{Package embedfile Error: #1.}%
  }%
\else
  \def\EmbedFile@PackageError#1#2{%
    \begingroup
      \let\on@line\empty
      \PackageError{embedfile}{#1}{#2}%
    \endgroup
  }%
\fi
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\EmbedFile@RequirePackage}
%    \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname RequirePackage\endcsname\relax
  \def\EmbedFile@RequirePackage#1#2{%
    \expandafter\ifx\csname #2\encsname\relax
      \input #1.sty\relax
    \fi
  }%
\else
  \def\EmbedFile@RequirePackage#1#2{%
    \expandafter\ifx\csname #2\endcsname\relax
      \RequirePackage{#1}%
    \fi
  }%
\fi
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Check for recent \pdfTeX\ in PDF mode}
%
%    Load package \xpackage{ifpdf} and check mode.
%    \begin{macrocode}
\EmbedFile@RequirePackage{ifpdf}{ifpdf}
\ifpdf
\else
  \EmbedFile@PackageError{%
    Missing pdfTeX in PDF mode%
  }{%
    Currently other drivers are not supported. Package loading is aborted.%
  }%
  \EmbedFileRestoreCatcodes
  \expandafter\endinput
\fi
%    \end{macrocode}
%    Check version.
%    \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdffilesize\endcsname\relax
  \EmbedFile@PackageError{%
    Unsupported pdfTeX version%
  }{%
    At least version 1.30 is necessary. Package loading is aborted.%
  }%
  \EmbedFileRestoreCatcodes
  \expandafter\endinput
\fi
%    \end{macrocode}
%
% \subsection{Key value definitions}
%
%    \begin{macrocode}
\EmbedFile@RequirePackage{keyval}{define@key}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\EmbedFile@DefineKey#1#2{%
  \define@key{EmbedFile}{#1}{%
    \expandafter\def\csname EmbedFile@#1\endcsname{##1}%
  }%
  \expandafter\def\csname EmbedFile@#1\endcsname{#2}%
}
%    \end{macrocode}
%    Subtype of the embedded file (optional).
%    \begin{macrocode}
\EmbedFile@DefineKey{mimetype}{}
%    \end{macrocode}
%    File specification string.
%    \begin{macrocode}
\EmbedFile@DefineKey{filespec}{\EmbedFile@file}
%    \end{macrocode}
%    File system (optional).
%    \begin{macrocode}
\EmbedFile@DefineKey{filesystem}{}
%    \end{macrocode}
%    Description (optional).
%    \begin{macrocode}
\EmbedFile@DefineKey{desc}{}
%    \end{macrocode}
%    Method for converting text to PDF strings.
%    \begin{macrocode}
\EmbedFile@DefineKey{stringmethod}{%
  \ifx\pdfstringdef\@undefined
    escape%
  \else
    \ifx\pdfstringdef\relax
      escape%
    \else
      psd%
    \fi
  \fi
}
%    \end{macrocode}
%
%    \begin{macro}{\embedfilesetup}
%    \begin{macrocode}
\def\embedfilesetup{%
  \setkeys{EmbedFile}%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Embed the file}
%
%    \begin{macro}{\embedfile}
%    \begin{macrocode}
\def\embedfile{%
  \@ifnextchar[\EmbedFile@embedfile{\EmbedFile@embedfile[]}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\EmbedFile@embedfile}
%    \begin{macrocode}
\def\EmbedFile@embedfile[#1]#2{%
  \ifEmbedFile@finished
    \EmbedFile@PackageError{%
      \string\embedfile\space after \string\embedfilefinish
    }{%
      The list of embedded files is already written.%
    }%
  \else
    \begingroup
      \def\EmbedFile@file{#2}%
      \setkeys{EmbedFile}{#1}%
      \expandafter\ifx\expandafter\\\pdffilesize{\EmbedFile@file}\\%
        \EmbedFile@PackageError{%
          File `\EmbedFile@file' not found%
        }{%
          The unknown file is not embedded.%
        }%
      \else
        \EmbedFile@convert\EmbedFile@filespec\EmbedFile@@filespec
        \ifx\EmbedFile@desc\empty
          \let\EmbedFile@@desc\empty
        \else
          \EmbedFile@convert\EmbedFile@desc\EmbedFile@@desc
        \fi
        \immediate\pdfobj stream attr{%
          /Type/EmbeddedFile%
          \ifx\EmbedFile@mimetype\empty
          \else
            /Subtype/\pdfescapename{\EmbedFile@mimetype}%
          \fi
          /Params<<%
            /ModDate(\pdffilemoddate{\EmbedFile@file})%
            /Size \pdffilesize{\EmbedFile@file}%
            /CheckSum<\pdfmdfivesum file{\EmbedFile@file}>%
          >>%
        }file{\EmbedFile@file}\relax
        \immediate\pdfobj{%
          <<%
            /Type/Filespec%
            \ifx\EmbedFile@filesystem\empty
            \else
            /FS/\pdfescapename{\EmbedFile@filesystem}%
            \fi
            /F(\EmbedFile@@filespec)%
            \ifx\EmbedFile@@desc\empty
            \else
              /Desc(\EmbedFile@@desc)%
            \fi
            /EF<<%
              /F \the\pdflastobj\space 0 R%
            >>%
          >>%
        }%
        \EmbedFile@add{%
          \EmbedFile@@filespec
        }{\the\pdflastobj\space 0 R}%
      \fi
    \endgroup
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\EmbedFile@convert}
%    \begin{macrocode}
\def\EmbedFile@convert#1#2{%
  \ifnum\pdfstrcmp{\EmbedFile@stringmethod}{psd}=0 %
    \pdfstringdef\EmbedFile@temp{#1}%
    \let#2\EmbedFile@temp
  \else
    \edef#2{\pdfescapestring{#1}}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\global\let\EmbedFile@list\empty
%    \end{macrocode}
%    \begin{macro}{\EmbedFile@add}
%    Sorting is done by the insertion sort algorithm.
%    Probably the sorting could be done more reliable.
%    However, the PDF specification is not too clear to me
%    regarding precise sorting rules (how to deal with
%    different encodings, escaped characters, \dots).
%    \begin{macrocode}
\def\EmbedFile@add#1#2{%
  \begingroup
    \edef\key{\pdfescapehex{#1}}%
    \ifx\EmbedFile@list\empty
      \xdef\EmbedFile@list{\noexpand\do{\key}{#2}}%
    \else
      \def\do##1##2{%
        \ifnum\pdfstrcmp{##1}{\key}>0 %
          \edef\x{%
            \toks@{%
              \the\toks@%
              \noexpand\do{\key}{#2}%
              \noexpand\do{##1}{##2}%
            }%
          }%
          \x
          \def\do####1####2{%
            \toks@\expandafter{\the\toks@\do{####1}{####2}}%
          }%
          \def\stop{%
            \xdef\EmbedFile@list{\the\toks@}%
          }%
        \else
          \toks@\expandafter{\the\toks@\do{##1}{##2}}%
        \fi
      }%
      \def\stop{%
        \xdef\EmbedFile@list{\the\toks@\noexpand\do{\key}{#2}}%
      }%
      \toks@{}%
      \EmbedFile@list\stop
    \fi
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\newif\ifEmbedFile@finished
%    \end{macrocode}
%    \begin{macro}{\embedfilefinish}
%    \begin{macrocode}
\def\embedfilefinish{%
  \ifEmbedFile@finished
    \EmbedFile@PackageError{%
      Too many invocations of \string\embedfilefinish
    }{%
      The list of embedded files is already written.%
    }%
  \else
    \ifx\EmbedFile@list\empty
    \else
      \global\EmbedFile@finishedtrue
      \begingroup
        \def\do##1##2{%
          <##1>##2%
        }%
        \immediate\pdfobj{%
          <<%
            /Names[\EmbedFile@list]%
          >>%
        }%
        \pdfnames{%
          /EmbeddedFiles \the\pdflastobj\space 0 R%
        }%
      \endgroup
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname AtEndDocument\endcsname\relax
\else
  \AtEndDocument{\embedfilefinish}%
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\EmbedFileRestoreCatcodes
%</package>
%    \end{macrocode}
% \section{Installation}
%
% \paragraph{CTAN.} This package is available on
% CTAN\footnote{\url{ftp://ftp.ctan.org/tex-archive/}}:
% \begin{description}
% \item[\CTAN{macros/latex/contrib/oberdiek/embedfile.dtx}] The source file.
% \item[\CTAN{macros/latex/contrib/oberdiek/embedfile.pdf}] Documentation.
% \end{description}
%
% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting
% \docstrip\ archive. The files are extracted by running the
% \xfile{.dtx} through \plainTeX:
% \begin{quote}
%   \verb|tex embedfile.dtx|
% \end{quote}
%
% \paragraph{TDS.} Now the different files must be moved into
% the different directories in your installation TDS tree
% (also known as \xfile{texmf} tree):
% \begin{quote}
% \sbox0{^^A
% \begin{tabular}{@{}>{\ttfamily}l@{$\quad\rightarrow\quad$}>{\ttfamily}l@{}}
%   embedfile.sty & tex/latex/oberdiek/embedfile.sty\\
%   dtx-attach.sty & tex/latex/oberdiek/dtx-attach.sty\\
%   embedfile.pdf & doc/latex/oberdiek/embedfile.pdf\\
%   embedfile-example-plain.tex & doc/latex/oberdiek/embedfile-example-plain.tex\\
%   embedfile.dtx & source/latex/oberdiek/embedfile.dtx\\
% \end{tabular}^^A
% }%
% \ifdim\wd0>\linewidth
%   \mbox{}\nobreak\hskip0pt minus\leftmargin
%   \usebox0
%   \nobreak\hskip0pt minus\rightmargin
% \else
%   \usebox0
% \fi
% \end{quote}
% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's
% TDS installing feature, then some files can already be in the right
% place, see the documentation of \docstrip.
%
% \paragraph{Refresh file databases.} If your \TeX~distribution
% (\teTeX, \mikTeX, \dots) rely on file databases, you must refresh
% these. For example, \teTeX\ users run \verb|texhash| or
% \verb|mktexlsr|.
%
% \subsection{Some details for the interested}
%
% \paragraph{Attached source.}
%
% The PDF documentation on CTAN also includes the
% \xfile{.dtx} source file. It can be extracted by
% AcrobatReader 6 or higher. Another option is \textsf{pdftk},
% e.g. unpack the file into the current directory:
% \begin{quote}
%   \verb|pdftk embedfile.pdf unpack_files output .|
% \end{quote}
%
% \paragraph{Unpacking with \LaTeX.}
% The \xfile{.dtx} chooses its action depending on the format:
% \begin{description}
% \item[\plainTeX:] Run \docstrip\ and extract the files.
% \item[\LaTeX:] Generate the documentation.
% \end{description}
% If you insist on using \LaTeX\ for \docstrip\ (really,
% \docstrip\ does not need \LaTeX), then inform the autodetect routine
% about your intention:
% \begin{quote}
%   \verb|latex \let\install=y\input{embedfile.dtx}|
% \end{quote}
% Do not forget to quote the argument according to the demands
% of your shell.
%
% \paragraph{Generating the documentation.}
% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate
% the documentation. The process can be configured by the
% configuration file \xfile{ltxdoc.cfg}. For instance, put this
% line into this file, if you want to have A4 as paper format:
% \begin{quote}
%   \verb|\PassOptionsToClass{a4paper}{article}|
% \end{quote}
% An example follows how to generate the
% documentation with pdf\LaTeX:
% \begin{quote}
%\begin{verbatim}
%pdflatex embedfile.dtx
%makeindex -s gind.ist embedfile.idx
%pdflatex embedfile.dtx
%makeindex -s gind.ist embedfile.idx
%pdflatex embedfile.dtx
%\end{verbatim}
% \end{quote}
%
% \begin{thebibliography}{9}
% \bibitem{attachfile}
%   Scott Pakin: \textit{The \xpackage{attachfile} package};
%   2005/02/20 v1.2;
%   \CTAN{macros/latex/contrib/attachfile/}.
%
% \bibitem{attachfile2}
%   Heiko Oberdiek: \textit{The \xpackage{attachfile2} package};
%   2006/08/16 v2.2;
%   \CTAN{macros/latex/contrib/oberdiek/attachfile2.pdf}.
%
% \bibitem{pdfspec}
%   Adobe Systems Incorporated:
%   \href{http://partners.adobe.com/public/developer/en/pdf/PDFReference16.pdf}%
%       {\textit{PDF Reference, Fifth Edition, Version 1.6}},%
%   November 2004;
%   \url{http://partners.adobe.com/public/developer/pdf/index_reference.html}.
%
% \bibitem{mime}
%   Network Working Group: RFC 2046, \textit{Multipurpose Internet Mail Extensions (MIME) Part Two:
%     Media Types}, November 1996; \url{http://www.rfc-editor.org/}.
%
% \bibitem{types}
%   IANA (Internet Assigned Numbers Authority):
%   \textit{MIME Media Types}, May 2006;
%   \url{http://www.iana.org/assignments/media-types/}.
%
% \end{thebibliography}
%
% \begin{History}
%   \begin{Version}{2006/08/16 v1.0}
%   \item
%     First public version,
%   \end{Version}
% \end{History}
%
% \PrintIndex
%
% \Finale
\endinput
