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
);
67 APTR
ReAllocVec(APTR oldmem
, ULONG size
, ULONG requirements
);
69 void MergeSortList(struct MinList
*l
, int (*compare
)(struct MinNode
*n1
, struct MinNode
*n2
, void *data
), void *data
);
72 CxObj
*HotKey (STRPTR description
, struct MsgPort
*port
, LONG id
);
73 VOID
FreeIEvents (volatile struct InputEvent
*events
);
74 UBYTE
**ArgArrayInit(ULONG argc
, UBYTE
**argv
);
75 VOID
ArgArrayDone(VOID
);
76 LONG
ArgInt(UBYTE
**tt
, STRPTR entry
, LONG defaultVal
);
77 STRPTR
ArgString(UBYTE
**tt
, STRPTR entry
, STRPTR defaultstring
);
78 struct InputEvent
*InvertString(STRPTR str
, struct KeyMap
*km
);
79 struct InputEvent
*InvertStringForwd(STRPTR str
, struct KeyMap
*km
);
83 LONG
ObtainBestPen( struct ColorMap
* cm
, LONG R
, LONG G
, LONG B
, ULONG tag1
, ...) __stackparm
;
87 void GetRPAttrs( struct RastPort
* rp
, Tag tag1
, ...) __stackparm
;
90 BOOL
AndRectRect(struct Rectangle
*rect1
, struct Rectangle
*rect2
, struct Rectangle
*intersect
);
91 struct Region
*CopyRegion(struct Region
*region
);
92 struct Region
*NewRectRegion(WORD MinX
, WORD MinY
, WORD MaxX
, WORD MaxY
);
95 #ifndef SetWindowPointer
96 void SetWindowPointer( struct Window
* window
, ULONG tag1
, ...) __stackparm
;
100 IPTR
DoMethodA (Object
* obj
, Msg message
);
101 IPTR
DoMethod (Object
* obj
, STACKULONG MethodID
, ...) __stackparm
;
102 IPTR
DoSuperMethodA (Class
* cl
, Object
* obj
, Msg message
);
103 IPTR
DoSuperMethod (Class
* cl
, Object
* obj
, STACKULONG MethodID
, ...) __stackparm
;
104 IPTR
CoerceMethodA (Class
* cl
, Object
* obj
, Msg message
);
105 IPTR
CoerceMethod (Class
* cl
, Object
* obj
, STACKULONG MethodID
, ...) __stackparm
;
106 IPTR
DoSuperNewTagList(Class
*CLASS
, Object
*object
, struct GadgetInfo
*gadgetInfo
, struct TagItem
*tags
);
107 IPTR
DoSuperNewTags(Class
*CLASS
, Object
*object
, struct GadgetInfo
*gadgetInfo
, Tag tag1
, ...) __stackparm
;
108 IPTR
SetSuperAttrs (Class
* cl
, Object
* obj
, Tag tag1
, ...) __stackparm
;
112 struct Catalog
*OpenCatalog(const struct Locale
* locale
,
119 APTR
LibCreatePool (ULONG requirements
, ULONG puddleSize
, ULONG threshSize
);
120 void LibDeletePool (APTR poolHeader
);
121 APTR
LibAllocPooled (APTR poolHeader
, ULONG memSize
);
122 void LibFreePooled (APTR poolHeader
, APTR memory
, ULONG memSize
);
125 AROS_UFP3(IPTR
, HookEntry
,
126 AROS_UFPA(struct Hook
*, hook
, A0
),
127 AROS_UFPA(APTR
, obj
, A2
),
128 AROS_UFPA(APTR
, param
, A1
)
131 #ifndef AROS_METHODRETURNTYPE
132 # define AROS_METHODRETURNTYPE IPTR
135 #ifdef AROS_SLOWSTACKMETHODS
136 Msg
GetMsgFromStack (IPTR MethodID
, va_list args
);
137 void FreeMsgFromStack (Msg msg
);
139 # define AROS_NR_SLOWSTACKMETHODS_PRE(arg) \
143 va_start (args, arg); \
145 if ((msg = GetMsgFromStack (arg, args))) \
148 # define AROS_SLOWSTACKMETHODS_PRE_AS(arg, type) \
154 va_start (args, arg); \
156 if ((msg = GetMsgFromStack (arg, args))) \
159 # define AROS_SLOWSTACKMETHODS_PRE(arg) \
160 AROS_SLOWSTACKMETHODS_PRE_AS(arg, AROS_METHODRETURNTYPE)
162 # define AROS_SLOWSTACKMETHODS_ARG(arg) msg
164 # define AROS_SLOWSTACKMETHODS_POST \
165 FreeMsgFromStack (msg); \
168 retval = (AROS_METHODRETURNTYPE)0L; \
174 # define AROS_NR_SLOWSTACKMETHODS_POST \
175 FreeMsgFromStack (msg); \
180 # define AROS_NR_SLOWSTACKMETHODS_PRE(arg)
181 # define AROS_SLOWSTACKMETHODS_PRE(arg) AROS_METHODRETURNTYPE retval;
182 # define AROS_SLOWSTACKMETHODS_PRE_AS(arg, type) type retval;
183 # define AROS_SLOWSTACKMETHODS_ARG(arg) ((Msg)&(arg))
184 # define AROS_SLOWSTACKMETHODS_POST return retval;
185 # define AROS_NR_SLOWSTACKMETHODS_POST
186 #endif /* AROS_SLOWSTACKMETHODS */
188 #ifdef AROS_SLOWSTACKTAGS
189 struct TagItem
* GetTagsFromStack (IPTR firstTag
, va_list args
);
190 void FreeTagsFromStack (struct TagItem
* tags
);
191 #endif /* AROS_SLOWSTACKTAGS */
193 #ifndef AROS_HOOKRETURNTYPE
194 # define AROS_HOOKRETURNTYPE IPTR
197 #ifdef AROS_SLOWSTACKHOOKS
198 APTR
GetParamsFromStack (va_list args
);
199 void FreeParamsFromStack (APTR params
);
201 # define AROS_NR_SLOWSTACKHOOKS_PRE(arg) \
205 va_start (args, arg); \
207 if ((params = GetParamsFromStack (args))) \
210 # define AROS_SLOWSTACKHOOKS_PRE(arg) \
211 AROS_HOOKRETURNTYPE retval; \
216 va_start (args, arg); \
218 if ((params = GetParamsFromStack (args))) \
221 # define AROS_SLOWSTACKHOOKS_ARG(arg) params
223 # define AROS_SLOWSTACKHOOKS_POST \
224 FreeParamsFromStack (params); \
227 retval = (AROS_HOOKRETURNTYPE)0L; \
233 # define AROS_NR_SLOWSTACKHOOKS_POST \
234 FreeParamsFromStack (params); \
239 # define AROS_NR_SLOWSTACKHOOKS_PRE(arg)
240 # define AROS_SLOWSTACKHOOKS_PRE(arg) AROS_HOOKRETURNTYPE retval;
241 # define AROS_SLOWSTACKHOOKS_ARG(arg) ((IPTR*)&(arg)+1)
242 # define AROS_SLOWSTACKHOOKS_POST return retval;
243 # define AROS_NR_SLOWSTACKHOOKS_POST
244 #endif /* AROS_SLOWSTACKHOOKS */
247 BOOL
CheckRexxMsg(struct RexxMsg
*);
248 LONG
SetRexxVar(struct RexxMsg
*, CONST_STRPTR var
, char *value
, ULONG length
);
249 LONG
GetRexxVar(struct RexxMsg
*, CONST_STRPTR var
, char **value
);
251 /* Inline versions of varargs functions */
252 #if !defined(ALIB_NO_INLINE_STDARG) && !defined(NO_INLINE_STDARG)
254 # define SetSuperAttrsA(cl, object, attrs) \
256 struct opSet __ops; \
258 __ops.MethodID = OM_SET; \
259 __ops.ops_AttrList = (attrs); \
260 __ops.ops_GInfo = NULL; \
262 DoSuperMethodA((cl), (object), (Msg) &__ops.MethodID); \
264 # define SetSuperAttrs(cl, object, args...) \
266 IPTR __args[] = { AROS_PP_VARIADIC_CAST2IPTR(args) }; \
267 SetSuperAttrsA((cl), (object), (struct TagItem *) __args); \
269 # define DoMethodA(object, message) \
275 (struct Hook *) OCLASS((object)), (object), (message) \
282 # define DoMethod(object, methodid, args...) \
284 IPTR __args[] = {methodid, AROS_PP_VARIADIC_CAST2IPTR(args)}; \
285 DoMethodA((object), __args); \
288 # define DoSuperMethodA(cl, object, message) \
290 ((cl) != NULL && (object) != NULL) ? \
293 (struct Hook *) ((Class *) (cl))->cl_Super, \
294 (object), (message) \
300 # define DoSuperMethod(cl, object, methodid, args...) \
302 IPTR __args[] = {methodid, AROS_PP_VARIADIC_CAST2IPTR(args)}; \
303 DoSuperMethodA((cl), (object), __args); \
306 # define CoerceMethodA(cl, object, message) \
308 ((cl) != NULL && (object) != NULL) ? \
309 CALLHOOKPKT((struct Hook *) (cl), (object), (message)) \
314 # define CoerceMethod(cl, object, methodid, args...) \
316 IPTR __args[] = {methodid, AROS_PP_VARIADIC_CAST2IPTR(args)}; \
317 CoerceMethodA((cl), (object), __args); \
319 # define DoSuperNewTagList(cl, object, gadgetinfo, tags) \
321 struct opSet __ops; \
323 __ops.MethodID = OM_NEW; \
324 __ops.ops_AttrList = (tags); \
325 __ops.ops_GInfo = (gadgetinfo); \
327 (cl) != NULL && (object) != NULL ? \
328 DoSuperMethodA((cl), (object), (Msg)&__ops.MethodID) \
333 # define DoSuperNewTags(cl, object, gadgetinfo, args...) \
335 IPTR __args[] = {AROS_PP_VARIADIC_CAST2IPTR(args)}; \
338 (cl), (object), (gadgetinfo), (struct TagItem *) __args \
342 #define CallHook(hook, object, args...) \
344 IPTR __args[] = {AROS_PP_VARIADIC_CAST2IPTR(args)}; \
345 CallHookA((hook), (object), __args); \
348 #endif /* !ALIB_NO_INLINE_STDARG && !NO_INLINE_STDARG */
352 #endif /* CLIB_ALIB_PROTOS_H */