This is silly. There are better ways to do it. Still, it was sort of fun to write.
\endlinechar=-1
\newread\in
\newwrite\out
\message{Please enter input file name: }
\read16to\inname
\openin\in=\inname \relax
\ifeof\in
\immediate\write16{Failed to open \inname.}
\expandafter\end
\fi
\message{Please enter output file name: }
\read16to\outname
\immediate\openout\out=\outname \relax
\begingroup
\catcode`@0
\catcode`(1
\catcode`)2
\catcode`\{12
\catcode`\}12
\catcode`I12
\catcode`N12
\catcode`P12
\catcode`U12
\catcode`T12
\catcode`\\12
@lowercase(
@gdef@dosplitline#1\INPUT{#2}#3@splitsentinal(@def@ante(#1)@def@file(#2)@def@post(#3))
@gdef@splitline(@expandafter@dosplitline@line\INPUT{@sentinal}@splitsentinal)
)
@endgroup
\def\splitpost{\expandafter\dosplitline\post\splitsentinal}
\def\sentinal{\sentinal}
\catcode`\%12
\def\processline{
\ifx\file\sentinal
\immediate\write\out{\ante}
\let\temp\relax
\else
\immediate\write\out{\ante%}
\let\temp\processline
\copyfile
\splitpost
\ifx\empty\ante
\ifx\file\sentinal
\let\temp\relax
\fi
\fi
\fi
\temp
}
\newread\f
\def\copyfile{
\openin\f=\file\relax
\ifeof\f
\immediate\write16{Failed to open \file. Continuing.}
\else
\begingroup
\loop
\readline\f to\line
\unless\ifeof\f
\immediate\write\out{\line}
\repeat
\endgroup
\closein\f
\fi
}
\loop
\readline\in to\line
\unless\ifeof\in
\splitline
\processline
\repeat
\closein\in
\immediate\closeout\out
\end
Note: The copyright belongs to the blog author and the blog. For the license, please see the linked original source blog.
Leave a Reply
You must be logged in to post a comment.