1 // IconObject-classic.c
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)
51 static APTR functable
[] =
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
,
67 /* Init table used in library initialization. */
68 static ULONG inittab
[] =
70 sizeof(struct IconObjectBase
),
78 struct Resident ALIGNED romtag
=
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
)
103 struct IconObjectBase
*IconObjLibBase
= (struct IconObjectBase
*) libbase
;
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
;
120 static AROS_LH1(struct Library
*, Openlib
,
121 AROS_LHA(__unused ULONG
, version
, D0
),
122 struct Library
*, libbase
, 1, IconObject
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
);
138 return &IconObjLibBase
->iob_LibNode
;
144 static AROS_LH0(struct SegList
*, Closelib
,
145 struct Library
*, libbase
, 2, IconObject
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
);
168 static AROS_LH1(struct SegList
*, Expungelib
,
169 AROS_LHA(__unused
struct Library
*, __extrabase
, D0
),
170 struct Library
*, libbase
, 3, IconObject
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
);
190 IconObjLibBase
->iob_LibNode
.lib_Flags
|= LIBF_DELEXP
;
198 static AROS_LH0(ULONG
, Extfunclib
, __unused
struct Library
*, libbase
, 4, IconObject
)