summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
Diffstat (limited to 'amiga')
-rw-r--r--amiga/gui.c10
-rwxr-xr-xamiga/misc.c41
-rw-r--r--amiga/misc.h7
3 files changed, 53 insertions, 5 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 3dc575cf0..09fc36b6a 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -3796,7 +3796,7 @@ gui_window_create(struct browser_window *bw,
NewList(&g->dllist);
g->deferred_rects = NewObjList();
- g->deferred_rects_pool = CreatePool(MEMF_PRIVATE, sizeof(struct rect), sizeof(struct rect));
+ g->deferred_rects_pool = ami_misc_itempool_create(sizeof(struct rect));
g->bw = bw;
g->scale = browser_window_get_scale(bw);
@@ -4447,7 +4447,7 @@ static void gui_window_destroy(struct gui_window *g)
ami_free_download_list(&g->dllist);
FreeObjList(g->deferred_rects);
- DeletePool(g->deferred_rects_pool);
+ ami_misc_itempool_delete(g->deferred_rects_pool);
gui_window_stop_throbber(g);
cur_gw = NULL;
@@ -4659,7 +4659,7 @@ static void ami_gui_window_update_box_deferred(struct gui_window *g, bool draw)
rect->x0, rect->y0, rect->x1, rect->y1);
}
nnode=(struct nsObject *)GetSucc((struct Node *)node);
- FreePooled(g->deferred_rects_pool, node->objstruct, sizeof(struct rect));
+ ami_misc_itempool_free(g->deferred_rects_pool, node->objstruct, sizeof(struct rect));
DelObjectNoFree(node);
} while((node = nnode));
@@ -4693,7 +4693,7 @@ static bool ami_gui_window_update_box_deferred_check(struct MinList *deferred_re
(new_rect->x1 >= rect->x1) &&
(new_rect->y1 >= rect->y1)) {
LOG("Removing queued redraw that is a subset of new box redraw");
- FreePooled(mempool, node->objstruct, sizeof(struct rect));
+ ami_misc_itempool_free(mempool, node->objstruct, sizeof(struct rect));
DelObjectNoFree(node);
/* Don't return - we might find more */
}
@@ -4710,7 +4710,7 @@ static void gui_window_update_box(struct gui_window *g, const struct rect *rect)
if(ami_gui_window_update_box_deferred_check(g->deferred_rects, rect,
g->deferred_rects_pool)) {
- deferred_rect = AllocPooled(g->deferred_rects_pool, sizeof(struct rect));
+ deferred_rect = ami_misc_itempool_alloc(g->deferred_rects_pool, sizeof(struct rect));
CopyMem(rect, deferred_rect, sizeof(struct rect));
nsobj = AddObject(g->deferred_rects, AMINS_RECT);
nsobj->objstruct = deferred_rect;
diff --git a/amiga/misc.c b/amiga/misc.c
index 141994a31..065909e85 100755
--- a/amiga/misc.c
+++ b/amiga/misc.c
@@ -47,6 +47,47 @@ void *ami_misc_allocvec_clear(int size, UBYTE value)
#endif
}
+APTR ami_misc_itempool_create(int size)
+{
+#ifdef __amigaos4__
+ return AllocSysObjectTags(ASOT_ITEMPOOL,
+ ASOITEM_MFlags, MEMF_PRIVATE,
+ ASOITEM_ItemSize, size,
+ ASOITEM_GCPolicy, ITEMGC_AFTERCOUNT,
+ ASOITEM_GCParameter, 50,
+ TAG_DONE);
+#else
+ return CreatePool(MEMF_ANY, 2 * size, size);
+#endif
+}
+
+void ami_misc_itempool_delete(APTR pool)
+{
+#ifdef __amigaos4__
+ FreeSysObject(ASOT_ITEMPOOL, pool);
+#else
+ DeletePool(pool);
+#endif
+}
+
+APTR ami_misc_itempool_alloc(APTR pool, int size)
+{
+#ifdef __amigaos4__
+ return ItemPoolAlloc(pool);
+#else
+ return AllocPooled(pool, size);
+#endif
+}
+
+void ami_misc_itempool_free(APTR pool, APTR item, int size)
+{
+#ifdef __amigaos4__
+ return ItemPoolFree(pool, item);
+#else
+ return FreePooled(pool, item, size);
+#endif
+}
+
static LONG ami_misc_req(const char *message, uint32 type)
{
LONG ret = 0;
diff --git a/amiga/misc.h b/amiga/misc.h
index 66a6f1d11..2544c7731 100644
--- a/amiga/misc.h
+++ b/amiga/misc.h
@@ -24,6 +24,13 @@ extern struct gui_file_table *amiga_file_table;
struct Window;
void *ami_misc_allocvec_clear(int size, UBYTE value);
+
+/* Itempool cross-compatibility */
+APTR ami_misc_itempool_create(int size);
+void ami_misc_itempool_delete(APTR pool);
+APTR ami_misc_itempool_alloc(APTR pool, int size);
+void ami_misc_itempool_free(APTR pool, APTR item, int size);
+
char *translate_escape_chars(const char *s);
void ami_misc_fatal_error(const char *message);
int32 ami_warn_user_multi(const char *body,