Преглед изворни кода

Refactored, new files util.[ch], C89

master
Bert пре 14 година
родитељ
комит
8f4af658ae
8 измењених фајлова са 137 додато и 101 уклоњено
  1. +2
    -2
      Makefile
  2. +4
    -5
      image.c
  3. +22
    -38
      main.c
  4. +1
    -1
      options.c
  5. +0
    -49
      sxiv.h
  6. +68
    -0
      util.c
  7. +34
    -0
      util.h
  8. +6
    -6
      window.c

+ 2
- 2
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




+ 4
- 5
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;
} }




+ 22
- 38
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*) = {
[KeyPress] = on_keypress,
[ButtonPress] = on_buttonpress,
[ButtonRelease] = on_buttonrelease,
[MotionNotify] = on_motionnotify,
[ConfigureNotify] = on_configurenotify
};
static void (*handler[LASTEvent])(XEvent*);


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;
}

+ 1
- 1
options.c Прегледај датотеку

@@ -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;


+ 0
- 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
- 0
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);
}

+ 34
- 0
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 */

+ 6
- 6
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…
Откажи
Сачувај