#ifndef XMAIN_H
#define XMAIN_H
#include <math.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/Xdbe.h>
#define LOG(stream, prefix, suffix, result, ...) \
( fputs(prefix, stream), fprintf(stream, __VA_ARGS__), fputs(suffix, stream), fflush(stream), result )
#ifdef NDEBUG
#define LOGDBG(...) dummy(1)
#else
#define LOGDBG(...) LOG(stdout, "DEBUG: ", "\n", dummy(1), __VA_ARGS__)
#endif
#define LOGINF(...) LOG(stdout, "INFO: ", "\n", dummy(1), __VA_ARGS__)
#define LOGWRN(...) LOG(stderr, "WARNING: ", "\n", dummy(1), __VA_ARGS__)
#define LOGERR(...) LOG(stderr, "ERROR: ", "\n", dummy(0), __VA_ARGS__)
#define DIE(...) LOG(stderr, "ERROR: ", "\n", exit(1), __VA_ARGS__)
static inline int dummy(int i) { return i; }
extern Display *dpy;
extern int screen;
extern Window win;
extern Drawable drw;
extern Visual *visual;
extern GC gc;
extern int winW, winH;
void stop(int code);
int init();
void deinit();
void resize();
void mouseDown(int x, int y);
void mouseUp();
void draw();
#endif