2005-04-16 Paul Jakma <paul@dishone.st>

	* memtypes.c: the comment about use of comments in the comments
	  headers was causing comment within comment warnings from compiler
	* memtypes.awk: Add extensive comments on the file format for
	  memtypes.c.
	  tighten the pattern for the MTYPE matching action (suggestion from
	  Andrew) and tighten which field we try the match on.
diff --git a/lib/ChangeLog b/lib/ChangeLog
index c50a364..e5ee549 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,12 @@
+2005-04-16 Paul Jakma <paul@dishone.st>
+
+	* memtypes.c: the comment about use of comments in the comments
+	  headers was causing comment within comment warnings from compiler
+	* memtypes.awk: Add extensive comments on the file format for
+	  memtypes.c.
+	  tighten the pattern for the MTYPE matching action (suggestion from
+	  Andrew) and tighten which field we try the match on.
+
 2005-04-15 Paul Jakma <paul@dishone.st>
 
 	* memtypes.c: The new, unified location for memory type definitions.
diff --git a/lib/memtypes.awk b/lib/memtypes.awk
index 2da6547..9ab931b 100644
--- a/lib/memtypes.awk
+++ b/lib/memtypes.awk
@@ -1,13 +1,37 @@
-# $Id: memtypes.awk,v 1.1 2005/04/15 11:47:15 paul Exp $
+# $Id: memtypes.awk,v 1.2 2005/04/16 15:51:05 paul Exp $
 #
 # Scan a file of memory definitions (see eg memtypes.c) and generate
 # a corresponding header file with an enum of the MTYPE's and declarations
 # for the struct memory_list arrays
 #
+# struct memory_list's must be declared as:
+# '\nstruct memory_list memory_list_<name>[] .....'
+#
+# Each MTYPE_ within the definition must the second token on the line,
+# tokens being delineated by whitespace. It may only consist of the set of
+# characters [A-Z_0-9]. Eg:
+#
+# '\n  {  MTYPE_AWESOME_IPV8 , "Amazing new protocol, says genius" {}..boo'
+#
+# We try to ignore lines whose first token is /* or *, ie C comment lines.
+# So the following should work fine:
+#
+# '/* This is the best memory_list ever!
+# ' * It's got all my MTYPE's */
+# '
+# 'struct memory_list memory_list_my_amazing_mlist[] = =
+# '{
+# '  { MTYPE_DONGLE, "Dongle widget" }
+# '  { MTYPE_FROB, "Frobulator" },
+# '{  MTYPE_WIPPLE, "Wipple combombulator"}
+# '}}}
+#
+# Even if it isn't quite a valid C declaration.
+#
 
 BEGIN {
 	mlistregex = "memory_list_(.*)\\[\\]";
-	mtyperegex = "^.*(MTYPE_[A-Z_0-9]+).*$";
+	mtyperegex = "^(MTYPE_[A-Z_0-9]+).*";
 	header = "/* Auto-generated from memtypes.c by " ARGV[0] ". */\n";
 	header = header "/* Do not edit! */\n";
 	header = header "\n#ifndef _QUAGGA_MEMTYPES_H\n";
@@ -17,12 +41,16 @@
 	printf ("%s\n", header);
 }
 
+# catch lines beginning with 'struct memory list ' and try snag the
+# memory_list name. Has to be 3rd field.
 ($0 ~ /^struct memory_list /) && (NF >= 3) {
 	mlists[lcount++] = gensub(mlistregex,"\\1",g,$3);
 }
 
-($1 != "/*") && ($1 != "*") && ($2 ~ /MTYPE_/) { 
-	mtype[tcount++] = gensub(mtyperegex,"\\1",1, $0);
+# snag the MTYPE, it must self-standing and the second field,
+# though we do manage to tolerate the , C seperator being appended
+($1 !~ /^\/?\*/) && ($2 ~ /^MTYPE_/) { 
+	mtype[tcount++] = gensub(mtyperegex,"\\1",1, $2);
 } 
 
 END {
diff --git a/lib/memtypes.c b/lib/memtypes.c
index a643d43..6ee75a5 100644
--- a/lib/memtypes.c
+++ b/lib/memtypes.c
@@ -3,10 +3,10 @@
  * MTYPE_ and memory_list_.. information in order to autogenerate 
  * memtypes.h.
  *
- * The script is sensitive to the format (though not whitespace), so 
- * be careful. Comment lines /must/ start with either /* or *.
+ * The script is sensitive to the format (though not whitespace), see
+ * the top of memtypes.awk for more details.
  *
- * $Id: memtypes.c,v 1.1 2005/04/15 11:47:15 paul Exp $
+ * $Id: memtypes.c,v 1.2 2005/04/16 15:51:05 paul Exp $
  */
 
 #include "zebra.h"