Skip to content

Commit

Permalink
kconfig: make kconfig MinGW friendly
Browse files Browse the repository at this point in the history
Kconfig is powerfull tool. So powerfull that more and more software
projects are using it for configuration. So instead of fixing some of
them one by one, lets fix it in kernel and wait for sync.

This work was originaly done for PTXdist - GPL licensed build system for
userlands and cross-compilers, but it will not hurt kernel kconfig
either. PTXdist menuconfig now works on Windows linked with PDCurses and
compiled using MinGW - there is no termios and signals.

* Do not include <sys/wait.h> and <signal.h> (comes from times when
  lxdialog was separate process)
* Do not mess with termios directly and let curses tell screen size.
  Comment to commit c8dc68a says
  check for screen size could be removed later, but because it didn't
  happen for more than year I left it here as well.
* Save cursor position added by Sam

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
  • Loading branch information
Ladislav Michl authored and Sam Ravnborg committed Jan 28, 2008
1 parent 0486bc9 commit 09af091
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 66 deletions.
5 changes: 2 additions & 3 deletions scripts/kconfig/lxdialog/dialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,9 @@ int item_is_tag(char tag);
int on_key_esc(WINDOW *win);
int on_key_resize(void);

void init_dialog(const char *backtitle);
int init_dialog(const char *backtitle);
void set_dialog_backtitle(const char *backtitle);
void reset_dialog(void);
void end_dialog(void);
void end_dialog(int x, int y);
void attr_clear(WINDOW * win, int height, int width, chtype attr);
void dialog_clear(void);
void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
Expand Down
32 changes: 21 additions & 11 deletions scripts/kconfig/lxdialog/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -266,31 +266,41 @@ void dialog_clear(void)
/*
* Do some initialization for dialog
*/
void init_dialog(const char *backtitle)
int init_dialog(const char *backtitle)
{
dlg.backtitle = backtitle;
color_setup(getenv("MENUCONFIG_COLOR"));
}
int height, width;

initscr(); /* Init curses */
getmaxyx(stdscr, height, width);
if (height < 19 || width < 80) {
endwin();
return -ERRDISPLAYTOOSMALL;
}

void set_dialog_backtitle(const char *backtitle)
{
dlg.backtitle = backtitle;
}
color_setup(getenv("MENUCONFIG_COLOR"));

void reset_dialog(void)
{
initscr(); /* Init curses */
keypad(stdscr, TRUE);
cbreak();
noecho();
dialog_clear();

return 0;
}

void set_dialog_backtitle(const char *backtitle)
{
dlg.backtitle = backtitle;
}

/*
* End using dialog functions.
*/
void end_dialog(void)
void end_dialog(int x, int y)
{
/* move cursor back to original position */
move(y, x);
refresh();
endwin();
}

Expand Down
61 changes: 9 additions & 52 deletions scripts/kconfig/mconf.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,13 @@
* i18n, 2005, Arnaldo Carvalho de Melo <acme@conectiva.com.br>
*/

#include <sys/ioctl.h>
#include <sys/wait.h>
#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <limits.h>
#include <signal.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <locale.h>

Expand Down Expand Up @@ -275,8 +271,6 @@ search_help[] = N_(
"\n");

static int indent;
static struct termios ios_org;
static int rows = 0, cols = 0;
static struct menu *current_menu;
static int child_count;
static int single_menu_mode;
Expand All @@ -290,41 +284,6 @@ static void show_textbox(const char *title, const char *text, int r, int c);
static void show_helptext(const char *title, const char *text);
static void show_help(struct menu *menu);

static void init_wsize(void)
{
struct winsize ws;
char *env;

if (!ioctl(STDIN_FILENO, TIOCGWINSZ, &ws)) {
rows = ws.ws_row;
cols = ws.ws_col;
}

if (!rows) {
env = getenv("LINES");
if (env)
rows = atoi(env);
if (!rows)
rows = 24;
}
if (!cols) {
env = getenv("COLUMNS");
if (env)
cols = atoi(env);
if (!cols)
cols = 80;
}

if (rows < 19 || cols < 80) {
fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
exit(1);
}

rows -= 4;
cols -= 5;
}

static void get_prompt_str(struct gstr *r, struct property *prop)
{
int i, j;
Expand Down Expand Up @@ -900,13 +859,9 @@ static void conf_save(void)
}
}

static void conf_cleanup(void)
{
tcsetattr(1, TCSAFLUSH, &ios_org);
}

int main(int ac, char **av)
{
int saved_x, saved_y;
char *mode;
int res;

Expand All @@ -923,11 +878,13 @@ int main(int ac, char **av)
single_menu_mode = 1;
}

tcgetattr(1, &ios_org);
atexit(conf_cleanup);
init_wsize();
reset_dialog();
init_dialog(NULL);
getyx(stdscr, saved_y, saved_x);
if (init_dialog(NULL)) {
fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
return 1;
}

set_config_filename(conf_get_configname());
do {
conf(&rootmenu);
Expand All @@ -941,7 +898,7 @@ int main(int ac, char **av)
else
res = -1;
} while (res == KEY_ESC);
end_dialog();
end_dialog(saved_x, saved_y);

switch (res) {
case 0:
Expand Down

0 comments on commit 09af091

Please sign in to comment.