Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
4 */
5
6#ifndef LKC_H
7#define LKC_H
8
9#include <assert.h>
10#include <stdio.h>
11#include <stdlib.h>
12
13#include "expr.h"
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#include "lkc_proto.h"
20
21#define SRCTREE "srctree"
22
23#ifndef CONFIG_
24#define CONFIG_ "CONFIG_"
25#endif
26static inline const char *CONFIG_prefix(void)
27{
28 return getenv( "CONFIG_" ) ?: CONFIG_;
29}
30#undef CONFIG_
31#define CONFIG_ CONFIG_prefix()
32
33extern int yylineno;
34void zconfdump(FILE *out);
35void zconf_starthelp(void);
36FILE *zconf_fopen(const char *name);
37void zconf_initscan(const char *name);
38void zconf_nextfile(const char *name);
39
40/* confdata.c */
41extern struct gstr autoconf_cmd;
42const char *conf_get_configname(void);
43
44/* confdata.c and expr.c */
45static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
46{
47 assert(len != 0);
48
49 if (fwrite(str, len, count, out) != count)
50 fprintf(stderr, "Error in writing or end of file.\n");
51}
52
53/* util.c */
54const char *file_lookup(const char *name,
55 const char *parent_name, int parent_lineno);
56
57/* lexer.l */
58int yylex(void);
59
60struct gstr {
61 size_t len;
62 char *s;
63 /*
64 * when max_width is not zero long lines in string s (if any) get
65 * wrapped not to exceed the max_width value
66 */
67 int max_width;
68};
69struct gstr str_new(void);
70void str_free(struct gstr *gs);
71void str_append(struct gstr *gs, const char *s);
72void str_printf(struct gstr *gs, const char *fmt, ...);
73char *str_get(const struct gstr *gs);
74
75/* menu.c */
76struct menu *menu_next(struct menu *menu, struct menu *root);
77#define menu_for_each_sub_entry(menu, root) \
78 for (menu = menu_next(root, root); menu; menu = menu_next(menu, root))
79#define menu_for_each_entry(menu) \
80 menu_for_each_sub_entry(menu, &rootmenu)
81void _menu_init(void);
82void menu_warn(const struct menu *menu, const char *fmt, ...);
83struct menu *menu_add_menu(void);
84void menu_end_menu(void);
85void menu_add_entry(struct symbol *sym, enum menu_type type);
86void menu_add_dep(struct expr *dep, struct expr *cond);
87void menu_add_visibility(struct expr *dep);
88struct property *menu_add_prompt(enum prop_type type, const char *prompt,
89 struct expr *dep);
90void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
91void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
92void menu_finalize(void);
93void menu_set_type(int type);
94
95extern struct menu rootmenu;
96
97bool menu_is_empty(struct menu *menu);
98bool menu_is_visible(struct menu *menu);
99bool menu_has_prompt(const struct menu *menu);
100const char *menu_get_prompt(const struct menu *menu);
101struct menu *menu_get_parent_menu(struct menu *menu);
102struct menu *menu_get_menu_or_parent_menu(struct menu *menu);
103int get_jump_key_char(void);
104struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head);
105void menu_get_ext_help(struct menu *menu, struct gstr *help);
106void menu_dump(void);
107
108/* symbol.c */
109void sym_clear_all_valid(void);
110struct symbol *sym_choice_default(struct menu *choice);
111struct symbol *sym_calc_choice(struct menu *choice);
112struct property *sym_get_range_prop(struct symbol *sym);
113const char *sym_get_string_default(struct symbol *sym);
114struct symbol *sym_check_deps(struct symbol *sym);
115struct symbol *prop_get_symbol(const struct property *prop);
116
117static inline tristate sym_get_tristate_value(const struct symbol *sym)
118{
119 return sym->curr.tri;
120}
121
122static inline bool sym_is_choice(const struct symbol *sym)
123{
124 /* A choice is a symbol with no name */
125 return sym->name == NULL;
126}
127
128bool sym_is_choice_value(const struct symbol *sym);
129
130static inline bool sym_has_value(const struct symbol *sym)
131{
132 return sym->flags & SYMBOL_DEF_USER ? true : false;
133}
134
135#ifdef __cplusplus
136}
137#endif
138
139#endif /* LKC_H */