Annotation of embedaddon/quagga/lib/memtypes.awk, revision 1.1.1.2
1.1.1.2 ! misho 1: ###
! 2: # Copyright (C) Paul Jakma 2005
! 3: #
! 4: # This file is part of Quagga.
! 5: #
! 6: # Quagga is free software; you can redistribute it and/or modify it
! 7: # under the terms of the GNU General Public License as published by the
! 8: # Free Software Foundation; either version 2, or (at your option) any
! 9: # later version.
! 10: #
! 11: # Quagga is distributed in the hope that it will be useful, but
! 12: # WITHOUT ANY WARRANTY; without even the implied warranty of
! 13: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 14: # General Public License for more details.
! 15: #
! 16: # You should have received a copy of the GNU General Public License
! 17: # along with Quagga; see the file COPYING. If not, write to the Free
! 18: # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
! 19: # 02111-1307, USA.
! 20: ###
1.1 misho 21: #
22: # Scan a file of memory definitions (see eg memtypes.c) and generate
23: # a corresponding header file with an enum of the MTYPE's and declarations
24: # for the struct memory_list arrays
25: #
26: # struct memory_list's must be declared as:
27: # '\nstruct memory_list memory_list_<name>[] .....'
28: #
29: # Each MTYPE_ within the definition must the second token on the line,
30: # tokens being delineated by whitespace. It may only consist of the set of
31: # characters [[:upper:]_[:digit:]]. Eg:
32: #
33: # '\n { MTYPE_AWESOME_IPV8 , "Amazing new protocol, says genius" {}..boo'
34: #
35: # We try to ignore lines whose first token is /* or *, ie C comment lines.
36: # So the following should work fine:
37: #
38: # '/* This is the best memory_list ever!
39: # ' * It's got all my MTYPE's */
40: # '
41: # 'struct memory_list memory_list_my_amazing_mlist[] = =
42: # '{
43: # ' { MTYPE_DONGLE, "Dongle widget" }
44: # ' { MTYPE_FROB, "Frobulator" },
45: # '{ MTYPE_WIPPLE, "Wipple combombulator"}
46: # '}}}
47: #
48: # Even if it isn't quite a valid C declaration.
49: #
50:
51: BEGIN {
52: mlistregex = "memory_list_(.*)\\[\\]";
53: mtyperegex = "^(MTYPE_[[:upper:]_[:digit:]]+).*";
54: header = "/* Auto-generated from memtypes.c by " ARGV[0] ". */\n";
55: header = header "/* Do not edit! */\n";
56: header = header "\n#ifndef _QUAGGA_MEMTYPES_H\n";
57: header = header "#define _QUAGGA_MEMTYPES_H\n";
58: footer = "\n#endif /* _QUAGGA_MEMTYPES_H */\n\n";
59: mlistformat = "extern struct memory_list memory_list_%s[];";
60: printf ("%s\n", header);
61: }
62:
63: # catch lines beginning with 'struct memory list ' and try snag the
64: # memory_list name. Has to be 3rd field.
65: ($0 ~ /^struct memory_list /) && (NF >= 3) {
66: mlists[lcount++] = gensub(mlistregex, "\\1", "g",$3);
67: }
68:
69: # snag the MTYPE, it must self-standing and the second field,
70: # though we do manage to tolerate the , C seperator being appended
71: ($1 !~ /^\/?\*/) && ($2 ~ /^MTYPE_/) {
72: mtype[tcount++] = gensub(mtyperegex, "\\1", "g", $2);
73: }
74:
75: END {
76: printf("enum\n{\n MTYPE_TMP = 1,\n");
77: for (i = 0; i < tcount; i++) {
78: if (mtype[i] != "" && mtype[i] != "MTYPE_TMP")
79: printf (" %s,\n", mtype[i]);
80: }
81: printf (" MTYPE_MAX,\n};\n\n");
82: for (i = 0; i < lcount; i++) {
83: if (mlists[i] != "")
84: printf (mlistformat "\n", mlists[i]);
85: }
86: printf (footer);
87: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>