Commit a412f01e authored by Martin Mareš's avatar Martin Mareš

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

can be used in definition of ENUM's.
parent 2edb31b0
......@@ -20,13 +20,13 @@
#include "conf/cf-parse.tab.h"
#include "lib/string.h"
static struct keyword {
struct keyword {
byte *name;
int value;
struct keyword *next;
} keyword_list[] = {
};
#include "conf/keywords.h"
{ NULL, -1 } };
#define KW_HASH_SIZE 64
static struct keyword *kw_hash[KW_HASH_SIZE];
......
......@@ -2,17 +2,28 @@ m4_divert(-1)m4_dnl
#
# 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.
#
# Common aliases
m4_define(DNL, `m4_dnl')
# Diversions used:
# 1 keywords
# Simple iterator
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)')
# 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
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_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
......@@ -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)
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_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
# m4_* and also set different quoting convention: `[[' and ']]'
m4_changequote([[,]])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment