From d21447d096a320a08b3efb2b8768fad0dcdcfd64 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Thu, 5 May 2016 22:28:51 +0100 Subject: move frontends into sub directory --- frontends/amiga/object.c | 136 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100755 frontends/amiga/object.c (limited to 'frontends/amiga/object.c') diff --git a/frontends/amiga/object.c b/frontends/amiga/object.c new file mode 100755 index 000000000..8da16394e --- /dev/null +++ b/frontends/amiga/object.c @@ -0,0 +1,136 @@ +/* + * Copyright 2005, 2008, 2016 Chris Young + * + * This file is part of NetSurf, http://www.netsurf-browser.org/ + * + * NetSurf is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * NetSurf is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "amiga/os3support.h" + +#include +#include +#include + +#include +#include +#include + +#include "amiga/misc.h" +#include "amiga/object.h" + +#ifdef __amigaos4__ +#define nsList MinList +#define NewnsList NewMinList +#else +#define nsList List +#define NewnsList NewList +#endif + +APTR pool_nsobj = NULL; + +bool ami_object_init(void) +{ + pool_nsobj = ami_misc_itempool_create(sizeof(struct nsObject)); + + if(pool_nsobj == NULL) return false; + else return true; +} + +void ami_object_fini(void) +{ + ami_misc_itempool_delete(pool_nsobj); +} + +/* Slightly abstract MinList initialisation */ +static void ami_NewMinList(struct MinList *list) +{ + if(list == NULL) return; + NewnsList((struct nsList *)list); +} + +/* Allocate and initialise a new MinList */ +struct MinList *ami_AllocMinList(void) +{ + struct MinList *objlist = (struct MinList *)AllocVecTagList(sizeof(struct nsList), NULL); + if(objlist == NULL) return NULL; + ami_NewMinList(objlist); + return objlist; +} + +struct MinList *NewObjList(void) +{ + struct MinList *objlist = ami_AllocMinList(); + return(objlist); +} + +struct nsObject *AddObject(struct MinList *objlist, ULONG otype) +{ + struct nsObject *dtzo; + + dtzo = (struct nsObject *)ami_misc_itempool_alloc(pool_nsobj, sizeof(struct nsObject)); + if(dtzo == NULL) return NULL; + + memset(dtzo, 0, sizeof(struct nsObject)); + AddTail((struct List *)objlist,(struct Node *)dtzo); + + dtzo->Type = otype; + + return(dtzo); +} + +void ObjectCallback(struct nsObject *dtzo, void (*callback)(void *nso)) +{ + dtzo->callback = callback; +} + +static void DelObjectInternal(struct nsObject *dtzo, BOOL free_obj) +{ + Remove((struct Node *)dtzo); + if(dtzo->callback != NULL) dtzo->callback(dtzo->objstruct); + if(dtzo->objstruct && free_obj) FreeVec(dtzo->objstruct); + if(dtzo->dtz_Node.ln_Name) free(dtzo->dtz_Node.ln_Name); + ami_misc_itempool_free(pool_nsobj, dtzo, sizeof(struct nsObject)); + dtzo = NULL; +} + +void DelObject(struct nsObject *dtzo) +{ + DelObjectInternal(dtzo, TRUE); +} + +void DelObjectNoFree(struct nsObject *dtzo) +{ + DelObjectInternal(dtzo, FALSE); +} + +void FreeObjList(struct MinList *objlist) +{ + struct nsObject *node; + struct nsObject *nnode; + + if(IsMinListEmpty((struct MinList *)objlist)) return; + node = (struct nsObject *)GetHead((struct List *)objlist); + + do { + nnode=(struct nsObject *)GetSucc((struct Node *)node); + if(node->Type == AMINS_RECT) { + DelObjectNoFree(node); + } else { + DelObject(node); + } + } while((node=nnode)); + + FreeVec(objlist); +} + -- cgit v1.2.3