#ifndef DONE_FMALLOC
#define DONE_FMALLOC 1

typedef struct FMALLOC {
	struct FCHUNK *head; 
} Fmalloc;
typedef struct FCHUNK {
	int max;
	int size;
	int nused;
	int at;
	char *mem;
	char *isused; // 1 byte per block, used to find free one...
	struct FCHUNK *next; 
} Fchunk;


Fmalloc *fmalloc_new(void);
void *fmalloc_real(Fmalloc *m, int sz,char *file, int line);
void *fmalloc_calloc_real(Fmalloc *m, int count,  int sz,char *file, int line);
#define fmalloc(a,b) fmalloc_real(a,b,__FILE__,__LINE__)
#define fmalloc_calloc(a,b,c) fmalloc_calloc_real(a,b,c,__FILE__,__LINE__)


void fmalloc_free(Fmalloc *m, void *p);
void fmalloc_freeall(Fmalloc *m);
void fmalloc_test(void);


#endif
