Rewrite make_ctests and runtest in shell.

diff --git a/Make.rules.in b/Make.rules.in
index 4076da6..8174c1d 100644
--- a/Make.rules.in
+++ b/Make.rules.in
@@ -64,7 +64,7 @@
 MKINSTALLDIRS= $(TOPSRCDIR)/tools/mkinstalldirs
 WINAPI_CHECK = $(TOPSRCDIR)/tools/winapi_check/winapi_check
 WINEWRAPPER  = $(TOPSRCDIR)/tools/winewrapper
-RUNTEST      = $(TOPSRCDIR)/programs/winetest/runtest
+RUNTEST      = $(TOPSRCDIR)/tools/runtest
 WINEBUILD    = $(TOOLSDIR)/tools/winebuild/winebuild
 MAKEDEP      = $(TOOLSDIR)/tools/makedep
 WRC          = $(TOOLSDIR)/tools/wrc/wrc
@@ -105,7 +105,7 @@
 
 # Implicit rules
 
-.SUFFIXES: .mc .rc .mc.rc .res .res.o .spec .spec.c .spec.def .pl .ok .cross.o
+.SUFFIXES: .mc .rc .mc.rc .res .res.o .spec .spec.c .spec.def .ok .cross.o
 
 .c.o:
 	$(CC) -c $(ALLCFLAGS) -o $@ $<
@@ -137,9 +137,6 @@
 .c.ok:
 	$(RUNTEST) $(RUNTESTFLAGS) $< && touch $@
 
-.pl.ok:
-	$(RUNTEST) $(RUNTESTFLAGS) $< && touch $@
-
 # 'all' target first in case the enclosing Makefile didn't define any target
 
 all: Makefile
diff --git a/dlls/Maketest.rules.in b/dlls/Maketest.rules.in
index 4c7a77f..08ab0cc 100644
--- a/dlls/Maketest.rules.in
+++ b/dlls/Maketest.rules.in
@@ -45,7 +45,7 @@
 # Rules for building test list
 
 $(TESTLIST): Makefile.in
-	$(TOPSRCDIR)/programs/winetest/make_ctests $(CTESTS) >$(TESTLIST) || $(RM) $(TESTLIST)
+	$(TOPSRCDIR)/tools/make_ctests $(CTESTS) >$(TESTLIST) || $(RM) $(TESTLIST)
 
 # Rules for checking that no imports are missing
 
diff --git a/tools/make_ctests b/tools/make_ctests
new file mode 100755
index 0000000..0a9d5ca
--- /dev/null
+++ b/tools/make_ctests
@@ -0,0 +1,60 @@
+#!/bin/sh
+#
+# Script to generate a C file containing a list of tests
+#
+# Copyright 2002 Alexandre Julliard
+# Copyright 2002 Dimitrie O. Paun
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+cat <<EOF
+/* Automatically generated file; DO NOT EDIT!! */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "winbase.h"
+
+EOF
+
+for file in "$@"; do
+    test=`basename "$file" .c`
+    echo "extern void func_$test(void);"
+done
+
+cat <<EOF
+
+struct test
+{
+    const char *name;
+    void (*func)(void);
+};
+
+static const struct test winetest_testlist[] =
+{
+EOF
+
+for file in "$@"; do
+    test=`basename "$file" .c`
+    echo "    { \"$test\", func_$test },"
+done
+
+cat <<EOF
+    { 0, 0 }
+};
+
+#define WINETEST_WANT_MAIN
+#include "wine/test.h"
+EOF
diff --git a/tools/runtest b/tools/runtest
new file mode 100755
index 0000000..14cb50a
--- /dev/null
+++ b/tools/runtest
@@ -0,0 +1,116 @@
+#!/bin/sh
+#
+# Wrapper script to run tests from inside the Wine tree
+#
+# Usage: runtest [options] input_file
+#
+# Copyright 2002 Alexandre Julliard
+# Copyright 2002 Dimitrie O. Paun
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+usage()
+{
+    cat >2 <<EOF
+
+Usage: $0 [options] input_file
+
+Options:
+    -q       quiet mode
+    -v       verbose mode (can be specified multiple times)
+    -s       announce successful tests
+    -p prog  name of the program to run for C tests
+    -P name  set the current platform name
+    -M names set the module names to be tested
+    -T dir   set Wine tree top directory (autodetected if not specified)
+
+EOF
+    exit 1
+}
+
+# Default values
+platform=$WINETEST_PLATFORM
+WINETEST_DEBUG=${WINETEST_DEBUG:-1}
+
+# parse command-line options
+while [ "$#" != 0 ]; do
+    case "$1" in
+    -h)
+	usage
+    ;;
+    -p)
+	shift; program="$1"
+    ;;
+    -q)
+	WINETEST_DEBUG=0
+    ;;
+    -v)
+	WINETEST_DEBUG=`expr $WINETEST_DEBUG + 1`
+    ;;
+    -s)
+	WINETEST_REPORT_SUCCESS=1
+	export WINETEST_REPORT_SUCCESS
+    ;;
+    -P)
+	shift; platform="$1"
+    ;;
+    -M)
+	shift; modules="$1"
+    ;;
+    -T)
+	shift; topobjdir="$1"
+	if [ -d "$topobjdir" ]; then :; else usage; fi
+    ;;
+    *)
+	infile="$1"
+    esac
+    shift
+done	    
+	
+# we must have found an input file
+if [ -f "$infile" ]; then :; else usage; fi
+
+# set program to the .c file base name if not specified otherwise
+if [ -z "$program" ]; then
+    program=`basename "$infile" .c`
+fi
+
+# check/detect topobjdir
+if [ -n "$topobjdir" ]; then
+    if [ -f "$topobjdir/server/wineserver" ]
+    then :
+    else
+	echo "Wrong -T argument, $topobjdir/server/wineserver does not exist" 2>&1
+	usage
+    fi
+else
+    if [ -f "./server/wineserver" ]; then topobjdir="."
+    elif [ -f "../server/wineserver" ]; then topobjdir=".."
+    elif [ -f "../../server/wineserver" ]; then topobjdir="../.."
+    elif [ -f "../../../server/wineserver" ]; then topobjdir="../../.."
+    fi
+fi
+
+# set environment variables needed for Wine
+
+if [ -n "$modules" ]; then 
+    WINEOPTIONS="$WINEOPTIONS --dll $modules=b"
+    export WINEOPTIONS
+fi
+WINETEST_PLATFORM=${platform:-wine}
+export WINETEST_PLATFORM WINETEST_DEBUG
+
+exec "$topobjdir/wine" "$program" "$infile" "$@"