summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--image.c9
-rw-r--r--main.c60
-rw-r--r--options.c2
-rw-r--r--sxiv.h49
-rw-r--r--util.c68
-rw-r--r--util.h34
-rw-r--r--window.c12
8 files changed, 137 insertions, 101 deletions
diff --git a/Makefile b/Makefile
index 5ef4755..016224b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,10 +1,10 @@
all: sxiv
-VERSION=git-20110202
+VERSION=git-20110203
CC?=gcc
PREFIX?=/usr/local
-CFLAGS+= -std=c99 -Wall -pedantic -DVERSION=\"$(VERSION)\"
+CFLAGS+= -Wall -pedantic -DVERSION=\"$(VERSION)\"
LDFLAGS+=
LIBS+= -lX11 -lImlib2
diff --git a/image.c b/image.c
index d1a1e35..13df76a 100644
--- a/image.c
+++ b/image.c
@@ -16,13 +16,12 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdlib.h>
-#include <stdio.h>
-
#include <Imlib2.h>
-#include "sxiv.h"
+#include "config.h"
#include "image.h"
+#include "options.h"
+#include "util.h"
int zl_cnt;
float zoom_min;
@@ -59,7 +58,7 @@ int _imlib_load_image(const char *filename) {
return 0;
if (!(im = imlib_load_image(filename))) {
- WARN("could not open image: %s", filename);
+ warn("could not open image: %s", filename);
return 0;
}
diff --git a/main.c b/main.c
index bde737d..9362989 100644
--- a/main.c
+++ b/main.c
@@ -27,13 +27,11 @@
#include <X11/Xutil.h>
#include <X11/keysym.h>
-#include "sxiv.h"
#include "image.h"
+#include "options.h"
+#include "util.h"
#include "window.h"
-void* s_malloc(size_t);
-void* s_realloc(void*, size_t);
-
void on_keypress(XEvent*);
void on_buttonpress(XEvent*);
void on_buttonrelease(XEvent*);
@@ -44,13 +42,7 @@ void update_title();
void check_append(const char*);
void read_dir_rec(const char*);
-static void (*handler[LASTEvent])(XEvent*) = {
- [KeyPress] = on_keypress,
- [ButtonPress] = on_buttonpress,
- [ButtonRelease] = on_buttonrelease,
- [MotionNotify] = on_motionnotify,
- [ConfigureNotify] = on_configurenotify
-};
+static void (*handler[LASTEvent])(XEvent*);
img_t img;
win_t win;
@@ -68,12 +60,27 @@ int moy;
#define TITLE_LEN 256
char win_title[TITLE_LEN];
+void cleanup() {
+ static int in = 0;
+
+ if (!in++) {
+ img_free(&img);
+ win_close(&win);
+ }
+}
+
void run() {
int xfd;
fd_set fds;
struct timeval t;
XEvent ev;
+ handler[KeyPress] = on_keypress;
+ handler[ButtonPress] = on_buttonpress;
+ handler[ButtonRelease] = on_buttonrelease;
+ handler[MotionNotify] = on_motionnotify;
+ handler[ConfigureNotify] = on_configurenotify;
+
timeout = 0;
while (1) {
@@ -118,12 +125,12 @@ int main(int argc, char **argv) {
for (i = 0; i < options->filecnt; ++i) {
filename = options->filenames[i];
if (stat(filename, &fstats)) {
- WARN("could not stat file: %s", filename);
+ warn("could not stat file: %s", filename);
} else if (S_ISDIR(fstats.st_mode)) {
if (options->recursive)
read_dir_rec(filename);
else
- WARN("ignoring directory: %s", filename);
+ warn("ignoring directory: %s", filename);
} else {
check_append(filename);
}
@@ -151,15 +158,6 @@ int main(int argc, char **argv) {
return 0;
}
-void cleanup() {
- static int in = 0;
-
- if (!in++) {
- img_free(&img);
- win_close(&win);
- }
-}
-
void on_keypress(XEvent *ev) {
char key;
KeySym ksym;
@@ -417,7 +415,7 @@ void read_dir_rec(const char *dirname) {
while (diridx > 0) {
dirname = dirnames[--diridx];
if (!(dir = opendir(dirname)))
- DIE("could not open directory: %s", dirname);
+ die("could not open directory: %s", dirname);
while ((dentry = readdir(dir))) {
if (!strcmp(dentry->d_name, ".") || !strcmp(dentry->d_name, ".."))
continue;
@@ -425,7 +423,7 @@ void read_dir_rec(const char *dirname) {
filename = (char*) s_malloc(len * sizeof(char));
snprintf(filename, len, "%s/%s", dirname, dentry->d_name);
if (stat(filename, &fstats)) {
- WARN("could not stat file: %s", filename);
+ warn("could not stat file: %s", filename);
free(filename);
} else if (S_ISDIR(fstats.st_mode)) {
if (diridx == dircnt) {
@@ -447,17 +445,3 @@ void read_dir_rec(const char *dirname) {
free(dirnames);
}
-
-void* s_malloc(size_t size) {
- void *ptr;
-
- if (!(ptr = malloc(size)))
- DIE("could not allocate memory");
- return ptr;
-}
-
-void* s_realloc(void *ptr, size_t size) {
- if (!(ptr = realloc(ptr, size)))
- DIE("could not allocate memory");
- return ptr;
-}
diff --git a/options.c b/options.c
index 74daf5b..3e519f2 100644
--- a/options.c
+++ b/options.c
@@ -22,7 +22,7 @@
#include <stdio.h>
#include <unistd.h>
-#include "sxiv.h"
+#include "config.h"
#include "options.h"
options_t _options;
diff --git a/sxiv.h b/sxiv.h
deleted file mode 100644
index b859a38..0000000
--- a/sxiv.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* sxiv: sxiv.h
- * Copyright (c) 2011 Bert Muennich <muennich at informatik.hu-berlin.de>
- *
- * This program 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; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-
-#ifndef SXIV_H
-#define SXIV_H
-
-#include "config.h"
-#include "options.h"
-
-#define ABS(a) ((a) < 0 ? (-(a)) : (a))
-#define MIN(a,b) ((a) < (b) ? (a) : (b))
-#define MAX(a,b) ((a) > (b) ? (a) : (b))
-
-#define WARN(...) \
- do { \
- if (!options->quiet) { \
- fprintf(stderr, "sxiv: %s:%d: warning: ", __FILE__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
- fprintf(stderr, "\n"); \
- } \
- } while (0)
-
-#define DIE(...) \
- do { \
- fprintf(stderr, "sxiv: %s:%d: error: ", __FILE__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
- fprintf(stderr, "\n"); \
- cleanup(); \
- exit(1); \
- } while (0)
-
-void cleanup();
-
-#endif /* SXIV_H */
diff --git a/util.c b/util.c
new file mode 100644
index 0000000..472faf2
--- /dev/null
+++ b/util.c
@@ -0,0 +1,68 @@
+/* sxiv: util.c
+ * Copyright (c) 2011 Bert Muennich <muennich at informatik.hu-berlin.de>
+ *
+ * This program 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "options.h"
+#include "util.h"
+
+void cleanup();
+
+void* s_malloc(size_t size) {
+ void *ptr;
+
+ if (!(ptr = malloc(size)))
+ die("could not allocate memory");
+ return ptr;
+}
+
+void* s_realloc(void *ptr, size_t size) {
+ if (!(ptr = realloc(ptr, size)))
+ die("could not allocate memory");
+ return ptr;
+}
+
+void warn(const char* fmt, ...) {
+ va_list args;
+
+ if (!fmt || options->quiet)
+ return;
+
+ va_start(args, fmt);
+ fprintf(stderr, "sxiv: warning: ");
+ fprintf(stderr, fmt, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+}
+
+void die(const char* fmt, ...) {
+ va_list args;
+
+ if (!fmt)
+ return;
+
+ va_start(args, fmt);
+ fprintf(stderr, "sxiv: error: ");
+ fprintf(stderr, fmt, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+
+ cleanup();
+ exit(1);
+}
diff --git a/util.h b/util.h
new file mode 100644
index 0000000..4f05dea
--- /dev/null
+++ b/util.h
@@ -0,0 +1,34 @@
+/* sxiv: util.h
+ * Copyright (c) 2011 Bert Muennich <muennich at informatik.hu-berlin.de>
+ *
+ * This program 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef UTIL_H
+#define UTIL_H
+
+#include <stdarg.h>
+
+#define ABS(a) ((a) < 0 ? (-(a)) : (a))
+#define MIN(a,b) ((a) < (b) ? (a) : (b))
+#define MAX(a,b) ((a) > (b) ? (a) : (b))
+
+void* s_malloc(size_t);
+void* s_realloc(void*, size_t);
+
+void warn(const char*, ...);
+void die(const char*, ...);
+
+#endif /* UTIL_H */
diff --git a/window.c b/window.c
index a7a1121..aa2f699 100644
--- a/window.c
+++ b/window.c
@@ -16,14 +16,14 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include <stdlib.h>
-#include <stdio.h>
#include <string.h>
#include <X11/Xutil.h>
#include <X11/cursorfont.h>
-#include "sxiv.h"
+#include "config.h"
+#include "options.h"
+#include "util.h"
#include "window.h"
static Cursor arrow;
@@ -43,7 +43,7 @@ void win_open(win_t *win) {
e = &win->env;
if (!(e->dpy = XOpenDisplay(NULL)))
- DIE("could not open display");
+ die("could not open display");
e->scr = DefaultScreen(e->dpy);
e->scrw = DisplayWidth(e->dpy, e->scr);
@@ -54,7 +54,7 @@ void win_open(win_t *win) {
if (!XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR,
&bgcol, &bgcol))
- DIE("could not allocate color: %s", BG_COLOR);
+ die("could not allocate color: %s", BG_COLOR);
win->bgcol = bgcol.pixel;
win->pm = 0;
@@ -88,7 +88,7 @@ void win_open(win_t *win) {
win->x, win->y, win->w, win->h, 0,
e->depth, InputOutput, e->vis, 0, None);
if (win->xwin == None)
- DIE("could not create window");
+ die("could not create window");
XSelectInput(e->dpy, win->xwin, StructureNotifyMask | KeyPressMask |
ButtonPressMask | ButtonReleaseMask | Button2MotionMask);