X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=pctb%2Fcommon.h;fp=pctb%2Fcommon.h;h=0000000000000000000000000000000000000000;hb=c68fb80a6bbf7acbcac4b2cb2143f5fea745cd2b;hp=9d06fabf9a55c79b8a1878a649b8db03f6aaa083;hpb=b9cce976550d000f15e5a8f2b690740bdae1e468;p=ypp-sc-tools.web-live.git diff --git a/pctb/common.h b/pctb/common.h deleted file mode 100644 index 9d06fab..0000000 --- a/pctb/common.h +++ /dev/null @@ -1,181 +0,0 @@ -/* - * useful common stuff, mostly error handling and debugging - */ -/* - * This is part of ypp-sc-tools, a set of third-party tools for assisting - * players of Yohoho Puzzle Pirates. - * - * Copyright (C) 2009 Ian Jackson - * - * 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 3 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, see . - * - * Yohoho and Puzzle Pirates are probably trademarks of Three Rings and - * are used without permission. This program is not endorsed or - * sponsored by Three Rings. - */ - -#ifndef COMMON_H -#define COMMON_H - -#define _GNU_SOURCE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include -#include -#include -#include - -typedef struct { - int w,h; - char d[]; -} CanonImage; - - -/*----- debugging arrangements, rather contingent -----*/ - -typedef struct { - int x, y; -} Point; - -typedef struct { /* both inclusive */ - Point tl; - Point br; -} Rect; - -#define RECT_W(r) ((r).br.x - (r).tl.x + 1) -#define RECT_H(r) ((r).br.y - (r).tl.y + 1) - - - -#define DEBUG_FLAG_LIST \ - DF(findypp) \ - DF(pages) \ - DF(rect) \ - DF(pixmap) \ - DF(struct) \ - DF(ocr) \ - DF(rsync) \ - DF(structcolon) \ - DF(callout) - -enum { -#define DF(f) dbg__shift_##f, - DEBUG_FLAG_LIST -#undef DF -}; -enum { -#define DF(f) dbg_##f = 1 << dbg__shift_##f, - DEBUG_FLAG_LIST -#undef DF -}; - -unsigned debug_flags; - -#define DEBUGP(f) (!!(debug_flags & dbg_##f)) - -void debug_flush(void); -#define debug stderr - -const char *get_vardir(void); -const char *get_libdir(void); - -#define FMT(f,a) __attribute__((format(printf,f,a))) -#define SCANFMT(f,a) __attribute__((format(scanf,f,a))) -#define NORET __attribute__((noreturn)) - -#define DEFINE_VWRAPPERF(decls, funcf, otherattribs) \ - decls void funcf(const char *fmt, ...) FMT(1,2) otherattribs; \ - decls void funcf(const char *fmt, ...) { \ - va_list al; va_start(al,fmt); v##funcf(fmt,al); va_end(al); \ - } - -#define DEBUG_DEFINE_SOME_DEBUGF(fl,funcf) \ - static void v##funcf(const char *fmt, va_list al) { \ - if (DEBUGP(fl)) \ - vfprintf(debug,fmt,al); \ - } \ - DEFINE_VWRAPPERF(static, funcf, ) - -#define DEBUG_DEFINE_DEBUGF(fl) DEBUG_DEFINE_SOME_DEBUGF(fl,debugf) - - -/*---------- error handling ----------*/ - -void vfatal(const char *fmt, va_list) FMT(1,0) NORET; -void fatal(const char *fmt, ...) FMT(1,2) NORET; - -#define sysassert(what) \ - ((what) ? (void)0 : sysassert_fail(__FILE__, __LINE__, #what)) - -void sysassert_fail(const char *file, int line, const char *what) - __attribute__((noreturn)); - -void waitpid_check_exitstatus(pid_t pid, const char *what, int sigpipeok); - - -void *mmalloc(size_t sz); -void *mrealloc(void *p, size_t sz); - - -#define dbassert(x) ((x) ? (void)0 : dbfile_assertfail(__FILE__,__LINE__,#x)) -void dbfile_assertfail(const char *file, int line, const char *m) NORET; - -FILE *dbfile; -void dbfile_getsline(char *lbuf, size_t lbufsz, const char *file, int line); -int dbfile_open(const char *tpath); /* 0: ENOENT; 1: worked */ -int dbfile_gzopen(const char *tpath); /* 0: ENOENT; 1: worked */ -void dbfile_close(void); /* idempotent */ - -int dbfile_scanf(const char *fmt, ...) SCANFMT(1,2); -int dbfile_vscanf(const char *fmt, va_list al) SCANFMT(1,0); - -int gzopen(const char *zpath, int oflags, FILE **f_r, pid_t *pid_r, - const char *gziplevel /* 0 for read; may be 0, or "-1" etc. */); - /* returns errno value from open */ -void gzclose(FILE **f, pid_t *p, const char *what); - /* also OK with f==0, or p==-1 */ - -char *masprintf(const char *fmt, ...) FMT(1,2); - -#define EXECLP_HELPER(helper, ...) do{ \ - char *helper_path= masprintf("%s/%s",get_libdir(),helper); \ - execlp(helper_path,helper, __VA_ARGS__); \ - sysassert(errno==ENOENT); \ - fatal("Failed to find helper program %s.\n" \ - "(Are you in the correct directory?)", helper); \ - }while(0) - - -#define ARRAYSIZE(a) ((sizeof((a)) / sizeof((a)[0]))) -#define FILLZERO(obj) (memset(&(obj),0,sizeof((obj)))) - -#define STRING2(x) #x -#define STRING(x) STRING2(x) - -#endif /*COMMON_H*/