Virtuelle Zockhalle 0.05 beta

eshelper.h

gehe zur Dokumentation dieser Datei
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 */