Aros/Developer/Docs/Libraries/MUIMaster
Introduction
[edit | edit source]All muimaster library offsets after MUI_MakeObjectA() are incorrect. There should be 4 private entries between MUI_MakeObjectA and MUI_Layout(). NOTE: after MUI_Layout(), not MUI_MakeObjectA(), I was blind this time :) (Bernd Roesch noticed this in 2006, not much has happened..). You can always have multiple .conf files that get used depending on the specific port, or you could modify the build process to preprocess the files before parsing them, or...
This breaks all native m68k MUI custom classes (usually by corrupting the stack or crashing in some graphics library region routines, no wonder my debugging attempts didn't make any sense)
So, whats the solution without breaking all existing ports? Inject 4 fake entries just for the m68k port? and the PPC one too... even better, add an ifdef for AROS pre-ABIv1. I thought .conf files don't support port specific changes? (muimaster.conf needs 4 empty lines after MUI_Layout).
Can you do '#ifdef' in *.conf files?!
And, what about the AROS_LHx() macros that have the offset numbers in them? The offset numbers can be macros themselves. As for .conf files, I don't think you can (Staf?), but you could preprocess them with the normal preprocessor (again, Staf? :) No, but you can specify the conffile option to build_module. You should be able to do something like in the mmakefile.src (untested).
ifeq($(AROS_TARGET_CPU), m68k) CONFFILE := muimaster_m68k.conf else CONFFILE := muimaster.conf endif %build_module ...\ conffile=$(CONFFILE) Or this ;-) ifeq($(AROS_TARGET_CPU), i386) CONFFILE := muimaster_i386.conf else CONFFILE := muimaster.conf endif
References
[edit | edit source]Object* MUI_NewObjectA(ClassID classid, struct TagItem* tags) (A0, A1) void MUI_DisposeObject(Object* obj) (A0) LONG MUI_RequestA(APTR app, APTR win, LONGBITS flags, CONST_STRPTR title, CONST_STRPTR gadgets, CONST_STRPTR format, APTR params) (D0, D1, D2, A0, A1, A2, A3) APTR MUI_AllocAslRequest(unsigned long reqType, struct TagItem* tagList) (D0, A0) BOOL MUI_AslRequest(APTR requester, struct TagItem* tagList) (A0, A1) void MUI_FreeAslRequest(APTR requester) (A0) LONG MUI_Error() () LONG MUI_SetError(LONG num) (D0) struct IClass* MUI_GetClass(ClassID classid) (A0) void MUI_FreeClass(Class* cl) (A0) void MUI_RequestIDCMP(Object* obj, ULONG flags) (A0, D0) void MUI_RejectIDCMP(Object* obj, ULONG flags) (A0, D0) void MUI_Redraw(Object* obj, ULONG flags) (A0, D0) struct MUI_CustomClass* MUI_CreateCustomClass(struct Library* base, ClassID supername, struct MUI_CustomClass* supermcc, ULONG datasize, APTR dispatcher) (A0, A1, A2, D0, A3) BOOL MUI_DeleteCustomClass(struct MUI_CustomClass* mcc) (A0) Object* MUI_MakeObjectA(LONG type, IPTR* params) (D0, A0) BOOL MUI_Layout(Object* obj, LONG left, LONG top, LONG width, LONG height, ULONG flags) (A0, D0, D1, D2, D3, D4) LONG MUI_ObtainPen(struct MUI_RenderInfo* mri, struct MUI_PenSpec* spec, ULONG flags) (A0, A1, D0) void MUI_ReleasePen(struct MUI_RenderInfo* mri, LONG pen) (A0, D0) APTR MUI_AddClipping(struct MUI_RenderInfo* mri, WORD left, WORD top, WORD width, WORD height) (A0, D0, D1, D2, D3) void MUI_RemoveClipping(struct MUI_RenderInfo* mri, APTR handle) (A0, A1) APTR MUI_AddClipRegion(struct MUI_RenderInfo* mri, struct Region* r) (A0, A1) void MUI_RemoveClipRegion(struct MUI_RenderInfo* mri, APTR handle) (A0, A1) BOOL MUI_BeginRefresh(struct MUI_RenderInfo* mri, ULONG flags) (A0, D0) void MUI_EndRefresh(struct MUI_RenderInfo* mri, ULONG flags) (A0, D0)