10a9064fbSMasahiro Yamada /* 20a9064fbSMasahiro Yamada * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com? 30a9064fbSMasahiro Yamada * Released under the terms of the GNU GPL v2.0. 40a9064fbSMasahiro Yamada * 50a9064fbSMasahiro Yamada * Derived from menuconfig. 60a9064fbSMasahiro Yamada * 70a9064fbSMasahiro Yamada */ 80a9064fbSMasahiro Yamada 90a9064fbSMasahiro Yamada #include <ctype.h> 100a9064fbSMasahiro Yamada #include <errno.h> 110a9064fbSMasahiro Yamada #include <fcntl.h> 120a9064fbSMasahiro Yamada #include <limits.h> 130a9064fbSMasahiro Yamada #include <stdarg.h> 140a9064fbSMasahiro Yamada #include <stdlib.h> 150a9064fbSMasahiro Yamada #include <string.h> 160a9064fbSMasahiro Yamada #include <unistd.h> 170a9064fbSMasahiro Yamada #include <locale.h> 18*e91610daSEugeniu Rosca #include <ncurses.h> 190a9064fbSMasahiro Yamada #include <menu.h> 200a9064fbSMasahiro Yamada #include <panel.h> 210a9064fbSMasahiro Yamada #include <form.h> 220a9064fbSMasahiro Yamada 230a9064fbSMasahiro Yamada #include <stdio.h> 240a9064fbSMasahiro Yamada #include <time.h> 250a9064fbSMasahiro Yamada #include <sys/time.h> 260a9064fbSMasahiro Yamada 270a9064fbSMasahiro Yamada #define max(a, b) ({\ 280a9064fbSMasahiro Yamada typeof(a) _a = a;\ 290a9064fbSMasahiro Yamada typeof(b) _b = b;\ 300a9064fbSMasahiro Yamada _a > _b ? _a : _b; }) 310a9064fbSMasahiro Yamada 320a9064fbSMasahiro Yamada #define min(a, b) ({\ 330a9064fbSMasahiro Yamada typeof(a) _a = a;\ 340a9064fbSMasahiro Yamada typeof(b) _b = b;\ 350a9064fbSMasahiro Yamada _a < _b ? _a : _b; }) 360a9064fbSMasahiro Yamada 370a9064fbSMasahiro Yamada typedef enum { 380a9064fbSMasahiro Yamada NORMAL = 1, 390a9064fbSMasahiro Yamada MAIN_HEADING, 400a9064fbSMasahiro Yamada MAIN_MENU_BOX, 410a9064fbSMasahiro Yamada MAIN_MENU_FORE, 420a9064fbSMasahiro Yamada MAIN_MENU_BACK, 430a9064fbSMasahiro Yamada MAIN_MENU_GREY, 440a9064fbSMasahiro Yamada MAIN_MENU_HEADING, 450a9064fbSMasahiro Yamada SCROLLWIN_TEXT, 460a9064fbSMasahiro Yamada SCROLLWIN_HEADING, 470a9064fbSMasahiro Yamada SCROLLWIN_BOX, 480a9064fbSMasahiro Yamada DIALOG_TEXT, 490a9064fbSMasahiro Yamada DIALOG_MENU_FORE, 500a9064fbSMasahiro Yamada DIALOG_MENU_BACK, 510a9064fbSMasahiro Yamada DIALOG_BOX, 520a9064fbSMasahiro Yamada INPUT_BOX, 530a9064fbSMasahiro Yamada INPUT_HEADING, 540a9064fbSMasahiro Yamada INPUT_TEXT, 550a9064fbSMasahiro Yamada INPUT_FIELD, 560a9064fbSMasahiro Yamada FUNCTION_TEXT, 570a9064fbSMasahiro Yamada FUNCTION_HIGHLIGHT, 580a9064fbSMasahiro Yamada ATTR_MAX 590a9064fbSMasahiro Yamada } attributes_t; 600a9064fbSMasahiro Yamada extern attributes_t attributes[]; 610a9064fbSMasahiro Yamada 620a9064fbSMasahiro Yamada typedef enum { 630a9064fbSMasahiro Yamada F_HELP = 1, 640a9064fbSMasahiro Yamada F_SYMBOL = 2, 650a9064fbSMasahiro Yamada F_INSTS = 3, 660a9064fbSMasahiro Yamada F_CONF = 4, 670a9064fbSMasahiro Yamada F_BACK = 5, 680a9064fbSMasahiro Yamada F_SAVE = 6, 690a9064fbSMasahiro Yamada F_LOAD = 7, 700a9064fbSMasahiro Yamada F_SEARCH = 8, 710a9064fbSMasahiro Yamada F_EXIT = 9, 720a9064fbSMasahiro Yamada } function_key; 730a9064fbSMasahiro Yamada 740a9064fbSMasahiro Yamada void set_colors(void); 750a9064fbSMasahiro Yamada 760a9064fbSMasahiro Yamada /* this changes the windows attributes !!! */ 770a9064fbSMasahiro Yamada void print_in_middle(WINDOW *win, 780a9064fbSMasahiro Yamada int starty, 790a9064fbSMasahiro Yamada int startx, 800a9064fbSMasahiro Yamada int width, 810a9064fbSMasahiro Yamada const char *string, 820a9064fbSMasahiro Yamada chtype color); 830a9064fbSMasahiro Yamada int get_line_length(const char *line); 840a9064fbSMasahiro Yamada int get_line_no(const char *text); 850a9064fbSMasahiro Yamada const char *get_line(const char *text, int line_no); 860a9064fbSMasahiro Yamada void fill_window(WINDOW *win, const char *text); 870a9064fbSMasahiro Yamada int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...); 880a9064fbSMasahiro Yamada int dialog_inputbox(WINDOW *main_window, 890a9064fbSMasahiro Yamada const char *title, const char *prompt, 900a9064fbSMasahiro Yamada const char *init, char **resultp, int *result_len); 910a9064fbSMasahiro Yamada void refresh_all_windows(WINDOW *main_window); 920a9064fbSMasahiro Yamada void show_scroll_win(WINDOW *main_window, 930a9064fbSMasahiro Yamada const char *title, 940a9064fbSMasahiro Yamada const char *text); 95