home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari FTP
/
ATARI_FTP_0693.zip
/
ATARI_FTP_0693
/
Tex
/
lgrind.zoo
/
docstrip.tex
< prev
next >
Wrap
Text File
|
1992-09-28
|
15KB
|
544 lines
% $Id: docstrip.tex,v 1.1 91/09/08 03:53:12 gvr Exp $
%
%% 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 </#1>}%
\fi
\else
\errmessage{There was no start block for </#1>}%
\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 }}
\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'.