Fixed binary search: no more infinite loops when vendor is unknown.
[tangerine.git] / workbench / libs / muimaster / mui_createcustomclass.c
blobbc89046f09706354febb643cc55da482b2846378
1 /*
2 Copyright © 2002-2007, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #include <proto/exec.h>
7 #include <proto/intuition.h>
8 #include <proto/graphics.h>
9 #include <proto/dos.h>
10 #include <proto/muimaster.h>
11 #include <proto/utility.h>
13 #include "mui.h"
14 #include "muimaster_intern.h"
15 #include "support.h"
16 #include "support_classes.h"
18 /*****************************************************************************
20 NAME */
21 AROS_LH5(struct MUI_CustomClass *, MUI_CreateCustomClass,
23 /* SYNOPSIS */
24 AROS_LHA(struct Library *, base, A0),
25 AROS_LHA(ClassID, supername, A1),
26 AROS_LHA(struct MUI_CustomClass *, supermcc, A2),
27 AROS_LHA(ULONG, datasize, D0),
28 AROS_LHA(APTR, dispatcher, A3),
30 /* LOCATION */
31 struct Library *, MUIMasterBase, 18, MUIMaster)
33 /* FUNCTION
35 INPUTS
37 RESULT
39 NOTES
41 EXAMPLE
43 BUGS
45 SEE ALSO
47 INTERNALS
49 HISTORY
51 *****************************************************************************/
53 AROS_LIBFUNC_INIT
55 struct MUI_CustomClass *mcc;
56 struct IClass *cl, *super;
57 ClassID id = NULL;
59 if ((supername == NULL) && (supermcc == NULL))
60 return NULL;
62 if (!supermcc)
64 super = MUI_GetClass(supername);
65 if (!super) return NULL;
67 else super = supermcc->mcc_Class;
69 if (!(mcc = mui_alloc_struct(struct MUI_CustomClass)))
70 return NULL;
72 if (base)
73 id = FilePart(((struct Node *)base)->ln_Name);
75 if (!(cl = MakeClass(id, NULL, super, datasize, 0)))
77 mui_free(mcc);
78 return NULL;
81 mcc->mcc_UtilityBase = (struct Library *)UtilityBase;
82 mcc->mcc_DOSBase = (struct Library *)DOSBase;
83 mcc->mcc_GfxBase = (struct Library *)GfxBase;
84 mcc->mcc_IntuitionBase = (struct Library *)IntuitionBase;
86 mcc->mcc_Class = cl;
87 mcc->mcc_Super = super;
88 mcc->mcc_Module = NULL; /* _zune_class_load() will set this */
90 #if defined(__MAXON__) || defined(__amigaos4__)
91 cl->cl_Dispatcher.h_Entry = (HOOKFUNC)dispatcher;
92 #else
93 cl->cl_Dispatcher.h_Entry = (HOOKFUNC)metaDispatcher;
94 cl->cl_Dispatcher.h_SubEntry = (HOOKFUNC)dispatcher;
95 #endif
96 cl->cl_Dispatcher.h_Data = base;
98 return mcc;
100 AROS_LIBFUNC_EXIT
101 } /* MUIA_CreateCustomClass */