#include #include #include #include #include #include #include "perror.h" #include "windows.h" /* this makes no attempt to look nice */ static void vwindow(int left, int top, int width, int height, char * title, char * message, va_list args) { newtComponent b1, t, f; char * buf = NULL; int size = 0; int i = 0; do { size += 1000; if (buf) free(buf); buf = malloc(size); i = vsnprintf(buf, size, message, args); } while (i == size); newtOpenWindow(left, top, width, height, title); b1 = newtButton((width - 8) / 2, height - 4, "Ok"); t = newtTextbox(1, 1, width - 2, height - 5, NEWT_TEXTBOX_WRAP); newtTextboxSetText(t, buf); f = newtForm(NULL, NULL, 0); free(buf); newtFormAddComponents(f, t, b1, NULL); newtRunForm(f); newtFormDestroy(f); newtPopWindow(); } void winMessage(int left, int top, int width, int height, char * title, char * message, ...) { va_list args; va_start(args, message); vwindow(left, top, width, height, title, message, args); va_end(args); } void messageWindow(char * title, char * message, ...) { va_list args; va_start(args, message); vwindow(17, 4, 45, 15, title, message, args); va_end(args); } void errorWindow(char * str) { char * a; a = alloca(strlen(str) + 5); strcpy(a, str); strcat(a, ": %s"); messageWindow("Error", str, strerror(errno)); } void winStatus(int width, int height, char * title, char * text, ...) { newtComponent t, f; char * buf = NULL; int size = 0; int i = 0; va_list args; va_start(args, text); do { size += 1000; if (buf) free(buf); buf = malloc(size); i = vsnprintf(buf, size, text, args); } while (i == size); va_end(args); newtOpenWindow(40 - (width / 2), 11 - (height / 2), width, height, title); t = newtTextbox(1, 1, width - 2, height - 2, NEWT_TEXTBOX_WRAP); newtTextboxSetText(t, buf); f = newtForm(NULL, NULL, 0); free(buf); newtFormAddComponent(f, t); newtDrawForm(f); newtRefresh(); newtFormDestroy(f); }