%% BEGIN pst-make.tex %% %% For creating header files and stripped input files for PSTricks. %% %% Works with PSTricks version 0.93, and maybe later versions. %% %% COPYRIGHT 1993, by Timothy Van Zandt, tvz@Princeton.EDU %% %% See end of file for instructions. \catcode`\@=11 \expandafter\ifx\csname @latexerr\endcsname\relax\else \let\end\@@end \fi \def\TypeOut{\begingroup\obeyspaces\TypeOutI} \def\TypeOutI#1{\immediate\write16{#1}\endgroup} \newlinechar`\^^J \def\Empty{} \def\@NNil{\@Nil} {\catcode`\%=12\gdef\%{%}} \edef\PPercent{\%\%} \newread\InFile \newwrite\OutFile \newcount\countA \newcount\countB \def\OpenIn{\immediate\openin\InFile\TheInFile\relax} \def\OpenOut{\immediate\openout\OutFile\TheOutFile\relax} \def\CloseIn{\immediate\closein\InFile} \def\CloseOut{\immediate\closeout\OutFile} \def\ReadIn{\immediate\read\InFile to} \def\WriteOut#1{\immediate\write\OutFile{#1}} %% \CheckProcede \newif\ifPMnonstop \def\CheckProcede{% \read16 to \OK \expandafter\CheckProcedeI\OK\relax\@Nil} \long\def\CheckProcedeI#1#2\@Nil{% \ifx#1y \PMnonstopfalse \else \ifx#1Y \PMnonstoptrue \else \ifx#1n \let\Procede\relax \PMnonstopfalse \else \ifx#1N \let\Procede\relax \PMnonstoptrue \else \let\Procede\end \fi \fi \fi \fi} \def\CheckFile#1{% \ifPMnonstop\else \immediate\openin1=#1 \ifeof1\else \TypeOut{^^J% !! File `#1' exists and will be erased if in current directory!^^J% !! Make `#1'? (y=yes; Y-yes,nonstop; n=no; N=no,nonstop; q=quit)} \CheckProcede \fi \fi} %% \PMstripfile % \PMStringLength expands "#1" and counts the number of non-space tokens, % assigning the result to "#2", which should be a count register. % \PMStringLengthI does the same, but without expanding "#1". \newcount\PMStringcnt \def\PMStringLength#1#2{% \edef\next{#1}% \expandafter\PMStringLengthI\expandafter{\next}#2} \def\PMStringLengthI#1#2{% \PMStringcnt=0 \afterassignment\PMStringLengthII\let\next#1\@Nil #2=\PMStringcnt} \def\PMStringLengthII{% \ifx\next\@Nil \let\next\relax \else \advance\PMStringcnt by 1 \def\next{\afterassignment\PMStringLengthII\let\next}% \fi \next} \newif\ifflag \newif\ifpstdef \newif\ifMakeHeader \begingroup \catcode`\!=0 !catcode`!\=12 !gdef!PMpst@def{\pst@def} !gdef!PMendinput{\endinput} !gdef!PMpst@ATH{\pst@ATH} !gdef!PMpst@useheader{\ifx\pst@useheader\iftrue} !gdef!PMelse{\else} !gdef!PMfi{\fi} !catcode`!(=1 !catcode`!)=2 !catcode`!{=12 !catcode`!}=12 !gdef!WritePstDef\pst@def{#1}<#2!@Nil(% !pstdeftrue !WriteOut(\def\tx@#1{#1 })% !CheckEndPstDef) !endgroup \def\CheckEndPstDef{\expandafter\CheckEndPstDefI\InLine>\@Nil} \def\CheckEndPstDefI#1>#2\@Nil{% \def\temp{#2}% \ifx\temp\Empty\else\pstdeffalse\fi} \def\ProcessLine{% \ifx\InLine\Empty\else \ifcase\PMuseheaderflag\relax \ifx\InLine\PMpst@useheader \def\PMuseheaderflag{1} \else \ProcessLineI \fi \or \ifx\InLine\PMelse \def\PMuseheaderflag{2} \else \ifMakeHeader \ProcessLineI \fi \fi \or \ifx\InLine\PMfi \def\PMuseheaderflag{0} \else \ifMakeHeader\else \ProcessLineI \fi \fi \fi \fi} \def\PMuseheaderflag{0} \def\ProcessLineI{% \expandafter\ProcessLineII\InLine \Empty\Empty\Empty\Empty\Empty\Empty\Empty\Empty\Empty\@Nil} \def\ProcessLineII#1#2#3#4#5#6#7#8#9\@Nil{% \def\temp{#1#2}% \ifx\temp\PPercent \WriteOut\InLine \else \def\temp{#1} \ifx\temp\%\else \def\temp{#1#2#3#4#5#6#7#8} \ifx\temp\PMpst@ATH\else \ifMakeHeader \def\temp{#1#2#3#4#5#6#7#8} \ifx\temp\PMpst@def \WritePstDef#1#2#3#4#5#6#7#8#9\@Nil \else \WriteOut\InLine \fi \else \WriteOut\InLine \fi \fi \fi \fi} \newif\ifobeyspaces \def\PMmo#1{\catcode`#1=12\relax} \def\PMsanitize{% \ifobeyspaces\PMmo\ \fi \PMmo\\\PMmo\$\PMmo\&\PMmo\#\PMmo\^\PMmo\_% \PMmo\%\PMmo\~\PMmo\}\PMmo\{} \def\PMstripfile{% \begingroup \PMsanitize \endlinechar-1 \flagtrue \loop \ReadIn\InLine \ifx\PMendinput\InLine \flagfalse \else \ifpstdef \CheckEndPstDef \else \ProcessLine \fi \fi \ifflag \repeat \endgroup} %% \MakeHeader \def\MakeHeader#1#2#3{% \def\TheInFile{#1}% \def\TheOutFile{#2}% \def\ForUseFile{#3}% \TypeOut{^^J% ** Making PostScript header file `\TheOutFile' from `\TheInFile'.^^J% ** For use with `\ForUseFile'.}% \def\Procede{\MakeHeaderI} \CheckFile{\TheOutFile}% \Procede} \def\MakeHeaderI{% \begingroup \def\pst@ATH<##1>{\WriteOut{##1}} \let\pst@useheader\iftrue \let\pstcustomize\endinput \def\pst@def##1{% \begingroup \catcode`\{=12 \catcode`\}=12 \newlinechar`\^^J% \PMpst@@def{##1}} \OpenOut \let\pstcustomize\endinput \input pstricks.con \WriteOut{\%!} \WriteOut{\% PostScript prologue for \ForUseFile.} \WriteOut{% \% Created \number\year/\number\month/\number\day. Source file was \TheInFile} \input \TheInFile\relax \CloseOut \endgroup} \begingroup \catcode`\{=12 \catcode`\}=12 \catcode`\[=1 \catcode`\]=2 \gdef\PMpst@@def#1<#2>[% \expandafter\gdef\csname tx@#1\endcsname[#1 ]% \def\ThePstDef[/#1 {]% \PMStringLength[#1]\countB \advance\countB by 2 \edef\next[#2 } def \noexpand\@Nil\space]% \expandafter\PMpst@@@def\next \WriteOut[\ThePstDef]% \endgroup] \endgroup \def\PMpst@@@def#1 {% \def\next{#1} \ifx\next\@NNil \let\next\relax \else \PMStringLength{#1}\countA \advance\countB by \countA \advance\countB by 1 \ifnum\countB>72 \edef\ThePstDef{\ThePstDef^^J#1}% \countB=\countA \else \edef\ThePstDef{\ThePstDef\space#1}% \fi \let\next\PMpst@@@def \fi \next} %% \MakeInput \def\MakeInput#1#2{ \def\TheInFile{#1} \def\TheOutFile{#2} \MakeHeaderfalse \TypeOut{^^J% ** Making stripped macro file `\TheOutFile' from `\TheInFile'.^^J% ** For use without a PostScript header.} \def\Procede{\MakeInputI} \CheckFile\TheOutFile \Procede} \def\MakeInputH#1#2#3{ \def\TheInFile{#1} \def\TheOutFile{#2} \def\ForUseFile{#3}% \MakeHeadertrue \TypeOut{^^J% ** Making stripped macro file `\TheOutFile' from `\TheInFile'.^^J% ** For use with PostScript header `\ForUseFile'.} \def\Procede{\MakeInputI} \CheckFile\TheOutFile \Procede} \def\MakeInputI{% \OpenIn \OpenOut \WriteOut{\%\% BEGIN: \TheOutFile} \WriteOut{% \%\% Generated on <\the\year/\the\month/\the\day> from `\TheInFile'.} \ifMakeHeader \WriteOut{\%\% For use with the PostScript header file `\ForUseFile'.} \else \WriteOut{\%\% For use without a PostScript header file.} \fi \WriteOut{\%\%} \ReadIn\junk \PMstripfile \CloseIn \WriteOut{\string\endinput}% \WriteOut{\%\%}% \WriteOut{\%\% END: \TheOutFile}% \CloseOut} %% Action \TypeOut{^^J ************************************************************^^J * *^^J * This is pst-make.tex. *^^J * *^^J * This utility makes stripped input files *^^J * and/or PostScript header files for PSTricks. *^^J * *^^J * A .dvi file may also be produced. Just ignore it. *^^J * *^^J * The configuration file `pstricks.con' must be correct *^^J * before running this. *^^J * *^^J * See the end of pst-make.tex for further information. *^^J * *^^J ************************************************************^^J ^^J% Do you wish to procede?^^J% (y=yes; Y=yes,nonstop; n=no(quit)} \def\Procede#1{} \CheckProcede \Procede\end %%%%%%%%%%%%%%%%% INSTRUCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Run with Plain TeX or LaTeX. %% %% Configuration file must be correct before running this!! %% %% Commands: %% %% \MakeInput{infile}{outfile} Create input file, use w/o header. %% \MakeInputH{infile}{outfile}{header} Create input file, use w/ header. %% \MakeHeader{infile}{outfile}{inputfile} Create header file %% %% The following controls whether spaces at beginning of line are included: %% \obeyspacestrue %% \obeyspacesfalse %% E.g., pstricks.tex is about 10% smaller when spaces are omitted, but %% the file is much harder to read. On the other hand, you should %% be reading pstricks.doc. Spaces are omitted by default. %% %% See read-me.pst for addition installation instructions. %% This creates standard files with PostScript header files: \MakeInputH{pstricks.doc}{pstricks.tex}{pstricks.pro} \MakeHeader{pstricks.doc}{pstricks.pro}{pstricks.tex} \MakeInputH{pst-node.doc}{pst-node.tex}{pst-node.pro} \MakeHeader{pst-node.doc}{pst-node.pro}{pst-node.tex} \MakeInputH{pst-coil.doc}{pst-coil.tex}{pst-coil.pro} \MakeHeader{pst-coil.doc}{pst-coil.pro}{pst-coil.tex} %% This creates standard files without PostScript header files: %\MakeInput{pstricks.doc}{pstricks.tex} %\MakeInput{pst-node.doc}{pst-node.tex} %\MakeInputHpst-coil.doc}{pst-coil.tex} %% Don't delete the following: \end %% END pst-make.tex