Virtuelle Zockhalle 0.05 beta
|
00001 /* -*- coding: utf-8 -*- */ 00002 00003 /*********************************************************************** 00004 * 00005 * $Id: eshelper.h,v 1.5 2010/11/19 07:51:13 elias Beta $ 00006 * Diese Datei gehört zur Virtuellen Zockhalle 00007 * 00008 * Virtuelle Zockhalle 00009 * (c) 2010 Elias Schwerdtfeger 00010 * http://www.tamagothi.de/ 00011 * 00012 * Dieses Programm ist freie Software, lizenziert unter den sinngemäß 00013 * anzuwendenden Bedingungen meiner Lizenz für freie Musik, 00014 * http://www.tamagothi.de/alben/lizenz.html 00015 * 00016 ***********************************************************************/ 00017 00018 #ifndef _ESHELPER_H 00019 #define _ESHELPER_H 00020 00021 #include <stdlib.h> 00022 #include <stdarg.h> 00023 #include <stdio.h> 00024 00025 00038 extern const char *progname; 00039 00045 void helper_init (const char *argv0); 00046 00053 typedef void (*errorcb_t) (const char *msg); 00057 typedef void (*atfatal_cb_t) (void); 00058 00068 void print_message (FILE *f, const char *msg); 00075 int atfatal (atfatal_cb_t cb); 00087 void fatal (const char *msg); 00098 errorcb_t set_errorcb (errorcb_t newcb); 00105 void v_error (const char *fmt, va_list va); 00112 void f_error (const char *fmt, ...); 00118 void s_error (const char *msg); 00127 void *emalloc (size_t sz); 00135 void *erealloc (void *mem, size_t sz); 00142 void *ecalloc (size_t sz); 00149 char *estrdup (const char *str); 00157 FILE *efopen (const char *fnam, const char *fmod); 00158 00166 void swapmem (void *ptr1, void *ptr2, size_t sz); 00167 00182 00188 typedef void (*freefunc_t) (void *res); 00189 00191 typedef struct 00192 { 00193 void *res; 00194 freefunc_t free_f; 00195 } remember_entry_t; 00196 00198 typedef struct 00199 { 00200 remember_entry_t *st; 00201 size_t sp; 00202 size_t alloc; 00203 } remember_stack_t; 00204 00206 typedef remember_stack_t *remember_t; 00207 00213 remember_t remember_new (void); 00219 void remember_free (remember_t rmb); 00225 void remember_dispose (remember_t rmb); 00234 void *remember_push (remember_t rmb, freefunc_t free_f, void *res); 00244 void r_call (remember_t rmb, void (*callback) (void)); 00246 #define _MAKEREMEMBER_0(RMB, TYPE, ALLOCF, FREEF) \ 00247 ((TYPE) (remember_push ((RMB), (freefunc_t) (FREEF), \ 00248 (ALLOCF ())))) 00249 00250 #define _MAKEREMEMBER_1(RMB, TYPE, ALLOCF, FREEF, P1) \ 00251 ((TYPE) (remember_push ((RMB), (freefunc_t) (FREEF), \ 00252 (ALLOCF ((P1)))))) 00253 00254 #define _MAKEREMEMBER_2(RMB, TYPE, ALLOCF, FREEF, P1, P2) \ 00255 ((TYPE) (remember_push ((RMB), (freefunc_t) (FREEF), \ 00256 (ALLOCF ((P1), (P2)))))) 00257 00258 #define _MAKEREMEMBER_3(RMB, TYPE, ALLOCF, FREEF, P1, P2, P3) \ 00259 ((TYPE) (remember_push ((RMB), (freefunc_t) (FREEF), \ 00260 (ALLOCF ((P1), (P2), (P3)))))) 00261 00262 #define _MAKEREMEMBER_4(RMB, TYPE, ALLOCF, FREEF, P1, P2, P3, P4) \ 00263 ((TYPE) (remember_push ((RMB), (freefunc_t) (FREEF), \ 00264 (ALLOCF ((P1), (P2), (P3), (P4)))))) 00265 00266 #define _MAKEREMEMBER_5(RMB, TYPE, ALLOCF, FREEF, P1, P2, P3, P4, P5) \ 00267 ((TYPE) (remember_push ((RMB), (freefunc_t) (FREEF), \ 00268 (ALLOCF ((P1), (P2), (P3), (P4), (P5)))))) 00269 00276 #define r_remember_new(RMB) \ 00277 _MAKEREMEMBER_0 ((RMB), remember_t, remember_new, remember_dispose) 00278 00285 #define r_malloc(RMB, SZ) \ 00286 _MAKEREMEMBER_1 ((RMB), void *, emalloc, free, (SZ)) 00287 00294 #define r_calloc(RMB, SZ) \ 00295 _MAKEREMEMBER_1 ((RMB), void *, ecalloc, free, (SZ)) 00296 00303 #define r_strdup(RMB, STR) \ 00304 _MAKEREMEMBER_1 ((RMB), char *, estrdup, free, (STR)) 00305 00313 #define r_fopen(RMB, FNAM, FMOD) \ 00314 _MAKEREMEMBER_2 ((RMB), FILE *, efopen, fclose, (FNAM), (FMOD)) 00315 00328 void mt_seed (unsigned long s); 00332 void mt_seed_time (void); 00339 void mt_seed_array (unsigned long init_key[], int key_length); 00345 unsigned long mt_int32 (void); 00351 long mt_int31 (void); 00360 double mt_real (void); 00370 unsigned long mt_range (unsigned long limit); 00378 void mt_shuffle (void *ar, size_t elem_sz, size_t ar_sz); 00392 #define get_sign(N) \ 00393 ((N) < 0 ? -1 : (N) > 0 ? 1 : 0) 00394 00401 #define get_max(N1, N2) \ 00402 ((N1) > (N2) ? (N1) : (N2)) 00403 00410 #define get_min(N1, N2) \ 00411 ((N1) < (N2) ? (N1) : (N2)) 00412 00416 #endif /* _ESHELPER_H */