summaryrefslogtreecommitdiff
path: root/lib/memtypes.awk
diff options
context:
space:
mode:
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 {