From dc830cbfac8dd9633e070550359a5d6f8dac8fe5 Mon Sep 17 00:00:00 2001 From: paul Date: Sat, 16 Apr 2005 15:51:05 +0000 Subject: 2005-04-16 Paul Jakma * 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. --- lib/memtypes.awk | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) (limited to 'lib/memtypes.awk') 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_[] .....' +# +# 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 { -- cgit v1.2.1