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>
84 cgui->progressList=GWEN_Gui_CProgress_List_new();
107 cgui=(GWEN_GUI_CGUI *)p;
108 GWEN_Gui_CProgress_List_free(cgui->progressList);
118 struct termios OldAttr, NewAttr;
121#if HAVE_DECL_SIGPROCMASK
126#if HAVE_DECL_SIGPROCMASK
128 sigaddset(&snew, SIGINT);
129 sigaddset(&snew, SIGSTOP);
130 sigprocmask(SIG_BLOCK, &snew, &sold);
133 if (0 == tcgetattr(fileno(stdin), &OldAttr)) {
135 NewAttr.c_lflag &= ~ICANON;
136 NewAttr.c_lflag &= ~ECHO;
137 tcsetattr(fileno(stdin), TCSAFLUSH, &NewAttr);
146 chr==GWEN_GUI_CGUI_CHAR_ABORT ||
147 chr==GWEN_GUI_CGUI_CHAR_ENTER ||
158 tcsetattr(fileno(stdin), TCSADRAIN, &OldAttr);
161#if HAVE_DECL_SIGPROCMASK
162 sigprocmask(SIG_BLOCK, &sold, 0);
177 const char BACKSPACE=8;
178 const char RETURN=13;
188 HANDLE hIn=GetStdHandle(STD_INPUT_HANDLE);
189 if (hIn == INVALID_HANDLE_VALUE) {
195 if (!GetConsoleMode(hIn, &con_mode)) {
201 if (!SetConsoleMode(hIn, con_mode & ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_OUTPUT))) {
207 while(ReadConsoleA(hIn, &ch, 1, &dwRead,
NULL) && ch !=RETURN) {
217 }
else if (ch==ABORT) {
221 }
else if (p-buffer<maxLen) {
231 if (!SetConsoleMode(hIn, con_mode)) {
246 struct termios OldInAttr, NewInAttr;
247 struct termios OldOutAttr, NewOutAttr;
248 int AttrInChanged = 0;
249 int AttrOutChanged = 0;
255#if HAVE_DECL_SIGPROCMASK
260 char inbuf[INBUFSIZE];
266 const char *wantedCharSet;
271 wantedCharSet=
"UTF-8";
272 ic=iconv_open(
"UTF-8", wantedCharSet);
273 if (ic==(iconv_t)-1) {
275 wantedCharSet, strerror(errno));
285#if HAVE_DECL_SIGPROCMASK
287 sigaddset(&snew, SIGINT);
288 sigaddset(&snew, SIGSTOP);
289 sigprocmask(SIG_BLOCK, &snew, &sold);
293 if (0 == tcgetattr(fileno(stdin), &OldInAttr)) {
294 NewInAttr = OldInAttr;
295 NewInAttr.c_lflag &= ~ECHO;
296 NewInAttr.c_lflag &= ~ICANON;
297 tcsetattr(fileno(stdin), TCSAFLUSH, &NewInAttr);
300 if (0 == tcgetattr(fileno(stdout), &OldOutAttr)) {
301 NewOutAttr = OldOutAttr;
302 NewOutAttr.c_lflag &= ~ICANON;
303 tcsetattr(fileno(stdout), TCSAFLUSH, &NewOutAttr);
322 done=iconv(ic, &pInbuf, &inLeft, &pOutbuf, &outLeft);
324 while (done==(
size_t)-1 && errno==EINVAL &&
325 nextchr-inbuf<INBUFSIZE);
332 else if (done==(
size_t)-1) {
333 if (errno==E2BIG || errno==EILSEQ) {
353 if (chr==GWEN_GUI_CGUI_CHAR_DELETE) {
358 while ((buffer[pos]&0xC0)==0x80 && pos);
363 else if (chr==GWEN_GUI_CGUI_CHAR_ENTER) {
364 if (minLen && pos<minLen) {
370 I18N(
"Your input was empty.\n"
371 "Do you want to use the default?"),
374 I18N(
"Abort"), guiid);
397 else if (chr==GWEN_GUI_CGUI_CHAR_ABORT) {
402 else if (pOutbuf-buffer<maxLen) {
417 if ((chr&0xC0)!=0x80)
433 tcsetattr(fileno(stdout), TCSADRAIN, &OldOutAttr);
435 tcsetattr(fileno(stdin), TCSADRAIN, &OldInAttr);
438#if HAVE_DECL_SIGPROCMASK
439 sigprocmask(SIG_BLOCK, &sold, 0);
469 "Got the following dangerous message:\n%s\n",
476 "Auto-answering the following message with %d:\n%s",
512 else if (c==
'2' && b2) {
516 else if (c==
'3' && b3) {
561 lbuffer=(
char *)malloc(maxLen);
580 if (strcmp(lbuffer, buffer)!=0) {
582 "ERROR: Entries do not match, please try (again or abort)\n");
629 return ++(cgui->nextBoxId);
648 uint32_t progressFlags,
662 ++(cgui->nextProgressId),
667 GWEN_Gui_CProgress_List_Insert(cp, cgui->progressList);
682 cp=GWEN_Gui_CProgress_List_First(cgui->progressList);
688 cp=GWEN_Gui_CProgress_List_Next(cp);
781 GWEN_Gui_CProgress_List_Del(cp);
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
GWEN_GUI * GWEN_Gui_CGui_new(void)
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressLog(GWEN_GUI *gui, uint32_t id, GWEN_LOGGER_LEVEL level, const char *text)
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)
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)
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressEnd(GWEN_GUI *gui, uint32_t id)
int GWEN_Gui_CGui__input(GWEN_UNUSED GWEN_GUI *gui, uint32_t flags, char *buffer, int minLen, int maxLen, uint32_t guiid)
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)
void GWENHYWFAR_CB GWEN_Gui_CGui_HideBox(GWEN_GUI *gui, GWEN_UNUSED uint32_t id)
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressSetTotal(GWEN_GUI *gui, uint32_t id, uint64_t total)
int GWENHYWFAR_CB GWEN_Gui_CGui_ProgressAdvance(GWEN_GUI *gui, uint32_t id, uint64_t progress)
GWEN_GUI_CPROGRESS * GWEN_Gui_CGui__findProgress(GWEN_GUI *gui, uint32_t id)
char GWEN_Gui_CGui__readCharFromStdin(int waitFor)
void GWENHYWFAR_CB GWEN_Gui_CGui_FreeData(GWEN_UNUSED void *bp, void *p)
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)
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)
void GWEN_Gui_CProgress_free(GWEN_GUI_CPROGRESS *cp)
void GWEN_Gui_CProgress_SetTotal(GWEN_GUI_CPROGRESS *cp, uint64_t i)
int GWEN_Gui_CProgress_Advance(GWEN_GUI_CPROGRESS *cp, uint64_t progress)
uint32_t GWEN_Gui_CProgress_GetId(const GWEN_GUI_CPROGRESS *cp)
int GWEN_Gui_CProgress_End(GWEN_GUI_CPROGRESS *cp)
int GWEN_Gui_CProgress_Log(GWEN_GUI_CPROGRESS *cp, GWEN_LOGGER_LEVEL level, const char *text)
struct GWEN_GUI_CPROGRESS GWEN_GUI_CPROGRESS
#define DBG_INFO(dbg_logger, format,...)
#define DBG_ERROR(dbg_logger, format,...)
#define DBG_DEBUG(dbg_logger, format,...)
#define GWEN_ERROR_INVALID
#define GWEN_ERROR_DEFAULT_VALUE
#define GWEN_ERROR_GENERIC
#define GWEN_ERROR_USER_ABORTED
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
const char * GWEN_Gui_GetCharSet(const GWEN_GUI *gui)
GWEN_GUI * GWEN_Gui_new(void)
uint32_t GWEN_Gui_GetFlags(const GWEN_GUI *gui)
#define GWEN_GUI_MSG_FLAGS_TYPE_INFO
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)
#define GWEN_GUI_INPUT_FLAGS_NUMERIC
#define GWEN_GUI_INPUT_FLAGS_SHOW
#define GWEN_GUI_MSG_FLAGS_CONFIRM_B1
#define GWEN_GUI_FLAGS_NONINTERACTIVE
#define GWEN_GUI_MSG_FLAGS_SEVERITY_DANGEROUS
#define GWEN_GUI_INPUT_FLAGS_ALLOW_DEFAULT
#define GWEN_GUI_FLAGS_PERMPASSWORDS
#define GWEN_GUI_MSG_FLAGS_CONFIRM_BUTTON(fl)
#define GWEN_GUI_INPUT_FLAGS_TAN
#define GWEN_GUI_INPUT_FLAGS_CONFIRM
#define GWEN_GUI_MSG_FLAGS_SEVERITY_IS_DANGEROUS(fl)
GWENHYWFAR_API int GWENHYWFAR_API void GWEN_Gui_GetRawText(const GWEN_GUI *gui, const char *text, GWEN_BUFFER *tbuf)
GWENHYWFAR_API GWEN_GUI_SHOWBOX_FN GWEN_Gui_SetShowBoxFn(GWEN_GUI *gui, GWEN_GUI_SHOWBOX_FN f)
GWENHYWFAR_API GWEN_GUI_PROGRESS_ADVANCE_FN GWEN_Gui_SetProgressAdvanceFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_ADVANCE_FN f)
GWENHYWFAR_API GWEN_GUI_HIDEBOX_FN GWEN_Gui_SetHideBoxFn(GWEN_GUI *gui, GWEN_GUI_HIDEBOX_FN f)
GWENHYWFAR_API GWEN_GUI_INPUTBOX_FN GWEN_Gui_SetInputBoxFn(GWEN_GUI *gui, GWEN_GUI_INPUTBOX_FN f)
GWENHYWFAR_API GWEN_GUI_MESSAGEBOX_FN GWEN_Gui_SetMessageBoxFn(GWEN_GUI *gui, GWEN_GUI_MESSAGEBOX_FN f)
GWENHYWFAR_API GWEN_GUI_PROGRESS_END_FN GWEN_Gui_SetProgressEndFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_END_FN f)
GWENHYWFAR_API GWEN_GUI_PROGRESS_START_FN GWEN_Gui_SetProgressStartFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_START_FN f)
GWENHYWFAR_API GWEN_GUI_PROGRESS_LOG_FN GWEN_Gui_SetProgressLogFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_LOG_FN f)
GWENHYWFAR_API int GWEN_Gui_StdPrintf(const GWEN_GUI *gui, FILE *stream, const char *fmt,...) GWEN_FORMAT(printf
GWENHYWFAR_API GWEN_GUI_PROGRESS_SETTOTAL_FN GWEN_Gui_SetProgressSetTotalFn(GWEN_GUI *gui, GWEN_GUI_PROGRESS_SETTOTAL_FN f)
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
#define GWEN_INHERIT(bt, t)
#define GWEN_INHERIT_GETDATA(bt, t, element)
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)