Initial import of Scalos. To decrease size I have
[AROS-Contrib.git] / scalos / libraries / iconobject / IconObject-aros.c
blobcb57bdaeb0cb67ce7d2480ffe417bc15555ad4ca
1 // IconObject-classic.c
2 // $Date$
3 // $Revision$
6 #include <exec/types.h>
7 #include <exec/initializers.h>
9 #include <exec/resident.h>
11 #include <aros/libcall.h>
13 #include <proto/exec.h>
14 #include <proto/iconobject.h>
17 #include "IconObject.h"
19 //----------------------------------------------------------------------------
20 // Standard library functions
22 static AROS_UFP3 (struct Library *, Initlib,
23 AROS_UFPA(struct Library *, libbase, D0),
24 AROS_UFPA(struct SegList *, seglist, A0),
25 AROS_UFPA(struct ExecBase *, sysbase, A6)
27 static AROS_LD1 (struct Library *, Openlib,
28 AROS_LPA (__unused ULONG, version, D0),
29 struct Library *, base, 1, IconObject
31 static AROS_LD0 (struct SegList *, Closelib,
32 struct Library *, base, 2, IconObject
34 static AROS_LD1 (struct SegList *, Expungelib,
35 AROS_LPA(__unused struct Library *, __extrabase, D0),
36 struct Library *, base, 3, IconObject
38 static AROS_LD0 (ULONG, Extfunclib,
39 __unused struct Library *, libbase, 4, IconObject
42 //----------------------------------------------------------------------------
44 SAVEDS(LONG) ASM Libstart(void)
46 return -1;
49 /* OS3.x Library */
51 static APTR functable[] =
53 IconObject_1_Openlib,
54 IconObject_2_Closelib,
55 IconObject_3_Expungelib,
56 IconObject_4_Extfunclib,
57 IconObjectBase_0_LIBNewIconObject,
58 IconObjectBase_0_LIBDisposeIconObject,
59 IconObjectBase_0_LIBGetDefIconObject,
60 IconObjectBase_0_LIBPutIconObject,
61 IconObjectBase_0_LIBIsIconName,
62 IconObjectBase_0_LIBConvert2IconObject,
63 IconObjectBase_0_LIBConvert2IconObjectA,
64 (APTR) -1
67 /* Init table used in library initialization. */
68 static ULONG inittab[] =
70 sizeof(struct IconObjectBase),
71 (ULONG) functable,
73 (ULONG) Initlib
77 /* The ROM tag */
78 struct Resident ALIGNED romtag =
80 RTC_MATCHWORD,
81 &romtag,
82 &romtag + 1,
83 RTF_AUTOINIT,
84 LIB_VERSION,
85 NT_LIBRARY,
87 libName,
88 libIdString,
89 inittab
93 //----------------------------------------------------------------------------
95 static AROS_UFH3(struct Library *, Initlib,
96 AROS_UFHA(struct Library *, libbase, D0),
97 AROS_UFHA(struct SegList *, seglist, A0),
98 AROS_UFHA(struct ExecBase *, sysbase, A6)
101 AROS_USERFUNC_INIT
103 struct IconObjectBase *IconObjLibBase = (struct IconObjectBase *) libbase;
105 SysBase = sysbase;
106 IconObjLibBase->iob_LibNode.lib_Revision = LIB_REVISION;
107 IconObjLibBase->iob_SegList = seglist;
109 if (!IconObjectInit(IconObjLibBase))
111 IconObject_3_Expungelib(&IconObjLibBase->iob_LibNode, &IconObjLibBase->iob_LibNode);
112 IconObjLibBase = NULL;
115 return IconObjLibBase ? &IconObjLibBase->iob_LibNode : NULL;
117 AROS_USERFUNC_EXIT
120 static AROS_LH1(struct Library *, Openlib,
121 AROS_LHA(__unused ULONG, version, D0),
122 struct Library *, libbase, 1, IconObject
125 AROS_LIBFUNC_INIT
127 struct IconObjectBase *IconObjLibBase = (struct IconObjectBase *) libbase;
129 IconObjLibBase->iob_LibNode.lib_OpenCnt++;
130 IconObjLibBase->iob_LibNode.lib_Flags &= ~LIBF_DELEXP;
132 if (!IconObjectOpen(IconObjLibBase))
134 IconObject_2_Closelib(&IconObjLibBase->iob_LibNode);
135 return NULL;
138 return &IconObjLibBase->iob_LibNode;
140 AROS_LIBFUNC_EXIT
144 static AROS_LH0(struct SegList *, Closelib,
145 struct Library *, libbase, 2, IconObject
148 AROS_LIBFUNC_INIT
150 struct IconObjectBase *IconObjLibBase = (struct IconObjectBase *) libbase;
152 IconObjLibBase->iob_LibNode.lib_OpenCnt--;
154 if (0 == IconObjLibBase->iob_LibNode.lib_OpenCnt)
156 if (IconObjLibBase->iob_LibNode.lib_Flags & LIBF_DELEXP)
158 return IconObject_3_Expungelib(&IconObjLibBase->iob_LibNode, &IconObjLibBase->iob_LibNode);
162 return NULL;
164 AROS_LIBFUNC_EXIT
168 static AROS_LH1(struct SegList *, Expungelib,
169 AROS_LHA(__unused struct Library *, __extrabase, D0),
170 struct Library *, libbase, 3, IconObject
173 AROS_LIBFUNC_INIT
175 struct IconObjectBase *IconObjLibBase = (struct IconObjectBase *) libbase;
177 if (0 == IconObjLibBase->iob_LibNode.lib_OpenCnt)
179 ULONG size = IconObjLibBase->iob_LibNode.lib_NegSize + IconObjLibBase->iob_LibNode.lib_PosSize;
180 UBYTE *ptr = (UBYTE *) IconObjLibBase - IconObjLibBase->iob_LibNode.lib_NegSize;
181 struct SegList *libseglist = IconObjLibBase->iob_SegList;
183 Remove((struct Node *) IconObjLibBase);
184 IconObjectCleanup(IconObjLibBase);
185 FreeMem(ptr,size);
187 return libseglist;
190 IconObjLibBase->iob_LibNode.lib_Flags |= LIBF_DELEXP;
192 return NULL;
194 AROS_LIBFUNC_EXIT
198 static AROS_LH0(ULONG, Extfunclib, __unused struct Library *, libbase, 4, IconObject)
200 AROS_LIBFUNC_INIT
202 return 0;
204 AROS_LIBFUNC_EXIT