From 7fb77f85f194af97d79ee428474fa75043764c09 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Wed, 11 Jul 2018 19:40:12 +0200 Subject: [PATCH] Add GFX2_Log() function --- src/Makefile | 3 ++- src/fileformats.c | 1 + src/gfx2log.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++ src/gfx2log.h | 39 +++++++++++++++++++++++++++ src/input.c | 14 +++++----- src/loadsave.c | 3 ++- src/main.c | 9 ++++++- src/x11screen.c | 11 ++++---- 8 files changed, 133 insertions(+), 14 deletions(-) create mode 100644 src/gfx2log.c create mode 100644 src/gfx2log.h diff --git a/src/Makefile b/src/Makefile index 200e2e73..3902905e 100644 --- a/src/Makefile +++ b/src/Makefile @@ -640,7 +640,8 @@ OBJS = main.o init.o graph.o $(APIOBJ) misc.o special.o \ transform.o pversion.o factory.o $(PLATFORMOBJ) \ fileformats.o miscfileformats.o libraw2crtc.o \ brush_ops.o buttons_effects.o layers.o \ - oldies.o tiles.o colorred.o unicode.o gfx2surface.o + oldies.o tiles.o colorred.o unicode.o gfx2surface.o \ + gfx2log.o ifndef NORECOIL OBJS += loadrecoil.o recoil.o endif diff --git a/src/fileformats.c b/src/fileformats.c index 704f349c..c3cabbad 100644 --- a/src/fileformats.c +++ b/src/fileformats.c @@ -79,6 +79,7 @@ #endif #endif +#include "gfx2log.h" #include "errors.h" #include "global.h" #include "loadsave.h" diff --git a/src/gfx2log.c b/src/gfx2log.c new file mode 100644 index 00000000..f2af27c7 --- /dev/null +++ b/src/gfx2log.c @@ -0,0 +1,67 @@ +/* vim:expandtab:ts=2 sw=2: +*/ +/* Grafx2 - The Ultimate 256-color bitmap paint program + + Copyright 2018 Thomas Bernard + Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) + + Grafx2 is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; version 2 + of the License. + + Grafx2 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grafx2; if not, see +*/ + +#if defined(USE_SDL2) +#include +#endif +#include +#include "gfx2log.h" + +GFX2_Log_priority_T GFX2_verbosity_level = GFX2_INFO; + +extern void GFX2_Log(GFX2_Log_priority_T priority, const char * fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + GFX2_LogV(priority, fmt, ap); + va_end(ap); +} + +extern void GFX2_LogV(GFX2_Log_priority_T priority, const char * fmt, va_list ap) +{ + if ((unsigned)GFX2_verbosity_level < (unsigned)priority) + return; +#if defined(USE_SDL2) + { + int sdl_priority; + switch(priority) + { + case GFX2_ERROR: + sdl_priority = SDL_LOG_PRIORITY_ERROR; + break; + case GFX2_WARNING: + sdl_priority = SDL_LOG_PRIORITY_WARN; + break; + case GFX2_INFO: + sdl_priority = SDL_LOG_PRIORITY_INFO; + break; + case GFX2_DEBUG: + sdl_priority = SDL_LOG_PRIORITY_DEBUG; + break; + default: + sdl_priority = SDL_LOG_PRIORITY_CRITICAL; // unknown + } + SDL_LogMessageV(SDL_LOG_CATEGORY_APPLICATION, sdl_priority, fmt, ap); + } +#endif + vfprintf((unsigned)priority >= GFX2_INFO ? stdout : stderr, fmt, ap); +} diff --git a/src/gfx2log.h b/src/gfx2log.h new file mode 100644 index 00000000..287b67ca --- /dev/null +++ b/src/gfx2log.h @@ -0,0 +1,39 @@ +/* vim:expandtab:ts=2 sw=2: +*/ +/* Grafx2 - The Ultimate 256-color bitmap paint program + + Copyright 2018 Thomas Bernard + Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud) + + Grafx2 is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; version 2 + of the License. + + Grafx2 is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Grafx2; if not, see +*/ +#ifndef GFX2LOG_H_DEFINED +#define GFX2LOG_H_DEFINED + +#include + +typedef enum { + GFX2_ERROR = 0, + GFX2_WARNING, + GFX2_INFO, + GFX2_DEBUG +} GFX2_Log_priority_T; + +extern GFX2_Log_priority_T GFX2_verbosity_level; + +extern void GFX2_Log(GFX2_Log_priority_T priority, const char * fmt, ...); + +extern void GFX2_LogV(GFX2_Log_priority_T priority, const char * fmt, va_list ap); + +#endif diff --git a/src/input.c b/src/input.c index 5740ea60..88df701d 100644 --- a/src/input.c +++ b/src/input.c @@ -40,6 +40,7 @@ #include #endif +#include "gfx2log.h" #include "global.h" #include "keyboard.h" #include "screen.h" @@ -1264,7 +1265,6 @@ int Get_input(int sleep_time) case KeyPress: { KeySym sym; - //printf("key code = %d state=0x%08x\n", event.xkey.keycode, event.xkey.state); // right/left window 40 Mod4Mask // left alt = 8 Mod1Mask // right alt = 80 Mod5Mask @@ -1279,7 +1279,8 @@ int Get_input(int sleep_time) mod |= MOD_META; //sym = XKeycodeToKeysym(X11_display, event.xkey.keycode, 0); sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, 0); - //printf("sym = %04lx %s\t\tmod=%04x\n", sym, XKeysymToString(sym), mod); + GFX2_Log(GFX2_DEBUG, "key code = %3d state=0x%08x sym = 0x%04lx %s\tmod=%04x\n", + event.xkey.keycode, event.xkey.state, sym, XKeysymToString(sym), mod); Key = mod | (sym & 0x0fff); //sym = XkbKeycodeToKeysym(X11_display, event.xkey.keycode, 0, event.xkey.state); if (((sym & 0xf000) != 0xf000) || IsKeypadKey(sym)) // test for standard key or KeyPad @@ -1364,7 +1365,7 @@ int Get_input(int sleep_time) user_feedback_required = Move_cursor_with_constraints(); break; case Expose: - printf("Expose (%d,%d) (%d,%d)\n", event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height); + GFX2_Log(GFX2_DEBUG, "Expose (%d,%d) (%d,%d)\n", event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height); Update_rect(event.xexpose.x, event.xexpose.y, event.xexpose.width, event.xexpose.height); break; @@ -1387,7 +1388,7 @@ int Get_input(int sleep_time) case ClientMessage: if (event.xclient.message_type == XInternAtom(X11_display,"WM_PROTOCOLS", False)) { - if (event.xclient.data.l[0] == XInternAtom(X11_display, "WM_DELETE_WINDOW", False)) + if ((Atom)event.xclient.data.l[0] == XInternAtom(X11_display, "WM_DELETE_WINDOW", False)) { Quit_is_required = 1; user_feedback_required = 1; @@ -1402,10 +1403,11 @@ int Get_input(int sleep_time) //int list = event.xclient.data.l[1] & 1; xdnd_version = event.xclient.data.l[1] >> 24; xdnd_source = event.xclient.data.l[0]; + GFX2_Log(GFX2_DEBUG, "XdndEnter version=%d source=%lu\n", xdnd_version, xdnd_source); } else if (event.xclient.message_type == XInternAtom(X11_display, "XdndLeave", False)) { - //printf("XdndLeave\n"); + GFX2_Log(GFX2_DEBUG, "XdndLeave\n"); } else if (event.xclient.message_type == XInternAtom(X11_display, "XdndPosition", False)) { @@ -1534,7 +1536,7 @@ int Get_input(int sleep_time) } break; default: - printf("event.type = %d\n", event.type); + GFX2_Log(GFX2_INFO, "X11 event.type = %d not handled\n", event.type); } } // If the cursor was moved since last update, diff --git a/src/loadsave.c b/src/loadsave.c index d361f869..6af11aaa 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -47,6 +47,7 @@ #include #endif +#include "gfx2log.h" #include "buttons.h" #include "const.h" #include "errors.h" @@ -624,7 +625,7 @@ void Load_image(T_IO_Context *context) if (File_error>0) { - fprintf(stderr,"Unable to load file %s (error %d)!\n",context->File_name, File_error); + GFX2_Log(GFX2_WARNING, "Unable to load file %s (error %d)! format:%s\n", context->File_name, File_error, format->Label); if (context->Type!=CONTEXT_SURFACE) Error(0); } diff --git a/src/main.c b/src/main.c index ccac8bf4..629aba7b 100644 --- a/src/main.c +++ b/src/main.c @@ -69,6 +69,7 @@ #endif #endif +#include "gfx2log.h" #include "const.h" #include "struct.h" #include "global.h" @@ -124,6 +125,7 @@ void Display_syntax(void) "Syntax: grafx2 [] [] []\n\n" " can be:\n" "\t-? -h -H -help for this help screen\n" + "\t-verbose to increase log verbosity\n" "\t-wide to emulate a video mode with wide pixels (2x1)\n" "\t-tall to emulate a video mode with tall pixels (1x2)\n" "\t-double to emulate a video mode with double pixels (2x2)\n" @@ -278,7 +280,8 @@ enum CMD_PARAMS CMDPARAM_RGB, CMDPARAM_GAMMA, CMDPARAM_SKIN, - CMDPARAM_SIZE + CMDPARAM_SIZE, + CMDPARAM_VERBOSE, }; struct { @@ -302,6 +305,7 @@ struct { {"gamma", CMDPARAM_GAMMA}, {"skin", CMDPARAM_SKIN}, {"size", CMDPARAM_SIZE}, + {"verbose", CMDPARAM_VERBOSE}, }; #define ARRAY_SIZE(x) (int)(sizeof(x) / sizeof(x[0])) @@ -493,6 +497,9 @@ int Analyze_command_line(int argc, char * argv[], char *main_filename, char *mai exit(0); } break; + case CMDPARAM_VERBOSE: + GFX2_verbosity_level++; + break; default: // Si ce n'est pas un paramètre, c'est le nom du fichier à ouvrir if (file_in_command_line > 1) diff --git a/src/x11screen.c b/src/x11screen.c index 9039fa86..533a5260 100644 --- a/src/x11screen.c +++ b/src/x11screen.c @@ -29,6 +29,7 @@ #include "screen.h" #include "gfx2surface.h" #include "loadsave.h" +#include "gfx2log.h" Display * X11_display = NULL; Window X11_window = 0; @@ -52,7 +53,7 @@ void GFX2_Set_mode(int *width, int *height, int fullscreen) X11_display = XOpenDisplay(NULL);// NULL is equivalent to getenv("DISPLAY") if (X11_display == NULL) { - fprintf(stderr, "X11: cannot open display\n"); + GFX2_Log(GFX2_ERROR, "X11: cannot open display\n"); exit(1); } s = DefaultScreen(X11_display); @@ -64,12 +65,12 @@ void GFX2_Set_mode(int *width, int *height, int fullscreen) int i; int count = 0; int * depths = XListDepths(X11_display, s, &count); - printf("DefaultDepth = %d, DisplayPlanes = %d\n", DefaultDepth(X11_display, s), DisplayPlanes(X11_display, s)); + GFX2_Log(GFX2_DEBUG, "DefaultDepth = %d, DisplayPlanes = %d\n", DefaultDepth(X11_display, s), DisplayPlanes(X11_display, s)); if (depths != NULL) { for (i = 0; i < count; i++) - printf(" %d", depths[i]); - printf("\n"); + GFX2_Log(GFX2_DEBUG, " %d", depths[i]); + GFX2_Log(GFX2_DEBUG, "\n"); XFree(depths); } } @@ -184,7 +185,7 @@ void GFX2_Set_mode(int *width, int *height, int fullscreen) 32, 0/**width * 4*/); if(X11_image == NULL) { - fprintf(stderr, "XCreateImage failed\n"); + GFX2_Log(GFX2_ERROR, "XCreateImage failed\n"); exit(1); } }