+# As argument: the pattern used for the file
+function process_result()
+{
+ # Result
+ pattern=$1
+ SAV=""
+ FAIL=""
+ if [ -r "sav/$pattern.sav" ]; then
+ diff -u "$pattern.res" "sav/$pattern.sav" > "$pattern.diff.sav.log"
+ if [ "$?" == 0 ]; then
+ SAV=OK
+ else
+ SAV=NOK
+ fi
+ fi
+ if [ -r "sav/$pattern.fail" ]; then
+ diff -u "$pattern.res" "sav/$pattern.fail" > "$pattern.diff.fail.log"
+ if [ "$?" == 0 ]; then
+ FAIL=OK
+ else
+ FAIL=NOK
+ fi
+ fi
+ if [ "x$SAV" = "xOK" ]; then
+ if [ "x$FAIL" = "x" ]; then
+ echo "[ok] $pattern.res"
+ else
+ echo "[ok] $pattern.res - but sav/$pattern.fail remains!"
+ fi
+ ok="$ok $pattern"
+ elif [ "x$FAIL" = "xOK" ]; then
+ echo "[fail] $pattern.res"
+ ok="$ok $pattern"
+ elif [ "x$SAV" = "xNOK" ]; then
+ echo "[======= fail $pattern.res sav/$pattern.sav =======]"
+ nok="$nok $ff"
+ echo "$ii" >> "$ERRLIST"
+ elif [ "x$FAIL" = "xNOK" ]; then
+ echo "[======= changed $pattern.res sav/$pattern.fail ======]"
+ nok="$nok $ff"
+ echo "$ii" >> "$ERRLIST"
+ else
+ echo "[=== no sav ===] $pattern.res"
+ nos="$nos $pattern"
+ fi
+}
+
+find_nitc()
+{
+ recent=`ls -t ../src/nitc ../src/nitc_[0-9] ../bin/nitc ../c_src/nitc 2>/dev/null | head -1`
+ if [[ "x$recent" == "x" ]]; then
+ echo 'Could not find nitc, aborting'
+ exit 1
+ fi
+ echo 'Using nitc from: '$recent
+ NITC=$recent
+}
+
+make_alts0()
+{
+ ii="$1"
+ xalt="$2"
+ fs=""
+ for alt in `sed -n "s/.*#!*\($xalt[0-9]*\)#.*/\1/p" "$ii" | sort -u`; do
+ f=`basename "$ii" .nit`
+ d=`dirname "$ii"`
+ ff="$f"
+ i="$ii"
+
+ if [ "x$alt" != "x" ]; then
+ test -d alt || mkdir -p alt
+ i="alt/${f}_$alt.nit"
+ ff="${ff}_$alt"
+ sed "s/#$alt#//g;/#!$alt#/d" "$ii" > "$i"
+ fi
+ ff="$ff$MARK"
+ fs="$fs $i"
+ done
+ echo "$fs"
+}
+make_alts()
+{
+ ii="$1"
+ fs="$1"
+ for xalt in `sed -n 's/.*#!*\([0-9]*alt\)[0-9]*#.*/\1/p' "$ii" | sort -u`; do
+ fs2=""
+ for f in $fs; do
+ fs2="$fs2 `make_alts0 $f $xalt`"
+ done
+ fs="$fs $fs2"
+ done
+ echo "$fs"
+}
+
+# The default nitc compiler
+[ -z "$NITC" ] && find_nitc
+
+verbose=false
+stop=false
+while [ $stop = false ]; do
+ case $1 in
+ -o) OPT="$OPT $2"; shift; shift;;
+ -v) verbose=true; shift;;
+ -h) usage; exit;;
+ *) stop=true
+ esac
+done
+
+# Mark to distinguish files among tests