summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ChangeLog9
-rw-r--r--lib/memtypes.awk36
-rw-r--r--lib/memtypes.c6
3 files changed, 44 insertions, 7 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog
index c50a3646..e5ee5494 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 2da6547b..9ab931bf 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 @@ BEGIN {
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 a643d43b..6ee75a58 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"