30 #define DISABLE_DEBUGLOG 36 #include <gwenhywfar/gui_be.h> 37 #include <gwenhywfar/inherit.h> 38 #include <gwenhywfar/debug.h> 39 #include <gwenhywfar/misc.h> 40 #include <gwenhywfar/db.h> 41 #include <gwenhywfar/gwentime.h> 42 #include <gwenhywfar/mdigest.h> 43 #include <gwenhywfar/text.h> 81 cgui->progressList=GWEN_Gui_CProgress_List_new();
104 cgui=(GWEN_GUI_CGUI *)p;
105 GWEN_Gui_CProgress_List_free(cgui->progressList);
114 #ifdef HAVE_TERMIOS_H 115 struct termios OldAttr, NewAttr;
118 #if HAVE_DECL_SIGPROCMASK 123 #if HAVE_DECL_SIGPROCMASK 125 sigaddset(&snew, SIGINT);
126 sigaddset(&snew, SIGSTOP);
127 sigprocmask(SIG_BLOCK, &snew, &sold);
129 #ifdef HAVE_TERMIOS_H 130 if (0 == tcgetattr(fileno(stdin), &OldAttr)) {
132 NewAttr.c_lflag &= ~ICANON;
133 NewAttr.c_lflag &= ~ECHO;
134 tcsetattr(fileno(stdin), TCSAFLUSH, &NewAttr);
143 chr==GWEN_GUI_CGUI_CHAR_ABORT ||
144 chr==GWEN_GUI_CGUI_CHAR_ENTER ||
152 #ifdef HAVE_TERMIOS_H 155 tcsetattr(fileno(stdin), TCSADRAIN, &OldAttr);
158 #if HAVE_DECL_SIGPROCMASK 159 sigprocmask(SIG_BLOCK, &sold, 0);
174 #ifdef HAVE_TERMIOS_H 175 struct termios OldInAttr, NewInAttr;
176 struct termios OldOutAttr, NewOutAttr;
177 int AttrInChanged = 0;
178 int AttrOutChanged = 0;
184 #if HAVE_DECL_SIGPROCMASK 189 char inbuf[INBUFSIZE];
195 const char *wantedCharSet;
200 wantedCharSet=
"UTF-8";
201 ic=iconv_open(
"UTF-8", wantedCharSet);
202 if (ic==(iconv_t)-1) {
204 wantedCharSet, strerror(errno));
214 #if HAVE_DECL_SIGPROCMASK 216 sigaddset(&snew, SIGINT);
217 sigaddset(&snew, SIGSTOP);
218 sigprocmask(SIG_BLOCK, &snew, &sold);
221 #ifdef HAVE_TERMIOS_H 222 if (0 == tcgetattr(fileno(stdin), &OldInAttr)) {
223 NewInAttr = OldInAttr;
224 NewInAttr.c_lflag &= ~ECHO;
225 NewInAttr.c_lflag &= ~ICANON;
226 tcsetattr(fileno(stdin), TCSAFLUSH, &NewInAttr);
229 if (0 == tcgetattr(fileno(stdout), &OldOutAttr)) {
230 NewOutAttr = OldOutAttr;
231 NewOutAttr.c_lflag &= ~ICANON;
232 tcsetattr(fileno(stdout), TCSAFLUSH, &NewOutAttr);
251 done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft);
253 while (done==(
size_t)-1 && errno==EINVAL &&
254 nextchr-inbuf<INBUFSIZE);
261 else if (done==(
size_t)-1) {
262 if (errno==E2BIG || errno==EILSEQ) {
282 if (chr==GWEN_GUI_CGUI_CHAR_DELETE) {
287 while ((buffer[pos]&0xC0)==0x80 && pos);
292 else if (chr==GWEN_GUI_CGUI_CHAR_ENTER) {
293 if (minLen && pos<minLen) {
299 I18N(
"Your input was empty.\n" 300 "Do you want to use the default?"),
303 I18N(
"Abort"), guiid);
326 else if (chr==GWEN_GUI_CGUI_CHAR_ABORT) {
331 else if (pOutbuf-buffer<maxLen) {
346 if ((chr&0xC0)!=0x80)
359 #ifdef HAVE_TERMIOS_H 362 tcsetattr(fileno(stdout), TCSADRAIN, &OldOutAttr);
364 tcsetattr(fileno(stdin), TCSADRAIN, &OldInAttr);
367 #if HAVE_DECL_SIGPROCMASK 368 sigprocmask(SIG_BLOCK, &sold, 0);
398 "Got the following dangerous message:\n%s\n",
405 "Auto-answering the following message with %d:\n%s",
441 else if (c==
'2' && b2) {
445 else if (c==
'3' && b3) {
490 lbuffer=(
char *)malloc(maxLen);
509 if (strcmp(lbuffer, buffer)!=0) {
511 "ERROR: Entries do not match, please try (again or abort)\n");
558 return ++(cgui->nextBoxId);
577 uint32_t progressFlags,
591 ++(cgui->nextProgressId),
596 GWEN_Gui_CProgress_List_Insert(cp, cgui->progressList);
611 cp=GWEN_Gui_CProgress_List_First(cgui->progressList);
617 cp=GWEN_Gui_CProgress_List_Next(cp);
710 GWEN_Gui_CProgress_List_Del(cp);
GWEN_GUI_CPROGRESS * GWEN_Gui_CGui__findProgress(GWEN_GUI *gui, uint32_t id)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
uint32_t GWENHYWFAR_CB GWEN_Gui_CGui_ProgressStart(GWEN_GUI *gui, uint32_t progressFlags, const char *title, const char *text, uint64_t total, GWEN_UNUSED uint32_t guiid)
uint32_t GWEN_Gui_CProgress_GetId(const GWEN_GUI_CPROGRESS *cp)
#define GWEN_ERROR_INVALID
#define GWEN_GUI_MSG_FLAGS_SEVERITY_IS_DANGEROUS(fl)
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressLog(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
int GWENHYWFAR_CB GWEN_Gui_CGui_InputBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, char *buffer, int minLen, int maxLen, uint32_t guiid)
#define GWEN_GUI_INPUT_FLAGS_CONFIRM
#define GWEN_GUI_FLAGS_NONINTERACTIVE
#define GWEN_GUI_INPUT_FLAGS_ALLOW_DEFAULT
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressEnd(GWEN_GUI *gui, uint32_t id)
GWENHYWFAR_API int GWEN_Gui_StdPrintf(const GWEN_GUI *gui, FILE *stream, const char *fmt,...) GWEN_FORMAT(printf
#define GWEN_FREE_OBJECT(varname)
#define GWEN_GUI_FLAGS_PERMPASSWORDS
#define GWEN_GUI_INPUT_FLAGS_NUMERIC
GWENHYWFAR_API int GWEN_Gui_MessageBox(uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, uint32_t guiid)
char GWEN_Gui_CGui__readCharFromStdin(int waitFor)
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressAdvance(GWEN_GUI *gui, uint32_t id, uint64_t progress)
void GWENHYWFAR_CB GWEN_Gui_CGui_FreeData(GWEN_UNUSED void *bp, void *p)
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
GWENHYWFAR_API GWEN_GUI_SHOWBOX_FN GWEN_Gui_SetShowBoxFn(GWEN_GUI *gui, GWEN_GUI_SHOWBOX_FN f)
#define GWEN_GUI_MSG_FLAGS_TYPE_INFO
int GWEN_Gui_CProgress_End(GWEN_GUI_CPROGRESS *cp)
#define GWEN_NEW_OBJECT(typ, varname)
#define GWEN_GUI_MSG_FLAGS_CONFIRM_BUTTON(fl)
#define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS
GWENHYWFAR_API GWEN_GUI_PROGRESS_START_FN GWEN_Gui_SetProgressStartFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_START_FN f)
GWEN_GUI_CPROGRESS * GWEN_Gui_CProgress_new(GWEN_GUI *gui, uint32_t id, uint32_t progressFlags, const char *title, const char *text, uint64_t total)
#define DBG_DEBUG(dbg_logger, format, args...)
#define GWEN_GUI_INPUT_FLAGS_TAN
#define GWEN_ERROR_GENERIC
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressSetTotal(GWEN_GUI *gui, uint32_t id, uint64_t total)
int GWEN_Gui_CProgress_Log(GWEN_GUI_CPROGRESS *cp, GWEN_LOGGER_LEVEL level, const char *text)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
void GWENHYWFAR_CB GWEN_Gui_CGui_HideBox(GWEN_GUI *gui, GWEN_UNUSED uint32_t id)
#define GWEN_ERROR_DEFAULT_VALUE
int GWEN_Gui_CGui__input(GWEN_UNUSED GWEN_GUI *gui, uint32_t flags, char *buffer, int minLen, int maxLen, uint32_t guiid)
GWENHYWFAR_API GWEN_GUI_PROGRESS_LOG_FN GWEN_Gui_SetProgressLogFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_LOG_FN f)
#define DBG_ERROR(dbg_logger, format, args...)
#define GWEN_GUI_INPUT_FLAGS_SHOW
int GWEN_Gui_CProgress_Advance(GWEN_GUI_CPROGRESS *cp, uint64_t progress)
GWENHYWFAR_API GWEN_GUI_PROGRESS_ADVANCE_FN GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_ADVANCE_FN f)
GWEN_GUI * GWEN_Gui_new(void)
#define GWEN_GUI_MSG_FLAGS_CONFIRM_B1
GWENHYWFAR_API GWEN_GUI_INPUTBOX_FN GWEN_Gui_SetInputBoxFn(GWEN_GUI *gui, GWEN_GUI_INPUTBOX_FN f)
#define DBG_INFO(dbg_logger, format, args...)
void GWEN_Gui_CProgress_SetTotal(GWEN_GUI_CPROGRESS *cp, uint64_t i)
GWENHYWFAR_API GWEN_GUI_HIDEBOX_FN GWEN_Gui_SetHideBoxFn(GWEN_GUI *gui, GWEN_GUI_HIDEBOX_FN f)
struct GWEN_GUI_CPROGRESS GWEN_GUI_CPROGRESS
#define GWEN_INHERIT(bt, t)
void GWEN_Gui_CProgress_free(GWEN_GUI_CPROGRESS *cp)
GWENHYWFAR_API GWEN_GUI_PROGRESS_END_FN GWEN_Gui_SetProgressEndFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_END_FN f)
#define GWEN_ERROR_USER_ABORTED
GWENHYWFAR_API int GWENHYWFAR_API void GWEN_Gui_GetRawText(const GWEN_GUI *gui, const char *text, GWEN_BUFFER *tbuf)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
GWEN_GUI * GWEN_Gui_CGui_new(void)
uint32_t GWEN_Gui_GetFlags(const GWEN_GUI *gui)
GWENHYWFAR_API GWEN_GUI_PROGRESS_SETTOTAL_FN GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_SETTOTAL_FN f)
GWENHYWFAR_API GWEN_GUI_MESSAGEBOX_FN GWEN_Gui_SetMessageBoxFn(GWEN_GUI *gui, GWEN_GUI_MESSAGEBOX_FN f)
uint32_t GWENHYWFAR_CB GWEN_Gui_CGui_ShowBox(GWEN_GUI *gui, GWEN_UNUSED uint32_t flags, const char *title, const char *text, GWEN_UNUSED uint32_t guiid)
const char * GWEN_Gui_GetCharSet(const GWEN_GUI *gui)
#define GWEN_INHERIT_GETDATA(bt, t, element)
int GWENHYWFAR_CB GWEN_Gui_CGui_MessageBox(GWEN_GUI *gui, uint32_t flags, const char *title, const char *text, const char *b1, const char *b2, const char *b3, GWEN_UNUSED uint32_t guiid)