1/*
2 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
3 * Released under the terms of the GNU GPL v2.0.
4 */
5
6#ifndef LKC_H
7#define LKC_H
8
9#include "expr.h"
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#ifdef LKC_DIRECT_LINK
16#define P(name,type,arg)	extern type name arg
17#else
18#include "lkc_defs.h"
19#define P(name,type,arg)	extern type (*name ## _p) arg
20#endif
21#include "lkc_proto.h"
22#undef P
23
24void symbol_end(char *help);
25int zconfparse(void);
26void zconfdump(FILE *out);
27
28extern int zconfdebug;
29void zconf_starthelp(void);
30void zconf_initscan(const char *name);
31void zconf_nextfile(const char *name);
32int zconf_lineno(void);
33char *zconf_curname(void);
34
35/* confdata.c */
36extern const char conf_def_filename[];
37extern char conf_filename[];
38
39char *conf_get_default_confname(void);
40
41/* kconfig_load.c */
42void kconfig_load(void);
43
44/* menu.c */
45void menu_init(void);
46void menu_add_menu(void);
47void menu_end_menu(void);
48void menu_add_entry(struct symbol *sym);
49void menu_end_entry(void);
50struct property *create_prop(enum prop_type type);
51void menu_add_dep(struct expr *dep);
52struct property *menu_add_prop(int token, char *prompt, struct symbol *def, struct expr *dep);
53void menu_finalize(struct menu *parent);
54void menu_set_type(int type);
55struct file *file_lookup(const char *name);
56int file_write_dep(const char *name);
57
58extern struct menu *current_entry;
59extern struct menu *current_menu;
60
61/* symbol.c */
62void sym_init(void);
63void sym_clear_all_valid(void);
64
65static inline tristate sym_get_tristate_value(struct symbol *sym)
66{
67	return S_TRI(sym->curr);
68}
69
70
71static inline struct symbol *sym_get_choice_value(struct symbol *sym)
72{
73	return (struct symbol *)S_VAL(sym->curr);
74}
75
76static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
77{
78	return sym_set_tristate_value(chval, yes);
79}
80
81static inline bool sym_is_choice(struct symbol *sym)
82{
83	return sym->flags & SYMBOL_CHOICE ? true : false;
84}
85
86static inline bool sym_is_choice_value(struct symbol *sym)
87{
88	return sym->flags & SYMBOL_CHOICEVAL ? true : false;
89}
90
91static inline bool sym_is_optional(struct symbol *sym)
92{
93	return sym->flags & SYMBOL_OPTIONAL ? true : false;
94}
95
96static inline bool sym_has_value(struct symbol *sym)
97{
98	//return S_VAL(sym->def) != NULL;
99	return sym->flags & SYMBOL_NEW ? false : true;
100}
101
102#ifdef __cplusplus
103}
104#endif
105
106#endif /* LKC_H */
107