Of course, this means that your build system needs to become more
complicated. If you use \man{make}{1}, then something like
\begin{prog}
- SOD = sod \\
- \\
+ SOD = sod
+ \\+
.SUFFIXES: .sod .c .h \\
.sod.c:; \$(SOD) -tc \$< \\
.sod.h:; \$(SOD) -th \$<
The following is a simple Sod input file.
\begin{prog}
-/* -*-sod-*- */ \\
-\\
-code c : includes \{ \\
-\#include "greeter.h" \\
-\} \\
-\\
-code h : includes \{ \\
-\#include <stdio.h> \\
-\#include <sod/sod.h> \\
-\} \\
-\\
-class Greeter : SodObject \{ \\ \ind
- void greet(FILE *fp) \{ \\ \ind
- fputs("Hello, world!\textbackslash n", fp); \- \\
- \} \- \\
-\}
+ /* -*-sod-*- */
+ \\+
+ code c : includes \{ \\
+ \#include "greeter.h" \\
+ \}
+ \\+
+ code h : includes \{ \\
+ \#include <stdio.h> \\
+ \#include <sod/sod.h> \\
+ \}
+ \\+
+ class Greeter : SodObject \{ \\ \ind
+ void greet(FILE *fp) \{ \\ \ind
+ fputs("Hello, world!\textbackslash n", fp); \- \\
+ \} \- \\
+ \}
\end{prog}
Save it as @"greeter.sod", and run
\begin{prog}
-sod --gc --gh greeter
+ sod --gc --gh greeter
\end{prog}
This will create files @"greeter.c" and @"greeter.h" in the current
directory. Here's how we might use such a simple thing.
\begin{prog}
-\#include "greeter.h" \\
-\\
-int main(void) \\
-\{ \\ \ind
- SOD_DECL(Greeter, g); \\
- \\
- Greeter_greet(g, stdout); \\
- return (0); \- \\
-\}
+ \#include "greeter.h"
+ \\+
+ int main(void) \\
+ \{ \\ \ind
+ SOD_DECL(Greeter, g);
+ \\+
+ Greeter_greet(g, stdout); \\
+ return (0); \- \\
+ \}
\end{prog}
Compare this to the traditional
\begin{prog}
-\#include <stdio.h> \\
-\\
-int main(void) \\ \ind
- \{ fputs("Hello, world@\\n", stdout); return (0); \}
+ \#include <stdio.h>
+ \\+
+ int main(void) \\ \ind
+ \{ fputs("Hello, world@\\n", stdout); return (0); \}
\end{prog}
and I'm sure you'll appreciate the benefits of using Sod already -- mostly to
do with finger exercise. Trust me, it gets more useful.