/*
* Print list item
*/
-static void
-print_item(WINDOW * win, const char *item, int status, int choice, int selected)
+static void print_item(WINDOW * win, const char *item, int status, int choice,
+ int selected)
{
int i;
/*
* Print the scroll indicators.
*/
-static void
-print_arrows(WINDOW * win, int choice, int item_no, int scroll,
+static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
int y, int x, int height)
{
wmove(win, y, x);
* Display a dialog box with a list of options that can be turned on or off
* The `flag' parameter is used to select between radiolist and checklist.
*/
-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 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 i, x, y, box_x, box_y;
int key = 0, button = 0, choice = 0, scroll = 0, max_choice, *status;
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);
+ 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);
+ menubox_border_attr, menubox_attr);
/* Find length of longest item in order to center checklist */
check_x = 0;
/* Scroll list down */
if (list_height > 1) {
/* De-highlight current first item */
- print_item(list,
- items[scroll * 3 +
- 1],
- status[scroll], 0,
- FALSE);
+ 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);
+ 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);
+ scroll, box_y, box_x + check_x + 5, list_height);
wrefresh(dialog);
/* 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);
+ 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);
+ 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);
+ scroll, box_y, box_x + check_x + 5, list_height);
wrefresh(dialog);
}
if (i != choice) {
/* De-highlight current item */
- print_item(list,
- items[(scroll + choice) * 3 + 1],
- status[scroll + choice], choice,
- FALSE);
+ 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);
+ print_item(list, items[(scroll + choice) * 3 + 1],
+ status[scroll + choice], choice, TRUE);
wnoutrefresh(list);
wrefresh(dialog);
}
case '\n':
if (!button) {
if (flag == FLAG_CHECK) {
- status[scroll + choice] =
- !status[scroll + choice];
+ status[scroll + choice] = !status[scroll + choice];
wmove(list, choice, check_x);
wattrset(list, check_selected_attr);
- wprintw(list, "[%c]",
- status[scroll +
- choice] ? 'X' : ' ');
+ wprintw(list, "[%c]", status[scroll + choice] ? 'X' : ' ');
} else {
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);
+ print_item(list, items[(scroll + i) * 3 + 1],
+ status[scroll + i], i, i == choice);
}
}
wnoutrefresh(list);
for (i = 0; i < item_no; i++) {
if (status[i]) {
if (flag == FLAG_CHECK) {
- fprintf(stderr,
- "\"%s\" ",
- items[i * 3]);
+ fprintf(stderr, "\"%s\" ", items[i * 3]);
} else {
- fprintf(stderr, "%s",
- items[i * 3]);
+ fprintf(stderr, "%s", items[i * 3]);
}
}
}
} else
- fprintf(stderr, "%s",
- items[(scroll + choice) * 3]);
+ fprintf(stderr, "%s", items[(scroll + choice) * 3]);
delwin(dialog);
free(status);
return button;
-
/*
* dialog.h -- common declarations for all dialog modules
*
#define ACS_DARROW 'v'
#endif
-/*
+/*
* Attribute names
*/
#define screen_attr attributes[0]
/*
* 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 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;
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);
+ draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2, border_attr, dialog_attr);
print_buttons(dialog, height, width, 0);
input_x = box_width - 1;
for (i = 0; i < box_width - 1; i++)
waddch(dialog, instr[scroll + i]);
- } else
+ } else {
waddstr(dialog, instr);
+ }
wmove(dialog, box_y, box_x + input_x);
if (input_x || scroll) {
wattrset(dialog, inputbox_attr);
if (!input_x) {
- scroll =
- scroll <
- box_width - 1 ? 0 : scroll -
- (box_width - 1);
+ 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;
+ 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,
- ' ');
+ mvwaddch(dialog, box_y, input_x + box_x, ' ');
wmove(dialog, box_y, input_x + box_x);
wrefresh(dialog);
}
if (scroll + input_x < MAX_LEN) {
wattrset(dialog, inputbox_attr);
instr[scroll + input_x] = key;
- instr[scroll + input_x + 1] =
- '\0';
+ 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]);
+ 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);
+ wmove(dialog, box_y, input_x++ + box_x);
waddch(dialog, key);
}
wrefresh(dialog);
/*
* Print menu item
*/
-static void
-print_item(WINDOW * win, const char *item, int choice, int selected, int hotkey)
+static void print_item(WINDOW * win, const char *item, int choice,
+ int selected, int hotkey)
{
int j;
char menu_item[menu_width + 1];
/*
* Print the scroll indicators.
*/
-static void
-print_arrows(WINDOW * win, int item_no, int scroll, int y, int x, int height)
+static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
+ int height)
{
int cur_y, cur_x;
/*
* Display a menu for choosing among a number of options
*/
-int
-dialog_menu(const char *title, const char *prompt, int height, int width,
- int menu_height, const char *current, int item_no,
- const char *const *items)
+int dialog_menu(const char *title, const char *prompt, int height, int width,
+ int menu_height, const char *current, int item_no,
+ const char *const *items)
{
int i, j, x, y, box_x, box_y;
int key = 0, button = 0, scroll = 0, choice = 0, first_item =
i = max_choice;
else {
for (i = choice + 1; i < max_choice; i++) {
- j = first_alpha(items[(scroll + i) * 2 + 1],
- "YyNnMmHh");
- if (key ==
- tolower(items[(scroll + i) * 2 + 1][j]))
+ j = first_alpha(items[(scroll + i) * 2 + 1], "YyNnMmHh");
+ if (key == tolower(items[(scroll + i) * 2 + 1][j]))
break;
}
if (i == max_choice)
for (i = 0; i < max_choice; i++) {
- j = first_alpha(items
- [(scroll + i) * 2 + 1],
- "YyNnMmHh");
- if (key ==
- tolower(items[(scroll + i) * 2 + 1]
- [j]))
+ j = first_alpha(items [(scroll + i) * 2 + 1], "YyNnMmHh");
+ if (key == tolower(items[(scroll + i) * 2 + 1][j]))
break;
}
}
scroll--;
- print_item(menu, items[scroll * 2 + 1],
- 0, FALSE,
- (items[scroll * 2][0] !=
- ':'));
+ print_item(menu, items[scroll * 2 + 1], 0, FALSE,
+ (items[scroll * 2][0] != ':'));
} else
choice = MAX(choice - 1, 0);
} else if (key == KEY_DOWN || key == '+') {
print_item(menu,
- items[(scroll + choice) * 2 + 1],
- choice, FALSE,
- (items[(scroll + choice) * 2][0] !=
- ':'));
+ items[(scroll + choice) * 2 + 1], choice, FALSE,
+ (items[(scroll + choice) * 2][0] != ':'));
if ((choice > max_choice - 3) &&
- (scroll + max_choice < item_no)
- ) {
+ (scroll + max_choice < item_no)) {
/* Scroll menu up */
scrollok(menu, TRUE);
wscrl(menu, 1);
scroll++;
- print_item(menu,
- items[(scroll + max_choice -
- 1) * 2 + 1],
+ print_item(menu, items[(scroll + max_choice - 1) * 2 + 1],
max_choice - 1, FALSE,
- (items
- [(scroll + max_choice -
- 1) * 2][0] != ':'));
+ (items [(scroll + max_choice - 1) * 2][0] != ':'));
} else
- choice =
- MIN(choice + 1, max_choice - 1);
+ choice = MIN(choice + 1, max_choice - 1);
} else if (key == KEY_PPAGE) {
scrollok(menu, TRUE);
if (scroll > 0) {
wscrl(menu, -1);
scroll--;
- print_item(menu,
- items[scroll * 2 +
- 1], 0, FALSE,
- (items[scroll * 2][0]
- != ':'));
+ print_item(menu, items[scroll * 2 + 1], 0, FALSE,
+ (items[scroll * 2][0] != ':'));
} else {
if (choice > 0)
choice--;
wscrl(menu, 1);
scrollok(menu, FALSE);
scroll++;
- print_item(menu,
- items[(scroll +
- max_choice -
- 1) * 2 + 1],
- max_choice - 1,
- FALSE,
- (items
- [(scroll +
- max_choice -
- 1) * 2][0] !=
- ':'));
+ print_item(menu, items[(scroll + max_choice - 1) * 2 + 1],
+ max_choice - 1, FALSE,
+ (items [(scroll + max_choice - 1) * 2][0] != ':'));
} else {
if (choice + 1 < max_choice)
choice++;
choice = i;
print_item(menu, items[(scroll + choice) * 2 + 1],
- choice, TRUE,
- (items[(scroll + choice) * 2][0] != ':'));
+ choice, TRUE, (items[(scroll + choice) * 2][0] != ':'));
print_arrows(dialog, item_no, scroll,
box_y, box_x + item_x + 1, menu_height);
fprintf(stderr, "%s \"%s\"\n",
items[(scroll + choice) * 2],
items[(scroll + choice) * 2 + 1] +
- first_alpha(items
- [(scroll + choice) * 2 + 1],
- ""));
+ first_alpha(items [(scroll + choice) * 2 + 1], ""));
else
fprintf(stderr, "%s\n",
items[(scroll + choice) * 2]);
* Display a message box. Program will pause and display an "OK" button
* if the parameter 'pause' is non-zero.
*/
-int
-dialog_msgbox(const char *title, const char *prompt, int height, int width,
- int pause)
+int dialog_msgbox(const char *title, const char *prompt, int height, int width,
+ int pause)
{
int i, x, y, key = 0;
WINDOW *dialog;
/* Open input file for reading */
if ((fd = open(file, O_RDONLY)) == -1) {
endwin();
- fprintf(stderr,
- "\nCan't open input file in dialog_textbox().\n");
+ fprintf(stderr, "\nCan't open input file in dialog_textbox().\n");
exit(-1);
}
/* Get file size. Actually, 'file_size' is the real file size - 1,
since it's only the last byte offset from the beginning */
if ((file_size = lseek(fd, 0, SEEK_END)) == -1) {
endwin();
- fprintf(stderr,
- "\nError getting file size in dialog_textbox().\n");
+ fprintf(stderr, "\nError getting file size in dialog_textbox().\n");
exit(-1);
}
/* Restore file pointer to beginning of file after getting file size */
if (lseek(fd, 0, SEEK_SET) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in dialog_textbox().\n");
+ fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
exit(-1);
}
/* Allocate space for read buffer */
if ((buf = malloc(BUF_SIZE + 1)) == NULL) {
endwin();
- fprintf(stderr,
- "\nCan't allocate memory in dialog_textbox().\n");
+ fprintf(stderr, "\nCan't allocate memory in dialog_textbox().\n");
exit(-1);
}
if ((bytes_read = read(fd, buf, BUF_SIZE)) == -1) {
/* First page not in buffer? */
if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in dialog_textbox().\n");
+ fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
exit(-1);
}
if (fpos > bytes_read) { /* Yes, we have to read it in */
if (lseek(fd, 0, SEEK_SET) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in "
- "dialog_textbox().\n");
+ fprintf(stderr, "\nError moving file pointer in "
+ "dialog_textbox().\n");
exit(-1);
}
if ((bytes_read =
read(fd, buf, BUF_SIZE)) == -1) {
endwin();
- fprintf(stderr,
- "\nError reading file in dialog_textbox().\n");
+ fprintf(stderr, "\nError reading file in dialog_textbox().\n");
exit(-1);
}
buf[bytes_read] = '\0';
/* Last page not in buffer? */
if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in dialog_textbox().\n");
+ fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
exit(-1);
}
if (fpos < file_size) { /* Yes, we have to read it in */
if (lseek(fd, -BUF_SIZE, SEEK_END) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in dialog_textbox().\n");
+ fprintf(stderr, "\nError moving file pointer in dialog_textbox().\n");
exit(-1);
}
if ((bytes_read =
read(fd, buf, BUF_SIZE)) == -1) {
endwin();
- fprintf(stderr,
- "\nError reading file in dialog_textbox().\n");
+ fprintf(stderr, "\nError reading file in dialog_textbox().\n");
exit(-1);
}
buf[bytes_read] = '\0';
if (page == buf) {
if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in "
- "back_lines().\n");
+ fprintf(stderr, "\nError moving file pointer in "
+ "back_lines().\n");
exit(-1);
}
if (fpos > bytes_read) { /* Not beginning of file yet */
/* No, move less then */
if (lseek(fd, 0, SEEK_SET) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in "
- "back_lines().\n");
+ fprintf(stderr, "\nError moving file pointer in "
+ "back_lines().\n");
exit(-1);
}
page = buf + fpos - bytes_read;
} else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek
- (fd, -(BUF_SIZE / 2 + bytes_read),
- SEEK_CUR)
- == -1) {
+ if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer "
- "in back_lines().\n");
+ fprintf(stderr, "\nError moving file pointer "
+ "in back_lines().\n");
exit(-1);
}
page = buf + BUF_SIZE / 2;
if ((bytes_read =
read(fd, buf, BUF_SIZE)) == -1) {
endwin();
- fprintf(stderr,
- "\nError reading file in back_lines().\n");
+ fprintf(stderr, "\nError reading file in back_lines().\n");
exit(-1);
}
buf[bytes_read] = '\0';
if (page == buf) {
if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in back_lines().\n");
+ fprintf(stderr, "\nError moving file pointer in back_lines().\n");
exit(-1);
}
if (fpos > bytes_read) {
/* Really possible to move backward BUF_SIZE/2 bytes? */
if (fpos < BUF_SIZE / 2 + bytes_read) {
/* No, move less then */
- if (lseek(fd, 0, SEEK_SET) ==
- -1) {
+ if (lseek(fd, 0, SEEK_SET) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer "
- "in back_lines().\n");
+ fprintf(stderr, "\nError moving file pointer "
+ "in back_lines().\n");
exit(-1);
}
page = buf + fpos - bytes_read;
} else { /* Move backward BUF_SIZE/2 bytes */
- if (lseek
- (fd,
- -(BUF_SIZE / 2 +
- bytes_read),
- SEEK_CUR) == -1) {
+ if (lseek (fd, -(BUF_SIZE / 2 + bytes_read), SEEK_CUR) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer"
- " in back_lines().\n");
+ fprintf(stderr, "\nError moving file pointer"
+ " in back_lines().\n");
exit(-1);
}
page = buf + BUF_SIZE / 2;
if ((bytes_read =
read(fd, buf, BUF_SIZE)) == -1) {
endwin();
- fprintf(stderr,
- "\nError reading file in "
- "back_lines().\n");
+ fprintf(stderr, "\nError reading file in "
+ "back_lines().\n");
exit(-1);
}
buf[bytes_read] = '\0';
/* Either end of file or end of buffer reached */
if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in "
- "get_line().\n");
+ fprintf(stderr, "\nError moving file pointer in "
+ "get_line().\n");
exit(-1);
}
if (fpos < file_size) { /* Not end of file yet */
if ((bytes_read =
read(fd, buf, BUF_SIZE)) == -1) {
endwin();
- fprintf(stderr,
- "\nError reading file in get_line().\n");
+ fprintf(stderr, "\nError reading file in get_line().\n");
exit(-1);
}
buf[bytes_read] = '\0';
if ((fpos = lseek(fd, 0, SEEK_CUR)) == -1) {
endwin();
- fprintf(stderr,
- "\nError moving file pointer in print_position().\n");
+ fprintf(stderr, "\nError moving file pointer in print_position().\n");
exit(-1);
}
wattrset(win, position_indicator_attr);
const char *dialog_result;
-/*
+/*
* Attribute values, default is for mono display
*/
chtype attributes[] = {
case TAB:
case KEY_LEFT:
case KEY_RIGHT:
- button = ((key == KEY_LEFT ? --button : ++button) < 0)
- ? 1 : (button > 1 ? 0 : button);
+ button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
print_buttons(dialog, height, width, button);
wrefresh(dialog);