diff --git a/src/tools/make_ctags b/src/tools/make_ctags
new file mode 100755
index 0000000000000000000000000000000000000000..ef99564694c138fb2e880ac4c5ac3429b9cb2e16
--- /dev/null
+++ b/src/tools/make_ctags
@@ -0,0 +1,10 @@
+#!/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/tools/make_etags b/src/tools/make_etags
new file mode 100755
index 0000000000000000000000000000000000000000..94b9597aa401be529e3572206053d46d317aa225
--- /dev/null
+++ b/src/tools/make_etags
@@ -0,0 +1,10 @@
+#!/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/tools/make_mkid b/src/tools/make_mkid
new file mode 100755
index 0000000000000000000000000000000000000000..01ed0f079b2dee9bb25f55f65666a898a97e8bef
--- /dev/null
+++ b/src/tools/make_mkid
@@ -0,0 +1,7 @@
+#!/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