Normallerweise moechte man alle Projektdateien mit demselben Namen versehen. Mark erledigt dies automatisch. Wird das Skript lediglich mit einem Namen aufgerufen (etwa: mark BetaVersion_vom200198), so sucht es im aktuellen Verzeichnis nach allen Dateien, die "nach C++ aussehen". Das sind: Makefile sowie alle Dateien mit der Endung .h .cpp .cc .cxx und .C. Fuer diese Dateien wird das entsprechende RCS-Kommando aufgerufen. Es ist aber auch moeglich, ausser dem Namen die Dateien explizit anzugeben. Dann wird das Kommando nur fuer diese Dateien aufgerufen.
#! /bin/sh
#
# Das Programm vereinfacht die Benutzung von RCS.
# Es ruft fuer einen gegebenen Namen und alle gegebenen
# Dateien das RCS-Kommando "rcs -nNAME: DATEI" auf.
# Werden keine Dateien angegeben, benutzt das
# Programm die Dateien im aktuellen Verzeichnis,
# die eine der Endungen: .h .cpp .cc .cxx oder
# .C haben sowie die Datei Makefile.
#
# Beispiel:
#
# mark BetaVersion_200198 *.h *.cpp *.html
#
# vermerkt eine Version aller *.h *.cpp und *.html
# Dateien unter dem Namen BetaVersion_200198.
#
# Siehe auch "recall".
#
prog=`basename $0`
# Optionen ueberpruefen.
case "$1" in
""|-h|--help) echo "usage: $prog label [ file ... ]" >&2
exit 1 ;;
-*)
echo "$prog: unbekannte Option $1" >&2
echo "usage: $prog label [ file ... ]" >&2
exit 1 ;;
esac
# Den Namen der Version merken.
label=$1
shift
# Fuer alle sonstigen Argumente rcs -nVERSION: ARGUMENT
# aufrufen; fehlen die Argumente, so werden Standardwerte
# verwendet.
if [ $# -eq 0 ]
then
for a in Makefile *.h *.cpp *.cc *.cxx *.C
do
if [ -f $a ]
then
rcs -n${label}: $a
fi
done
else
for a in $@
do
if [ -f $a ]
then
rcs -n${label}: $a
fi
done
fi
#! /bin/sh
# Das Programm vereinfacht die Benutzung von RCS.
# Es stellt eine frueher vermerkte Version der
# Projektdateien wiederher. Als Parameter benoetigt
# das Skript den Namen der Version.
#
# Beispiel:
#
# recall BetaVersion_200198
#
# Siehe auch "mark".
#
prog=`basename $0`
# Optionen ueberpruefen.
case "$1" in
""|-h|--help) echo "usage: $prog label" >&2
exit 1 ;;
-*)
echo "$prog: unbekannte Option $1" >&2
echo "usage: $prog label" >&2
exit 1 ;;
esac
# Den Namen der Version merken.
label=$1
shift
#
for a in ./RCS/*,v
do
if [ -f $a ]
then
co -r${label} $a
fi
done
#! /bin/sh
#
# Das Programm entfernt Kommentare, die sich innerhalb
# von Klassendeklarationen befinden. Es kann benutzt
# werden, um die docpp-Kommentare in den Header-Dateien
# von aulib++ "auszublenden".
#
# Es werden folgende Zeilen entfernt:
# 1.) beliebig viele Leerzeichen, danach //
# 2.) beliebig viele Leerzeichen, danach /* und alle
# folgenden Zeilen einschliesslich der
# Zeile mit */.
# VORSICHT:
# /* Kommentar */ i = a + b; wird entfernt!!!
# 3.) Leerzeilen
#
# Als Anfang einer Klassendeklaration gilt:
# Zeilenanfang + class + irgendetwas + {
# Als Ende der Deklaration gilt:
# Zeilenanfang + };
#
prog=`basename $0`
if [ $# -lt 1 ]
then
echo "usage: $prog file ..." >&2
exit 0
fi
awk 'BEGIN { a = 0; x = 0; c = 0 } # Flags initialisieren
/^$/ { x = 1 }
# Leerzeile gefunden
/^ *\/\// { x = 1 }
# // Kommentar gefunden
/^ *\/\*/ { c = 1 }
# /* Kommentar gefunden
{ if ((a == 0) || ((c == 0) &&
(x == 0))) {
print
}
else {
x = 0
}
}
/\*\// { c = 0 }
# */ gefunden
/^class.*{/ { a = 1 }
# Klassendeklaration
/^};/ { a = 0 }
# Ende der Deklaration' "$@" | more