summaryrefslogtreecommitdiff
path: root/lib/memtypes.awk
diff options
context:
space:
mode:
authorpaul <paul>2005-04-16 15:51:05 +0000
committerpaul <paul>2005-04-16 15:51:05 +0000
commitdc830cbfac8dd9633e070550359a5d6f8dac8fe5 (patch)
tree9b412c3e737868b0ef3917b97c5b62165ca6cf13 /lib/memtypes.awk
parent03ecfb6789c25d65a35e050661fa7f23f1e4e66e (diff)
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.
Diffstat (limited to 'lib/memtypes.awk')
-rw-r--r--lib/memtypes.awk36
1 files changed, 32 insertions, 4 deletions
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 {