!!! Listing 1: wmake #!/bin/sh # Basiswerte. source="$HOME/WWW" target="$HOME/www" # $RANDOM nimmt einen Wert von 0 bis 32767 an. # Häufigkeit des Löschens in Prozent. prob=10 if [ $RANDOM -lt $(($prob * 328)) ]; then delete=y; else delete=n; fi # Definiere Ausgabe. function say { echo $* } # Zielverzeichnis säubern. say "Zielverzeichnis '$target' anlegen." if [ $delete = y ]; then rm -rf "$target" mkdir "$target" fi # Unterverzeichnisse erzeugen. say "Unterverzeichnisse anlegen." cd "$source" for dir in `find . -type d`; do if [ ! -d "$target/$dir" ]; then # Bestimmte Verzeichnisse müssen nicht erwähnt werden. if [ `basename $dir` != CVS -a `basename $dir` != m4 -a \ `basename $dir` != bin -a `basename $dir` != '.~' ]; then say "'$dir' anlegen." fi mkdir "$target/$dir" fi done # Dateitypen, die nicht modifiziert werden, werden kopiert. for suffix in gif png jpg jpeg mpg mpeg; do say "Dateien '*.$suffix' werden kopiert." # Jede Datei wird bearbeitet. for file in `find . -type f -name \*.$suffix`; do if [ "$file" -nt "$target/$file" ]; then cp -p "$file" "$target/$file" fi done done # Verarbeite Makrodateien. macrodir="$source/m4" for suffix in html htm xhtml phtml css; do say "Dateien '*.$suffix' werden verarbeitet." # Jede Datei wird bearbeitet. for file in `find . -type f -name \*.$suffix`; do # Wenn eine der Dateien neuer als das Ziel ist, wird kompiliert. for f in "$file" $source/m4/*; do # Ist die Datei neuer als eine Makrodefintion? if [ "$f" -nt "$target/$file" ]; then # Kommentare sollen in der Ausgabe nicht erscheinen. # Sonderzeichen und Umlaute werden umgesetzt. # Leerzeilen werden entfernt. # Die Zieldatei wird geschrieben. m4 --include=m4 "$file" | sed -e 's/¤/\€/g' \ -e 's/Ä/\Ä/g' \ # viele weitere Ersetzungen... -e 's/`u/\ú/g' | egrep -v '^\s*$|^##' > "$target/$file" if [ "$?" -ne "0" ]; then echo "Fehler bei Datei '$file'." >&2 fi fi done done done # Entfernen überflüssiger Verzeichnisse im Zielverzeichnisbaum for dir in CVS bin m4 .~; do say "Verzeichnisse '$dir' werden gelöscht." find "$target" -type d -name $dir -depth -exec rm -rf {} \; done !!! Listing 2: one_page.m4 changecom(`##')dnl ## Änderung des Kommentarzeichens. ## Änderung der String-Begrenzer wegen ' in der englischen Sprache. changequote({,})dnl ## LANG muss definiert sein. ifdef({LANG}, {}, {errprint(LANG ist nicht definiert. )m4exit(1)})dnl ## Links include(link_intern.m4)dnl ## HTML und XHTML sind möglich. define({_HTML}, {yes})dnl ifelse({_HTML}, {yes}, define(DOCTYPE, {})dnl, define(DOCTYPE, { })dnl )dnl ifelse({_HTML}, {yes}, define(BR, {
}), define(BR, {
}))dnl ## Informationen zur Datei. define(DATE, {esyscmd(date -r __file__ "+%Y-%m-%d %H:%M:%S")})dnl define(STAND, {

ifelse(LANG, {de}, {Stand: }, LANG, {eo}, {Verkita: }, LANG, {es}, {Actualizado por última vez: }, {Last modified: })DATE

})dnl define(NAVI, {

name_peick

name_tradukoj

})dnl ## oben links (top left) bis unten rechts (bottom right) define({ONE_PAGE_TL}, {

name_start

})dnl define({ONE_PAGE_TM}, {$1})dnl define({ONE_PAGE_TR}, {})dnl define({ONE_PAGE_ML}, {NAVI})dnl ## Textfläche der Seite. ## Parameter: Text der Seite. define({ONE_PAGE_MM}, {$1})dnl define({ONE_PAGE_MR}, {})dnl define({ONE_PAGE_BL}, {

name_urheberrecht

name_webmaster

})dnl define({ONE_PAGE_BM}, {ifelse(LANG, {de}, {

STAND}, LANG, {eo}, {

STAND}, LANG, {es}, {

STAND}, LANG, {en}, {

STAND})})dnl define({ONE_PAGE_BR}, {})dnl ## Tabelle zur Seitengestaltung erstellen. ## Parameter: Text der Seite. define({TABLE}, {
ONE_PAGE_TL ONE_PAGE_TM({esyscmd(get_language __file__)}) ONE_PAGE_TR
ONE_PAGE_ML ONE_PAGE_MM({$2}) ONE_PAGE_MR
ONE_PAGE_BL ONE_PAGE_BM ONE_PAGE_BR
} )dnl ## Die Seite selbst. ## Parameter: Überschrift; Seite. define({PAGE}, {DOCTYPE ifdef({META}, META)dnl {$1} TABLE({$1}, {$2}) } )dnl !!! Listing 3: link_intern.m4 ## Link auf eigene Seiten. define(WWWBASE, {esyscmd({/bin/echo -n $WWWBASE})})dnl define(urli_screen_css, WWWBASE/bildschirm.css)dnl define(urli_print_css, WWWBASE/drucker.css)dnl define(urli_urheberrecht, WWWBASE/urheberrecht.LANG.html)dnl define(name_urheberrecht, ifelse(LANG, de, {Urheberrecht}, LANG, eo, {Kopirajto}, LANG, es, {Derechos reservados}, {Copyright}))dnl define(urli_webmaster, mailto:webmaster@peick.de)dnl define(name_webmaster, ifelse(LANG, de, {Webmaster}, LANG, eo, {Teksestro}, LANG, es, {Webmaster}, {Webmaster}))dnl define(urli_start, WWWBASE/index.LANG.html)dnl