int dia_message (char *txt_tv, int msgtype_iv) { window_t win_ri; int width_ii; button_t button_ri; int key_ii; char *s; if(!config.win) util_disp_init(); if (config.linemode) { putchar('\n'); if (msgtype_iv == MSGTYPE_ERROR || msgtype_iv == MSGTYPE_REBOOT) printf("*** "); dia_printformatted(txt_tv, 0, max_x_ig - 5, 1); if (msgtype_iv == MSGTYPE_INFOENTER) { int c; do c = lgetchar(); while (c != '\n' && c != '\r' && c != EOF); } return 0; } disp_toggle_output (DISP_OFF); kbd_clear_buffer (); memset (&win_ri, 0, sizeof (window_t)); if (msgtype_iv == MSGTYPE_ERROR || msgtype_iv == MSGTYPE_REBOOT) { win_ri.bg_color = colors_prg->error_win; win_ri.fg_color = colors_prg->error_fg; } else { win_ri.bg_color = colors_prg->msg_win; win_ri.fg_color = colors_prg->msg_fg; } width_ii = dia_win_open (&win_ri, txt_tv, 0); s = msgtype_iv == MSGTYPE_REBOOT ? "Reboot" : "OK"; util_generate_button (&button_ri, s, utf8_strwidth(s)); win_add_button (&win_ri, &button_ri, width_ii / 2 - utf8_strwidth (button_ri.text) / 2 - 1, utf8_strwidth (button_ri.text)); /* win_button_select (&button_ri); */ disp_flush_area (&win_ri); do { key_ii = kbd_getch (TRUE); if (key_ii == KEY_CTRL_C) dia_handle_ctrlc (); if (key_ii == KEY_ENTER) win_button_pressed (&button_ri, FALSE); } while ( key_ii != KEY_ENTER && key_ii != KEY_ESC && key_ii != 'q' && key_ii != 'r' && key_ii != 's' && key_ii != 'i' && key_ii != 'f' && key_ii != 'c' ); win_close (&win_ri); if (key_ii == KEY_ENTER) return (0); else if (key_ii == KEY_ESC) return (-1); else if (key_ii == 'r') return (-69); else if (key_ii == 'f') return (-70); else if (key_ii == 'i') return (-71); else if (key_ii == 'c') return (-73); else if (key_ii == 's') return (-74); else return (-42); }
void kbd_clear_buffer (void) { while (kbd_getch (FALSE)); }