Refactored, new files util.[ch], C89
This commit is contained in:
		
							parent
							
								
									f5c125b3ee
								
							
						
					
					
						commit
						8f4af658ae
					
				
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,10 +1,10 @@ | |||||||
| all: sxiv | all: sxiv | ||||||
| 
 | 
 | ||||||
| VERSION=git-20110202 | VERSION=git-20110203 | ||||||
| 
 | 
 | ||||||
| CC?=gcc | CC?=gcc | ||||||
| PREFIX?=/usr/local | PREFIX?=/usr/local | ||||||
| CFLAGS+= -std=c99 -Wall -pedantic -DVERSION=\"$(VERSION)\" | CFLAGS+= -Wall -pedantic -DVERSION=\"$(VERSION)\" | ||||||
| LDFLAGS+=  | LDFLAGS+=  | ||||||
| LIBS+= -lX11 -lImlib2 | LIBS+= -lX11 -lImlib2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										9
									
								
								image.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								image.c
									
									
									
									
									
								
							| @ -16,13 +16,12 @@ | |||||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <stdlib.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| 
 |  | ||||||
| #include <Imlib2.h> | #include <Imlib2.h> | ||||||
| 
 | 
 | ||||||
| #include "sxiv.h" | #include "config.h" | ||||||
| #include "image.h" | #include "image.h" | ||||||
|  | #include "options.h" | ||||||
|  | #include "util.h" | ||||||
| 
 | 
 | ||||||
| int zl_cnt; | int zl_cnt; | ||||||
| float zoom_min; | float zoom_min; | ||||||
| @ -59,7 +58,7 @@ int _imlib_load_image(const char *filename) { | |||||||
| 		return 0; | 		return 0; | ||||||
| 
 | 
 | ||||||
| 	if (!(im = imlib_load_image(filename))) { | 	if (!(im = imlib_load_image(filename))) { | ||||||
| 		WARN("could not open image: %s", filename); | 		warn("could not open image: %s", filename); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										60
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								main.c
									
									
									
									
									
								
							| @ -27,13 +27,11 @@ | |||||||
| #include <X11/Xutil.h> | #include <X11/Xutil.h> | ||||||
| #include <X11/keysym.h> | #include <X11/keysym.h> | ||||||
| 
 | 
 | ||||||
| #include "sxiv.h" |  | ||||||
| #include "image.h" | #include "image.h" | ||||||
|  | #include "options.h" | ||||||
|  | #include "util.h" | ||||||
| #include "window.h" | #include "window.h" | ||||||
| 
 | 
 | ||||||
| void* s_malloc(size_t); |  | ||||||
| void* s_realloc(void*, size_t); |  | ||||||
| 
 |  | ||||||
| void on_keypress(XEvent*); | void on_keypress(XEvent*); | ||||||
| void on_buttonpress(XEvent*); | void on_buttonpress(XEvent*); | ||||||
| void on_buttonrelease(XEvent*); | void on_buttonrelease(XEvent*); | ||||||
| @ -44,13 +42,7 @@ void update_title(); | |||||||
| void check_append(const char*); | void check_append(const char*); | ||||||
| void read_dir_rec(const char*); | void read_dir_rec(const char*); | ||||||
| 
 | 
 | ||||||
| static void (*handler[LASTEvent])(XEvent*) = { | static void (*handler[LASTEvent])(XEvent*); | ||||||
| 	[KeyPress] = on_keypress, |  | ||||||
| 	[ButtonPress] = on_buttonpress, |  | ||||||
| 	[ButtonRelease] = on_buttonrelease, |  | ||||||
| 	[MotionNotify] = on_motionnotify, |  | ||||||
| 	[ConfigureNotify] = on_configurenotify |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| img_t img; | img_t img; | ||||||
| win_t win; | win_t win; | ||||||
| @ -68,12 +60,27 @@ int moy; | |||||||
| #define TITLE_LEN 256 | #define TITLE_LEN 256 | ||||||
| char win_title[TITLE_LEN]; | char win_title[TITLE_LEN]; | ||||||
| 
 | 
 | ||||||
|  | void cleanup() { | ||||||
|  | 	static int in = 0; | ||||||
|  | 
 | ||||||
|  | 	if (!in++) { | ||||||
|  | 		img_free(&img); | ||||||
|  | 		win_close(&win); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void run() { | void run() { | ||||||
| 	int xfd; | 	int xfd; | ||||||
| 	fd_set fds; | 	fd_set fds; | ||||||
| 	struct timeval t; | 	struct timeval t; | ||||||
| 	XEvent ev; | 	XEvent ev; | ||||||
| 
 | 
 | ||||||
|  | 	handler[KeyPress] = on_keypress; | ||||||
|  | 	handler[ButtonPress] = on_buttonpress; | ||||||
|  | 	handler[ButtonRelease] = on_buttonrelease; | ||||||
|  | 	handler[MotionNotify] = on_motionnotify; | ||||||
|  | 	handler[ConfigureNotify] = on_configurenotify; | ||||||
|  | 
 | ||||||
| 	timeout = 0; | 	timeout = 0; | ||||||
| 
 | 
 | ||||||
| 	while (1) { | 	while (1) { | ||||||
| @ -118,12 +125,12 @@ int main(int argc, char **argv) { | |||||||
| 	for (i = 0; i < options->filecnt; ++i) { | 	for (i = 0; i < options->filecnt; ++i) { | ||||||
| 		filename = options->filenames[i]; | 		filename = options->filenames[i]; | ||||||
| 		if (stat(filename, &fstats)) { | 		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)) { | 		} else if (S_ISDIR(fstats.st_mode)) { | ||||||
| 			if (options->recursive) | 			if (options->recursive) | ||||||
| 				read_dir_rec(filename); | 				read_dir_rec(filename); | ||||||
| 			else | 			else | ||||||
| 				WARN("ignoring directory: %s", filename); | 				warn("ignoring directory: %s", filename); | ||||||
| 		} else { | 		} else { | ||||||
| 			check_append(filename); | 			check_append(filename); | ||||||
| 		} | 		} | ||||||
| @ -151,15 +158,6 @@ int main(int argc, char **argv) { | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void cleanup() { |  | ||||||
| 	static int in = 0; |  | ||||||
| 
 |  | ||||||
| 	if (!in++) { |  | ||||||
| 		img_free(&img); |  | ||||||
| 		win_close(&win); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void on_keypress(XEvent *ev) { | void on_keypress(XEvent *ev) { | ||||||
| 	char key; | 	char key; | ||||||
| 	KeySym ksym; | 	KeySym ksym; | ||||||
| @ -417,7 +415,7 @@ void read_dir_rec(const char *dirname) { | |||||||
| 	while (diridx > 0) { | 	while (diridx > 0) { | ||||||
| 		dirname = dirnames[--diridx]; | 		dirname = dirnames[--diridx]; | ||||||
| 		if (!(dir = opendir(dirname))) | 		if (!(dir = opendir(dirname))) | ||||||
| 			DIE("could not open directory: %s", dirname); | 			die("could not open directory: %s", dirname); | ||||||
| 		while ((dentry = readdir(dir))) { | 		while ((dentry = readdir(dir))) { | ||||||
| 			if (!strcmp(dentry->d_name, ".") || !strcmp(dentry->d_name, "..")) | 			if (!strcmp(dentry->d_name, ".") || !strcmp(dentry->d_name, "..")) | ||||||
| 				continue; | 				continue; | ||||||
| @ -425,7 +423,7 @@ void read_dir_rec(const char *dirname) { | |||||||
| 			filename = (char*) s_malloc(len * sizeof(char)); | 			filename = (char*) s_malloc(len * sizeof(char)); | ||||||
| 			snprintf(filename, len, "%s/%s", dirname, dentry->d_name); | 			snprintf(filename, len, "%s/%s", dirname, dentry->d_name); | ||||||
| 			if (stat(filename, &fstats)) { | 			if (stat(filename, &fstats)) { | ||||||
| 				WARN("could not stat file: %s", filename); | 				warn("could not stat file: %s", filename); | ||||||
| 				free(filename); | 				free(filename); | ||||||
| 			} else if (S_ISDIR(fstats.st_mode)) { | 			} else if (S_ISDIR(fstats.st_mode)) { | ||||||
| 				if (diridx == dircnt) { | 				if (diridx == dircnt) { | ||||||
| @ -447,17 +445,3 @@ void read_dir_rec(const char *dirname) { | |||||||
| 
 | 
 | ||||||
| 	free(dirnames); | 	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; |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| #include "sxiv.h" | #include "config.h" | ||||||
| #include "options.h" | #include "options.h" | ||||||
| 
 | 
 | ||||||
| options_t _options; | options_t _options; | ||||||
|  | |||||||
							
								
								
									
										49
									
								
								sxiv.h
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								sxiv.h
									
									
									
									
									
								
							| @ -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 */ |  | ||||||
							
								
								
									
										68
									
								
								util.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								util.c
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								util.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								util.h
									
									
									
									
									
										Normal file
									
								
							| @ -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 */ | ||||||
							
								
								
									
										12
									
								
								window.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								window.c
									
									
									
									
									
								
							| @ -16,14 +16,14 @@ | |||||||
|  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <stdlib.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <string.h> | #include <string.h> | ||||||
| 
 | 
 | ||||||
| #include <X11/Xutil.h> | #include <X11/Xutil.h> | ||||||
| #include <X11/cursorfont.h> | #include <X11/cursorfont.h> | ||||||
| 
 | 
 | ||||||
| #include "sxiv.h" | #include "config.h" | ||||||
|  | #include "options.h" | ||||||
|  | #include "util.h" | ||||||
| #include "window.h" | #include "window.h" | ||||||
| 
 | 
 | ||||||
| static Cursor arrow; | static Cursor arrow; | ||||||
| @ -43,7 +43,7 @@ void win_open(win_t *win) { | |||||||
| 
 | 
 | ||||||
| 	e = &win->env; | 	e = &win->env; | ||||||
| 	if (!(e->dpy = XOpenDisplay(NULL))) | 	if (!(e->dpy = XOpenDisplay(NULL))) | ||||||
| 		DIE("could not open display"); | 		die("could not open display"); | ||||||
| 
 | 
 | ||||||
| 	e->scr = DefaultScreen(e->dpy); | 	e->scr = DefaultScreen(e->dpy); | ||||||
| 	e->scrw = DisplayWidth(e->dpy, e->scr); | 	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, | 	if (!XAllocNamedColor(e->dpy, DefaultColormap(e->dpy, e->scr), BG_COLOR, | ||||||
| 		                    &bgcol, &bgcol)) | 		                    &bgcol, &bgcol)) | ||||||
| 		DIE("could not allocate color: %s", BG_COLOR); | 		die("could not allocate color: %s", BG_COLOR); | ||||||
| 
 | 
 | ||||||
| 	win->bgcol = bgcol.pixel; | 	win->bgcol = bgcol.pixel; | ||||||
| 	win->pm = 0; | 	win->pm = 0; | ||||||
| @ -88,7 +88,7 @@ void win_open(win_t *win) { | |||||||
| 	                          win->x, win->y, win->w, win->h, 0, | 	                          win->x, win->y, win->w, win->h, 0, | ||||||
| 	                          e->depth, InputOutput, e->vis, 0, None); | 	                          e->depth, InputOutput, e->vis, 0, None); | ||||||
| 	if (win->xwin == None) | 	if (win->xwin == None) | ||||||
| 		DIE("could not create window"); | 		die("could not create window"); | ||||||
| 	 | 	 | ||||||
| 	XSelectInput(e->dpy, win->xwin, StructureNotifyMask | KeyPressMask | | 	XSelectInput(e->dpy, win->xwin, StructureNotifyMask | KeyPressMask | | ||||||
| 	             ButtonPressMask | ButtonReleaseMask | Button2MotionMask); | 	             ButtonPressMask | ButtonReleaseMask | Button2MotionMask); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Bert
						Bert