提交 25c862cc 编写于 作者: L Linus Torvalds
...@@ -23,6 +23,7 @@ Module.symvers ...@@ -23,6 +23,7 @@ Module.symvers
# Generated include files # Generated include files
# #
include/asm include/asm
include/asm-*/asm-offsets.h
include/config include/config
include/linux/autoconf.h include/linux/autoconf.h
include/linux/compile.h include/linux/compile.h
......
...@@ -38,7 +38,7 @@ included in the kernel tree. ...@@ -38,7 +38,7 @@ included in the kernel tree.
What is covered within this file is mainly information to authors What is covered within this file is mainly information to authors
of modules. The author of an external modules should supply of modules. The author of an external modules should supply
a makefile that hides most of the complexity so one only has to type a makefile that hides most of the complexity so one only has to type
'make' to buld the module. A complete example will be present in 'make' to build the module. A complete example will be present in
chapter ¤. Creating a kbuild file for an external module". chapter ¤. Creating a kbuild file for an external module".
...@@ -69,7 +69,7 @@ when building an external module. ...@@ -69,7 +69,7 @@ when building an external module.
--- 2.2 Available targets --- 2.2 Available targets
$KDIR refers to path to kernel source top-level directory $KDIR refers to the path to the kernel source top-level directory
make -C $KDIR M=`pwd` make -C $KDIR M=`pwd`
Will build the module(s) located in current directory. Will build the module(s) located in current directory.
...@@ -87,11 +87,11 @@ when building an external module. ...@@ -87,11 +87,11 @@ when building an external module.
make -C $KDIR M=$PWD modules_install make -C $KDIR M=$PWD modules_install
Install the external module(s). Install the external module(s).
Installation default is in /lib/modules/<kernel-version>/extra, Installation default is in /lib/modules/<kernel-version>/extra,
but may be prefixed with INSTALL_MOD_PATH - see separate chater. but may be prefixed with INSTALL_MOD_PATH - see separate chapter.
make -C $KDIR M=$PWD clean make -C $KDIR M=$PWD clean
Remove all generated files for the module - the kernel Remove all generated files for the module - the kernel
source directory is not moddified. source directory is not modified.
make -C $KDIR M=`pwd` help make -C $KDIR M=`pwd` help
help will list the available target when building external help will list the available target when building external
...@@ -99,7 +99,7 @@ when building an external module. ...@@ -99,7 +99,7 @@ when building an external module.
--- 2.3 Available options: --- 2.3 Available options:
$KDIR refer to path to kernel src $KDIR refers to the path to the kernel source top-level directory
make -C $KDIR make -C $KDIR
Used to specify where to find the kernel source. Used to specify where to find the kernel source.
...@@ -206,11 +206,11 @@ following files: ...@@ -206,11 +206,11 @@ following files:
KERNELDIR := /lib/modules/`uname -r`/build KERNELDIR := /lib/modules/`uname -r`/build
all:: all::
$(MAKE) -C $KERNELDIR M=`pwd` $@ $(MAKE) -C $(KERNELDIR) M=`pwd` $@
# Module specific targets # Module specific targets
genbin: genbin:
echo "X" > 8123_bini.o_shipped echo "X" > 8123_bin.o_shipped
endif endif
...@@ -341,13 +341,13 @@ directory and therefore needs to deal with this in their kbuild file. ...@@ -341,13 +341,13 @@ directory and therefore needs to deal with this in their kbuild file.
EXTRA_CFLAGS := -Iinclude EXTRA_CFLAGS := -Iinclude
8123-y := 8123_if.o 8123_pci.o 8123_bin.o 8123-y := 8123_if.o 8123_pci.o 8123_bin.o
Note that in the assingment there is no space between -I and the path. Note that in the assignment there is no space between -I and the path.
This is a kbuild limitation and no space must be present. This is a kbuild limitation: there must be no space present.
=== 6. Module installation === 6. Module installation
Modules which are included in the kernel is installed in the directory: Modules which are included in the kernel are installed in the directory:
/lib/modules/$(KERNELRELEASE)/kernel /lib/modules/$(KERNELRELEASE)/kernel
...@@ -365,7 +365,7 @@ External modules are installed in the directory: ...@@ -365,7 +365,7 @@ External modules are installed in the directory:
=> Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel => Install dir: /frodo/lib/modules/$(KERNELRELEASE)/kernel
INSTALL_MOD_PATH may be set as an ordinary shell variable or as in the INSTALL_MOD_PATH may be set as an ordinary shell variable or as in the
example above be specified on the commandline when calling make. example above be specified on the command line when calling make.
INSTALL_MOD_PATH has effect both when installing modules included in INSTALL_MOD_PATH has effect both when installing modules included in
the kernel as well as when installing external modules. the kernel as well as when installing external modules.
...@@ -384,7 +384,7 @@ External modules are installed in the directory: ...@@ -384,7 +384,7 @@ External modules are installed in the directory:
=== 7. Module versioning === 7. Module versioning
Module versioning are enabled by the CONFIG_MODVERSIONS tag. Module versioning is enabled by the CONFIG_MODVERSIONS tag.
Module versioning is used as a simple ABI consistency check. The Module Module versioning is used as a simple ABI consistency check. The Module
versioning creates a CRC value of the full prototype for an exported symbol and versioning creates a CRC value of the full prototype for an exported symbol and
......
...@@ -286,10 +286,6 @@ export quiet Q KBUILD_VERBOSE ...@@ -286,10 +286,6 @@ export quiet Q KBUILD_VERBOSE
cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
# For backward compatibility
check_gcc = $(warning check_gcc is deprecated - use cc-option) \
$(call cc-option, $(1),$(2))
# cc-option-yn # cc-option-yn
# Usage: flag := $(call cc-option-yn, -march=winchip-c6) # Usage: flag := $(call cc-option-yn, -march=winchip-c6)
cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ cc-option-yn = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
...@@ -481,18 +477,20 @@ ifeq ($(dot-config),1) ...@@ -481,18 +477,20 @@ ifeq ($(dot-config),1)
# Read in dependencies to all Kconfig* files, make sure to run # Read in dependencies to all Kconfig* files, make sure to run
# oldconfig if changes are detected. # oldconfig if changes are detected.
-include .config.cmd -include .kconfig.d
include .config include .config
# If .config needs to be updated, it will be done via the dependency # If .config needs to be updated, it will be done via the dependency
# that autoconf has on .config. # that autoconf has on .config.
# To avoid any implicit rule to kick in, define an empty command # To avoid any implicit rule to kick in, define an empty command
.config: ; .config .kconfig.d: ;
# If .config is newer than include/linux/autoconf.h, someone tinkered # If .config is newer than include/linux/autoconf.h, someone tinkered
# with it and forgot to run make oldconfig # with it and forgot to run make oldconfig.
include/linux/autoconf.h: .config # If kconfig.d is missing then we are probarly in a cleaned tree so
# we execute the config step to be sure to catch updated Kconfig files
include/linux/autoconf.h: .kconfig.d .config
$(Q)mkdir -p include/linux $(Q)mkdir -p include/linux
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
else else
...@@ -1066,7 +1064,7 @@ help: ...@@ -1066,7 +1064,7 @@ help:
@echo ' all - Build all targets marked with [*]' @echo ' all - Build all targets marked with [*]'
@echo '* vmlinux - Build the bare kernel' @echo '* vmlinux - Build the bare kernel'
@echo '* modules - Build all modules' @echo '* modules - Build all modules'
@echo ' modules_install - Install all modules' @echo ' modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
@echo ' dir/ - Build all files in dir and below' @echo ' dir/ - Build all files in dir and below'
@echo ' dir/file.[ois] - Build specified target only' @echo ' dir/file.[ois] - Build specified target only'
@echo ' dir/file.ko - Build module including final link' @echo ' dir/file.ko - Build module including final link'
...@@ -1240,8 +1238,11 @@ cscope: FORCE ...@@ -1240,8 +1238,11 @@ cscope: FORCE
quiet_cmd_TAGS = MAKE $@ quiet_cmd_TAGS = MAKE $@
define cmd_TAGS define cmd_TAGS
rm -f $@; \ rm -f $@; \
ETAGSF=`etags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_GPL --extra=+f"`; \ ETAGSF=`etags --version | grep -i exuberant >/dev/null && \
$(all-sources) | xargs etags $$ETAGSF -a echo "-I __initdata,__exitdata,__acquires,__releases \
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
--extra=+f --c-kinds=+px"`; \
$(all-sources) | xargs etags $$ETAGSF -a
endef endef
TAGS: FORCE TAGS: FORCE
...@@ -1251,8 +1252,11 @@ TAGS: FORCE ...@@ -1251,8 +1252,11 @@ TAGS: FORCE
quiet_cmd_tags = MAKE $@ quiet_cmd_tags = MAKE $@
define cmd_tags define cmd_tags
rm -f $@; \ rm -f $@; \
CTAGSF=`ctags --version | grep -i exuberant >/dev/null && echo "-I __initdata,__exitdata,EXPORT_SYMBOL,EXPORT_SYMBOL_GPL --extra=+f"`; \ CTAGSF=`ctags --version | grep -i exuberant >/dev/null && \
$(all-sources) | xargs ctags $$CTAGSF -a echo "-I __initdata,__exitdata,__acquires,__releases \
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
--extra=+f --c-kinds=+px"`; \
$(all-sources) | xargs ctags $$CTAGSF -a
endef endef
tags: FORCE tags: FORCE
......
bootsect
bzImage
setup
consolemap_deftbl.c consolemap_deftbl.c
defkeymap.c defkeymap.c
qtronixmap.c
mktables
raid6altivec*.c
raid6int*.c
raid6tables.c
53c700_d.h
53c7xx_d.h
53c7xx_u.h
aic79xx_reg.h
aic79xx_reg_print.c
aic79xx_seq.h
aic7xxx_reg.h
aic7xxx_reg_print.c
aic7xxx_seq.h
...@@ -59,8 +59,7 @@ ...@@ -59,8 +59,7 @@
/* /*
* Must define these before including other files, inline functions need them * Must define these before including other files, inline functions need them
*/ */
#define LOCK_SECTION_NAME \ #define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME
".text.lock." __stringify(KBUILD_BASENAME)
#define LOCK_SECTION_START(extra) \ #define LOCK_SECTION_START(extra) \
".subsection 1\n\t" \ ".subsection 1\n\t" \
......
...@@ -461,8 +461,8 @@ config OBSOLETE_MODPARM ...@@ -461,8 +461,8 @@ config OBSOLETE_MODPARM
If unsure, say Y. If unsure, say Y.
config MODVERSIONS config MODVERSIONS
bool "Module versioning support (EXPERIMENTAL)" bool "Module versioning support"
depends on MODULES && EXPERIMENTAL depends on MODULES
help help
Usually, you have to use modules compiled with your kernel. Usually, you have to use modules compiled with your kernel.
Saying Y here makes it sometimes possible to use modules Saying Y here makes it sometimes possible to use modules
......
#
# Generated files
#
config_data.h
config_data.gz
#
# Generated files
#
conmakehash conmakehash
kallsyms kallsyms
pnmtologo pnmtologo
bin2c
...@@ -19,4 +19,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms ...@@ -19,4 +19,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms
subdir-$(CONFIG_MODULES) += mod subdir-$(CONFIG_MODULES) += mod
# Let clean descend into subdirs # Let clean descend into subdirs
subdir- += basic lxdialog kconfig package subdir- += basic kconfig package
...@@ -81,8 +81,10 @@ obj-dirs := $(addprefix $(obj)/,$(obj-dirs)) ...@@ -81,8 +81,10 @@ obj-dirs := $(addprefix $(obj)/,$(obj-dirs))
# Note: It's possible that one object gets potentially linked into more # Note: It's possible that one object gets potentially linked into more
# than one module. In that case KBUILD_MODNAME will be set to foo_bar, # than one module. In that case KBUILD_MODNAME will be set to foo_bar,
# where foo and bar are the name of the modules. # where foo and bar are the name of the modules.
basename_flags = -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) name-fix = $(subst $(comma),_,$(subst -,_,$1))
modname_flags = $(if $(filter 1,$(words $(modname))),-DKBUILD_MODNAME=$(subst $(comma),_,$(subst -,_,$(modname)))) basename_flags = -D"KBUILD_BASENAME=KBUILD_STR($(call name-fix,$(*F)))"
modname_flags = $(if $(filter 1,$(words $(modname))),\
-D"KBUILD_MODNAME=KBUILD_STR($(call name-fix,$(modname)))")
_c_flags = $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o) _c_flags = $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$(*F).o)
_a_flags = $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o) _a_flags = $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
...@@ -113,7 +115,7 @@ endif ...@@ -113,7 +115,7 @@ endif
c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \ c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \
$(__c_flags) $(modkern_cflags) \ $(__c_flags) $(modkern_cflags) \
$(basename_flags) $(modname_flags) -D"KBUILD_STR(s)=\#s" $(basename_flags) $(modname_flags)
a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \ a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \
$(__a_flags) $(modkern_aflags) $(__a_flags) $(modkern_aflags)
......
...@@ -130,9 +130,22 @@ void usage(void) ...@@ -130,9 +130,22 @@ void usage(void)
exit(1); exit(1);
} }
/*
* Print out the commandline prefixed with cmd_<target filename> :=
* If commandline contains '#' escape with '\' so make to not see
* the '#' as a start-of-comment symbol
**/
void print_cmdline(void) void print_cmdline(void)
{ {
printf("cmd_%s := %s\n\n", target, cmdline); char *p = cmdline;
printf("cmd_%s := ", target);
for (; *p; p++) {
if (*p == '#')
printf("\\");
printf("%c", *p);
}
printf("\n\n");
} }
char * str_config = NULL; char * str_config = NULL;
......
keywords.c
lex.c
parse.[ch]
genksyms
/* ANSI-C code produced by gperf version 2.7.2 */ /* ANSI-C code produced by gperf version 3.0.1 */
/* Command-line: gperf -L ANSI-C -a -C -E -g -H is_reserved_hash -k '1,3,$' -N is_reserved_word -p -t scripts/genksyms/keywords.gperf */ /* Command-line: gperf -L ANSI-C -a -C -E -g -H is_reserved_hash -k '1,3,$' -N is_reserved_word -p -t scripts/genksyms/keywords.gperf */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
&& (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
&& ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
&& ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
&& ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
&& ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
&& ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
&& ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
&& ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
&& ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
&& ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
&& ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
&& ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
&& ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
&& ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
&& ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
&& ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
&& ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
&& ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
&& ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
&& ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
&& ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
/* The character set is not based on ISO-646. */
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
#endif
#line 1 "scripts/genksyms/keywords.gperf"
#line 3 "scripts/genksyms/keywords.gperf"
struct resword { const char *name; int token; }; struct resword { const char *name; int token; };
/* maximum key range = 109, duplicates = 0 */ /* maximum key range = 68, duplicates = 0 */
#ifdef __GNUC__ #ifdef __GNUC__
__inline __inline
...@@ -15,32 +46,32 @@ is_reserved_hash (register const char *str, register unsigned int len) ...@@ -15,32 +46,32 @@ is_reserved_hash (register const char *str, register unsigned int len)
{ {
static const unsigned char asso_values[] = static const unsigned char asso_values[] =
{ {
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 5, 71, 71, 71, 71, 71, 71, 71, 71, 71, 15,
113, 113, 113, 113, 113, 113, 0, 113, 113, 113, 71, 71, 71, 71, 71, 71, 15, 71, 71, 71,
0, 113, 113, 113, 113, 113, 113, 113, 113, 113, 10, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 0, 113, 0, 113, 20, 71, 71, 71, 71, 71, 0, 71, 0, 71, 5,
25, 0, 35, 30, 113, 20, 113, 113, 40, 30, 5, 0, 10, 20, 71, 25, 71, 71, 20, 0,
30, 0, 0, 113, 0, 51, 0, 15, 5, 113, 20, 30, 25, 71, 10, 5, 0, 20, 15, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
113, 113, 113, 113, 113, 113 71, 71, 71, 71, 71, 71
}; };
return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]]; return len + asso_values[(unsigned char)str[2]] + asso_values[(unsigned char)str[0]] + asso_values[(unsigned char)str[len - 1]];
} }
...@@ -56,77 +87,112 @@ is_reserved_word (register const char *str, register unsigned int len) ...@@ -56,77 +87,112 @@ is_reserved_word (register const char *str, register unsigned int len)
TOTAL_KEYWORDS = 41, TOTAL_KEYWORDS = 41,
MIN_WORD_LENGTH = 3, MIN_WORD_LENGTH = 3,
MAX_WORD_LENGTH = 17, MAX_WORD_LENGTH = 17,
MIN_HASH_VALUE = 4, MIN_HASH_VALUE = 3,
MAX_HASH_VALUE = 112 MAX_HASH_VALUE = 70
}; };
static const struct resword wordlist[] = static const struct resword wordlist[] =
{ {
{""}, {""}, {""}, {""}, {""}, {""}, {""},
{"auto", AUTO_KEYW}, #line 24 "scripts/genksyms/keywords.gperf"
{""}, {""}, {"asm", ASM_KEYW},
{""},
#line 7 "scripts/genksyms/keywords.gperf"
{"__asm", ASM_KEYW},
{""},
#line 8 "scripts/genksyms/keywords.gperf"
{"__asm__", ASM_KEYW}, {"__asm__", ASM_KEYW},
{""}, {""},
#line 21 "scripts/genksyms/keywords.gperf"
{"_restrict", RESTRICT_KEYW}, {"_restrict", RESTRICT_KEYW},
#line 50 "scripts/genksyms/keywords.gperf"
{"__typeof__", TYPEOF_KEYW}, {"__typeof__", TYPEOF_KEYW},
#line 9 "scripts/genksyms/keywords.gperf"
{"__attribute", ATTRIBUTE_KEYW}, {"__attribute", ATTRIBUTE_KEYW},
{"__restrict__", RESTRICT_KEYW}, #line 11 "scripts/genksyms/keywords.gperf"
{"__const", CONST_KEYW},
#line 10 "scripts/genksyms/keywords.gperf"
{"__attribute__", ATTRIBUTE_KEYW}, {"__attribute__", ATTRIBUTE_KEYW},
#line 12 "scripts/genksyms/keywords.gperf"
{"__const__", CONST_KEYW},
#line 16 "scripts/genksyms/keywords.gperf"
{"__signed__", SIGNED_KEYW},
#line 42 "scripts/genksyms/keywords.gperf"
{"static", STATIC_KEYW},
{""}, {""},
{"__volatile", VOLATILE_KEYW}, #line 15 "scripts/genksyms/keywords.gperf"
{"__signed", SIGNED_KEYW},
#line 30 "scripts/genksyms/keywords.gperf"
{"char", CHAR_KEYW},
{""}, {""},
#line 43 "scripts/genksyms/keywords.gperf"
{"struct", STRUCT_KEYW},
#line 22 "scripts/genksyms/keywords.gperf"
{"__restrict__", RESTRICT_KEYW},
#line 23 "scripts/genksyms/keywords.gperf"
{"restrict", RESTRICT_KEYW},
#line 33 "scripts/genksyms/keywords.gperf"
{"enum", ENUM_KEYW},
#line 17 "scripts/genksyms/keywords.gperf"
{"__volatile", VOLATILE_KEYW},
#line 34 "scripts/genksyms/keywords.gperf"
{"extern", EXTERN_KEYW},
#line 18 "scripts/genksyms/keywords.gperf"
{"__volatile__", VOLATILE_KEYW}, {"__volatile__", VOLATILE_KEYW},
{"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW}, #line 37 "scripts/genksyms/keywords.gperf"
{""}, {""}, {""},
{"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
{"int", INT_KEYW}, {"int", INT_KEYW},
{"char", CHAR_KEYW}, {""},
{""}, {""}, #line 31 "scripts/genksyms/keywords.gperf"
{"__const", CONST_KEYW}, {"const", CONST_KEYW},
#line 32 "scripts/genksyms/keywords.gperf"
{"double", DOUBLE_KEYW},
{""},
#line 13 "scripts/genksyms/keywords.gperf"
{"__inline", INLINE_KEYW}, {"__inline", INLINE_KEYW},
{"__const__", CONST_KEYW}, #line 29 "scripts/genksyms/keywords.gperf"
{"auto", AUTO_KEYW},
#line 14 "scripts/genksyms/keywords.gperf"
{"__inline__", INLINE_KEYW}, {"__inline__", INLINE_KEYW},
{""}, {""}, {""}, {""}, #line 41 "scripts/genksyms/keywords.gperf"
{"__asm", ASM_KEYW}, {"signed", SIGNED_KEYW},
{"extern", EXTERN_KEYW},
{""}, {""},
{"register", REGISTER_KEYW}, #line 46 "scripts/genksyms/keywords.gperf"
{"unsigned", UNSIGNED_KEYW},
{""}, {""},
{"float", FLOAT_KEYW}, #line 40 "scripts/genksyms/keywords.gperf"
{"short", SHORT_KEYW},
#line 49 "scripts/genksyms/keywords.gperf"
{"typeof", TYPEOF_KEYW}, {"typeof", TYPEOF_KEYW},
#line 44 "scripts/genksyms/keywords.gperf"
{"typedef", TYPEDEF_KEYW}, {"typedef", TYPEDEF_KEYW},
{""}, {""}, #line 48 "scripts/genksyms/keywords.gperf"
{"_Bool", BOOL_KEYW},
{"double", DOUBLE_KEYW},
{""}, {""},
{"enum", ENUM_KEYW},
{""}, {""}, {""},
{"volatile", VOLATILE_KEYW}, {"volatile", VOLATILE_KEYW},
{""},
#line 35 "scripts/genksyms/keywords.gperf"
{"float", FLOAT_KEYW},
{""}, {""},
#line 39 "scripts/genksyms/keywords.gperf"
{"register", REGISTER_KEYW},
#line 47 "scripts/genksyms/keywords.gperf"
{"void", VOID_KEYW}, {"void", VOID_KEYW},
{"const", CONST_KEYW},
{"short", SHORT_KEYW},
{"struct", STRUCT_KEYW},
{""}, {""},
{"restrict", RESTRICT_KEYW}, #line 36 "scripts/genksyms/keywords.gperf"
{"inline", INLINE_KEYW},
{""}, {""},
{"__signed__", SIGNED_KEYW}, #line 5 "scripts/genksyms/keywords.gperf"
{"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
{""}, {""},
{"asm", ASM_KEYW}, #line 20 "scripts/genksyms/keywords.gperf"
{""}, {""}, {"_Bool", BOOL_KEYW},
{"inline", INLINE_KEYW}, {""},
{""}, {""}, {""}, #line 6 "scripts/genksyms/keywords.gperf"
{"union", UNION_KEYW}, {"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
{""}, {""}, {""}, {""}, {""}, {""},
{"static", STATIC_KEYW},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"__signed", SIGNED_KEYW}, #line 38 "scripts/genksyms/keywords.gperf"
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{""}, {""}, {""}, {""}, {""},
{"unsigned", UNSIGNED_KEYW},
{""}, {""}, {""}, {""},
{"long", LONG_KEYW}, {"long", LONG_KEYW},
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
{"signed", SIGNED_KEYW} #line 45 "scripts/genksyms/keywords.gperf"
{"union", UNION_KEYW}
}; };
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
......
...@@ -2036,49 +2036,131 @@ fini: ...@@ -2036,49 +2036,131 @@ fini:
return token; return token;
} }
#ifndef YYSTYPE /* A Bison parser, made by GNU Bison 2.0. */
#define YYSTYPE int
#endif
#define ASM_KEYW 257
#define ATTRIBUTE_KEYW 258
#define AUTO_KEYW 259
#define BOOL_KEYW 260
#define CHAR_KEYW 261
#define CONST_KEYW 262
#define DOUBLE_KEYW 263
#define ENUM_KEYW 264
#define EXTERN_KEYW 265
#define FLOAT_KEYW 266
#define INLINE_KEYW 267
#define INT_KEYW 268
#define LONG_KEYW 269
#define REGISTER_KEYW 270
#define RESTRICT_KEYW 271
#define SHORT_KEYW 272
#define SIGNED_KEYW 273
#define STATIC_KEYW 274
#define STRUCT_KEYW 275
#define TYPEDEF_KEYW 276
#define UNION_KEYW 277
#define UNSIGNED_KEYW 278
#define VOID_KEYW 279
#define VOLATILE_KEYW 280
#define TYPEOF_KEYW 281
#define EXPORT_SYMBOL_KEYW 282
#define ASM_PHRASE 283
#define ATTRIBUTE_PHRASE 284
#define BRACE_PHRASE 285
#define BRACKET_PHRASE 286
#define EXPRESSION_PHRASE 287
#define CHAR 288
#define DOTS 289
#define IDENT 290
#define INT 291
#define REAL 292
#define STRING 293
#define TYPE 294
#define OTHER 295
#define FILENAME 296
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
ASM_KEYW = 258,
ATTRIBUTE_KEYW = 259,
AUTO_KEYW = 260,
BOOL_KEYW = 261,
CHAR_KEYW = 262,
CONST_KEYW = 263,
DOUBLE_KEYW = 264,
ENUM_KEYW = 265,
EXTERN_KEYW = 266,
FLOAT_KEYW = 267,
INLINE_KEYW = 268,
INT_KEYW = 269,
LONG_KEYW = 270,
REGISTER_KEYW = 271,
RESTRICT_KEYW = 272,
SHORT_KEYW = 273,
SIGNED_KEYW = 274,
STATIC_KEYW = 275,
STRUCT_KEYW = 276,
TYPEDEF_KEYW = 277,
UNION_KEYW = 278,
UNSIGNED_KEYW = 279,
VOID_KEYW = 280,
VOLATILE_KEYW = 281,
TYPEOF_KEYW = 282,
EXPORT_SYMBOL_KEYW = 283,
ASM_PHRASE = 284,
ATTRIBUTE_PHRASE = 285,
BRACE_PHRASE = 286,
BRACKET_PHRASE = 287,
EXPRESSION_PHRASE = 288,
CHAR = 289,
DOTS = 290,
IDENT = 291,
INT = 292,
REAL = 293,
STRING = 294,
TYPE = 295,
OTHER = 296,
FILENAME = 297
};
#endif
#define ASM_KEYW 258
#define ATTRIBUTE_KEYW 259
#define AUTO_KEYW 260
#define BOOL_KEYW 261
#define CHAR_KEYW 262
#define CONST_KEYW 263
#define DOUBLE_KEYW 264
#define ENUM_KEYW 265
#define EXTERN_KEYW 266
#define FLOAT_KEYW 267
#define INLINE_KEYW 268
#define INT_KEYW 269
#define LONG_KEYW 270
#define REGISTER_KEYW 271
#define RESTRICT_KEYW 272
#define SHORT_KEYW 273
#define SIGNED_KEYW 274
#define STATIC_KEYW 275
#define STRUCT_KEYW 276
#define TYPEDEF_KEYW 277
#define UNION_KEYW 278
#define UNSIGNED_KEYW 279
#define VOID_KEYW 280
#define VOLATILE_KEYW 281
#define TYPEOF_KEYW 282
#define EXPORT_SYMBOL_KEYW 283
#define ASM_PHRASE 284
#define ATTRIBUTE_PHRASE 285
#define BRACE_PHRASE 286
#define BRACKET_PHRASE 287
#define EXPRESSION_PHRASE 288
#define CHAR 289
#define DOTS 290
#define IDENT 291
#define INT 292
#define REAL 293
#define STRING 294
#define TYPE 295
#define OTHER 296
#define FILENAME 297
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
typedef int YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE yylval; extern YYSTYPE yylval;
此差异已折叠。
#ifndef YYSTYPE /* A Bison parser, made by GNU Bison 2.0. */
#define YYSTYPE int
/* Skeleton parser for Yacc-like parsing with Bison,
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* As a special exception, when this file is copied by Bison into a
Bison output file, you may use that output file without restriction.
This special exception was added by the Free Software Foundation
in version 1.24 of Bison. */
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
ASM_KEYW = 258,
ATTRIBUTE_KEYW = 259,
AUTO_KEYW = 260,
BOOL_KEYW = 261,
CHAR_KEYW = 262,
CONST_KEYW = 263,
DOUBLE_KEYW = 264,
ENUM_KEYW = 265,
EXTERN_KEYW = 266,
FLOAT_KEYW = 267,
INLINE_KEYW = 268,
INT_KEYW = 269,
LONG_KEYW = 270,
REGISTER_KEYW = 271,
RESTRICT_KEYW = 272,
SHORT_KEYW = 273,
SIGNED_KEYW = 274,
STATIC_KEYW = 275,
STRUCT_KEYW = 276,
TYPEDEF_KEYW = 277,
UNION_KEYW = 278,
UNSIGNED_KEYW = 279,
VOID_KEYW = 280,
VOLATILE_KEYW = 281,
TYPEOF_KEYW = 282,
EXPORT_SYMBOL_KEYW = 283,
ASM_PHRASE = 284,
ATTRIBUTE_PHRASE = 285,
BRACE_PHRASE = 286,
BRACKET_PHRASE = 287,
EXPRESSION_PHRASE = 288,
CHAR = 289,
DOTS = 290,
IDENT = 291,
INT = 292,
REAL = 293,
STRING = 294,
TYPE = 295,
OTHER = 296,
FILENAME = 297
};
#endif #endif
#define ASM_KEYW 257 #define ASM_KEYW 258
#define ATTRIBUTE_KEYW 258 #define ATTRIBUTE_KEYW 259
#define AUTO_KEYW 259 #define AUTO_KEYW 260
#define BOOL_KEYW 260 #define BOOL_KEYW 261
#define CHAR_KEYW 261 #define CHAR_KEYW 262
#define CONST_KEYW 262 #define CONST_KEYW 263
#define DOUBLE_KEYW 263 #define DOUBLE_KEYW 264
#define ENUM_KEYW 264 #define ENUM_KEYW 265
#define EXTERN_KEYW 265 #define EXTERN_KEYW 266
#define FLOAT_KEYW 266 #define FLOAT_KEYW 267
#define INLINE_KEYW 267 #define INLINE_KEYW 268
#define INT_KEYW 268 #define INT_KEYW 269
#define LONG_KEYW 269 #define LONG_KEYW 270
#define REGISTER_KEYW 270 #define REGISTER_KEYW 271
#define RESTRICT_KEYW 271 #define RESTRICT_KEYW 272
#define SHORT_KEYW 272 #define SHORT_KEYW 273
#define SIGNED_KEYW 273 #define SIGNED_KEYW 274
#define STATIC_KEYW 274 #define STATIC_KEYW 275
#define STRUCT_KEYW 275 #define STRUCT_KEYW 276
#define TYPEDEF_KEYW 276 #define TYPEDEF_KEYW 277
#define UNION_KEYW 277 #define UNION_KEYW 278
#define UNSIGNED_KEYW 278 #define UNSIGNED_KEYW 279
#define VOID_KEYW 279 #define VOID_KEYW 280
#define VOLATILE_KEYW 280 #define VOLATILE_KEYW 281
#define TYPEOF_KEYW 281 #define TYPEOF_KEYW 282
#define EXPORT_SYMBOL_KEYW 282 #define EXPORT_SYMBOL_KEYW 283
#define ASM_PHRASE 283 #define ASM_PHRASE 284
#define ATTRIBUTE_PHRASE 284 #define ATTRIBUTE_PHRASE 285
#define BRACE_PHRASE 285 #define BRACE_PHRASE 286
#define BRACKET_PHRASE 286 #define BRACKET_PHRASE 287
#define EXPRESSION_PHRASE 287 #define EXPRESSION_PHRASE 288
#define CHAR 288 #define CHAR 289
#define DOTS 289 #define DOTS 290
#define IDENT 290 #define IDENT 291
#define INT 291 #define INT 292
#define REAL 292 #define REAL 293
#define STRING 293 #define STRING 294
#define TYPE 294 #define TYPE 295
#define OTHER 295 #define OTHER 296
#define FILENAME 296 #define FILENAME 297
#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
typedef int YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE yylval; extern YYSTYPE yylval;
...@@ -197,6 +197,7 @@ storage_class_specifier: ...@@ -197,6 +197,7 @@ storage_class_specifier:
type_specifier: type_specifier:
simple_type_specifier simple_type_specifier
| cvar_qualifier | cvar_qualifier
| TYPEOF_KEYW '(' decl_specifier_seq '*' ')'
| TYPEOF_KEYW '(' decl_specifier_seq ')' | TYPEOF_KEYW '(' decl_specifier_seq ')'
/* References to s/u/e's defined elsewhere. Rearrange things /* References to s/u/e's defined elsewhere. Rearrange things
......
...@@ -5,6 +5,7 @@ config* ...@@ -5,6 +5,7 @@ config*
lex.*.c lex.*.c
*.tab.c *.tab.c
*.tab.h *.tab.h
zconf.hash.c
# #
# configuration programs # configuration programs
......
...@@ -11,7 +11,7 @@ gconfig: $(obj)/gconf ...@@ -11,7 +11,7 @@ gconfig: $(obj)/gconf
$< arch/$(ARCH)/Kconfig $< arch/$(ARCH)/Kconfig
menuconfig: $(obj)/mconf menuconfig: $(obj)/mconf
$(Q)$(MAKE) $(build)=scripts/lxdialog $(Q)$(MAKE) $(build)=scripts/kconfig/lxdialog
$< arch/$(ARCH)/Kconfig $< arch/$(ARCH)/Kconfig
config: $(obj)/conf config: $(obj)/conf
...@@ -115,6 +115,7 @@ endif ...@@ -115,6 +115,7 @@ endif
clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \ clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
.tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c .tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c
subdir- += lxdialog
# Needed for systems without gettext # Needed for systems without gettext
KBUILD_HAVE_NLS := $(shell \ KBUILD_HAVE_NLS := $(shell \
......
#
# Generated files
#
lxdialog
/*
* checklist.c -- implements the checklist box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
* Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
static int list_width, check_x, item_x;
/*
* Print list item
*/
static void print_item(WINDOW * win, const char *item, int status, int choice,
int selected)
{
int i;
/* Clear 'residue' of last item */
wattrset(win, menubox_attr);
wmove(win, choice, 0);
for (i = 0; i < list_width; i++)
waddch(win, ' ');
wmove(win, choice, check_x);
wattrset(win, selected ? check_selected_attr : check_attr);
wprintw(win, "(%c)", status ? 'X' : ' ');
wattrset(win, selected ? tag_selected_attr : tag_attr);
mvwaddch(win, choice, item_x, item[0]);
wattrset(win, selected ? item_selected_attr : item_attr);
waddstr(win, (char *)item + 1);
if (selected) {
wmove(win, choice, check_x + 1);
wrefresh(win);
}
}
/*
* Print the scroll indicators.
*/
static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
int y, int x, int height)
{
wmove(win, y, x);
if (scroll > 0) {
wattrset(win, uarrow_attr);
waddch(win, ACS_UARROW);
waddstr(win, "(-)");
} else {
wattrset(win, menubox_attr);
waddch(win, ACS_HLINE);
waddch(win, ACS_HLINE);
waddch(win, ACS_HLINE);
waddch(win, ACS_HLINE);
}
y = y + height + 1;
wmove(win, y, x);
if ((height < item_no) && (scroll + choice < item_no - 1)) {
wattrset(win, darrow_attr);
waddch(win, ACS_DARROW);
waddstr(win, "(+)");
} else {
wattrset(win, menubox_border_attr);
waddch(win, ACS_HLINE);
waddch(win, ACS_HLINE);
waddch(win, ACS_HLINE);
waddch(win, ACS_HLINE);
}
}
/*
* Display the termination buttons
*/
static void print_buttons(WINDOW * dialog, int height, int width, int selected)
{
int x = width / 2 - 11;
int y = height - 2;
print_button(dialog, "Select", y, x, selected == 0);
print_button(dialog, " Help ", y, x + 14, selected == 1);
wmove(dialog, y, x + 1 + 14 * selected);
wrefresh(dialog);
}
/*
* Display a dialog box with a list of options that can be turned on or off
* in the style of radiolist (only one option turned on at a time).
*/
int dialog_checklist(const char *title, const char *prompt, int height,
int width, int list_height, int item_no,
const char *const *items)
{
int i, x, y, box_x, box_y;
int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
WINDOW *dialog, *list;
/* Allocate space for storing item on/off status */
if ((status = malloc(sizeof(int) * item_no)) == NULL) {
endwin();
fprintf(stderr,
"\nCan't allocate memory in dialog_checklist().\n");
exit(-1);
}
/* Initializes status */
for (i = 0; i < item_no; i++) {
status[i] = !strcasecmp(items[i * 3 + 2], "on");
if ((!choice && status[i])
|| !strcasecmp(items[i * 3 + 2], "selected"))
choice = i + 1;
}
if (choice)
choice--;
max_choice = MIN(list_height, item_no);
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow(stdscr, y, x, height, width);
dialog = newwin(height, width, y, x);
keypad(dialog, TRUE);
draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset(dialog, border_attr);
mvwaddch(dialog, height - 3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
waddch(dialog, ACS_RTEE);
print_title(dialog, title, width);
wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 3);
list_width = width - 6;
box_y = height - list_height - 5;
box_x = (width - list_width) / 2 - 1;
/* create new window for the list */
list = subwin(dialog, list_height, list_width, y + box_y + 1,
x + box_x + 1);
keypad(list, TRUE);
/* draw a box around the list items */
draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2,
menubox_border_attr, menubox_attr);
/* Find length of longest item in order to center checklist */
check_x = 0;
for (i = 0; i < item_no; i++)
check_x = MAX(check_x, +strlen(items[i * 3 + 1]) + 4);
check_x = (list_width - check_x) / 2;
item_x = check_x + 4;
if (choice >= list_height) {
scroll = choice - list_height + 1;
choice -= scroll;
}
/* Print the list */
for (i = 0; i < max_choice; i++) {
print_item(list, items[(scroll + i) * 3 + 1],
status[i + scroll], i, i == choice);
}
print_arrows(dialog, choice, item_no, scroll,
box_y, box_x + check_x + 5, list_height);
print_buttons(dialog, height, width, 0);
wnoutrefresh(list);
wnoutrefresh(dialog);
doupdate();
while (key != ESC) {
key = wgetch(dialog);
for (i = 0; i < max_choice; i++)
if (toupper(key) ==
toupper(items[(scroll + i) * 3 + 1][0]))
break;
if (i < max_choice || key == KEY_UP || key == KEY_DOWN ||
key == '+' || key == '-') {
if (key == KEY_UP || key == '-') {
if (!choice) {
if (!scroll)
continue;
/* Scroll list down */
if (list_height > 1) {
/* De-highlight current first item */
print_item(list, items[scroll * 3 + 1],
status[scroll], 0, FALSE);
scrollok(list, TRUE);
wscrl(list, -1);
scrollok(list, FALSE);
}
scroll--;
print_item(list, items[scroll * 3 + 1], status[scroll], 0, TRUE);
wnoutrefresh(list);
print_arrows(dialog, choice, item_no,
scroll, box_y, box_x + check_x + 5, list_height);
wrefresh(dialog);
continue; /* wait for another key press */
} else
i = choice - 1;
} else if (key == KEY_DOWN || key == '+') {
if (choice == max_choice - 1) {
if (scroll + choice >= item_no - 1)
continue;
/* Scroll list up */
if (list_height > 1) {
/* De-highlight current last item before scrolling up */
print_item(list, items[(scroll + max_choice - 1) * 3 + 1],
status[scroll + max_choice - 1],
max_choice - 1, FALSE);
scrollok(list, TRUE);
wscrl(list, 1);
scrollok(list, FALSE);
}
scroll++;
print_item(list, items[(scroll + max_choice - 1) * 3 + 1],
status[scroll + max_choice - 1], max_choice - 1, TRUE);
wnoutrefresh(list);
print_arrows(dialog, choice, item_no,
scroll, box_y, box_x + check_x + 5, list_height);
wrefresh(dialog);
continue; /* wait for another key press */
} else
i = choice + 1;
}
if (i != choice) {
/* De-highlight current item */
print_item(list, items[(scroll + choice) * 3 + 1],
status[scroll + choice], choice, FALSE);
/* Highlight new item */
choice = i;
print_item(list, items[(scroll + choice) * 3 + 1],
status[scroll + choice], choice, TRUE);
wnoutrefresh(list);
wrefresh(dialog);
}
continue; /* wait for another key press */
}
switch (key) {
case 'H':
case 'h':
case '?':
fprintf(stderr, "%s", items[(scroll + choice) * 3]);
delwin(dialog);
free(status);
return 1;
case TAB:
case KEY_LEFT:
case KEY_RIGHT:
button = ((key == KEY_LEFT ? --button : ++button) < 0)
? 1 : (button > 1 ? 0 : button);
print_buttons(dialog, height, width, button);
wrefresh(dialog);
break;
case 'S':
case 's':
case ' ':
case '\n':
if (!button) {
if (!status[scroll + choice]) {
for (i = 0; i < item_no; i++)
status[i] = 0;
status[scroll + choice] = 1;
for (i = 0; i < max_choice; i++)
print_item(list, items[(scroll + i) * 3 + 1],
status[scroll + i], i, i == choice);
}
wnoutrefresh(list);
wrefresh(dialog);
for (i = 0; i < item_no; i++)
if (status[i])
fprintf(stderr, "%s", items[i * 3]);
} else
fprintf(stderr, "%s", items[(scroll + choice) * 3]);
delwin(dialog);
free(status);
return button;
case 'X':
case 'x':
key = ESC;
case ESC:
break;
}
/* Now, update everything... */
doupdate();
}
delwin(dialog);
free(status);
return -1; /* ESC pressed */
}
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* /*
* Default color definitions * Default color definitions
* *
......
/* /*
* dialog.h -- common declarations for all dialog modules * dialog.h -- common declarations for all dialog modules
* *
...@@ -42,7 +41,7 @@ ...@@ -42,7 +41,7 @@
#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE) #if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
#define OLD_NCURSES 1 #define OLD_NCURSES 1
#undef wbkgdset #undef wbkgdset
#define wbkgdset(w,p) /*nothing*/ #define wbkgdset(w,p) /*nothing */
#else #else
#define OLD_NCURSES 0 #define OLD_NCURSES 0
#endif #endif
...@@ -56,7 +55,6 @@ ...@@ -56,7 +55,6 @@
#define MIN(x,y) (x < y ? x : y) #define MIN(x,y) (x < y ? x : y)
#define MAX(x,y) (x > y ? x : y) #define MAX(x,y) (x > y ? x : y)
#ifndef ACS_ULCORNER #ifndef ACS_ULCORNER
#define ACS_ULCORNER '+' #define ACS_ULCORNER '+'
#endif #endif
...@@ -88,7 +86,7 @@ ...@@ -88,7 +86,7 @@
#define ACS_DARROW 'v' #define ACS_DARROW 'v'
#endif #endif
/* /*
* Attribute names * Attribute names
*/ */
#define screen_attr attributes[0] #define screen_attr attributes[0]
...@@ -137,35 +135,35 @@ extern const char *backtitle; ...@@ -137,35 +135,35 @@ extern const char *backtitle;
/* /*
* Function prototypes * Function prototypes
*/ */
extern void create_rc (const char *filename); extern void create_rc(const char *filename);
extern int parse_rc (void); extern int parse_rc(void);
void init_dialog(void);
void init_dialog (void); void end_dialog(void);
void end_dialog (void); void attr_clear(WINDOW * win, int height, int width, chtype attr);
void attr_clear (WINDOW * win, int height, int width, chtype attr); void dialog_clear(void);
void dialog_clear (void); void color_setup(void);
void color_setup (void); void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
void print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x); void print_button(WINDOW * win, const char *label, int y, int x, int selected);
void print_button (WINDOW * win, const char *label, int y, int x, int selected); void print_title(WINDOW *dialog, const char *title, int width);
void draw_box (WINDOW * win, int y, int x, int height, int width, chtype box, void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
chtype border); chtype border);
void draw_shadow (WINDOW * win, int y, int x, int height, int width); void draw_shadow(WINDOW * win, int y, int x, int height, int width);
int first_alpha (const char *string, const char *exempt); int first_alpha(const char *string, const char *exempt);
int dialog_yesno (const char *title, const char *prompt, int height, int width); int dialog_yesno(const char *title, const char *prompt, int height, int width);
int dialog_msgbox (const char *title, const char *prompt, int height, int dialog_msgbox(const char *title, const char *prompt, int height,
int width, int pause); int width, int pause);
int dialog_textbox (const char *title, const char *file, int height, int width); int dialog_textbox(const char *title, const char *file, int height, int width);
int dialog_menu (const char *title, const char *prompt, int height, int width, int dialog_menu(const char *title, const char *prompt, int height, int width,
int menu_height, const char *choice, int item_no, int menu_height, const char *choice, int item_no,
const char * const * items); const char *const *items);
int dialog_checklist (const char *title, const char *prompt, int height, int dialog_checklist(const char *title, const char *prompt, int height,
int width, int list_height, int item_no, int width, int list_height, int item_no,
const char * const * items, int flag); const char *const *items);
extern char dialog_input_result[]; extern char dialog_input_result[];
int dialog_inputbox (const char *title, const char *prompt, int height, int dialog_inputbox(const char *title, const char *prompt, int height,
int width, const char *init); int width, const char *init);
/* /*
* This is the base for fictitious keys, which activate * This is the base for fictitious keys, which activate
...@@ -177,11 +175,3 @@ int dialog_inputbox (const char *title, const char *prompt, int height, ...@@ -177,11 +175,3 @@ int dialog_inputbox (const char *title, const char *prompt, int height,
* -- uppercase chars are used to invoke the button (M_EVENT + 'O') * -- uppercase chars are used to invoke the button (M_EVENT + 'O')
*/ */
#define M_EVENT (KEY_MAX+1) #define M_EVENT (KEY_MAX+1)
/*
* The `flag' parameter in checklist is used to select between
* radiolist and checklist
*/
#define FLAG_CHECK 1
#define FLAG_RADIO 0
/*
* inputbox.c -- implements the input box
*
* ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
* MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include "dialog.h"
char dialog_input_result[MAX_LEN + 1];
/*
* Print the termination buttons
*/
static void print_buttons(WINDOW * dialog, int height, int width, int selected)
{
int x = width / 2 - 11;
int y = height - 2;
print_button(dialog, " Ok ", y, x, selected == 0);
print_button(dialog, " Help ", y, x + 14, selected == 1);
wmove(dialog, y, x + 1 + 14 * selected);
wrefresh(dialog);
}
/*
* Display a dialog box for inputing a string
*/
int dialog_inputbox(const char *title, const char *prompt, int height, int width,
const char *init)
{
int i, x, y, box_y, box_x, box_width;
int input_x = 0, scroll = 0, key = 0, button = -1;
char *instr = dialog_input_result;
WINDOW *dialog;
/* center dialog box on screen */
x = (COLS - width) / 2;
y = (LINES - height) / 2;
draw_shadow(stdscr, y, x, height, width);
dialog = newwin(height, width, y, x);
keypad(dialog, TRUE);
draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
wattrset(dialog, border_attr);
mvwaddch(dialog, height - 3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++)
waddch(dialog, ACS_HLINE);
wattrset(dialog, dialog_attr);
waddch(dialog, ACS_RTEE);
print_title(dialog, title, width);
wattrset(dialog, dialog_attr);
print_autowrap(dialog, prompt, width - 2, 1, 3);
/* Draw the input field box */
box_width = width - 6;
getyx(dialog, y, x);
box_y = y + 2;
box_x = (width - box_width) / 2;
draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, border_attr, dialog_attr);
print_buttons(dialog, height, width, 0);
/* Set up the initial value */
wmove(dialog, box_y, box_x);
wattrset(dialog, inputbox_attr);
if (!init)
instr[0] = '\0';
else
strcpy(instr, init);
input_x = strlen(instr);
if (input_x >= box_width) {
scroll = input_x - box_width + 1;
input_x = box_width - 1;
for (i = 0; i < box_width - 1; i++)
waddch(dialog, instr[scroll + i]);
} else {
waddstr(dialog, instr);
}
wmove(dialog, box_y, box_x + input_x);
wrefresh(dialog);
while (key != ESC) {
key = wgetch(dialog);
if (button == -1) { /* Input box selected */
switch (key) {
case TAB:
case KEY_UP:
case KEY_DOWN:
break;
case KEY_LEFT:
continue;
case KEY_RIGHT:
continue;
case KEY_BACKSPACE:
case 127:
if (input_x || scroll) {
wattrset(dialog, inputbox_attr);
if (!input_x) {
scroll = scroll < box_width - 1 ? 0 : scroll - (box_width - 1);
wmove(dialog, box_y, box_x);
for (i = 0; i < box_width; i++)
waddch(dialog,
instr[scroll + input_x + i] ?
instr[scroll + input_x + i] : ' ');
input_x = strlen(instr) - scroll;
} else
input_x--;
instr[scroll + input_x] = '\0';
mvwaddch(dialog, box_y, input_x + box_x, ' ');
wmove(dialog, box_y, input_x + box_x);
wrefresh(dialog);
}
continue;
default:
if (key < 0x100 && isprint(key)) {
if (scroll + input_x < MAX_LEN) {
wattrset(dialog, inputbox_attr);
instr[scroll + input_x] = key;
instr[scroll + input_x + 1] = '\0';
if (input_x == box_width - 1) {
scroll++;
wmove(dialog, box_y, box_x);
for (i = 0; i < box_width - 1; i++)
waddch(dialog, instr [scroll + i]);
} else {
wmove(dialog, box_y, input_x++ + box_x);
waddch(dialog, key);
}
wrefresh(dialog);
} else
flash(); /* Alarm user about overflow */
continue;
}
}
}
switch (key) {
case 'O':
case 'o':
delwin(dialog);
return 0;
case 'H':
case 'h':
delwin(dialog);
return 1;
case KEY_UP:
case KEY_LEFT:
switch (button) {
case -1:
button = 1; /* Indicates "Cancel" button is selected */
print_buttons(dialog, height, width, 1);
break;
case 0:
button = -1; /* Indicates input box is selected */
print_buttons(dialog, height, width, 0);
wmove(dialog, box_y, box_x + input_x);
wrefresh(dialog);
break;
case 1:
button = 0; /* Indicates "OK" button is selected */
print_buttons(dialog, height, width, 0);
break;
}
break;
case TAB:
case KEY_DOWN:
case KEY_RIGHT:
switch (button) {
case -1:
button = 0; /* Indicates "OK" button is selected */
print_buttons(dialog, height, width, 0);
break;
case 0:
button = 1; /* Indicates "Cancel" button is selected */
print_buttons(dialog, height, width, 1);
break;
case 1:
button = -1; /* Indicates input box is selected */
print_buttons(dialog, height, width, 0);
wmove(dialog, box_y, box_x + input_x);
wrefresh(dialog);
break;
}
break;
case ' ':
case '\n':
delwin(dialog);
return (button == -1 ? 0 : button);
case 'X':
case 'x':
key = ESC;
case ESC:
break;
}
}
delwin(dialog);
return -1; /* ESC pressed */
}
此差异已折叠。
...@@ -25,61 +25,47 @@ ...@@ -25,61 +25,47 @@
* Display a message box. Program will pause and display an "OK" button * Display a message box. Program will pause and display an "OK" button
* if the parameter 'pause' is non-zero. * if the parameter 'pause' is non-zero.
*/ */
int int dialog_msgbox(const char *title, const char *prompt, int height, int width,
dialog_msgbox (const char *title, const char *prompt, int height, int width, int pause)
int pause)
{ {
int i, x, y, key = 0; int i, x, y, key = 0;
WINDOW *dialog; WINDOW *dialog;
/* center dialog box on screen */ /* center dialog box on screen */
x = (COLS - width) / 2; x = (COLS - width) / 2;
y = (LINES - height) / 2; y = (LINES - height) / 2;
draw_shadow (stdscr, y, x, height, width); draw_shadow(stdscr, y, x, height, width);
dialog = newwin (height, width, y, x); dialog = newwin(height, width, y, x);
keypad (dialog, TRUE); keypad(dialog, TRUE);
draw_box (dialog, 0, 0, height, width, dialog_attr, border_attr); draw_box(dialog, 0, 0, height, width, dialog_attr, border_attr);
if (title != NULL && strlen(title) >= width-2 ) { print_title(dialog, title, width);
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) { wattrset(dialog, dialog_attr);
wattrset (dialog, title_attr); print_autowrap(dialog, prompt, width - 2, 1, 2);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 2);
if (pause) { if (pause) {
wattrset (dialog, border_attr); wattrset(dialog, border_attr);
mvwaddch (dialog, height - 3, 0, ACS_LTEE); mvwaddch(dialog, height - 3, 0, ACS_LTEE);
for (i = 0; i < width - 2; i++) for (i = 0; i < width - 2; i++)
waddch (dialog, ACS_HLINE); waddch(dialog, ACS_HLINE);
wattrset (dialog, dialog_attr); wattrset(dialog, dialog_attr);
waddch (dialog, ACS_RTEE); waddch(dialog, ACS_RTEE);
print_button (dialog, " Ok ", print_button(dialog, " Ok ", height - 2, width / 2 - 4, TRUE);
height - 2, width / 2 - 4, TRUE);
wrefresh (dialog); wrefresh(dialog);
while (key != ESC && key != '\n' && key != ' ' && while (key != ESC && key != '\n' && key != ' ' &&
key != 'O' && key != 'o' && key != 'X' && key != 'x') key != 'O' && key != 'o' && key != 'X' && key != 'x')
key = wgetch (dialog); key = wgetch(dialog);
} else { } else {
key = '\n'; key = '\n';
wrefresh (dialog); wrefresh(dialog);
} }
delwin (dialog); delwin(dialog);
return key == ESC ? -1 : 0; return key == ESC ? -1 : 0;
} }
此差异已折叠。
此差异已折叠。
...@@ -325,7 +325,7 @@ static void cprint_init(void) ...@@ -325,7 +325,7 @@ static void cprint_init(void)
memset(args, 0, sizeof(args)); memset(args, 0, sizeof(args));
indent = 0; indent = 0;
child_count = 0; child_count = 0;
cprint("./scripts/lxdialog/lxdialog"); cprint("./scripts/kconfig/lxdialog/lxdialog");
cprint("--backtitle"); cprint("--backtitle");
cprint(menu_backtitle); cprint(menu_backtitle);
} }
......
...@@ -33,7 +33,7 @@ int file_write_dep(const char *name) ...@@ -33,7 +33,7 @@ int file_write_dep(const char *name)
FILE *out; FILE *out;
if (!name) if (!name)
name = ".config.cmd"; name = ".kconfig.d";
out = fopen("..config.tmp", "w"); out = fopen("..config.tmp", "w");
if (!out) if (!out)
return 1; return 1;
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -326,8 +326,8 @@ parse_elf_finish(struct elf_info *info) ...@@ -326,8 +326,8 @@ parse_elf_finish(struct elf_info *info)
release_file(info->hdr, info->size); release_file(info->hdr, info->size);
} }
#define CRC_PFX MODULE_SYMBOL_PREFIX "__crc_" #define CRC_PFX "__crc_"
#define KSYMTAB_PFX MODULE_SYMBOL_PREFIX "__ksymtab_" #define KSYMTAB_PFX "__ksymtab_"
void void
handle_modversions(struct module *mod, struct elf_info *info, handle_modversions(struct module *mod, struct elf_info *info,
...@@ -539,10 +539,9 @@ add_header(struct buffer *b, struct module *mod) ...@@ -539,10 +539,9 @@ add_header(struct buffer *b, struct module *mod)
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n"); buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "#undef unix\n"); /* We have a module called "unix" */
buf_printf(b, "struct module __this_module\n"); buf_printf(b, "struct module __this_module\n");
buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n"); buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
buf_printf(b, " .name = __stringify(KBUILD_MODNAME),\n"); buf_printf(b, " .name = KBUILD_MODNAME,\n");
if (mod->has_init) if (mod->has_init)
buf_printf(b, " .init = init_module,\n"); buf_printf(b, " .init = init_module,\n");
if (mod->has_cleanup) if (mod->has_cleanup)
......
...@@ -84,7 +84,7 @@ clean-dirs += $(objtree)/debian/ ...@@ -84,7 +84,7 @@ clean-dirs += $(objtree)/debian/
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
.PHONY: tar%pkg .PHONY: tar%pkg
tar%pkg: tar%pkg:
$(MAKE) $(MAKE) KBUILD_SRC=
$(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@ $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
clean-dirs += $(objtree)/tar-install/ clean-dirs += $(objtree)/tar-install/
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册