Commit 25c862cc authored by Linus Torvalds's avatar Linus Torvalds
parents 52347f4e 8ded4ac0
...@@ -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,7 +1238,10 @@ cscope: FORCE ...@@ -1240,7 +1238,10 @@ 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 && \
echo "-I __initdata,__exitdata,__acquires,__releases \
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
--extra=+f --c-kinds=+px"`; \
$(all-sources) | xargs etags $$ETAGSF -a $(all-sources) | xargs etags $$ETAGSF -a
endef endef
...@@ -1251,7 +1252,10 @@ TAGS: FORCE ...@@ -1251,7 +1252,10 @@ 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 && \
echo "-I __initdata,__exitdata,__acquires,__releases \
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
--extra=+f --c-kinds=+px"`; \
$(all-sources) | xargs ctags $$CTAGSF -a $(all-sources) | xargs ctags $$CTAGSF -a
endef endef
......
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
This diff is collapsed.
...@@ -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;
This source diff could not be displayed because it is too large. You can view the blob instead.
#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
...@@ -137,34 +135,34 @@ extern const char *backtitle; ...@@ -137,34 +135,34 @@ 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);
/* /*
...@@ -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 */
}
...@@ -21,9 +21,9 @@ ...@@ -21,9 +21,9 @@
#include "dialog.h" #include "dialog.h"
static void Usage (const char *name); static void Usage(const char *name);
typedef int (jumperFn) (const char *title, int argc, const char * const * argv); typedef int (jumperFn) (const char *title, int argc, const char *const *argv);
struct Mode { struct Mode {
char *name; char *name;
...@@ -31,16 +31,14 @@ struct Mode { ...@@ -31,16 +31,14 @@ struct Mode {
jumperFn *jumper; jumperFn *jumper;
}; };
jumperFn j_menu, j_checklist, j_radiolist, j_yesno, j_textbox, j_inputbox; jumperFn j_menu, j_radiolist, j_yesno, j_textbox, j_inputbox;
jumperFn j_msgbox, j_infobox; jumperFn j_msgbox, j_infobox;
static struct Mode modes[] = static struct Mode modes[] = {
{
{"--menu", 9, 0, 3, j_menu}, {"--menu", 9, 0, 3, j_menu},
{"--checklist", 9, 0, 3, j_checklist},
{"--radiolist", 9, 0, 3, j_radiolist}, {"--radiolist", 9, 0, 3, j_radiolist},
{"--yesno", 5,5,1, j_yesno}, {"--yesno", 5, 5, 1, j_yesno},
{"--textbox", 5,5,1, j_textbox}, {"--textbox", 5, 5, 1, j_textbox},
{"--inputbox", 5, 6, 1, j_inputbox}, {"--inputbox", 5, 6, 1, j_inputbox},
{"--msgbox", 5, 5, 1, j_msgbox}, {"--msgbox", 5, 5, 1, j_msgbox},
{"--infobox", 5, 5, 1, j_infobox}, {"--infobox", 5, 5, 1, j_infobox},
...@@ -53,49 +51,48 @@ static struct Mode *modePtr; ...@@ -53,49 +51,48 @@ static struct Mode *modePtr;
#include <locale.h> #include <locale.h>
#endif #endif
int int main(int argc, const char *const *argv)
main (int argc, const char * const * argv)
{ {
int offset = 0, opt_clear = 0, end_common_opts = 0, retval; int offset = 0, opt_clear = 0, end_common_opts = 0, retval;
const char *title = NULL; const char *title = NULL;
#ifdef LOCALE #ifdef LOCALE
(void) setlocale (LC_ALL, ""); (void)setlocale(LC_ALL, "");
#endif #endif
#ifdef TRACE #ifdef TRACE
trace(TRACE_CALLS|TRACE_UPDATE); trace(TRACE_CALLS | TRACE_UPDATE);
#endif #endif
if (argc < 2) { if (argc < 2) {
Usage (argv[0]); Usage(argv[0]);
exit (-1); exit(-1);
} }
while (offset < argc - 1 && !end_common_opts) { /* Common options */ while (offset < argc - 1 && !end_common_opts) { /* Common options */
if (!strcmp (argv[offset + 1], "--title")) { if (!strcmp(argv[offset + 1], "--title")) {
if (argc - offset < 3 || title != NULL) { if (argc - offset < 3 || title != NULL) {
Usage (argv[0]); Usage(argv[0]);
exit (-1); exit(-1);
} else { } else {
title = argv[offset + 2]; title = argv[offset + 2];
offset += 2; offset += 2;
} }
} else if (!strcmp (argv[offset + 1], "--backtitle")) { } else if (!strcmp(argv[offset + 1], "--backtitle")) {
if (backtitle != NULL) { if (backtitle != NULL) {
Usage (argv[0]); Usage(argv[0]);
exit (-1); exit(-1);
} else { } else {
backtitle = argv[offset + 2]; backtitle = argv[offset + 2];
offset += 2; offset += 2;
} }
} else if (!strcmp (argv[offset + 1], "--clear")) { } else if (!strcmp(argv[offset + 1], "--clear")) {
if (opt_clear) { /* Hey, "--clear" can't appear twice! */ if (opt_clear) { /* Hey, "--clear" can't appear twice! */
Usage (argv[0]); Usage(argv[0]);
exit (-1); exit(-1);
} else if (argc == 2) { /* we only want to clear the screen */ } else if (argc == 2) { /* we only want to clear the screen */
init_dialog (); init_dialog();
refresh (); /* init_dialog() will clear the screen for us */ refresh(); /* init_dialog() will clear the screen for us */
end_dialog (); end_dialog();
return 0; return 0;
} else { } else {
opt_clear = 1; opt_clear = 1;
...@@ -106,43 +103,40 @@ main (int argc, const char * const * argv) ...@@ -106,43 +103,40 @@ main (int argc, const char * const * argv)
} }
if (argc - 1 == offset) { /* no more options */ if (argc - 1 == offset) { /* no more options */
Usage (argv[0]); Usage(argv[0]);
exit (-1); exit(-1);
} }
/* use a table to look for the requested mode, to avoid code duplication */ /* use a table to look for the requested mode, to avoid code duplication */
for (modePtr = modes; modePtr->name; modePtr++) /* look for the mode */ for (modePtr = modes; modePtr->name; modePtr++) /* look for the mode */
if (!strcmp (argv[offset + 1], modePtr->name)) if (!strcmp(argv[offset + 1], modePtr->name))
break; break;
if (!modePtr->name) if (!modePtr->name)
Usage (argv[0]); Usage(argv[0]);
if (argc - offset < modePtr->argmin) if (argc - offset < modePtr->argmin)
Usage (argv[0]); Usage(argv[0]);
if (modePtr->argmax && argc - offset > modePtr->argmax) if (modePtr->argmax && argc - offset > modePtr->argmax)
Usage (argv[0]); Usage(argv[0]);
init_dialog (); init_dialog();
retval = (*(modePtr->jumper)) (title, argc - offset, argv + offset); retval = (*(modePtr->jumper)) (title, argc - offset, argv + offset);
if (opt_clear) { /* clear screen before exit */ if (opt_clear) { /* clear screen before exit */
attr_clear (stdscr, LINES, COLS, screen_attr); attr_clear(stdscr, LINES, COLS, screen_attr);
refresh (); refresh();
} }
end_dialog(); end_dialog();
exit (retval); exit(retval);
} }
/* /*
* Print program usage * Print program usage
*/ */
static void static void Usage(const char *name)
Usage (const char *name)
{ {
fprintf (stderr, "\ fprintf(stderr, "\
\ndialog, by Savio Lam (lam836@cs.cuhk.hk).\ \ndialog, by Savio Lam (lam836@cs.cuhk.hk).\
\n patched by Stuart Herbert (S.Herbert@shef.ac.uk)\ \n patched by Stuart Herbert (S.Herbert@shef.ac.uk)\
\n modified/gutted for use as a Linux kernel config tool by \ \n modified/gutted for use as a Linux kernel config tool by \
...@@ -156,71 +150,55 @@ Usage (const char *name) ...@@ -156,71 +150,55 @@ Usage (const char *name)
\nBox options:\ \nBox options:\
\n\ \n\
\n --menu <text> <height> <width> <menu height> <tag1> <item1>...\ \n --menu <text> <height> <width> <menu height> <tag1> <item1>...\
\n --checklist <text> <height> <width> <list height> <tag1> <item1> <status1>...\
\n --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...\ \n --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...\
\n --textbox <file> <height> <width>\ \n --textbox <file> <height> <width>\
\n --inputbox <text> <height> <width> [<init>]\ \n --inputbox <text> <height> <width> [<init>]\
\n --yesno <text> <height> <width>\ \n --yesno <text> <height> <width>\
\n", name, name); \n", name, name);
exit (-1); exit(-1);
} }
/* /*
* These are the program jumpers * These are the program jumpers
*/ */
int int j_menu(const char *t, int ac, const char *const *av)
j_menu (const char *t, int ac, const char * const * av)
{ {
return dialog_menu (t, av[2], atoi (av[3]), atoi (av[4]), return dialog_menu(t, av[2], atoi(av[3]), atoi(av[4]),
atoi (av[5]), av[6], (ac - 6) / 2, av + 7); atoi(av[5]), av[6], (ac - 6) / 2, av + 7);
} }
int int j_radiolist(const char *t, int ac, const char *const *av)
j_checklist (const char *t, int ac, const char * const * av)
{ {
return dialog_checklist (t, av[2], atoi (av[3]), atoi (av[4]), return dialog_checklist(t, av[2], atoi(av[3]), atoi(av[4]),
atoi (av[5]), (ac - 6) / 3, av + 6, FLAG_CHECK); atoi(av[5]), (ac - 6) / 3, av + 6);
} }
int int j_textbox(const char *t, int ac, const char *const *av)
j_radiolist (const char *t, int ac, const char * const * av)
{ {
return dialog_checklist (t, av[2], atoi (av[3]), atoi (av[4]), return dialog_textbox(t, av[2], atoi(av[3]), atoi(av[4]));
atoi (av[5]), (ac - 6) / 3, av + 6, FLAG_RADIO);
} }
int int j_yesno(const char *t, int ac, const char *const *av)
j_textbox (const char *t, int ac, const char * const * av)
{ {
return dialog_textbox (t, av[2], atoi (av[3]), atoi (av[4])); return dialog_yesno(t, av[2], atoi(av[3]), atoi(av[4]));
} }
int int j_inputbox(const char *t, int ac, const char *const *av)
j_yesno (const char *t, int ac, const char * const * av)
{ {
return dialog_yesno (t, av[2], atoi (av[3]), atoi (av[4])); int ret = dialog_inputbox(t, av[2], atoi(av[3]), atoi(av[4]),
} ac == 6 ? av[5] : (char *)NULL);
int
j_inputbox (const char *t, int ac, const char * const * av)
{
int ret = dialog_inputbox (t, av[2], atoi (av[3]), atoi (av[4]),
ac == 6 ? av[5] : (char *) NULL);
if (ret == 0) if (ret == 0)
fprintf(stderr, dialog_input_result); fprintf(stderr, dialog_input_result);
return ret; return ret;
} }
int int j_msgbox(const char *t, int ac, const char *const *av)
j_msgbox (const char *t, int ac, const char * const * av)
{ {
return dialog_msgbox (t, av[2], atoi (av[3]), atoi (av[4]), 1); return dialog_msgbox(t, av[2], atoi(av[3]), atoi(av[4]), 1);
} }
int int j_infobox(const char *t, int ac, const char *const *av)
j_infobox (const char *t, int ac, const char * const * av)
{ {
return dialog_msgbox (t, av[2], atoi (av[3]), atoi (av[4]), 0); return dialog_msgbox(t, av[2], atoi(av[3]), atoi(av[4]), 0);
} }
This diff is collapsed.
...@@ -25,8 +25,7 @@ ...@@ -25,8 +25,7 @@
* 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;
...@@ -36,50 +35,37 @@ dialog_msgbox (const char *title, const char *prompt, int height, int width, ...@@ -36,50 +35,37 @@ dialog_msgbox (const char *title, const char *prompt, int height, int width,
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;
} }
This diff is collapsed.
/*
* util.c
*
* 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"
/* use colors by default? */
bool use_colors = 1;
const char *backtitle = NULL;
/*
* Attribute values, default is for mono display
*/
chtype attributes[] = {
A_NORMAL, /* screen_attr */
A_NORMAL, /* shadow_attr */
A_NORMAL, /* dialog_attr */
A_BOLD, /* title_attr */
A_NORMAL, /* border_attr */
A_REVERSE, /* button_active_attr */
A_DIM, /* button_inactive_attr */
A_REVERSE, /* button_key_active_attr */
A_BOLD, /* button_key_inactive_attr */
A_REVERSE, /* button_label_active_attr */
A_NORMAL, /* button_label_inactive_attr */
A_NORMAL, /* inputbox_attr */
A_NORMAL, /* inputbox_border_attr */
A_NORMAL, /* searchbox_attr */
A_BOLD, /* searchbox_title_attr */
A_NORMAL, /* searchbox_border_attr */
A_BOLD, /* position_indicator_attr */
A_NORMAL, /* menubox_attr */
A_NORMAL, /* menubox_border_attr */
A_NORMAL, /* item_attr */
A_REVERSE, /* item_selected_attr */
A_BOLD, /* tag_attr */
A_REVERSE, /* tag_selected_attr */
A_BOLD, /* tag_key_attr */
A_REVERSE, /* tag_key_selected_attr */
A_BOLD, /* check_attr */
A_REVERSE, /* check_selected_attr */
A_BOLD, /* uarrow_attr */
A_BOLD /* darrow_attr */
};
#include "colors.h"
/*
* Table of color values
*/
int color_table[][3] = {
{SCREEN_FG, SCREEN_BG, SCREEN_HL},
{SHADOW_FG, SHADOW_BG, SHADOW_HL},
{DIALOG_FG, DIALOG_BG, DIALOG_HL},
{TITLE_FG, TITLE_BG, TITLE_HL},
{BORDER_FG, BORDER_BG, BORDER_HL},
{BUTTON_ACTIVE_FG, BUTTON_ACTIVE_BG, BUTTON_ACTIVE_HL},
{BUTTON_INACTIVE_FG, BUTTON_INACTIVE_BG, BUTTON_INACTIVE_HL},
{BUTTON_KEY_ACTIVE_FG, BUTTON_KEY_ACTIVE_BG, BUTTON_KEY_ACTIVE_HL},
{BUTTON_KEY_INACTIVE_FG, BUTTON_KEY_INACTIVE_BG,
BUTTON_KEY_INACTIVE_HL},
{BUTTON_LABEL_ACTIVE_FG, BUTTON_LABEL_ACTIVE_BG,
BUTTON_LABEL_ACTIVE_HL},
{BUTTON_LABEL_INACTIVE_FG, BUTTON_LABEL_INACTIVE_BG,
BUTTON_LABEL_INACTIVE_HL},
{INPUTBOX_FG, INPUTBOX_BG, INPUTBOX_HL},
{INPUTBOX_BORDER_FG, INPUTBOX_BORDER_BG, INPUTBOX_BORDER_HL},
{SEARCHBOX_FG, SEARCHBOX_BG, SEARCHBOX_HL},
{SEARCHBOX_TITLE_FG, SEARCHBOX_TITLE_BG, SEARCHBOX_TITLE_HL},
{SEARCHBOX_BORDER_FG, SEARCHBOX_BORDER_BG, SEARCHBOX_BORDER_HL},
{POSITION_INDICATOR_FG, POSITION_INDICATOR_BG, POSITION_INDICATOR_HL},
{MENUBOX_FG, MENUBOX_BG, MENUBOX_HL},
{MENUBOX_BORDER_FG, MENUBOX_BORDER_BG, MENUBOX_BORDER_HL},
{ITEM_FG, ITEM_BG, ITEM_HL},
{ITEM_SELECTED_FG, ITEM_SELECTED_BG, ITEM_SELECTED_HL},
{TAG_FG, TAG_BG, TAG_HL},
{TAG_SELECTED_FG, TAG_SELECTED_BG, TAG_SELECTED_HL},
{TAG_KEY_FG, TAG_KEY_BG, TAG_KEY_HL},
{TAG_KEY_SELECTED_FG, TAG_KEY_SELECTED_BG, TAG_KEY_SELECTED_HL},
{CHECK_FG, CHECK_BG, CHECK_HL},
{CHECK_SELECTED_FG, CHECK_SELECTED_BG, CHECK_SELECTED_HL},
{UARROW_FG, UARROW_BG, UARROW_HL},
{DARROW_FG, DARROW_BG, DARROW_HL},
}; /* color_table */
/*
* Set window to attribute 'attr'
*/
void attr_clear(WINDOW * win, int height, int width, chtype attr)
{
int i, j;
wattrset(win, attr);
for (i = 0; i < height; i++) {
wmove(win, i, 0);
for (j = 0; j < width; j++)
waddch(win, ' ');
}
touchwin(win);
}
void dialog_clear(void)
{
attr_clear(stdscr, LINES, COLS, screen_attr);
/* Display background title if it exists ... - SLH */
if (backtitle != NULL) {
int i;
wattrset(stdscr, screen_attr);
mvwaddstr(stdscr, 0, 1, (char *)backtitle);
wmove(stdscr, 1, 1);
for (i = 1; i < COLS - 1; i++)
waddch(stdscr, ACS_HLINE);
}
wnoutrefresh(stdscr);
}
/*
* Do some initialization for dialog
*/
void init_dialog(void)
{
initscr(); /* Init curses */
keypad(stdscr, TRUE);
cbreak();
noecho();
if (use_colors) /* Set up colors */
color_setup();
dialog_clear();
}
/*
* Setup for color display
*/
void color_setup(void)
{
int i;
if (has_colors()) { /* Terminal supports color? */
start_color();
/* Initialize color pairs */
for (i = 0; i < ATTRIBUTE_COUNT; i++)
init_pair(i + 1, color_table[i][0], color_table[i][1]);
/* Setup color attributes */
for (i = 0; i < ATTRIBUTE_COUNT; i++)
attributes[i] = C_ATTR(color_table[i][2], i + 1);
}
}
/*
* End using dialog functions.
*/
void end_dialog(void)
{
endwin();
}
/* Print the title of the dialog. Center the title and truncate
* tile if wider than dialog (- 2 chars).
**/
void print_title(WINDOW *dialog, const char *title, int width)
{
if (title) {
int tlen = MIN(width - 2, strlen(title));
wattrset(dialog, title_attr);
mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' ');
mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen);
waddch(dialog, ' ');
}
}
/*
* Print a string of text in a window, automatically wrap around to the
* next line if the string is too long to fit on one line. Newline
* characters '\n' are replaced by spaces. We start on a new line
* if there is no room for at least 4 nonblanks following a double-space.
*/
void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
{
int newl, cur_x, cur_y;
int i, prompt_len, room, wlen;
char tempstr[MAX_LEN + 1], *word, *sp, *sp2;
strcpy(tempstr, prompt);
prompt_len = strlen(tempstr);
/*
* Remove newlines
*/
for (i = 0; i < prompt_len; i++) {
if (tempstr[i] == '\n')
tempstr[i] = ' ';
}
if (prompt_len <= width - x * 2) { /* If prompt is short */
wmove(win, y, (width - prompt_len) / 2);
waddstr(win, tempstr);
} else {
cur_x = x;
cur_y = y;
newl = 1;
word = tempstr;
while (word && *word) {
sp = index(word, ' ');
if (sp)
*sp++ = 0;
/* Wrap to next line if either the word does not fit,
or it is the first word of a new sentence, and it is
short, and the next word does not fit. */
room = width - cur_x;
wlen = strlen(word);
if (wlen > room ||
(newl && wlen < 4 && sp
&& wlen + 1 + strlen(sp) > room
&& (!(sp2 = index(sp, ' '))
|| wlen + 1 + (sp2 - sp) > room))) {
cur_y++;
cur_x = x;
}
wmove(win, cur_y, cur_x);
waddstr(win, word);
getyx(win, cur_y, cur_x);
cur_x++;
if (sp && *sp == ' ') {
cur_x++; /* double space */
while (*++sp == ' ') ;
newl = 1;
} else
newl = 0;
word = sp;
}
}
}
/*
* Print a button
*/
void print_button(WINDOW * win, const char *label, int y, int x, int selected)
{
int i, temp;
wmove(win, y, x);
wattrset(win, selected ? button_active_attr : button_inactive_attr);
waddstr(win, "<");
temp = strspn(label, " ");
label += temp;
wattrset(win, selected ? button_label_active_attr
: button_label_inactive_attr);
for (i = 0; i < temp; i++)
waddch(win, ' ');
wattrset(win, selected ? button_key_active_attr
: button_key_inactive_attr);
waddch(win, label[0]);
wattrset(win, selected ? button_label_active_attr
: button_label_inactive_attr);
waddstr(win, (char *)label + 1);
wattrset(win, selected ? button_active_attr : button_inactive_attr);
waddstr(win, ">");
wmove(win, y, x + temp + 1);
}
/*
* Draw a rectangular box with line drawing characters
*/
void
draw_box(WINDOW * win, int y, int x, int height, int width,
chtype box, chtype border)
{
int i, j;
wattrset(win, 0);
for (i = 0; i < height; i++) {
wmove(win, y + i, x);
for (j = 0; j < width; j++)
if (!i && !j)
waddch(win, border | ACS_ULCORNER);
else if (i == height - 1 && !j)
waddch(win, border | ACS_LLCORNER);
else if (!i && j == width - 1)
waddch(win, box | ACS_URCORNER);
else if (i == height - 1 && j == width - 1)
waddch(win, box | ACS_LRCORNER);
else if (!i)
waddch(win, border | ACS_HLINE);
else if (i == height - 1)
waddch(win, box | ACS_HLINE);
else if (!j)
waddch(win, border | ACS_VLINE);
else if (j == width - 1)
waddch(win, box | ACS_VLINE);
else
waddch(win, box | ' ');
}
}
/*
* Draw shadows along the right and bottom edge to give a more 3D look
* to the boxes
*/
void draw_shadow(WINDOW * win, int y, int x, int height, int width)
{
int i;
if (has_colors()) { /* Whether terminal supports color? */
wattrset(win, shadow_attr);
wmove(win, y + height, x + 2);
for (i = 0; i < width; i++)
waddch(win, winch(win) & A_CHARTEXT);
for (i = y + 1; i < y + height + 1; i++) {
wmove(win, i, x + width);
waddch(win, winch(win) & A_CHARTEXT);
waddch(win, winch(win) & A_CHARTEXT);
}
wnoutrefresh(win);
}
}
/*
* Return the position of the first alphabetic character in a string.
*/
int first_alpha(const char *string, const char *exempt)
{
int i, in_paren = 0, c;
for (i = 0; i < strlen(string); i++) {
c = tolower(string[i]);
if (strchr("<[(", c))
++in_paren;
if (strchr(">])", c) && in_paren > 0)
--in_paren;
if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0)
return i;
}
return 0;
}
...@@ -24,24 +24,22 @@ ...@@ -24,24 +24,22 @@
/* /*
* Display termination buttons * Display termination buttons
*/ */
static void static void print_buttons(WINDOW * dialog, int height, int width, int selected)
print_buttons(WINDOW *dialog, int height, int width, int selected)
{ {
int x = width / 2 - 10; int x = width / 2 - 10;
int y = height - 2; int y = height - 2;
print_button (dialog, " Yes ", y, x, selected == 0); print_button(dialog, " Yes ", y, x, selected == 0);
print_button (dialog, " No ", y, x + 13, selected == 1); print_button(dialog, " No ", y, x + 13, selected == 1);
wmove(dialog, y, x+1 + 13*selected ); wmove(dialog, y, x + 1 + 13 * selected);
wrefresh (dialog); wrefresh(dialog);
} }
/* /*
* Display a dialog box with two buttons - Yes and No * Display a dialog box with two buttons - Yes and No
*/ */
int int dialog_yesno(const char *title, const char *prompt, int height, int width)
dialog_yesno (const char *title, const char *prompt, int height, int width)
{ {
int i, x, y, key = 0, button = 0; int i, x, y, key = 0, button = 0;
WINDOW *dialog; WINDOW *dialog;
...@@ -50,69 +48,55 @@ dialog_yesno (const char *title, const char *prompt, int height, int width) ...@@ -50,69 +48,55 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
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);
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);
if (title != NULL && strlen(title) >= width-2 ) {
/* truncate long title -- mec */
char * title2 = malloc(width-2+1);
memcpy( title2, title, width-2 );
title2[width-2] = '\0';
title = title2;
}
if (title != NULL) { print_title(dialog, title, width);
wattrset (dialog, title_attr);
mvwaddch (dialog, 0, (width - strlen(title))/2 - 1, ' ');
waddstr (dialog, (char *)title);
waddch (dialog, ' ');
}
wattrset (dialog, dialog_attr); wattrset(dialog, dialog_attr);
print_autowrap (dialog, prompt, width - 2, 1, 3); print_autowrap(dialog, prompt, width - 2, 1, 3);
print_buttons(dialog, height, width, 0); print_buttons(dialog, height, width, 0);
while (key != ESC) { while (key != ESC) {
key = wgetch (dialog); key = wgetch(dialog);
switch (key) { switch (key) {
case 'Y': case 'Y':
case 'y': case 'y':
delwin (dialog); delwin(dialog);
return 0; return 0;
case 'N': case 'N':
case 'n': case 'n':
delwin (dialog); delwin(dialog);
return 1; return 1;
case TAB: case TAB:
case KEY_LEFT: case KEY_LEFT:
case KEY_RIGHT: case KEY_RIGHT:
button = ((key == KEY_LEFT ? --button : ++button) < 0) button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
? 1 : (button > 1 ? 0 : button);
print_buttons(dialog, height, width, button); print_buttons(dialog, height, width, button);
wrefresh (dialog); wrefresh(dialog);
break; break;
case ' ': case ' ':
case '\n': case '\n':
delwin (dialog); delwin(dialog);
return button; return button;
case ESC: case ESC:
break; break;
} }
} }
delwin (dialog); delwin(dialog);
return -1; /* ESC pressed */ return -1; /* ESC pressed */
} }
...@@ -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;
......
This diff is collapsed.
/*
* 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);
if (title != NULL && strlen(title) >= width-2 ) {
/* 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, title_attr);
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, 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 */
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -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/
......
This diff is collapsed.
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