diff options
author | Karl Berry <karl@freefriends.org> | 2016-07-05 21:38:04 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-07-05 21:38:04 +0000 |
commit | 305de0f136d4c197b9c250acbcaafa80d86ecaf2 (patch) | |
tree | 9d7894f4699d7fc2ab0ea6821abf457149ea50ab /Master/texmf-dist/doc/latex | |
parent | 1cd84cc894bdbd7f3ffed0e5afef4bd34946e48c (diff) |
protex (5jul16)
git-svn-id: svn://tug.org/texlive/trunk@41633 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex')
-rw-r--r-- | Master/texmf-dist/doc/latex/protex/ChangeLog | 17 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/protex/LitProg | 596 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/protex/README | 615 |
3 files changed, 630 insertions, 598 deletions
diff --git a/Master/texmf-dist/doc/latex/protex/ChangeLog b/Master/texmf-dist/doc/latex/protex/ChangeLog new file mode 100644 index 00000000000..d153e165e10 --- /dev/null +++ b/Master/texmf-dist/doc/latex/protex/ChangeLog @@ -0,0 +1,17 @@ +2016-07-04 Karl Berry <karl@freefriends.org> + + * README: tweak text, upload 2016-07-04 release to CTAN + (ctan.org/pkg/protex). + +2016-06-06 Karl Berry <karl@freefriends.org> + + * ProTex.sty, + * AlProTex.sty: update copyright notices. + +2016-06-05 Deimantas Galcius <deimi@vtex.lt> + + * ProTex.sty (ExpandDefSrcLineNo): new macro, with friends. + * AlProTex.sty (CodeLineNo): new option. + https://puszcza.gnu.org.ua/bugs/?136 + +This file is public domain. Started 2016, Karl Berry. diff --git a/Master/texmf-dist/doc/latex/protex/LitProg b/Master/texmf-dist/doc/latex/protex/LitProg deleted file mode 100644 index b07a48056b2..00000000000 --- a/Master/texmf-dist/doc/latex/protex/LitProg +++ /dev/null @@ -1,596 +0,0 @@ - \ifx\documentstyle\UnDef\else\documentstyle{report}\begin{document}\fi - \input ProTex.sty \def\CodeDel{{<<<-}{->>>}} - \AlProTex{tex,<<<>>>,|,title,ClearCode} \<\><<<- - -FILES -===== - -ProTex.sty -- Basic environment for literate programming -AlProTex.sty -- Adjustments for ProTeX -Examples.tex -- Code from the manual -LitProg -- Introduction and examples for main features - of (Al)ProTeX (this file) - -MANUAL -====== -Eitan Gurari, TeX and LaTeX: Drawing and Literate Programming. - McGraw-Hill, 1994. ISBN 0-07-025208-4 / 0-07-911616-7 - -MAIN FEATURES -============= - - Table of Contents - :=:=:=:=:=:=:=:=: - A. A Basic Literate Programming Environment - B. Other Basic Literate Programming Environments - C. Environments for Multi-Module Programs - D. Code and Documentation Produced from Same Specification - E. Examples B, C, D - - Note: The code for the examples can be extracted from this file - by renaming this file to LitProg.tex and compiling the - file with TeX or LaTeX (the make files for Example C, however, - must be extracted mannually). The compilation puts the code - in files progA.tex, progB.tex, progC.tex, main.tex, - aux.tex, macros.tex, progC.sty, and progD.tex. - -A. A Basic Literate Programming Environment -:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=: - - \input ProTex.sty - \AlProTex{EXT,<<<>>>,title,list,[],`} - -This environment adds to (La)TeX the following commands for handling code. - -a. Definitions of code fragments \<code title\><<< - code fragment>>> - -b. References to code segments `<code title`> - -c. Output files of code \OutputCode[EXTENSION]\<code title\> - `[EXTENSION]' is optional - when EXTENSION = EXT - -d. References to the character ` - within code fragments `` - -Warning: Do not include 2 or more consecutive blank characters - in `<code title`> - -------- Example A: Single-Module C Program ---------------------------------- -------- Put in file progA.tex and compile with LaTeX ------%->>>\<progA\><<<- - -\documentstyle{book} - -\input ProTex.sty -\AlProTex{c,<<<>>>,title,list,[],`} - -\begin{document} - -\<body\><<< -printf("\n ``hello everybody``"); ->>> - -\<prog A\><<< -`<include`> -main() -{ - `<body`> -} ->>> - -\<include\><<< -#include <stdio.h> ->>> - -\<body\><<< -printf("\n"); ->>> - -\OutputCode\<prog A\> \end{document} - ------------- End Example A -----------------%->>>\OutputCode\<progA\>\<\><<<- - - -B. Other Basic Literate Programming Environments -:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:= - -a. Framing of code fragments can be requested with the option [[]] - in \AlProTex, e.g., - - \AlProTex{EXT,<<<>>>,title,list,[],`,[[]]} - -b. Framing of code titles can be avoided by removing the option [] - from \AlProTex, e.g, - - \AlProTex{EXT,<<<>>>,title,list,`} - -c. The characters @, |, and ? can also act as escape characters within - code fragments (e.g., replace all appearances of ` with @ in Example A). - -d. Line breaks within listing of code can be obtained with the command `NL% - -e. Comments within listing of code can be obtained with commands of - the form `%...`% - -f. The choice of code-delimiters <<< and >>> can be changed by placing - a command of the form \def\CodeDel{{open delimiter}{close delimiter}} - before \AlProTex. - -g. The following command requests that future \OutputCode commands identify - the titles of the different code fragments. (Other information, like - page numbers in documents and line numbers in source files, can also - be incorporated.) - - \Comment{open-comment delimiter}{close-comment delimiter} - -PLEASE EXAMINE AND RUN EXAMPLE B - - -C. Environments for Multi-Module Programs -:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=: - -Multi-module programs can be divided into independent (La)TeX files -that can be compiled either separately or together. For instance, -in Example C - -1. Three modules (main, aux, and macros) are defined independently - (in main.tex, aux.tex, macros.tex) and are connected through a - joint root file (progC.tex). The different files import a - common style file (progC.sty). - - progC.tex Root file - main.tex LaTeX file for first module - aux.tex LaTeX file for second Module - macros.tex LaTeX file for third module - progC.sty Style file (imported by each of the above files) - make files Unix management programs - -2. The files can be compiled separately (latex main.tex, latex aux.main, - latex macros.tex) or jointly (latex progC.tex). - -3. To allow quick generation, compilation, and linkage of C-code files - (see, e.g., the make files), joint compilations do not revise code - files. - -4. Separate compilations use chapter/section/subsection/subsubsection/page - numbers that are collected in joint compilations. - -5. In joint compilations, each module ends with an index to its code titles. - -6. To allow nonrelated identical titles in different modules, and to - save on memory, previous definitions of code fragments are deleted at - the start of each module. - -PLEASE RUN AND EXAMINE EXAMPLE C - -D. Code and Documentation Produced from Same Specification -:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=== - -Example D demonstrates how math formulas and their code can be generated -from joint specifications. - -PLEASE EXAMINE AND RUN EXAMPLE D - - - -E. Examples B, C, D -:=:=:=:=:=:=:=:=:=: - -------- Example B: Variant of Example A ------------------------------------- -------- Put in file progB.tex and compile with LaTeX ------%->>>\<progB\><<<- - -\documentstyle{book} - - \input ProTex.sty -\def\CodeDel{{}{////}} -\Comment{ -/*}{*/ -} - \AlProTex{c,<<<>>>,title,list,[],`} - -\begin{document} - -\<body\> -printf("\n ``hello everybody`` within a long`NL% line of text"); -//// - -\<prog B\> -`<include`> -main() -{ - `<body`> `%a comment`% -} -//// - -\<include\> -#include <stdio.h> -//// - -\<body\> -printf("\n"); -//// - -\OutputCode\<prog B\> \end{document} ------------- End Example B -----------------%->>>\OutputCode\<progB\>\<\><<<- - - - ------------- Example C: Multi-Module C Program ------------------------------ -............ File progC.tex ...............................%->>>\<progC\><<<- - -\def\Root{} -\input progC.sty - -\INPUT{main} % import first module - -\INPUT{aux} % import second module - -\INPUT{macros} % import third module - -\end{document} -............ End file progC.tex .............%->>>\OutputCode\<progC\>\<\><<<- - -............ File main.tex ..................................%->>>\<main\><<<- -\input progC.sty - -\<include files\><<< -#include "aux.h" -#include "macros.h" -#include <stdio.h> ->>> - -\chapter{Outline} - -All the code in this module is included in file main.c. - -\section{The Main Program} - -This program does not handle the case in which the input consists just -of one 0. - -\<main.c\><<< -int main() -{ - `<main's vars`> - `<read input values, count them, and record their sum`> - `<compute and output the average of the input values`> - exit(0); -} ->>> - -\chapter{The Actual Actions} - -\section{Process the Input Values} - -The input must end with 0. - -\<read input values, count them, and record their sum\><<< -initialize_sum_count(); -WHILE TRUE DO - printf("\n Value (0 to stop)? "); - scanf("%d", &value); - IF value == 0 THEN break; FI - add_value(value); -END ->>> - -\<main's vars\><<< -int value; ->>> - -\section{Find the Result and Print It Out} - -\<compute and output the average of the input values\><<< -result = get_average(); -printf("\n Average = %f\n", result); ->>> - -\<main's vars\><<< -double result; ->>> - -\BYE{ \OutputCodE\<main.c\> } -............ End file main.tex ..............%->>>\OutputCode\<main\>\<\><<<- - -............ File aux.tex ...................................%->>>\<aux\><<<- -\input progC.sty - -\chapter{Reusable Functions} - -\section{Shared Variable} - -The following code is included in reusable.c. - -\<vars\><<< -int count; -double sum; ->>> - -\section{Setting Initial Conditions} - -The following code is included in reusable.h. - -\<export functions\><<< -void initialize_sum_count(); ->>> - -The following code is included in reusable.c. - -\<functions\><<< -void initialize_sum_count() -{ - count = 0; - sum = 0.0; -} ->>> - -\section{Processing New Values} - -\<export functions\><<< -void add_value(); ->>> - - -\<functions\><<< -void add_value(value) -{ - count++; - sum += value; -} ->>> - - -\section{Computing the Average} - -\<export functions\><<< -double get_average(); ->>> - -\<functions\><<< -double get_average() -{ - return sum / count; -} ->>> - -Old files reusable.h and reusable.c are replaced when this -file (i.e., reusable.tex) is compiled, but not when progC.tex is compiled. - -\BYE{ \OutputCodE\<aux.h\> - \OutputCodE\<aux.c\> } -............ End file aux.tex ................%->>>\OutputCode\<aux\>\<\><<<- - -............ File macros.tex .............................%->>>\<macros\><<<- -\input progC.sty - -\chapter{C Macros} - -Algol-oriented flavor. - -\<macros.h\><<< -#define TRUE 1 -#define IF if ( -#define THEN ) { -#define ELSE }else{ -#define ELSEIF }else if( -#define FI } -#define WHILE while( -#define FOR for( -#define WITH ; -#define STEP ; -#define DO ){ -#define BEGIN { -#define END } -#define CASE switch( -#define OF ){ ->>> - -\BYE{ \OutputCodE\<macros.h\> } -............ End file macros.tex ..........%->>>\OutputCode\<macros\>\<\><<<- - -............ File progC.sty .....................%->>>\ClearCode\<progC\><<<- -\ifx\Code\undefined - - \hbadness=10000 \vbadness=10000 \hfuzz=99in \vfuzz=99in - \ifx \documentstyle\UnDef - %load private style - \else - \documentstyle{book} - \let\cleardoublepage=\clearpage - \begin{document} - \fi - \input ProTex.sty - - \ifx \Root\UnDef - \AlProTex{c,<<<>>>,[],list,title,`,_^,ClearCode} - \else - \AlProTex{c,<<<>>>,[],list,title,`,_^,ClearCode,ShowIndex} - \let\SvShowIndex=\ShowIndex - \def\ShowIndex{\let\ShowIndex=\SvShowIndex} - \fi - \def\CodeId#1#2{#1.#2-pg:\the\pageno-ln:\the\inputlineno} - - \let\FileName=\jobname - \def\INPUT#1{ - \def\FileName{#1} - \immediate\openout15=#1.pg - \immediate\write15{% - \string \pageno=\the\pageno\string \relax - \string \csname\space c@page\string \endcsname = - \expandafter\the\csname c@page\endcsname\string \relax - \string \csname\space c@chapter\string \endcsname = - \expandafter\the\csname c@chapter\endcsname\string \relax - \string \csname\space c@section\string \endcsname = - \expandafter\the\csname c@section\endcsname\string \relax - \string \csname\space c@subsection\string \endcsname = - \expandafter\the\csname c@subsection\endcsname\noexpand\relax - \string \csname\space c@subsubsection\string \endcsname = - \expandafter\the\csname c@subsubsection\endcsname\noexpand\relax - } - \immediate\closeout15 - \input #1 - } - - \ifx \documentstyle\UnDef \errmessage{--- This is a LaTeX file ---}\fi - \title{Averaging Numbers} - \date{2 October 1994} - \maketitle - \tableofcontents - - \openin15=\jobname.pg - \ifeof15 \else \input \jobname.pg \fi - \closein15 - \def\OutputCodE\<#1.#2\>{% - \csname :DoName\endcsname\def{#1}{\<#1.#2\>}% - \OutputCode[#2]\<#1\>} - \let\xxxOutputCode=\OutputCodE - \def\xxOutputCode\<#1.#2\>{% - \openin15=#1.#2 - \ifeof15 \xxxOutputCode\<#1.#2\>\fi - \closein15 } -\fi - -\ifx \BYE\undefined \def\BYE#1{#1\end{document}} -\else \def\BYE#1{{\let\OutputCodE=\xxOutputCode #1}% - \ShowIndex\ClearCode}\fi - - \ifx\Root\NotDef -\vfill\break\noindent\hfil\underbar{\bf INPUT FILE: \FileName .tex} - -\<\FileName.h\><<< -`<export define`> -`<export types`> -`<export vars`> -`<export functions`> ->>> - -\<\FileName.c\><<< -`<include files`> -`<define`> -`<types`> -`<header functions`> -`<vars`> -`<functions`> ->>> - - \else \let\Root=\NotDef \fi - -\Comment{ -/*}{*/ -} - -............ End file progC.sty ........%->>>\OutputCode[sty]\<progC\>\<\><<<- - -............ Make file 1 ..................................................... -# make -fS make.1 -# call LaTeX and C for revised files - -all : progC - progC - -main.c: main.tex - rm -f main.llog - latex main > main.llog - -aux.c: aux.tex - rm -f aux.llog - latex aux > aux.llog - -aux.h: aux.tex - rm -f aux.llog - latex aux > aux.llog - -macros.h: macros.tex - rm -f macros.llog - latex macros > macros.llog - -aux.o: aux.c aux.h macros.h - cc -c aux.c - -main.o: main.c aux.h macros.h - cc -c main.c - -progC : main.o aux.o - cc -o progC main.o aux.o - -............ End make file 1 ................................................ -............ Make file 2 .................................................... -# make -fS make.2 -# call LaTeX in background for revised files - -all : main.c aux.c macros.h - -main.c: main.tex - rm -f main.llog - latex main > main.llog & - -aux.c: aux.tex - rm -f aux.llog - latex aux > aux.llog & - -macros.h: macros.tex - rm -f macros.llog - latex macros > macros.llog & - -............ End make file 2 ................................................. ------------- End Example C ------------------------------------------------- - - - ------------- Example D: Joint Specification --------------%->>>\<progD\><<<- -\documentstyle{report} -\input ProTex.sty -\AlProTex{code,<<<>>>,[],title,list} -%...................................................................... -\def\Formula#1#2{\ifx#1\UnDefined\else\immediate\write16 - {--- warning --- Redefine equation for \string#1 ---}\fi - \gdef#1{% - \expandafter\ifx \csname :Tb\endcsname\relax - \ifmmode \InMath #2 - \else \vskip\smallskipamount\noindent\hfil - $ \let\InText=\relax \InMath #2 $% - \vskip\smallskipamount - \fi - \else #2\fi}% -} -\let\PrevModifyShowCode=\ModifyShowCode -\def\ModifyShowCode{\InCode \PrevModifyShowCode } -\let\PrevModifyOutputCode=\ModifyOutputCode -\def\ModifyOutputCode{\InCode \PrevModifyOutputCode } -\def\InCode{% - \def\divide##1##2{((##1) / (##2))}% - \def\sqrt##1{SQRT(##1)}% - \def\cdot{ * }% - \def\sin##1{(sin(##1))}% - \def\power##1##2{(##1)**(##2)}% - \def\NewLn{\csname :Ln\endcsname}% - } -\def\InMath{% - \def\divide##1##2{\ifx\LaTeX\undefined{##1\over##2}\else - {\frac{##1}{##2}}\fi}% - \def\power##1##2{##1^{##2}}% - \def\NewLn{\ifinner - \ifx\InText\realx \else \hfil\break\null\hfil \fi - \else $$$$\InMath \fi}% - } -%...................................................................... -\begin{document} - -Metalanguage: {\tt\string\divide}, {\tt\string\sqrt}, {\tt\string\cdot}, -{\tt\string\sin}, {\tt\string\power}, {\tt\string\NewLn}. - -\Formula\f{\divide{x}{\sqrt{1+\power{x}{2}}}\cdot - \NewLn \sin{\divide{y}{x}}} - -Formula \f{} and its code - -\<formula\><<< -w = \f ->>> - -Same formula in math modes $\f$ and $$\f$$. - -\OutputCode\<formula\> \end{document} - ------------- End Example D -----------%->>>\OutputCode\<progD\>\end{document} diff --git a/Master/texmf-dist/doc/latex/protex/README b/Master/texmf-dist/doc/latex/protex/README index 3dc877b8979..bcbfaa67a0b 100644 --- a/Master/texmf-dist/doc/latex/protex/README +++ b/Master/texmf-dist/doc/latex/protex/README @@ -1,2 +1,613 @@ -Documentation can be found at - http://www.cse.ohio-state.edu/~gurari/systems.html
\ No newline at end of file + \ifx\documentstyle\UnDef\else\documentstyle{report}\begin{document}\fi + \input ProTex.sty \def\CodeDel{{<<<-}{->>>}} + \AlProTex{tex,<<<>>>,|,title,ClearCode} \<\><<<- + +ProTex is Eitan Gurari's literate programming environment for TeX. +His monumental tex4ht package (http://ctan.org/pkg/tex4ht) uses it. + +FILES +===== +ProTex.sty -- Basic environment for literate programming +AlProTex.sty -- Adjustments to ProTeX +README -- Introduction and examples for main features + of (Al)ProTeX (this file) + +MANUAL +====== +Eitan Gurari, TeX and LaTeX: Drawing and Literate Programming. + McGraw-Hill, 1994. ISBN 0-07-025208-4 / 0-07-911616-7 +The dratex package described there is at http://ctan.org/pkg/dratex. +Various ProTex examples are in that package's file Examples.tex. + +Table of Contents +================= +A. A Basic Literate Programming Environment +B. Other Basic Literate Programming Environments +C. Environments for Multi-Module Programs +D. Code and Documentation Produced from Same Specification +E. Examples B, C, D +F. License + + The code for the examples can be extracted from this file + by renaming this file to LitProg.tex and compiling the + file with TeX or LaTeX (the Makefiles for Example C, however, + must be extracted mannually). The compilation puts the code + in files progA.tex, progB.tex, progC.tex, main.tex, + aux.tex, macros.tex, progC.sty, and progD.tex. + +A. A Basic Literate Programming Environment +=========================================== + + \input ProTex.sty + \AlProTex{EXT,<<<>>>,title,list,[],`} + +This environment adds to (La)TeX the following commands for handling code. + +a. Definitions of code fragments \<code title\><<< + code fragment>>> + +b. References to code segments `<code title`> + +c. Output files of code \OutputCode[EXTENSION]\<code title\> + `[EXTENSION]' is optional + when EXTENSION = EXT + +d. References to the character ` + within code fragments `` + +Warning: Do not use 2 or more consecutive blank characters + in `<code title`> + +------- Example A: Single-Module C Program ---------------------------------- +------- Put in file progA.tex and compile with LaTeX ------%->>>\<progA\><<<- + +\documentstyle{book} + +\input ProTex.sty +\AlProTex{c,<<<>>>,title,list,[],`} + +\begin{document} + +\<body\><<< +printf("\n ``hello everybody``"); +>>> + +\<prog A\><<< +`<include`> +main() +{ + `<body`> +} +>>> + +\<include\><<< +#include <stdio.h> +>>> + +\<body\><<< +printf("\n"); +>>> + +\OutputCode\<prog A\> \end{document} + +------------ End Example A -----------------%->>>\OutputCode\<progA\>\<\><<<- + + +B. Other Basic Literate Programming Environments +================================================ + +a. Framing of code fragments can be requested with the option [[]] + in \AlProTex, e.g., + + \AlProTex{EXT,<<<>>>,title,list,[],`,[[]]} + +b. Framing of code titles can be avoided by removing the option [] + from \AlProTex, e.g, + + \AlProTex{EXT,<<<>>>,title,list,`} + +c. The characters @, |, and ? can also act as escape characters within + code fragments (e.g., replace all appearances of ` with @ in Example A). + +d. Line breaks within listing of code can be obtained with the command `NL% + +e. Comments within listing of code can be obtained with commands of + the form `%...`% + +f. The choice of code-delimiters <<< and >>> can be changed by placing + a command of the form \def\CodeDel{{open delimiter}{close delimiter}} + before \AlProTex. + +g. The following command requests that future \OutputCode commands identify + the titles of the different code fragments. (Other information, like + page numbers in documents and line numbers in source files, can also + be incorporated.) + + \Comment{open-comment delimiter}{close-comment delimiter} + +PLEASE EXAMINE AND RUN EXAMPLE B + + +C. Environments for Multi-Module Programs +========================================= + +Multi-module programs can be divided into independent (La)TeX files +that can be compiled either separately or together. For instance, +in Example C + +1. Three modules (main, aux, and macros) are defined independently + (in main.tex, aux.tex, macros.tex) and are connected through a + joint root file (progC.tex). The different files import a + common style file (progC.sty). + + progC.tex Root file + main.tex LaTeX file for first module + aux.tex LaTeX file for second Module + macros.tex LaTeX file for third module + progC.sty Style file (imported by each of the above files) + make files Unix management programs + +2. The files can be compiled separately (latex main.tex, latex aux.main, + latex macros.tex) or jointly (latex progC.tex). + +3. To allow quick generation, compilation, and linkage of C-code files + (see, e.g., the make files), joint compilations do not revise code + files. + +4. Separate compilations use chapter/section/subsection/subsubsection/page + numbers that are collected in joint compilations. + +5. In joint compilations, each module ends with an index to its code titles. + +6. To allow nonrelated identical titles in different modules, and to + save on memory, previous definitions of code fragments are deleted at + the start of each module. + +PLEASE RUN AND EXAMINE EXAMPLE C + +D. Code and Documentation Produced from Same Specification +========================================================== + +Example D demonstrates how math formulas and their code can be generated +from joint specifications. + +PLEASE EXAMINE AND RUN EXAMPLE D + + + +E. Examples B, C, D +=================== + +------- Example B: Variant of Example A ------------------------------------- +------- Put in file progB.tex and compile with LaTeX ------%->>>\<progB\><<<- + +\documentstyle{book} + + \input ProTex.sty +\def\CodeDel{{}{////}} +\Comment{ +/*}{*/ +} + \AlProTex{c,<<<>>>,title,list,[],`} + +\begin{document} + +\<body\> +printf("\n ``hello everybody`` within a long`NL% line of text"); +//// + +\<prog B\> +`<include`> +main() +{ + `<body`> `%a comment`% +} +//// + +\<include\> +#include <stdio.h> +//// + +\<body\> +printf("\n"); +//// + +\OutputCode\<prog B\> \end{document} +------------ End Example B -----------------%->>>\OutputCode\<progB\>\<\><<<- + + + +------------ Example C: Multi-Module C Program ------------------------------ +............ File progC.tex ...............................%->>>\<progC\><<<- + +\def\Root{} +\input progC.sty + +\INPUT{main} % import first module + +\INPUT{aux} % import second module + +\INPUT{macros} % import third module + +\end{document} +............ End file progC.tex .............%->>>\OutputCode\<progC\>\<\><<<- + +............ File main.tex ..................................%->>>\<main\><<<- +\input progC.sty + +\<include files\><<< +#include "aux.h" +#include "macros.h" +#include <stdio.h> +>>> + +\chapter{Outline} + +All the code in this module is included in file main.c. + +\section{The Main Program} + +This program does not handle the case in which the input consists just +of one 0. + +\<main.c\><<< +int main() +{ + `<main's vars`> + `<read input values, count them, and record their sum`> + `<compute and output the average of the input values`> + exit(0); +} +>>> + +\chapter{The Actual Actions} + +\section{Process the Input Values} + +The input must end with 0. + +\<read input values, count them, and record their sum\><<< +initialize_sum_count(); +WHILE TRUE DO + printf("\n Value (0 to stop)? "); + scanf("%d", &value); + IF value == 0 THEN break; FI + add_value(value); +END +>>> + +\<main's vars\><<< +int value; +>>> + +\section{Find the Result and Print It Out} + +\<compute and output the average of the input values\><<< +result = get_average(); +printf("\n Average = %f\n", result); +>>> + +\<main's vars\><<< +double result; +>>> + +\BYE{ \OutputCodE\<main.c\> } +............ End file main.tex ..............%->>>\OutputCode\<main\>\<\><<<- + +............ File aux.tex ...................................%->>>\<aux\><<<- +\input progC.sty + +\chapter{Reusable Functions} + +\section{Shared Variable} + +The following code is included in reusable.c. + +\<vars\><<< +int count; +double sum; +>>> + +\section{Setting Initial Conditions} + +The following code is included in reusable.h. + +\<export functions\><<< +void initialize_sum_count(); +>>> + +The following code is included in reusable.c. + +\<functions\><<< +void initialize_sum_count() +{ + count = 0; + sum = 0.0; +} +>>> + +\section{Processing New Values} + +\<export functions\><<< +void add_value(); +>>> + + +\<functions\><<< +void add_value(value) +{ + count++; + sum += value; +} +>>> + + +\section{Computing the Average} + +\<export functions\><<< +double get_average(); +>>> + +\<functions\><<< +double get_average() +{ + return sum / count; +} +>>> + +Old files reusable.h and reusable.c are replaced when this +file (i.e., reusable.tex) is compiled, but not when progC.tex is compiled. + +\BYE{ \OutputCodE\<aux.h\> + \OutputCodE\<aux.c\> } +............ End file aux.tex ................%->>>\OutputCode\<aux\>\<\><<<- + +............ File macros.tex .............................%->>>\<macros\><<<- +\input progC.sty + +\chapter{C Macros} + +Algol-oriented flavor. + +\<macros.h\><<< +#define TRUE 1 +#define IF if ( +#define THEN ) { +#define ELSE }else{ +#define ELSEIF }else if( +#define FI } +#define WHILE while( +#define FOR for( +#define WITH ; +#define STEP ; +#define DO ){ +#define BEGIN { +#define END } +#define CASE switch( +#define OF ){ +>>> + +\BYE{ \OutputCodE\<macros.h\> } +............ End file macros.tex ..........%->>>\OutputCode\<macros\>\<\><<<- + +............ File progC.sty .....................%->>>\ClearCode\<progC\><<<- +\ifx\Code\undefined + + \hbadness=10000 \vbadness=10000 \hfuzz=99in \vfuzz=99in + \ifx \documentstyle\UnDef + %load private style + \else + \documentstyle{book} + \let\cleardoublepage=\clearpage + \begin{document} + \fi + \input ProTex.sty + + \ifx \Root\UnDef + \AlProTex{c,<<<>>>,[],list,title,`,_^,ClearCode} + \else + \AlProTex{c,<<<>>>,[],list,title,`,_^,ClearCode,ShowIndex} + \let\SvShowIndex=\ShowIndex + \def\ShowIndex{\let\ShowIndex=\SvShowIndex} + \fi + \def\CodeId#1#2{#1.#2-pg:\the\pageno-ln:\the\inputlineno} + + \let\FileName=\jobname + \def\INPUT#1{ + \def\FileName{#1} + \immediate\openout15=#1.pg + \immediate\write15{% + \string \pageno=\the\pageno\string \relax + \string \csname\space c@page\string \endcsname = + \expandafter\the\csname c@page\endcsname\string \relax + \string \csname\space c@chapter\string \endcsname = + \expandafter\the\csname c@chapter\endcsname\string \relax + \string \csname\space c@section\string \endcsname = + \expandafter\the\csname c@section\endcsname\string \relax + \string \csname\space c@subsection\string \endcsname = + \expandafter\the\csname c@subsection\endcsname\noexpand\relax + \string \csname\space c@subsubsection\string \endcsname = + \expandafter\the\csname c@subsubsection\endcsname\noexpand\relax + } + \immediate\closeout15 + \input #1 + } + + \ifx \documentstyle\UnDef \errmessage{--- This is a LaTeX file ---}\fi + \title{Averaging Numbers} + \date{2 October 1994} + \maketitle + \tableofcontents + + \openin15=\jobname.pg + \ifeof15 \else \input \jobname.pg \fi + \closein15 + \def\OutputCodE\<#1.#2\>{% + \csname :DoName\endcsname\def{#1}{\<#1.#2\>}% + \OutputCode[#2]\<#1\>} + \let\xxxOutputCode=\OutputCodE + \def\xxOutputCode\<#1.#2\>{% + \openin15=#1.#2 + \ifeof15 \xxxOutputCode\<#1.#2\>\fi + \closein15 } +\fi + +\ifx \BYE\undefined \def\BYE#1{#1\end{document}} +\else \def\BYE#1{{\let\OutputCodE=\xxOutputCode #1}% + \ShowIndex\ClearCode}\fi + + \ifx\Root\NotDef +\vfill\break\noindent\hfil\underbar{\bf INPUT FILE: \FileName .tex} + +\<\FileName.h\><<< +`<export define`> +`<export types`> +`<export vars`> +`<export functions`> +>>> + +\<\FileName.c\><<< +`<include files`> +`<define`> +`<types`> +`<header functions`> +`<vars`> +`<functions`> +>>> + + \else \let\Root=\NotDef \fi + +\Comment{ +/*}{*/ +} + +............ End file progC.sty ........%->>>\OutputCode[sty]\<progC\>\<\><<<- + +............ Make file 1 ..................................................... +# make -fS make.1 +# call LaTeX and C for revised files + +all : progC + progC + +main.c: main.tex + rm -f main.llog + latex main > main.llog + +aux.c: aux.tex + rm -f aux.llog + latex aux > aux.llog + +aux.h: aux.tex + rm -f aux.llog + latex aux > aux.llog + +macros.h: macros.tex + rm -f macros.llog + latex macros > macros.llog + +aux.o: aux.c aux.h macros.h + cc -c aux.c + +main.o: main.c aux.h macros.h + cc -c main.c + +progC : main.o aux.o + cc -o progC main.o aux.o + +............ End make file 1 ................................................ +............ Make file 2 .................................................... +# make -fS make.2 +# call LaTeX in background for revised files + +all : main.c aux.c macros.h + +main.c: main.tex + rm -f main.llog + latex main > main.llog & + +aux.c: aux.tex + rm -f aux.llog + latex aux > aux.llog & + +macros.h: macros.tex + rm -f macros.llog + latex macros > macros.llog & + +............ End make file 2 ................................................. +------------ End Example C ------------------------------------------------- + + + +------------ Example D: Joint Specification --------------%->>>\<progD\><<<- +\documentstyle{report} +\input ProTex.sty +\AlProTex{code,<<<>>>,[],title,list} +%...................................................................... +\def\Formula#1#2{\ifx#1\UnDefined\else\immediate\write16 + {--- warning --- Redefine equation for \string#1 ---}\fi + \gdef#1{% + \expandafter\ifx \csname :Tb\endcsname\relax + \ifmmode \InMath #2 + \else \vskip\smallskipamount\noindent\hfil + $ \let\InText=\relax \InMath #2 $% + \vskip\smallskipamount + \fi + \else #2\fi}% +} +\let\PrevModifyShowCode=\ModifyShowCode +\def\ModifyShowCode{\InCode \PrevModifyShowCode } +\let\PrevModifyOutputCode=\ModifyOutputCode +\def\ModifyOutputCode{\InCode \PrevModifyOutputCode } +\def\InCode{% + \def\divide##1##2{((##1) / (##2))}% + \def\sqrt##1{SQRT(##1)}% + \def\cdot{ * }% + \def\sin##1{(sin(##1))}% + \def\power##1##2{(##1)**(##2)}% + \def\NewLn{\csname :Ln\endcsname}% + } +\def\InMath{% + \def\divide##1##2{\ifx\LaTeX\undefined{##1\over##2}\else + {\frac{##1}{##2}}\fi}% + \def\power##1##2{##1^{##2}}% + \def\NewLn{\ifinner + \ifx\InText\realx \else \hfil\break\null\hfil \fi + \else $$$$\InMath \fi}% + } +%...................................................................... +\begin{document} + +Metalanguage: {\tt\string\divide}, {\tt\string\sqrt}, {\tt\string\cdot}, +{\tt\string\sin}, {\tt\string\power}, {\tt\string\NewLn}. + +\Formula\f{\divide{x}{\sqrt{1+\power{x}{2}}}\cdot + \NewLn \sin{\divide{y}{x}}} + +Formula \f{} and its code + +\<formula\><<< +w = \f +>>> + +Same formula in math modes $\f$ and $$\f$$. + +\OutputCode\<formula\> \end{document} + +------------ End Example D -----------%->>>\OutputCode\<progD\>\end{document} + +F. License +========== +% Copyright 2016 TeX Users Group +% Copyright 1990-1999 Eitan M. Gurari +% +% This program can redistributed and/or modified under +% the terms of the LaTeX Project Public License +% Distributed from CTAN archives in directory +% macros/latex/base/lppl.txt; either version 1 of the +% License, or (at your option) any later version. +% +% This work has the LPPL maintenance status "maintained". +% +% The Current Maintainer of this work +% is the TeX4ht Project <http://tug.org/tex4ht>. |