1 #ifndef CLIB_ALIB_PROTOS_H
2 #define CLIB_ALIB_PROTOS_H
5 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
8 Desc: Prototypes for amiga.lib
12 #if defined(RT_ENABLE) && RT_ENABLE
16 #include <aros/asmcall.h>
17 #include <devices/inputevent.h>
18 #include <devices/keymap.h>
19 #include <intuition/classes.h>
20 #include <intuition/classusr.h>
21 #include <intuition/intuition.h>
22 #include <intuition/screens.h>
23 #include <libraries/commodities.h>
24 #include <libraries/gadtools.h>
25 #include <rexx/storage.h>
26 #include <utility/hooks.h>
38 IPTR
CallHookA (struct Hook
* hook
, APTR obj
, APTR param
);
39 IPTR
CallHook (struct Hook
* hook
, APTR obj
, ...) __stackparm
;
40 UBYTE
* ACrypt(UBYTE
* buffer
, const UBYTE
* password
, const UBYTE
* user
);
43 BPTR
ErrorOutput(void);
44 BPTR
SelectErrorOutput(BPTR fh
);
47 VOID
BeginIO (struct IORequest
*ioReq
);
48 struct IORequest
* CreateExtIO (struct MsgPort
* port
, ULONG iosize
);
49 struct IOStdReq
* CreateStdIO (struct MsgPort
* port
);
50 void DeleteExtIO (struct IORequest
* ioreq
);
51 void DeleteStdIO (struct IOStdReq
* ioreq
);
52 struct Task
* CreateTask (STRPTR name
, LONG pri
, APTR initpc
, ULONG stacksize
);
53 void DeleteTask (struct Task
* task
);
54 void NewList (struct List
*);
55 #if !defined(ENABLE_RT) || !ENABLE_RT
56 struct MsgPort
* CreatePort (STRPTR name
, LONG pri
);
57 void DeletePort (struct MsgPort
* mp
);
61 ULONG
RangeRand (ULONG maxValue
);
62 ULONG
FastRand (ULONG seed
);
63 LONG
TimeDelay (LONG unit
, ULONG secs
, ULONG microsecs
);
64 void waitbeam (LONG pos
);
65 void __sprintf(UBYTE
*buffer
, const UBYTE
*format
, ...);
66 STRPTR
StrDup(CONST_STRPTR str
);
68 void MergeSortList(struct MinList
*l
, int (*compare
)(struct MinNode
*n1
, struct MinNode
*n2
, void *data
), void *data
);
71 CxObj
*HotKey (STRPTR description
, struct MsgPort
*port
, LONG id
);
72 VOID
FreeIEvents (volatile struct InputEvent
*events
);
73 UBYTE
**ArgArrayInit(ULONG argc
, UBYTE
**argv
);
74 VOID
ArgArrayDone(VOID
);
75 LONG
ArgInt(UBYTE
**tt
, STRPTR entry
, LONG defaultVal
);
76 STRPTR
ArgString(UBYTE
**tt
, STRPTR entry
, STRPTR defaultstring
);
77 struct InputEvent
*InvertString(STRPTR str
, struct KeyMap
*km
);
78 struct InputEvent
*InvertStringForwd(STRPTR str
, struct KeyMap
*km
);
82 LONG
ObtainBestPen( struct ColorMap
* cm
, LONG R
, LONG G
, LONG B
, ULONG tag1
, ...) __stackparm
;
86 void GetRPAttrs( struct RastPort
* rp
, Tag tag1
, ...) __stackparm
;
89 BOOL
AndRectRect(struct Rectangle
*rect1
, struct Rectangle
*rect2
, struct Rectangle
*intersect
);
90 struct Region
*CopyRegion(struct Region
*region
);
91 struct Region
*NewRectRegion(WORD MinX
, WORD MinY
, WORD MaxX
, WORD MaxY
);
94 #ifndef SetWindowPointer
95 void SetWindowPointer( struct Window
* window
, ULONG tag1
, ...) __stackparm
;
99 IPTR
DoMethodA (Object
* obj
, Msg message
);
100 IPTR
DoMethod (Object
* obj
, STACKULONG MethodID
, ...) __stackparm
;
101 IPTR
DoSuperMethodA (Class
* cl
, Object
* obj
, Msg message
);
102 IPTR
DoSuperMethod (Class
* cl
, Object
* obj
, STACKULONG MethodID
, ...) __stackparm
;
103 IPTR
CoerceMethodA (Class
* cl
, Object
* obj
, Msg message
);
104 IPTR
CoerceMethod (Class
* cl
, Object
* obj
, STACKULONG MethodID
, ...) __stackparm
;
105 IPTR
DoSuperNewTagList(Class
*CLASS
, Object
*object
, struct GadgetInfo
*gadgetInfo
, struct TagItem
*tags
);
106 IPTR
DoSuperNewTags(Class
*CLASS
, Object
*object
, struct GadgetInfo
*gadgetInfo
, Tag tag1
, ...) __stackparm
;
107 IPTR
SetSuperAttrs (Class
* cl
, Object
* obj
, Tag tag1
, ...) __stackparm
;
111 struct Catalog
*OpenCatalog(const struct Locale
* locale
,
118 APTR
LibCreatePool (ULONG requirements
, ULONG puddleSize
, ULONG threshSize
);
119 void LibDeletePool (APTR poolHeader
);
120 APTR
LibAllocPooled (APTR poolHeader
, ULONG memSize
);
121 void LibFreePooled (APTR poolHeader
, APTR memory
, ULONG memSize
);
124 APTR
LibAllocAligned (ULONG memSize
, ULONG requirements
, IPTR alignBytes
);
127 AROS_UFP3(IPTR
, HookEntry
,
128 AROS_UFPA(struct Hook
*, hook
, A0
),
129 AROS_UFPA(APTR
, obj
, A2
),
130 AROS_UFPA(APTR
, param
, A1
)
133 #ifndef AROS_METHODRETURNTYPE
134 # define AROS_METHODRETURNTYPE IPTR
137 #ifdef AROS_SLOWSTACKMETHODS
138 Msg
GetMsgFromStack (IPTR MethodID
, va_list args
);
139 void FreeMsgFromStack (Msg msg
);
141 # define AROS_NR_SLOWSTACKMETHODS_PRE(arg) \
145 va_start (args, arg); \
147 if ((msg = GetMsgFromStack (arg, args))) \
150 # define AROS_SLOWSTACKMETHODS_PRE_AS(arg, type) \
156 va_start (args, arg); \
158 if ((msg = GetMsgFromStack (arg, args))) \
161 # define AROS_SLOWSTACKMETHODS_PRE(arg) \
162 AROS_SLOWSTACKMETHODS_PRE_AS(arg, AROS_METHODRETURNTYPE)
164 # define AROS_SLOWSTACKMETHODS_ARG(arg) msg
166 # define AROS_SLOWSTACKMETHODS_POST \
167 FreeMsgFromStack (msg); \
170 retval = (AROS_METHODRETURNTYPE)0L; \
176 # define AROS_NR_SLOWSTACKMETHODS_POST \
177 FreeMsgFromStack (msg); \
182 # define AROS_NR_SLOWSTACKMETHODS_PRE(arg)
183 # define AROS_SLOWSTACKMETHODS_PRE(arg) AROS_METHODRETURNTYPE retval;
184 # define AROS_SLOWSTACKMETHODS_PRE_AS(arg, type) type retval;
185 # define AROS_SLOWSTACKMETHODS_ARG(arg) ((Msg)&(arg))
186 # define AROS_SLOWSTACKMETHODS_POST return retval;
187 # define AROS_NR_SLOWSTACKMETHODS_POST
188 #endif /* AROS_SLOWSTACKMETHODS */
190 #ifdef AROS_SLOWSTACKTAGS
191 struct TagItem
* GetTagsFromStack (IPTR firstTag
, va_list args
);
192 void FreeTagsFromStack (struct TagItem
* tags
);
193 #endif /* AROS_SLOWSTACKTAGS */
195 #ifndef AROS_HOOKRETURNTYPE
196 # define AROS_HOOKRETURNTYPE IPTR
199 #ifdef AROS_SLOWSTACKHOOKS
200 APTR
GetParamsFromStack (va_list args
);
201 void FreeParamsFromStack (APTR params
);
203 # define AROS_NR_SLOWSTACKHOOKS_PRE(arg) \
207 va_start (args, arg); \
209 if ((params = GetParamsFromStack (args))) \
212 # define AROS_SLOWSTACKHOOKS_PRE(arg) \
213 AROS_HOOKRETURNTYPE retval; \
218 va_start (args, arg); \
220 if ((params = GetParamsFromStack (args))) \
223 # define AROS_SLOWSTACKHOOKS_ARG(arg) params
225 # define AROS_SLOWSTACKHOOKS_POST \
226 FreeParamsFromStack (params); \
229 retval = (AROS_HOOKRETURNTYPE)0L; \
235 # define AROS_NR_SLOWSTACKHOOKS_POST \
236 FreeParamsFromStack (params); \
241 # define AROS_NR_SLOWSTACKHOOKS_PRE(arg)
242 # define AROS_SLOWSTACKHOOKS_PRE(arg) AROS_HOOKRETURNTYPE retval;
243 # define AROS_SLOWSTACKHOOKS_ARG(arg) ((IPTR*)&(arg)+1)
244 # define AROS_SLOWSTACKHOOKS_POST return retval;
245 # define AROS_NR_SLOWSTACKHOOKS_POST
246 #endif /* AROS_SLOWSTACKHOOKS */
249 BOOL
CheckRexxMsg(struct RexxMsg
*);
250 LONG
SetRexxVar(struct RexxMsg
*, CONST_STRPTR var
, char *value
, ULONG length
);
251 LONG
GetRexxVar(struct RexxMsg
*, CONST_STRPTR var
, char **value
);
253 /* Inline versions of varargs functions */
254 #if !defined(ALIB_NO_INLINE_STDARG) && !defined(NO_INLINE_STDARG)
256 # define SetSuperAttrsA(cl, object, attrs) \
258 struct opSet __ops; \
260 __ops.MethodID = OM_SET; \
261 __ops.ops_AttrList = (attrs); \
262 __ops.ops_GInfo = NULL; \
264 DoSuperMethodA((cl), (object), (Msg) &__ops.MethodID); \
266 # define SetSuperAttrs(cl, object, args...) \
268 IPTR __args[] = { AROS_PP_VARIADIC_CAST2IPTR(args) }; \
269 SetSuperAttrsA((cl), (object), (struct TagItem *) __args); \
271 # define DoMethodA(object, message) \
277 (struct Hook *) OCLASS((object)), (object), (message) \
284 # define DoMethod(object, methodid, args...) \
286 IPTR __args[] = {methodid, AROS_PP_VARIADIC_CAST2IPTR(args)}; \
287 DoMethodA((object), __args); \
290 # define DoSuperMethodA(cl, object, message) \
292 ((cl) != NULL && (object) != NULL) ? \
295 (struct Hook *) ((Class *) (cl))->cl_Super, \
296 (object), (message) \
302 # define DoSuperMethod(cl, object, methodid, args...) \
304 IPTR __args[] = {methodid, AROS_PP_VARIADIC_CAST2IPTR(args)}; \
305 DoSuperMethodA((cl), (object), __args); \
308 # define CoerceMethodA(cl, object, message) \
310 ((cl) != NULL && (object) != NULL) ? \
311 CALLHOOKPKT((struct Hook *) (cl), (object), (message)) \
316 # define CoerceMethod(cl, object, methodid, args...) \
318 IPTR __args[] = {methodid, AROS_PP_VARIADIC_CAST2IPTR(args)}; \
319 CoerceMethodA((cl), (object), __args); \
321 # define DoSuperNewTagList(cl, object, gadgetinfo, tags) \
323 struct opSet __ops; \
325 __ops.MethodID = OM_NEW; \
326 __ops.ops_AttrList = (tags); \
327 __ops.ops_GInfo = (gadgetinfo); \
329 (cl) != NULL && (object) != NULL ? \
330 DoSuperMethodA((cl), (object), (Msg)&__ops.MethodID) \
335 # define DoSuperNewTags(cl, object, gadgetinfo, args...) \
337 IPTR __args[] = {AROS_PP_VARIADIC_CAST2IPTR(args)}; \
340 (cl), (object), (gadgetinfo), (struct TagItem *) __args \
344 #define CallHook(hook, object, args...) \
346 IPTR __args[] = {AROS_PP_VARIADIC_CAST2IPTR(args)}; \
347 CallHookA((hook), (object), __args); \
350 #endif /* !ALIB_NO_INLINE_STDARG && !NO_INLINE_STDARG */
354 #endif /* CLIB_ALIB_PROTOS_H */