\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{longnamefilelist}[2012/09/30 v0.2
                 list files with long names (UL)]
%%
%% Copyright (C) 2012 Uwe Lueck,
%% http://www.contact-ednotes.sty.de.vu
%% -- author-maintained in the sense of LPPL below --
%%
%% This file can be redistributed and/or modified under
%% the terms of the LaTeX Project Public License; either
%% version 1.3c of the License, or any later version.
%% The latest version of this license is in
%%     http://www.latex-project.org/lppl.txt
%% We did our best to help you, but there is NO WARRANTY.
%%
%% Please report bugs, problems, and suggestions via
%%
%%   http://www.contact-ednotes.sty.de.vu
%%
%% == Usage with 'myfilist' ==
%% \label{sec:myfilist}
%% === Basically ===
%% \label{sec:basic}
%% In order to get a reduced and/or rearranged list of used files 
%% with the \ctanpkgref{myfilist} package, 
%% `longnamefilelist.sty' must be loaded earlier than 
%% `myfilist.sty'. This is due to a kind of limitation of the latter, 
%%  it \emph{issues} `\listfiles' (TODO). 
%% Therefore `\listfiles' must be modified earlier---or \emph{issued} earlier, 
%% in this case the `\listfiles' in `myfilist.sty' does nothing.
%% The file `SrcFILEs.txt' accompanying the distribution of 'longnamefilelist',
%% e.g., can be generated by running the following file `srcfiles.tex'
%% with \LaTeX:
%% %% v0.1b 2012/03/14 avoid right-arrow substitution TODO:
%% \begin{quotation}\tt\small
%% \expandafter\def\expandafter\{\expandafter{\string{}
%% \expandafter\def\expandafter\}\expandafter{\string}}
%% \obeyspaces\obeylines
%% \cs{ProvidesFile}\{srcfiles.tex\}[2012/03/12
%%  ~                           file infos -\empty> SrcFILEs.txt]
%% \cs{RequirePackage}\{longnamefilelist\}
%% \cs{listfiles}[16]
%% \cs{RequirePackage}\{myfilist\}
%% \%\% documentation:
%% \cs{ReadFileInfos}\{longnamefilelist\}
%% \%\% documentation settings and auxiliaries:
%% \cs{ReadPackageInfos}\{fifinddo,makedoc,niceverb\}
%% \cs{ReadFileInfos}\{makedoc.cfg,mdoccorr.cfg,srcfiles\}
%% \cs{ListInfos}[SrcFILEs.txt]
%% \end{quotation}
%%
%% === Shorthand ===
%% \label{sec:short}
%% In the above example, the 'myfilist' command `\EmptyFileList'
%% is missing---it is not intended there. Usually however, 
%% it \emph{is} intended, i.e., the following sequence of 
%% lines is wanted:
%% \begin{quotation}\tt\small
%% \expandafter\def\expandafter\{\expandafter{\string{}
%% \expandafter\def\expandafter\}\expandafter{\string}}
%% \obeyspaces\obeylines
%% \cs{RequirePackage}\{longnamefilelist\}
%% \cs{listfiles}[<digit><digit>]
%% \cs{RequirePackage}\{myfilist\}
%% \cs{EmptyFileList}[<read-again-files>]
%% \end{quotation}
%% With v0.2, the last three lines can be replaced by 
%% \[|\MaxLengthEmptyList{<digit><digit>}[<read-again-files>|]\]
%% ---``optionally" without \qtd{`[<read-again-files>]'}.
%% This may save the user from worrying about usage 
%% with 'myfilist'.
%% 
%% == \cs{listfiles} extended ==
%% \label{sec:list}
%% |\listfiles[<number>]| ``orders" a final list of files 
%% with infos and optimizes the list's alignment 
%% (in plain text output) when the longest base filename
%% consists of <number> characters:
\renewcommand*{\listfiles}[1][\LNFL@chars@set]{%
%% The default parameter `\LNFL@chars@set' is defined in Sec.~\ref{sec:set}.
  \let\listfiles\relax
  \def\LNFL@chars{#1}%
%% This stores the actual parameter. It is used several times: 
%% for preparing the alignment and the final line of stars here 
%% and then for aligning each list entry by `\@listfiles' 
%% from `\@dofilelist'.
%%
%% \LaTeX's `\@dofilelist' appends a list of ``dummy" tokens `\\'
%% to each filename before `\@listfiles' is run on the filename. 
%% \LaTeX's `\@listfiles' is run 8 times, and there are 8 dummies. 
%% Dummies not looked at by `\@listfiles' are removed by some 
%% ``killing" macro using a token that delimits the dummy list. 
%% We use `\relax' tokens as dummies instead. They need not to be removed. 
%% And we append <number> dummies. They are stored in a macro `\LNFL@dummies':
  \let\LNFL@dummies\@empty 
%% `\LNFL@spaces' is used to align the list title ``*file list*"
%% flushleft with the filenames:
  \def\LNFL@spaces{ }%
%% We also use more stars than \LaTeX\ below the list. %% space 2012/03/15
%% (However, all of this can also be used for \emph{shorter} names 
%%  with \emph{less} stars below.)
  \def\LNFL@stars{***}%
  \count@\LNFL@chars\relax
%% This initializes the loop for adding dummies, title spaces, 
%% and stars below the list.
  \@whilenum\count@>\z@\do{%
    \edef \LNFL@dummies{\LNFL@dummies\relax}%
    \ifnum8<\count@
    \edef \LNFL@spaces { \LNFL@spaces}%
    \fi
    \edef \LNFL@stars  {*\LNFL@stars}%
    \advance\count@\m@ne
  }%
%% Our version of `\@listfiles' takes one token ahead at a time
%% and counts the numbes of tokens that have been looked at so far. 
%% For each \emph{dummy} found instead of a filename character, 
%% (as with \LaTeX) a space is added to `\filename@area'
%% that is used to move the filenames right. 
%% As opposed to the \LaTeX\ original version, `\@listfiles' stops 
%% being applied after <number> times:
  \def\@listfiles##1{%
    \ifx##1\relax \edef\filename@area{ \filename@area}\fi
    \advance\count@\m@ne
    \ifnum\count@>\z@ \expandafter\@listfiles \fi }%
  \def\@dofilelist{%
%% In \LaTeX's `\@dofilelist', we first replace the single space 
%% starting the title line by `\LNFL@spaces':
     \typeout{^^J\LNFL@spaces *File List*}%
     \@for\@currname:=\@filelist\do{%
%% This is the loop body adding a list entry line, first like \LaTeX:
       \filename@parse\@currname
       \edef\reserved@a{%
          \filename@base.%
          \ifx\filename@ext\relax tex\else\filename@ext\fi}%
       \expandafter\let\expandafter\reserved@b
                              \csname ver@\reserved@a\endcsname
%% We use `\@tempa' for expanding both the filename and the list of dummies 
%% in time:
       \edef\@tempa{\filename@base\LNFL@dummies}%
       \count@\LNFL@chars\relax
       \expandafter\expandafter\expandafter\@listfiles\expandafter
             \filename@area\@tempa
       \typeout{%
         \filename@area\reserved@a
         \ifx\reserved@b\relax\else
%% I prefer \emph{two} spaces between the columns to four of them:
           \space\space %%% \@spaces
           \reserved@b\fi}}%
%% The line of stars:
     \typeout{ \LNFL@stars^^J}}%
}
%% %% moved up from end 2012/09/30: 
%% TODO: 1.~keyval package option avoiding `\listfiles' 
%%       2.~measuring longest filename?
%% == Setting Name Length \emph{before} \cs{listfiles} ==
%% \label{sec:set}
%% I first used |\SetLongNameFileListChars{<number>}| 
%% for combining the package with 'myfilist' right in place of 
%% `\listfiles[<number>]'. Both commands have the same effect 
%% on the following `\RequirePackage{myfilist}'.
%% Now that I have realized that I could issue `\listfiles' earlier, 
%% `\SetLongNameFileListChars' is rather obsolete---but who knows\,...?
\newcommand*{\SetLongNameFileListChars}{\def\LNFL@chars@set}
%% This macro `\LNFL@chars@set' is used as the default for our new 
%% optional parameter for `\listfiles' (Sec.~\ref{sec:list}).
\SetLongNameFileListChars{8}
%% This sets the default value for `\listfiles' to the maximum number 
%% of characters in the base filename that 
%% \LaTeX\          %% 2012/03/15 %%% `\LaTeX' 
%% somewhat expects.
%%
%% == Shorthand for 'myfilist' ==
%% |\MaxLengthEmptyList{<digit><digit>}[<read-again-files>]|
%% as described in Section~\ref{sec:short} (v0.2):
\newcommand*{\MaxLengthEmptyList}[1]{%
    \listfiles[#1]\RequirePackage{myfilist}\EmptyFileList}
%%
%% == Leaving the Package File ==
\endinput
%%
%% == VERSION HISTORY ==

v0.1   2012/03/11   very first
       2012/03/12   debugging; \LNFL@spaces, \LNFL@stars
v0.1b  2012/03/14   doc fixes: avoiding arrow substitution in listing,
                    space after "who knows"
v0.1c  2012/03/15   more typographical fixes concerning "\LaTeX"
v0.2   2012/09/30   \MaxLengthEmptyList
