File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / quagga / lib / memtypes.awk
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Nov 2 10:09:11 2016 UTC (7 years, 9 months ago) by misho
Branches: quagga, MAIN
CVS tags: v1_0_20160315, HEAD
quagga 1.0.20160315

###
# Copyright (C) Paul Jakma 2005
#
# This file is part of Quagga.
#
# Quagga is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# Quagga is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Quagga; see the file COPYING.  If not, write to the Free
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.  
###
#
# 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 [[:upper:]_[:digit:]]. 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_[[:upper:]_[:digit:]]+).*";
	header = "/* Auto-generated from memtypes.c by " ARGV[0] ". */\n";
	header = header "/* Do not edit! */\n";
	header = header "\n#ifndef _QUAGGA_MEMTYPES_H\n";
	header = header "#define _QUAGGA_MEMTYPES_H\n";
	footer = "\n#endif /* _QUAGGA_MEMTYPES_H */\n\n";
	mlistformat = "extern struct memory_list memory_list_%s[];";
	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);
}

# 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", "g", $2);
} 

END {
	printf("enum\n{\n  MTYPE_TMP = 1,\n"); 
	for (i = 0; i < tcount; i++) {
		if (mtype[i] != "" && mtype[i] != "MTYPE_TMP")
			printf ("  %s,\n", mtype[i]);
	}
	printf ("  MTYPE_MAX,\n};\n\n");
	for (i = 0; i < lcount; i++) {
		if (mlists[i] != "")
			printf (mlistformat "\n", mlists[i]);
	}
	printf (footer);
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>