%% This is file `docstrip.tex' generated %% on <1991/2/1> with the docstrip utility (v1.1l test). %% %% The original source file was `docstrip.doc'. %% Included modules: `stats'. %% %% IMPORTANT NOTICE: %% You are not allowed to distribute this file. %% For distribution of the original source see %% the copyright notice in the file `docstrip.doc'. %% \def\filename{docstrip} \def\fileversion{v1.1l test} \def\filedate{90/12/10} \def\docdate {90/06/15} %% \CheckSum{835} %% \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 \~} %% \nofiles \makeatletter %% correcting a LaTeX bug first... \def\@xtypein[#1]#2{\typeout{#2}\read\sixt@@n to#1\ifx #1\@defpar \def#1{}\else \@iden{\expandafter\@strip\expandafter #1#1\@gobble\@gobble} \@gobble\fi\@typein} \typeout{LaTeX utility: `docstrip' \fileversion\space <\filedate> (FMi)} \typeout{English documentation \@spaces\@spaces\space\space <\docdate> (FMi)} \typeout{} \typeout{**********************************************************} \typeout{* This program converts documented macro-files into fast *} \typeout{* loadable files by stripping of (nearly) all comments! \space*} \typeout{**********************************************************} \typeout{} \def\test@batchfile{% \ifx\undefined\batchfile \let\batchfile\default@batchfile \@okaytrue \else \@okayfalse \fi \openin\batch@stream \batchfile\relax \ifeof\batch@stream \if@okay \else \typeout{*************************************************} \typeout{* Could not find your \string\batchfile=\batchfile} \typeout{* Try to continue without it} \typeout{*************************************************} \fi \else \if@okay \typeout{*************************************************} \typeout{* Batch file docstrip.cmd found. Use it ? (y/n) *} \typein[\answer] {*************************************************} \def\@tempa{y}% \else \let\answer\@tempa \fi \ifx\@tempa\answer \process@batchfile \fi \fi} \def\ask@questions{% \typeout{} \typeout{***************************************************} \typeout{* First type the extension of your input file(s): *} \typein[\infileext] {***************************************************} \typeout{} \typeout{**************************************************} \typeout{* Now type the extension of your output file(s): *} \typein[\outfileext] {**************************************************} \typeout{} \typeout{**************************************************} \typeout{* Now give the name(s) of module(s) to include: \space *} \typein[\includelist] {**************************************************} \typeout{} \typeout{**************************************************} \typeout{* Finally give the list of input file(s) without *} \typeout{* extension separated by commas if necessary:\@spaces*} \typein[\filelist] {**************************************************}} \newif\if@okay \newread\@infile \newread\@outfile \def^^L{ } \def\set@filenames{% \edef\in@filename{\main@filename.\infileext}% \edef\out@filename{\main@filename.\outfileext}} \def\check@filenames{% \ifx\infileext\outfilext \typeout{} \typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} \typeout{! Not possible to read from and write to the same file !} \typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} \@okayfalse \else \@okaytrue \immediate\openin\@infile \in@filename \relax \ifeof \@infile \@okayfalse \typeout{} \typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} \typeout{! Input file `\in@filename' not found !} \typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} \else \check@outfile \fi \immediate\closein\@infile \fi} \def\check@outfile{% \immediate\openin\@outfile \out@filename \relax \ifeof \@outfile \@okaytrue \else \@okayfalse \typeout{} \typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} \typeout{! Output file `\out@filename' already exists.} \typeout{! Do you want to overwrite it? (yes/no)} \typein[\answer]{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} \def\@tempa{yes}% \ifx\answer\@tempa \@okaytrue \fi \fi \immediate\closein\@outfile} \def\write@postamble{% \owrite{\string\endinput}% \owrite{\double@percent}% \owrite{\double@percent End of file `\out@filename'.}% \immediate\closeout\@outfile} \newcount\numberof@files \newcount\meta@comment \newcount\normal@comment \newcount\code@line \newcount\processed@line \newcount\summeta@comment \newcount\sumnormal@comment \newcount\sumcode@line \newcount\sumprocessed@line \def\process@line{% \advance\processed@line\@ne \futurelet\next\process@@line} \begingroup \catcode`\*=12 \lccode`\*=`\% \lowercase{% \gdef\double@percent{** } \gdef\percent@{*} \gdef\process@@line{% \if*\next \expandafter\check@second \else \advance\code@line\@ne \endlast@module \expandafter\put@line \fi} \gdef\check@@second{% \if*\next \advance\meta@comment\@ne \endlast@module \let\next\put@line \else \if<\next \let\next\check@module \else \advance\normal@comment\@ne \endlast@module \let\next\remove@line \fi \fi \next} } \endgroup \gdef\check@second#1{\futurelet\next\check@@second} \def\check@module<{\futurelet\next\check@@module} \def\check@@module{% \if+\next \let\next\plus@module \else \if-\next \let\next\minus@module \else \if*\next \let\next\star@module \else \if/\next \let\next\slash@module \else \advance\normal@comment\@ne \endlast@module \let\next\remove@line \fi \fi \fi \fi \next} \def\module@included#1#2{% \ifin@line@module \def\@tempa{#1#2}% \ifx\@tempa\curr@module \else \maybe@message{>}\in@line@modulefalse \module@included#1{#2}\fi \else \in@line@moduletrue \def\curr@module{#1#2}% \maybe@message{<#1#2}% \inclcurr@modulefalse \@for\@tempa:=#2\do {\edef\@tempb{\noexpand\in@{\@tempa,}{\includelist,}}% \@tempb \ifin@ \inclcurr@moduletrue \fi}% \fi } \def\endlast@module{% \ifin@line@module \maybe@message{>}\in@line@modulefalse \fi} \newif\ifin@line@module \newif\ifinclcurr@module \def\plus@module+#1>{% \module@included+{#1}% \ifinclcurr@module \advance\code@line\@ne \expandafter\put@module \else \advance\normal@comment\@ne \expandafter\remove@line \fi} \newif\ifoutput@block \output@blocktrue \newif\ifin@block \def\star@module*#1>{% \ifin@block \errmessage{Already in block <\block@type>}% \else \in@blocktrue \def\block@type{*#1}% \module@included*{#1}% \in@line@modulefalse \ifinclcurr@module \output@blocktrue \else \output@blockfalse \fi \fi \advance\normal@comment\@ne \remove@line } \def\slash@module/#1>{% \ifin@block \in@blockfalse \output@blocktrue \maybe@message{\percent@}% \maybe@message{>}% \def\@tempa{*#1}% \ifx\@tempa\block@type \else \errmessage{Block <\block@type> ended by }% \fi \else \errmessage{There was no start block for }% \fi \advance\normal@comment\@ne \remove@line } \def\minus@module-#1>{% \module@included-{#1}% \ifinclcurr@module \advance\normal@comment\@ne \expandafter\remove@line \else \advance\code@line\@ne \expandafter\put@module \fi} \def\in@#1#2{% \def\in@@##1#1##2##3\in@@{% \ifx\in@##2\in@false\else\in@true\fi}% \in@@#2#1\in@\in@@} \newif\ifin@ \def\include#1{\def\includelist{#1}} \include{} \def\owrite{% \maybe@message{.}% \immediate\write\@outfile} \let\end@inline\relax \def\put@module#1\end@inline{\owrite{#1}} \def\put@line#1\end@inline{% \ifoutput@block \owrite{\in@line}% \else \maybe@message{\percent@}% \fi } \def\remove@line#1\end@inline{% \maybe@message{\percent@}% } \def\setup@reading{% \immediate\openin\@infile \in@filename \relax \@sanitize \@makeother\{% \@makeother\}% \endlinechar\m@ne \par@cnt\z@} \edef\end@input{\expandafter\@gobble\string\\endinput} \newcount\par@cnt \def\process@file{% \typeout{}% \typeout{Processing \in@filename\space \ifx\includelist\@empty \else (\includelist) \fi -> \out@filename}% \typeout{}% \begingroup \setup@reading \loop \read\@infile to\in@line \ifx\end@input\in@line \typeout{File \in@filename\space ended by \string\endinput.}% \@tempswafalse % end the loop \else \ifx\@empty\in@line \advance\par@cnt\@ne \else \par@cnt\z@ \fi \ifnum \par@cnt<2 \expandafter\process@line\in@line\end@inline \else \maybe@message{/}% \fi \ifeof\@infile \@tempswafalse \else \@tempswatrue \fi \fi \if@tempswa \repeat \immediate\closein\@infile \typeout{Lines \space processed: \the\processed@line} \typeout{Comments removed: \the\normal@comment} \typeout{Comments \space passed: \the\meta@comment} \typeout{Codelines passed: \the\code@line} \global\advance\sumprocessed@line\processed@line \global\advance\sumnormal@comment\normal@comment \global\advance\summeta@comment\meta@comment \global\advance\sumcode@line\code@line \global\advance\numberof@files\@ne \endgroup} \def\generatefile#1#2#3{% \def\out@filename{#1}% \typeout{}% \typeout{Generating \out@filename:}% \typeout{}% \if#2t\check@outfile\else\@okaytrue\fi \if@okay \def\from##1##2{\owrite{\double@percent ##1 \if!##2!\else \space (with modules: `##2')\fi}}% \edef\reference@lines{\owrite{\double@percent }% \owrite{\double@percent The original source files were:}% \owrite{\double@percent }% #3}% \def\from##1##2{\def\in@filename{##1}% \def\includelist{##2}% \process@file}% \write@preamble#3\write@postamble \let\reference@lines\original@refs \fi} \def\processfile#1#2#3#4{% \def\main@filename{#1}% \def\infileext{#2}% \def\outfileext{#3}% \set@filenames \if #4t\check@filenames\fi \if@okay \write@preamble \process@file \write@postamble \else \@okaytrue \fi} \def\write@preamble{% \immediate\openout\@outfile \out@filename \relax \owrite{\double@percent This is file `\out@filename' generated}% \owrite{\double@percent on <\the\year/\the\month/\the\day> with the docstrip utility (\fileversion). }% \reference@lines \owrite{\double@percent IMPORTANT NOTICE:}% \owrite{\double@percent You are not allowed to distribute this file.}% \owrite{\double@percent For distribution of the original source see }% \owrite{\double@percent the copyright notice in the file `\in@filename'. }% \owrite{\double@percent }} \def\original@refs{% \owrite{\double@percent }% \owrite{\double@percent The original source file was `\in@filename'.}% \ifx\includelist\@empty\else \owrite{\double@percent Included modules: `\includelist'.}\fi \owrite{\double@percent }} \let\reference@lines\original@refs \def\default@batchfile{docstrip.cmd} \def\showprogress{\let\maybe@message\message} \def\keepsilent{\let\maybe@message\@gobble} \def\preamble{\begingroup \let\reference@lines\relax \let\out@filename\relax \let\in@filename\relax \@tempswatrue \def\@tempa{\endpreamble}% \def\@tempb{\par}% \gdef\write@preamble{% \immediate\openout\@outfile \out@filename \relax \owrite{\double@percent }% \owrite{\double@percent This is file `\out@filename' generated}% \owrite{\double@percent on <\the\year/\the\month/\the\day> with the docstrip utility (\fileversion). }% \reference@lines}% \loop \read\batch@stream to \batch@line % get stuff for preamble \ifx\batch@line\@tempa \@tempswafalse \else \xdef\write@preamble{\write@preamble\owrite {\double@percent \ifx\batch@line\@tempb\else\batch@line\fi}}\fi \if@tempswa \repeat\endgroup} \def\postamble{\begingroup \@tempswatrue \def\@tempa{\endpostamble}% \def\@tempb{\par}% \gdef\write@postamble{}% \loop \read\batch@stream to \batch@line % get stuff for postamble \ifx\batch@line\@tempa \@tempswafalse \else \xdef\write@postamble{\write@postamble\owrite {\double@percent \ifx\batch@line\@tempb\else\batch@line\fi}}\fi \if@tempswa \repeat\endgroup \xdef\write@postamble{\write@postamble \immediate\closeout\@outfile}} \newif\ifmore@files \more@filestrue \newread\batch@stream \def\process@batchfile{% \@okaytrue \let\endinput\@okayfalse \loop \ifeof\batch@stream \@okayfalse \else \read\batch@stream to \batch@line % get input line \batch@line \fi \if@okay \repeat \more@filesfalse} \showprogress \test@batchfile \@whilesw\ifmore@files\fi {\ask@questions \@for\main@filename:=\filelist \do {\set@filenames \check@filenames \if@okay \write@preamble \process@file \write@postamble \fi}% \typein[\answer]{More files to process? (yes/no)} \def\@tempa{yes}% \ifx\answer\@tempa \else \more@filesfalse \fi} \typeout{} \ifnum\numberof@files>\@ne \typeout{Overall statistics:} \typeout{Files \space processed: \the\numberof@files} \typeout{Lines \space processed: \the\sumprocessed@line} \typeout{Comments removed: \the\sumnormal@comment} \typeout{Comments \space passed: \the\summeta@comment} \typeout{Codelines passed: \the\sumcode@line} \fi \@@end \endinput %% %% End of file `docstrip.tex'.