Include CF_HDR section in keywords.h as well, so that protocol symbols

can be used in definition of ENUM's.
This commit is contained in:
Martin Mares 2000-04-28 15:12:03 +00:00
parent 2edb31b097
commit a412f01ea8
2 changed files with 24 additions and 6 deletions

View file

@ -20,13 +20,13 @@
#include "conf/cf-parse.tab.h" #include "conf/cf-parse.tab.h"
#include "lib/string.h" #include "lib/string.h"
static struct keyword { struct keyword {
byte *name; byte *name;
int value; int value;
struct keyword *next; struct keyword *next;
} keyword_list[] = { };
#include "conf/keywords.h" #include "conf/keywords.h"
{ NULL, -1 } };
#define KW_HASH_SIZE 64 #define KW_HASH_SIZE 64
static struct keyword *kw_hash[KW_HASH_SIZE]; static struct keyword *kw_hash[KW_HASH_SIZE];

View file

@ -2,17 +2,28 @@ m4_divert(-1)m4_dnl
# #
# BIRD -- Generator of Configuration Keyword List # BIRD -- Generator of Configuration Keyword List
# #
# (c) 1998--1999 Martin Mares <mj@atrey.karlin.mff.cuni.cz> # (c) 1998--2000 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
# #
# Can be freely distributed and used under the terms of the GNU GPL. # Can be freely distributed and used under the terms of the GNU GPL.
# #
# Common aliases
m4_define(DNL, `m4_dnl')
# Diversions used:
# 1 keywords
# Simple iterator # Simple iterator
m4_define(CF_itera, `m4_ifelse($#, 1, [[CF_iter($1)]], [[CF_iter($1)[[]]CF_itera(m4_shift($@))]])') m4_define(CF_itera, `m4_ifelse($#, 1, [[CF_iter($1)]], [[CF_iter($1)[[]]CF_itera(m4_shift($@))]])')
m4_define(CF_iterate, `m4_define([[CF_iter]], m4_defn([[$1]]))CF_itera($2)') m4_define(CF_iterate, `m4_define([[CF_iter]], m4_defn([[$1]]))CF_itera($2)')
# We include all the headers
m4_define(CF_HDR, `m4_divert(0)')
m4_define(CF_DECLS, `m4_divert(-1)')
m4_define(CF_DEFINES, `m4_divert(-1)')
# Keywords are translated to C initializers # Keywords are translated to C initializers
m4_define(CF_handle_kw, `m4_divert(0){ "m4_translit($1,[[A-Z]],[[a-z]])", $1 }, m4_define(CF_handle_kw, `m4_divert(1){ "m4_translit($1,[[A-Z]],[[a-z]])", $1 },
m4_divert(-1)') m4_divert(-1)')
m4_define(CF_keywd, `m4_ifdef([[CF_tok_$1]],,[[m4_define([[CF_tok_$1]],1)CF_handle_kw($1)]])') m4_define(CF_keywd, `m4_ifdef([[CF_tok_$1]],,[[m4_define([[CF_tok_$1]],1)CF_handle_kw($1)]])')
m4_define(CF_KEYWORDS, `m4_define([[CF_toks]],[[]])CF_iterate([[CF_keywd]], [[$@]])m4_ifelse(CF_toks,,,%token[[]]CF_toks m4_define(CF_KEYWORDS, `m4_define([[CF_toks]],[[]])CF_iterate([[CF_keywd]], [[$@]])m4_ifelse(CF_toks,,,%token[[]]CF_toks
@ -23,10 +34,17 @@ m4_define(CF_CLI, `CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
') ')
# Enums are translated to C initializers: use CF_ENUM(typename, prefix, values) # Enums are translated to C initializers: use CF_ENUM(typename, prefix, values)
m4_define(CF_enum, `m4_divert(0){ "CF_enum_prefix[[]]$1", -((CF_enum_type<<16) | CF_enum_prefix[[]]$1) }, m4_define(CF_enum, `m4_divert(1){ "CF_enum_prefix[[]]$1", -((CF_enum_type<<16) | CF_enum_prefix[[]]$1) },
m4_divert(-1)') m4_divert(-1)')
m4_define(CF_ENUM, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix]],$2)CF_iterate([[CF_enum]], [[m4_shift(m4_shift($@))]])DNL') m4_define(CF_ENUM, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix]],$2)CF_iterate([[CF_enum]], [[m4_shift(m4_shift($@))]])DNL')
# After all configuration templates end, we generate the
m4_m4wrap(`
m4_divert(0)
static struct keyword keyword_list[] = {
m4_undivert(1){ NULL, -1 } };
')
# As we are processing C source, we must access all M4 primitives via # As we are processing C source, we must access all M4 primitives via
# m4_* and also set different quoting convention: `[[' and ']]' # m4_* and also set different quoting convention: `[[' and ']]'
m4_changequote([[,]]) m4_changequote([[,]])