diff options
Diffstat (limited to 'lib/memtypes.awk')
-rw-r--r-- | lib/memtypes.awk | 36 |
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 { |