diff --git a/src/DEVELOPERS b/src/DEVELOPERS
new file mode 100644
index 0000000000000000000000000000000000000000..99f0c8c8908dd6318127918f78492c4ac9616b4c
--- /dev/null
+++ b/src/DEVELOPERS
@@ -0,0 +1 @@
+All the developer tools are located in the /tools directory.
diff --git a/src/MAKE_CTAGS b/src/MAKE_CTAGS
deleted file mode 100644
index ef99564694c138fb2e880ac4c5ac3429b9cb2e16..0000000000000000000000000000000000000000
--- a/src/MAKE_CTAGS
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-trap "rm -f /tmp/$$" 0 1 2 3 15
-rm -f ./tags
-find `pwd`/ -type f -name '*.[chyl]' -print|xargs ctags -t -a -f tags
-sort tags >/tmp/$$ && mv /tmp/$$ tags
-
-find . -type d -print |while read DIR
-do
-	[ "$DIR" != "." ] && ln -f -s `pwd`/tags $DIR/tags
-done
diff --git a/src/MAKE_ETAGS b/src/MAKE_ETAGS
deleted file mode 100644
index 94b9597aa401be529e3572206053d46d317aa225..0000000000000000000000000000000000000000
--- a/src/MAKE_ETAGS
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-trap "rm -f /tmp/$$" 0 1 2 3 15
-rm -f ./TAGS
-find `pwd`/ -type f -name '*.[chyl]' -print | \
-  xargs etags --append --output=TAGS
-
-find . -type d -print | \
-while read DIR; do
-  [ "$DIR" != "." ] && ln -f -s `pwd`/TAGS $DIR
-done
diff --git a/src/MAKE_MKID b/src/MAKE_MKID
deleted file mode 100644
index 01ed0f079b2dee9bb25f55f65666a898a97e8bef..0000000000000000000000000000000000000000
--- a/src/MAKE_MKID
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-find `pwd`/ -type f -name '*.[chyl]' -print|sed 's;//;/;g' | mkid -S.gen=C -
-
-find . -type d -print |while read DIR
-do
-	[ "$DIR" != "." ] && ln -f -s `pwd`/ID $DIR/ID
-done
diff --git a/src/PGINDENT b/src/PGINDENT
deleted file mode 100644
index 2c9371fbc5bd75dbf4ada6a44eb572cac05b214a..0000000000000000000000000000000000000000
--- a/src/PGINDENT
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/sh
-#
-# This can format all PostgreSQL *.c and *.h files,
-# excluding libpq++, *.y, and *.l files.
-#
-# On 09/06/1997, from the top directory, I ran:
-#
-#   find . -name '*.[ch]' -type f -print | grep -v '++' | xargs -n100 PGINDENT
-#
-
-trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15
-entab </dev/null >/dev/null
-if [ "$?" -ne 0 ]
-then	echo "Go to the src/tools/entab directory and do a 'make' and 'make install'." >&2
-	echo "This will put the 'entab' command in your path." >&2
-	echo "Then run $0 again."
-	exit 1
-fi
-indent -st </dev/null >/dev/null
-if [ "$?" -ne 0 ]
-then	echo "You do not appear to have 'indent' installed on your system." >&2
-	exit 1
-fi
-for FILE
-do
-	cat $FILE |
-	sed 's;/\*  *---;/*---X_X;g' |
-	sed 's;\([} 	]\)else[ 	]*\(/\*.*\)$;\1else\
-\2;g' | # workaround for indent bug
-	detab -t4 -qc |
-	sed 's;^DATA(.*$;/*&*/;' >/tmp/$$a    # protect backslashes in DATA() 
-	indent -bad -bap -bbb -bc -bl -d0 -cdb -cli1 -nce -nfc1 -di12 -i4 -l75 \
-		-lp -nip -npro /tmp/$$a >/tmp/$$ 2>&1
-	if [ "$?" -ne 0 -o -s /tmp/$$ ]
-	then	echo "$FILE"
-		cat /tmp/$$
-	fi
-	cat /tmp/$$a |
-	sed 's;^/\*\(DATA(.*\)\*/$;\1;' |
-	sed 's;/\*---X_X;/* ---;g' |
-	sed 's;^static[ 	][ 	]*;static ;g' | # workaround indent bug
-	detab -t8 -qc |
-	entab -t4 -qc >/tmp/$$ && cat /tmp/$$ >$FILE
-done
-
-# The 'for' loop makes these backup files useless
-# so delete them
-rm -f *a.BAK
diff --git a/src/BACKEND_DIRS b/src/tools/BACKEND_DIRS
similarity index 100%
rename from src/BACKEND_DIRS
rename to src/tools/BACKEND_DIRS
diff --git a/src/FIND_STATIC b/src/tools/find_static
old mode 100644
new mode 100755
similarity index 100%
rename from src/FIND_STATIC
rename to src/tools/find_static
diff --git a/src/tools/find_typedef b/src/tools/find_typedef
new file mode 100755
index 0000000000000000000000000000000000000000..3017da5b70870f5d21b653416e7dcd0ab5534237
--- /dev/null
+++ b/src/tools/find_typedef
@@ -0,0 +1,27 @@
+#!/bin/sh
+# This script attempts to find all typedef's in the postgres binaries
+# by using 'nm' to report all typedef debugging symbols.
+# 
+# For this program to work, you must have compiled all binaries with 
+# debugging symbols.
+#
+# This is run on BSD/OS 3.0, so you may need to make changes for your
+# version of nm.
+# 
+# Ignore the nm errors about a file not being a binary file.
+#
+# Remember, debugging symbols are your friends.
+#
+
+if [ "$#" -ne 1 -o ! -d "$1" ]
+then	echo "Usage:  $0 postgres_binary_directory" 1>&2
+	exit 1
+fi
+
+nm -a "$1"/* |
+grep LSYM |
+grep ':t' |
+sed 's/^.*LSYM \([^:]*\):.*$/\1/' |
+grep -v ' ' | # some typedefs have spaces, revove them
+sort | 
+uniq
diff --git a/src/DEV_TIPS b/src/tools/make_diff/README
similarity index 54%
rename from src/DEV_TIPS
rename to src/tools/make_diff/README
index 7cac0862202edf6fc85d917ee63677222af6dc97..59e87c020ee017b621e86c0d0e22d3c7ea3df993 100644
--- a/src/DEV_TIPS
+++ b/src/tools/make_diff/README
@@ -2,19 +2,9 @@ Bruce Momjian <maillist@candle.pha.pa.us>
 
 Here are some of the scripts I use to make development easier.
 
-First, I use 'cpdir' on every file I am about to change.  This makes a
+First, I use 'cporig' on every file I am about to change.  This makes a
 copy with the extension .orig.  If an .orig already exists, I am warned.
 
-	:
-	# cporig
-	for FILE
-	do
-		if [ ! -f "$FILE.orig" ]
-		then	cp $FILE $FILE.orig
-		else	echo "$FILE.orig exists" 1>&2
-		fi
-	done
-
 I can get really fancy with this.  I can do 'cporig *' and make a .orig
 for every file in the current directory.  I can:
 
@@ -34,33 +24,12 @@ or even better (using mkid):
 
 to edit all those files.
 
-When I am ready to generate a patch, I run this command from the top of
+When I am ready to generate a patch, I run 'difforig' command from the top of
 the source tree:
 	
-	:
-	#difforig
-	if [ "$#" -eq 0 ]
-	then	APATH="."
-	else	APATH="$1"
-	fi
-	find $APATH -name '*.orig' -print | sort | while read FILE
-	do
-		NEW="`dirname $FILE`/`basename $FILE .orig`"
-		echo "$NEW" 1>&2
-		diff -c $FILE $NEW
-	done
-
 I pipe the output of this to a file to hold my patch, and the file names
 it processes appear on my screen.  It creates a nice patch for me of all
 the files I used with cporig.
 
-Finally, I remove my old copies with:
-
-	:
-	# rmorig
-	if [ "$#" -eq 0 ]
-	then	APATH="."
-	else	APATH="$1"
-	fi
-	find $APATH -name '*.orig' -exec rm {} \;
+Finally, I remove my old copies with 'rmorig'.
 
diff --git a/src/tools/make_diff/cporig b/src/tools/make_diff/cporig
new file mode 100755
index 0000000000000000000000000000000000000000..0b188ac3e5f739dda0a0d99bbd53e4c0e9ae44d4
--- /dev/null
+++ b/src/tools/make_diff/cporig
@@ -0,0 +1,8 @@
+:
+for FILE
+do
+	if [ ! -f "$FILE.orig" ]
+	then	cp $FILE $FILE.orig
+	else	echo "$FILE.orig exists" 1>&2
+	fi
+done
diff --git a/src/tools/make_diff/difforig b/src/tools/make_diff/difforig
new file mode 100755
index 0000000000000000000000000000000000000000..a70b8bed4e92fc6432914ba20ed128bd4d106edf
--- /dev/null
+++ b/src/tools/make_diff/difforig
@@ -0,0 +1,11 @@
+:
+if [ "$#" -eq 0 ]
+then	APATH="."
+else	APATH="$1"
+fi
+find $APATH -name '*.orig' -print | sort | while read FILE
+do
+	NEW="`dirname $FILE`/`basename $FILE .orig`"
+	echo "$NEW" 1>&2
+	diff -c $FILE $NEW
+done
diff --git a/src/tools/make_diff/rmorig b/src/tools/make_diff/rmorig
new file mode 100755
index 0000000000000000000000000000000000000000..f6d0d4eff689852c05f39c0c0de9cb5171dbd27c
--- /dev/null
+++ b/src/tools/make_diff/rmorig
@@ -0,0 +1,6 @@
+:
+if [ "$#" -eq 0 ]
+then	APATH="."
+else	APATH="$1"
+fi
+find $APATH -name '*.orig' -exec rm {} \;