diff options
author | paul <paul> | 2005-04-16 15:51:05 +0000 |
---|---|---|
committer | paul <paul> | 2005-04-16 15:51:05 +0000 |
commit | dc830cbfac8dd9633e070550359a5d6f8dac8fe5 (patch) | |
tree | 9b412c3e737868b0ef3917b97c5b62165ca6cf13 /lib/memtypes.awk | |
parent | 03ecfb6789c25d65a35e050661fa7f23f1e4e66e (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.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 { |