/* drwalloc.h */


#ifdef __cplusplus 
extern "C" {
#endif

extern int drw_mem_blk_report(drw_mem_block *blk,
                              int blockno,
                              int entryno,
                              char *repname,
                              int loglevel,
                              drw_mem_report_flags flags);
extern void drw_mem_blk_check(drw_mem_block *blk);
extern void drw_mem_blk_check_num(drw_mem_block *blk,
                                  int blockno);
extern void drw_mem_heap_check(byte *heapptr,
                               drw_mem_block *chkblk);
extern void drw_mem_ntblock_check(byte *heapptr,
                                  drw_mem_block *chkblk,
                                  char *fnname);
extern byte *drw_mem_realloc(void *ptr,
                             drwGP_ptr anchor,
                             size_t newsize,
                             drw_mem_flags mf,
                             int extraspace,
                             int nocopy,
                             byte **heap,
                             size_t at);
extern os_error *drw_alloc_init(void);
extern drwGP drw_alloc(drwGP Pallocptr,
                       drwGP_ptr anchor,
                       size_t allocsize,
                       drw_mem_flags mf,
                       byte **darea,
                       char *alloctitle,
                       size_t allocnum,
                       int extraspace,
                       int nocopy,
                       size_t at);
extern void drw_dealloc(drwGP Pptr,
                        byte **darea);
extern int drw_read_mem_size(drwGP darea,
                             int storesize,
                             drw_mem_type memtype);
extern os_error *drw_read_da_size(os_dynamic_area_no danum,
                                  int *allocsize,
                                  int *sizelim,
                                  byte **area_start);
extern os_error *drw_new_os_heap(byte *heap, int size);
extern os_error *drw_describe_os_heap(byte *heap,
                                      int *max,
                                      int *free);
extern void *drw_os_heap_alloc(byte *heap,
                               int size);
extern os_error *drw_os_heap_free(byte *heap, void *blk);
extern void *drw_os_heap_realloc(byte *heap,
                                 void *blk,
                                 int size_increase);
extern os_error *drw_os_heap_resize(byte *heap,
                                    int size_increase);
extern int drw_os_heap_read_size(byte *heap,
                                 void *blk);
extern void *drw_os_heap_alloc_aligned(byte *heap,
                                       int alignment,
                                       int size,
                                       int boundary);
extern void drw_mem_alloc_new_heap(byte *darea,
                                   int blocksize);
extern byte *drw_mem_alloc(size_t size,
                           drw_mem_flags memtype,
                           drwGP_ptr anchor,
                           byte **heap);
extern byte *drw_alloc_mem(byte *mem,
                           size_t size,
                           drw_mem_flags mfflags,
                           drwGP_ptr anchor,
                           byte **heap);
extern byte *drw_extend_da(byte *darea,
                           int absolute,
                           int size);
extern int drw_wimp_measuredynamic(byte *darea);
extern byte *drw_mem_extend_da(byte **darea,
                               size_t datasize,
                               size_t *extendedbyout);
extern byte *drw_mem_reduce_da(byte **darea,
                               int absolute,
                               int datasize);
extern void drw_dispose_mem(void);
extern void drw_mem_free(void *ptr, byte **darea);
extern os_error *drw_xos_module_alloc(int size,
                                      void **bao);
extern os_error *drw_xos_createdynamic(int size,
                                       os_area_flags flags,
                                       int maxsize,
                                       char *name,
                                       os_dynamic_area_no *area_out,
                                       byte **base_address_out,
                                       int *size_limit_out);
extern os_error *drw_createdynamic(int size,
                                   int typein,
                                   os_area_flags flags,
                                   int maxsize,
                                   char *name,
                                   int currosver,
                                   int callxos,
                                   int storesize,
                                   os_dynamic_area_no *rt_area_out,
                                   byte **rt_base_address_out,
                                   drw_mem_type *rt_da_type,
                                   int *size_limit_out);
extern os_error *drw_changedynamic(byte *darea,
                                   os_dynamic_area_no danum,
                                   int absolute,
                                   int size,
                                   int csize,
                                   int storesize,
                                   drw_mem_type memtype,
                                   byte **bao);
extern void drw_deletedynamic(byte *darea,
                              os_dynamic_area_no danum,
                              drw_mem_type memtype);
extern void *drw_append_new_data_ll(drwGP Phdr,
                                    drwGP Punusedhdr,
                                    size_t datasize,
                                    int data_is_resizeable,
                                    drw_data_init_fn dinitfn);
extern int drw_append_existing_data_ll(drwGP Phdr,
                                       drwGP Punusedhdr,
                                       drwGP data);
extern int drw_alloc_buff(int buffsizein,
                          drw_mem_flags mf,
                          byte **darea,
                          drwGP_ptr anchor,
                          int *buffsizeout,
                          int *buffallocated,
                          int extraspace,
                          int nocopy);
extern void drw_set_pwd_mempagesize(void);
extern void drw_mem_init_empty_blk(drw_mem_block *blk,
                                   size_t blocksize,
                                   int initntpr);
extern byte *drw_find_space_in_blk(drw_mem_block *blk,
                                   size_t totalsize,
                                   size_t size,
                                   drwGP_ptr anchor,
                                   drw_mem_flags mf);
extern byte *drw_find_space(drw_mem_block *firstblk,
                            size_t size,
                            drw_mem_block *heapptr,
                            drwGP_ptr anchor,
                            drw_mem_flags mf);
extern void drw_mem_recalc_largest_in_blk(drw_mem_block *blk);
extern void drw_mem_rmv_blk(drw_mem_block *blk, byte **heap);
extern void drw_mem_free_block_entry(void *ptr, byte **heap);
extern void drw_mem_init_block(drw_mem_block *blk);
extern size_t drw_mem_calc_bsize(size_t size,
                                 size_t hdrsize,
                                 size_t drwdatasize);
extern drw_mem_block *drw_mem_new_block(drw_mem_block **heapptr,
                                        size_t size,
                                        drw_mem_flags mf);
extern drw_mem_block *drw_mem_extend_block(drw_mem_block **heapptr,
                                           drw_mem_block *extendblk,
                                           size_t size,
                                           drw_mem_flags mf);
extern void drw_mem_adjust_blk_ptrs(drw_mem_block *blk,
                                    size_t stentryno,
                                    size_t adjoffsetby,
                                    int shrinkblk);
extern void drw_mem_adjust_heap_ptrs(drw_mem_block *heap,
                                     drw_mem_block *stblk,
                                     drw_mem_block *endblk,
                                     size_t stentryno,
                                     size_t adjoffsetby,
                                     int shrinkblk);
extern byte *drw_mem_extend_in_block(drw_mem_block *heap,
                                     drw_mem_block *blk,
                                     int extentryno,
                                     size_t extendby,
                                     size_t at,
                                     int moveblkentries,
                                     int shrinkblk);
extern byte *drw_mem_realloc_blk(byte **heap,
                                 byte *mem,
                                 drwGP_ptr anchor,
                                 drw_mem_flags mf,
                                 size_t newsize,
                                 int extraspace,
                                 size_t at);
extern byte *drw_mem_alloc_fh(byte *mem,
                              size_t size);
extern void drw_mem_fh_free(void *ptr);
extern void drw_mem_dispose_fh(void);

#ifdef __cplusplus
}
#endif

