X-Git-Url: https://www.kengrimes.com/gitweb/?p=henge%2Fapc.git;a=blobdiff_plain;f=src%2Fir.c;h=3f22400512f10b5bcfef48699998352af3611ef9;hp=76c221d2d376d164489635b47fec0920c976cd8c;hb=50200436b705f712b1c82ad58a78b413754e614b;hpb=1effafc476cde8a9996d2a520dd3afc3666f45af diff --git a/src/ir.c b/src/ir.c index 76c221d..3f22400 100644 --- a/src/ir.c +++ b/src/ir.c @@ -29,11 +29,23 @@ static static inline struct ir_framebox_t* ir_set_add_framebox(struct ir_set_t*, uint8_t*); -static inline -void ir_quit_r(struct pagenode_t*); +static +void ir_free_pages(struct pagenode_t*); static inline int bytes_identical(uint8_t*,uint8_t*); - +static +void* stack_alloc(size_t); +/* Memory allocator */ +struct pagenode_t { + struct pagenode_t* next; + char* head; + char root[]; +}* pagenode_root, * pagenode_head; +#define PN_ALLOCSIZE (sys_pagesize) +#define PN_HEADERSIZE() (sizeof(struct pagenode_t*) + sizeof(char*)) +#define PN_MEMSIZE() (PN_ALLOCSIZE - PN_HEADERSIZE()) +#define PN_HEADSIZE() (pagenode_head->head - pagenode_head->root) +#define PN_HEADSPACE() (PN_MEMSIZE() - PN_HEADSIZE()) /* Enumerated types */ enum dtype { FSDAT, MSDAT, ADAT, LDAT, FBDAT }; enum ltype { OLINK, MLINK, VLINK, ALINK }; @@ -128,13 +140,13 @@ int ir_init */ void ir_quit ( void ) -{ ir_quit_r(pagenode_root); } +{ ir_free_pages(pagenode_root); } -static inline -void ir_quit_r +static +void ir_free_pages ( struct pagenode_t* pagenode ) { if (pagenode->next != NULL) - ir_quit_r(pagenode->next); + ir_free_pages(pagenode->next); free(pagenode); } @@ -377,19 +389,6 @@ union ir_setdata_t* ir_audio return (union ir_setdata_t*) audio; } - -#define PN_ALLOCSIZE (sys_pagesize) -#define PN_HEADERSIZE() (sizeof(struct pagenode_t*) + sizeof(void*)) -#define PN_MEMSIZE() (PN_ALLOCSIZE - PN_HEADERSIZE()) -#define PN_HEADSIZE() (pagenode_head->head - pagenode_head->root) -#define PN_HEADSPACE() (PN_MEMSIZE() - PN_HEADSIZE()) -struct pagenode_t { - struct pagenode_t* next; - char* head; - char root[]; -}* pagenode_root, * pagenode_head; - - static void* stack_alloc(size_t bytes) { if (!bytes)