-rw-r--r-- | scripts/lxdialog/Makefile | 34 | ||||
-rwxr-xr-x | scripts/lxdialog/lxdialog | bin | 37159 -> 0 bytes | |||
-rw-r--r-- | scripts/lxdialog/util.c | 2 |
3 files changed, 21 insertions, 15 deletions
diff --git a/scripts/lxdialog/Makefile b/scripts/lxdialog/Makefile index 75b7bac..b34bbc3 100644 --- a/scripts/lxdialog/Makefile +++ b/scripts/lxdialog/Makefile @@ -1,44 +1,50 @@ -HOST_CFLAGS := -DLOCALE -HOST_LDFLAGS := -lncurses +HOST_EXTRACFLAGS := -DLOCALE +HOST_LOADLIBES := -lncurses +HOSTCC = gcc ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h)) - HOST_CFLAGS += -I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>" + HOST_EXTRACFLAGS += -I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>" else ifeq (/usr/include/ncurses/curses.h, $(wildcard /usr/include/ncurses/curses.h)) - HOST_CFLAGS += -I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>" + HOST_EXTRACFLAGS += -I/usr/include/ncurses -DCURSES_LOC="<ncurses/curses.h>" else ifeq (/usr/include/ncurses.h, $(wildcard /usr/include/ncurses.h)) - HOST_CFLAGS += -DCURSES_LOC="<ncurses.h>" + HOST_EXTRACFLAGS += -DCURSES_LOC="<ncurses.h>" else - HOST_CFLAGS += -DCURSES_LOC="<curses.h>" + HOST_EXTRACFLAGS += -DCURSES_LOC="<curses.h>" endif endif endif -host-progs := lxdialog +host-progs := lxdialog +always := $(host-progs) lxdialog-objs := checklist.o menubox.o textbox.o yesno.o inputbox.o \ util.o lxdialog.o msgbox.o -EXTRA_TARGETS := lxdialog - -first_rule: ncurses - -include $(TOPDIR)/Rules.make +first_rule: ncurses lxdialog .PHONY: ncurses - ncurses: @echo "main() {}" > lxtemp.c - @if $(HOSTCC) $(HOST_CFLAGS) lxtemp.c $(HOST_LDFLAGS); then \ + @if $(HOSTCC) lxtemp.c $(HOST_LOADLIBES); then \ rm -f lxtemp.c a.out; \ else \ rm -f lxtemp.c; \ echo -e "\007" ;\ echo ">> Unable to find the Ncurses libraries." ;\ echo ">>" ;\ echo ">> You must have Ncurses installed in order" ;\ echo ">> to use 'make menuconfig'" ;\ echo ;\ exit 1 ;\ fi + +clean: + rm -f $(lxdialog-objs) lxdialog + +%.o: %.c + $(HOSTCC) $(HOST_EXTRACFLAGS) -fPIC -c $^ -o $@ + +lxdialog: $(lxdialog-objs) + $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOST_LOADLIBES) $^ -o $@ diff --git a/scripts/lxdialog/lxdialog b/scripts/lxdialog/lxdialog Binary files differdeleted file mode 100755 index f0dca91..0000000 --- a/scripts/lxdialog/lxdialog +++ b/dev/null diff --git a/scripts/lxdialog/util.c b/scripts/lxdialog/util.c index b3a7af9..e7bce9b 100644 --- a/scripts/lxdialog/util.c +++ b/scripts/lxdialog/util.c @@ -159,201 +159,201 @@ init_dialog (void) /* * 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 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; + if (strchr(">])", c) && in_paren > 0) --in_paren; if ((! in_paren) && isalpha(c) && strchr(exempt, c) == 0) return i; } return 0; } |