You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sam/kbuild
This commit is contained in:
+4
-1
@@ -1,4 +1,7 @@
|
||||
#
|
||||
# Generated files
|
||||
#
|
||||
conmakehash
|
||||
kallsyms
|
||||
pnmtologo
|
||||
|
||||
bin2c
|
||||
|
||||
+1
-1
@@ -19,4 +19,4 @@ subdir-$(CONFIG_MODVERSIONS) += genksyms
|
||||
subdir-$(CONFIG_MODULES) += mod
|
||||
|
||||
# Let clean descend into subdirs
|
||||
subdir- += basic lxdialog kconfig package
|
||||
subdir- += basic kconfig package
|
||||
|
||||
@@ -81,8 +81,10 @@ obj-dirs := $(addprefix $(obj)/,$(obj-dirs))
|
||||
# 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,
|
||||
# where foo and bar are the name of the modules.
|
||||
basename_flags = -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F)))
|
||||
modname_flags = $(if $(filter 1,$(words $(modname))),-DKBUILD_MODNAME=$(subst $(comma),_,$(subst -,_,$(modname))))
|
||||
name-fix = $(subst $(comma),_,$(subst -,_,$1))
|
||||
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)
|
||||
_a_flags = $(AFLAGS) $(EXTRA_AFLAGS) $(AFLAGS_$(*F).o)
|
||||
@@ -113,7 +115,7 @@ endif
|
||||
|
||||
c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(CPPFLAGS) \
|
||||
$(__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) $(modkern_aflags)
|
||||
|
||||
+14
-1
@@ -130,9 +130,22 @@ void usage(void)
|
||||
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)
|
||||
{
|
||||
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;
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
keywords.c
|
||||
lex.c
|
||||
parse.[ch]
|
||||
genksyms
|
||||
@@ -1,7 +1,38 @@
|
||||
/* 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 */
|
||||
|
||||
#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; };
|
||||
/* maximum key range = 109, duplicates = 0 */
|
||||
/* maximum key range = 68, duplicates = 0 */
|
||||
|
||||
#ifdef __GNUC__
|
||||
__inline
|
||||
@@ -15,32 +46,32 @@ is_reserved_hash (register const char *str, register unsigned int len)
|
||||
{
|
||||
static const unsigned char asso_values[] =
|
||||
{
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 5,
|
||||
113, 113, 113, 113, 113, 113, 0, 113, 113, 113,
|
||||
0, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 0, 113, 0, 113, 20,
|
||||
25, 0, 35, 30, 113, 20, 113, 113, 40, 30,
|
||||
30, 0, 0, 113, 0, 51, 0, 15, 5, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113, 113, 113, 113, 113,
|
||||
113, 113, 113, 113, 113, 113
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 15,
|
||||
71, 71, 71, 71, 71, 71, 15, 71, 71, 71,
|
||||
10, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 0, 71, 0, 71, 5,
|
||||
5, 0, 10, 20, 71, 25, 71, 71, 20, 0,
|
||||
20, 30, 25, 71, 10, 5, 0, 20, 15, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
|
||||
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]];
|
||||
}
|
||||
@@ -56,77 +87,112 @@ is_reserved_word (register const char *str, register unsigned int len)
|
||||
TOTAL_KEYWORDS = 41,
|
||||
MIN_WORD_LENGTH = 3,
|
||||
MAX_WORD_LENGTH = 17,
|
||||
MIN_HASH_VALUE = 4,
|
||||
MAX_HASH_VALUE = 112
|
||||
MIN_HASH_VALUE = 3,
|
||||
MAX_HASH_VALUE = 70
|
||||
};
|
||||
|
||||
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},
|
||||
{""},
|
||||
#line 21 "scripts/genksyms/keywords.gperf"
|
||||
{"_restrict", RESTRICT_KEYW},
|
||||
#line 50 "scripts/genksyms/keywords.gperf"
|
||||
{"__typeof__", TYPEOF_KEYW},
|
||||
#line 9 "scripts/genksyms/keywords.gperf"
|
||||
{"__attribute", ATTRIBUTE_KEYW},
|
||||
{"__restrict__", RESTRICT_KEYW},
|
||||
{"__attribute__", ATTRIBUTE_KEYW},
|
||||
{""},
|
||||
{"__volatile", VOLATILE_KEYW},
|
||||
{""},
|
||||
{"__volatile__", VOLATILE_KEYW},
|
||||
{"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
|
||||
{""}, {""}, {""},
|
||||
{"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
|
||||
{"int", INT_KEYW},
|
||||
{"char", CHAR_KEYW},
|
||||
{""}, {""},
|
||||
#line 11 "scripts/genksyms/keywords.gperf"
|
||||
{"__const", CONST_KEYW},
|
||||
{"__inline", INLINE_KEYW},
|
||||
#line 10 "scripts/genksyms/keywords.gperf"
|
||||
{"__attribute__", ATTRIBUTE_KEYW},
|
||||
#line 12 "scripts/genksyms/keywords.gperf"
|
||||
{"__const__", CONST_KEYW},
|
||||
{"__inline__", INLINE_KEYW},
|
||||
{""}, {""}, {""}, {""},
|
||||
{"__asm", ASM_KEYW},
|
||||
{"extern", EXTERN_KEYW},
|
||||
{""},
|
||||
{"register", REGISTER_KEYW},
|
||||
{""},
|
||||
{"float", FLOAT_KEYW},
|
||||
{"typeof", TYPEOF_KEYW},
|
||||
{"typedef", TYPEDEF_KEYW},
|
||||
{""}, {""},
|
||||
{"_Bool", BOOL_KEYW},
|
||||
{"double", DOUBLE_KEYW},
|
||||
{""}, {""},
|
||||
{"enum", ENUM_KEYW},
|
||||
{""}, {""}, {""},
|
||||
{"volatile", VOLATILE_KEYW},
|
||||
{"void", VOID_KEYW},
|
||||
{"const", CONST_KEYW},
|
||||
{"short", SHORT_KEYW},
|
||||
{"struct", STRUCT_KEYW},
|
||||
{""},
|
||||
{"restrict", RESTRICT_KEYW},
|
||||
{""},
|
||||
#line 16 "scripts/genksyms/keywords.gperf"
|
||||
{"__signed__", SIGNED_KEYW},
|
||||
{""},
|
||||
{"asm", ASM_KEYW},
|
||||
{""}, {""},
|
||||
{"inline", INLINE_KEYW},
|
||||
{""}, {""}, {""},
|
||||
{"union", UNION_KEYW},
|
||||
{""}, {""}, {""}, {""}, {""}, {""},
|
||||
#line 42 "scripts/genksyms/keywords.gperf"
|
||||
{"static", STATIC_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},
|
||||
#line 37 "scripts/genksyms/keywords.gperf"
|
||||
{"int", INT_KEYW},
|
||||
{""},
|
||||
#line 31 "scripts/genksyms/keywords.gperf"
|
||||
{"const", CONST_KEYW},
|
||||
#line 32 "scripts/genksyms/keywords.gperf"
|
||||
{"double", DOUBLE_KEYW},
|
||||
{""},
|
||||
#line 13 "scripts/genksyms/keywords.gperf"
|
||||
{"__inline", INLINE_KEYW},
|
||||
#line 29 "scripts/genksyms/keywords.gperf"
|
||||
{"auto", AUTO_KEYW},
|
||||
#line 14 "scripts/genksyms/keywords.gperf"
|
||||
{"__inline__", INLINE_KEYW},
|
||||
#line 41 "scripts/genksyms/keywords.gperf"
|
||||
{"signed", SIGNED_KEYW},
|
||||
{""},
|
||||
#line 46 "scripts/genksyms/keywords.gperf"
|
||||
{"unsigned", UNSIGNED_KEYW},
|
||||
{""}, {""}, {""}, {""},
|
||||
{""},
|
||||
#line 40 "scripts/genksyms/keywords.gperf"
|
||||
{"short", SHORT_KEYW},
|
||||
#line 49 "scripts/genksyms/keywords.gperf"
|
||||
{"typeof", TYPEOF_KEYW},
|
||||
#line 44 "scripts/genksyms/keywords.gperf"
|
||||
{"typedef", TYPEDEF_KEYW},
|
||||
#line 48 "scripts/genksyms/keywords.gperf"
|
||||
{"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},
|
||||
{""},
|
||||
#line 36 "scripts/genksyms/keywords.gperf"
|
||||
{"inline", INLINE_KEYW},
|
||||
{""},
|
||||
#line 5 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_SYMBOL", EXPORT_SYMBOL_KEYW},
|
||||
{""},
|
||||
#line 20 "scripts/genksyms/keywords.gperf"
|
||||
{"_Bool", BOOL_KEYW},
|
||||
{""},
|
||||
#line 6 "scripts/genksyms/keywords.gperf"
|
||||
{"EXPORT_SYMBOL_GPL", EXPORT_SYMBOL_KEYW},
|
||||
{""}, {""}, {""}, {""}, {""}, {""},
|
||||
#line 38 "scripts/genksyms/keywords.gperf"
|
||||
{"long", LONG_KEYW},
|
||||
{""}, {""}, {""}, {""}, {""}, {""}, {""},
|
||||
{"signed", SIGNED_KEYW}
|
||||
{""}, {""}, {""}, {""}, {""},
|
||||
#line 45 "scripts/genksyms/keywords.gperf"
|
||||
{"union", UNION_KEYW}
|
||||
};
|
||||
|
||||
if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
|
||||
|
||||
+125
-43
@@ -2036,49 +2036,131 @@ fini:
|
||||
|
||||
return token;
|
||||
}
|
||||
#ifndef YYSTYPE
|
||||
#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
|
||||
/* A Bison parser, made by GNU Bison 2.0. */
|
||||
|
||||
/* 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;
|
||||
|
||||
|
||||
|
||||
|
||||
+1751
-1277
File diff suppressed because it is too large
Load Diff
@@ -1,46 +1,128 @@
|
||||
#ifndef YYSTYPE
|
||||
#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
|
||||
/* A Bison parser, made by GNU Bison 2.0. */
|
||||
|
||||
/* 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;
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -197,6 +197,7 @@ storage_class_specifier:
|
||||
type_specifier:
|
||||
simple_type_specifier
|
||||
| cvar_qualifier
|
||||
| TYPEOF_KEYW '(' decl_specifier_seq '*' ')'
|
||||
| TYPEOF_KEYW '(' decl_specifier_seq ')'
|
||||
|
||||
/* References to s/u/e's defined elsewhere. Rearrange things
|
||||
|
||||
@@ -5,6 +5,7 @@ config*
|
||||
lex.*.c
|
||||
*.tab.c
|
||||
*.tab.h
|
||||
zconf.hash.c
|
||||
|
||||
#
|
||||
# configuration programs
|
||||
|
||||
@@ -11,7 +11,7 @@ gconfig: $(obj)/gconf
|
||||
$< arch/$(ARCH)/Kconfig
|
||||
|
||||
menuconfig: $(obj)/mconf
|
||||
$(Q)$(MAKE) $(build)=scripts/lxdialog
|
||||
$(Q)$(MAKE) $(build)=scripts/kconfig/lxdialog
|
||||
$< arch/$(ARCH)/Kconfig
|
||||
|
||||
config: $(obj)/conf
|
||||
@@ -115,6 +115,7 @@ endif
|
||||
|
||||
clean-files := lkc_defs.h qconf.moc .tmp_qtcheck \
|
||||
.tmp_gtkcheck zconf.tab.c lex.zconf.c zconf.hash.c
|
||||
subdir- += lxdialog
|
||||
|
||||
# Needed for systems without gettext
|
||||
KBUILD_HAVE_NLS := $(shell \
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
#
|
||||
# Generated files
|
||||
#
|
||||
lxdialog
|
||||
@@ -0,0 +1,334 @@
|
||||
/*
|
||||
* 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 @@
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Default color definitions
|
||||
*
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/*
|
||||
* dialog.h -- common declarations for all dialog modules
|
||||
*
|
||||
@@ -42,7 +41,7 @@
|
||||
#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
|
||||
#define OLD_NCURSES 1
|
||||
#undef wbkgdset
|
||||
#define wbkgdset(w,p) /*nothing*/
|
||||
#define wbkgdset(w,p) /*nothing */
|
||||
#else
|
||||
#define OLD_NCURSES 0
|
||||
#endif
|
||||
@@ -56,7 +55,6 @@
|
||||
#define MIN(x,y) (x < y ? x : y)
|
||||
#define MAX(x,y) (x > y ? x : y)
|
||||
|
||||
|
||||
#ifndef ACS_ULCORNER
|
||||
#define ACS_ULCORNER '+'
|
||||
#endif
|
||||
@@ -88,7 +86,7 @@
|
||||
#define ACS_DARROW 'v'
|
||||
#endif
|
||||
|
||||
/*
|
||||
/*
|
||||
* Attribute names
|
||||
*/
|
||||
#define screen_attr attributes[0]
|
||||
@@ -137,35 +135,35 @@ extern const char *backtitle;
|
||||
/*
|
||||
* Function prototypes
|
||||
*/
|
||||
extern void create_rc (const char *filename);
|
||||
extern int parse_rc (void);
|
||||
extern void create_rc(const char *filename);
|
||||
extern int parse_rc(void);
|
||||
|
||||
void init_dialog(void);
|
||||
void end_dialog(void);
|
||||
void attr_clear(WINDOW * win, int height, int width, chtype attr);
|
||||
void dialog_clear(void);
|
||||
void color_setup(void);
|
||||
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_title(WINDOW *dialog, const char *title, int width);
|
||||
void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
|
||||
chtype border);
|
||||
void draw_shadow(WINDOW * win, int y, int x, int height, int width);
|
||||
|
||||
void init_dialog (void);
|
||||
void end_dialog (void);
|
||||
void attr_clear (WINDOW * win, int height, int width, chtype attr);
|
||||
void dialog_clear (void);
|
||||
void color_setup (void);
|
||||
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 draw_box (WINDOW * win, int y, int x, int height, int width, chtype box,
|
||||
chtype border);
|
||||
void draw_shadow (WINDOW * win, int y, int x, int height, int width);
|
||||
|
||||
int first_alpha (const char *string, const char *exempt);
|
||||
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 width, int pause);
|
||||
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 menu_height, const char *choice, int item_no,
|
||||
const char * const * items);
|
||||
int dialog_checklist (const char *title, const char *prompt, int height,
|
||||
int width, int list_height, int item_no,
|
||||
const char * const * items, int flag);
|
||||
int first_alpha(const char *string, const char *exempt);
|
||||
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 width, int pause);
|
||||
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 menu_height, const char *choice, int item_no,
|
||||
const char *const *items);
|
||||
int dialog_checklist(const char *title, const char *prompt, int height,
|
||||
int width, int list_height, int item_no,
|
||||
const char *const *items);
|
||||
extern char dialog_input_result[];
|
||||
int dialog_inputbox (const char *title, const char *prompt, int height,
|
||||
int width, const char *init);
|
||||
int dialog_inputbox(const char *title, const char *prompt, int height,
|
||||
int width, const char *init);
|
||||
|
||||
/*
|
||||
* This is the base for fictitious keys, which activate
|
||||
@@ -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')
|
||||
*/
|
||||
#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
|
||||
@@ -0,0 +1,224 @@
|
||||
/*
|
||||
* 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 */
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
/*
|
||||
* dialog - Display simple dialog boxes from shell scripts
|
||||
*
|
||||
* 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"
|
||||
|
||||
static void Usage(const char *name);
|
||||
|
||||
typedef int (jumperFn) (const char *title, int argc, const char *const *argv);
|
||||
|
||||
struct Mode {
|
||||
char *name;
|
||||
int argmin, argmax, argmod;
|
||||
jumperFn *jumper;
|
||||
};
|
||||
|
||||
jumperFn j_menu, j_radiolist, j_yesno, j_textbox, j_inputbox;
|
||||
jumperFn j_msgbox, j_infobox;
|
||||
|
||||
static struct Mode modes[] = {
|
||||
{"--menu", 9, 0, 3, j_menu},
|
||||
{"--radiolist", 9, 0, 3, j_radiolist},
|
||||
{"--yesno", 5, 5, 1, j_yesno},
|
||||
{"--textbox", 5, 5, 1, j_textbox},
|
||||
{"--inputbox", 5, 6, 1, j_inputbox},
|
||||
{"--msgbox", 5, 5, 1, j_msgbox},
|
||||
{"--infobox", 5, 5, 1, j_infobox},
|
||||
{NULL, 0, 0, 0, NULL}
|
||||
};
|
||||
|
||||
static struct Mode *modePtr;
|
||||
|
||||
#ifdef LOCALE
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
int main(int argc, const char *const *argv)
|
||||
{
|
||||
int offset = 0, opt_clear = 0, end_common_opts = 0, retval;
|
||||
const char *title = NULL;
|
||||
|
||||
#ifdef LOCALE
|
||||
(void)setlocale(LC_ALL, "");
|
||||
#endif
|
||||
|
||||
#ifdef TRACE
|
||||
trace(TRACE_CALLS | TRACE_UPDATE);
|
||||
#endif
|
||||
if (argc < 2) {
|
||||
Usage(argv[0]);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
while (offset < argc - 1 && !end_common_opts) { /* Common options */
|
||||
if (!strcmp(argv[offset + 1], "--title")) {
|
||||
if (argc - offset < 3 || title != NULL) {
|
||||
Usage(argv[0]);
|
||||
exit(-1);
|
||||
} else {
|
||||
title = argv[offset + 2];
|
||||
offset += 2;
|
||||
}
|
||||
} else if (!strcmp(argv[offset + 1], "--backtitle")) {
|
||||
if (backtitle != NULL) {
|
||||
Usage(argv[0]);
|
||||
exit(-1);
|
||||
} else {
|
||||
backtitle = argv[offset + 2];
|
||||
offset += 2;
|
||||
}
|
||||
} else if (!strcmp(argv[offset + 1], "--clear")) {
|
||||
if (opt_clear) { /* Hey, "--clear" can't appear twice! */
|
||||
Usage(argv[0]);
|
||||
exit(-1);
|
||||
} else if (argc == 2) { /* we only want to clear the screen */
|
||||
init_dialog();
|
||||
refresh(); /* init_dialog() will clear the screen for us */
|
||||
end_dialog();
|
||||
return 0;
|
||||
} else {
|
||||
opt_clear = 1;
|
||||
offset++;
|
||||
}
|
||||
} else /* no more common options */
|
||||
end_common_opts = 1;
|
||||
}
|
||||
|
||||
if (argc - 1 == offset) { /* no more options */
|
||||
Usage(argv[0]);
|
||||
exit(-1);
|
||||
}
|
||||
/* use a table to look for the requested mode, to avoid code duplication */
|
||||
|
||||
for (modePtr = modes; modePtr->name; modePtr++) /* look for the mode */
|
||||
if (!strcmp(argv[offset + 1], modePtr->name))
|
||||
break;
|
||||
|
||||
if (!modePtr->name)
|
||||
Usage(argv[0]);
|
||||
if (argc - offset < modePtr->argmin)
|
||||
Usage(argv[0]);
|
||||
if (modePtr->argmax && argc - offset > modePtr->argmax)
|
||||
Usage(argv[0]);
|
||||
|
||||
init_dialog();
|
||||
retval = (*(modePtr->jumper)) (title, argc - offset, argv + offset);
|
||||
|
||||
if (opt_clear) { /* clear screen before exit */
|
||||
attr_clear(stdscr, LINES, COLS, screen_attr);
|
||||
refresh();
|
||||
}
|
||||
end_dialog();
|
||||
|
||||
exit(retval);
|
||||
}
|
||||
|
||||
/*
|
||||
* Print program usage
|
||||
*/
|
||||
static void Usage(const char *name)
|
||||
{
|
||||
fprintf(stderr, "\
|
||||
\ndialog, by Savio Lam (lam836@cs.cuhk.hk).\
|
||||
\n patched by Stuart Herbert (S.Herbert@shef.ac.uk)\
|
||||
\n modified/gutted for use as a Linux kernel config tool by \
|
||||
\n William Roadcap (roadcapw@cfw.com)\
|
||||
\n\
|
||||
\n* Display dialog boxes from shell scripts *\
|
||||
\n\
|
||||
\nUsage: %s --clear\
|
||||
\n %s [--title <title>] [--backtitle <backtitle>] --clear <Box options>\
|
||||
\n\
|
||||
\nBox options:\
|
||||
\n\
|
||||
\n --menu <text> <height> <width> <menu height> <tag1> <item1>...\
|
||||
\n --radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>...\
|
||||
\n --textbox <file> <height> <width>\
|
||||
\n --inputbox <text> <height> <width> [<init>]\
|
||||
\n --yesno <text> <height> <width>\
|
||||
\n", name, name);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
* These are the program jumpers
|
||||
*/
|
||||
|
||||
int j_menu(const char *t, int ac, const char *const *av)
|
||||
{
|
||||
return dialog_menu(t, av[2], atoi(av[3]), atoi(av[4]),
|
||||
atoi(av[5]), av[6], (ac - 6) / 2, av + 7);
|
||||
}
|
||||
|
||||
int j_radiolist(const char *t, int ac, const char *const *av)
|
||||
{
|
||||
return dialog_checklist(t, av[2], atoi(av[3]), atoi(av[4]),
|
||||
atoi(av[5]), (ac - 6) / 3, av + 6);
|
||||
}
|
||||
|
||||
int j_textbox(const char *t, int ac, const char *const *av)
|
||||
{
|
||||
return dialog_textbox(t, av[2], atoi(av[3]), atoi(av[4]));
|
||||
}
|
||||
|
||||
int j_yesno(const char *t, int ac, const char *const *av)
|
||||
{
|
||||
return dialog_yesno(t, av[2], atoi(av[3]), atoi(av[4]));
|
||||
}
|
||||
|
||||
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)
|
||||
fprintf(stderr, dialog_input_result);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int j_msgbox(const char *t, int ac, const char *const *av)
|
||||
{
|
||||
return dialog_msgbox(t, av[2], atoi(av[3]), atoi(av[4]), 1);
|
||||
}
|
||||
|
||||
int j_infobox(const char *t, int ac, const char *const *av)
|
||||
{
|
||||
return dialog_msgbox(t, av[2], atoi(av[3]), atoi(av[4]), 0);
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user