Don't get OOPBase in this ugly way.
[tangerine.git] / rom / intuition / itemaddress.c
blobe76f6dc1a75007877dee6ad7e7d91498e980b0ea
1 /*
2 Copyright © 1995-2003, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
5 */
7 #include "intuition_intern.h"
9 #define DEBUG_ITEMADDRESS(x) ;
10 #define DEBUG_ITEMADDRESS2(x) ;
12 /*****************************************************************************
14 NAME */
15 #include <proto/intuition.h>
17 AROS_LH2(struct MenuItem *, ItemAddress,
19 /* SYNOPSIS */
20 AROS_LHA(struct Menu *, menustrip, A0),
21 AROS_LHA(UWORD , menunumber, D0),
23 /* LOCATION */
24 struct IntuitionBase *, IntuitionBase, 24, Intuition)
26 /* FUNCTION
27 Returns the address of the menuitem 'menunumber' of 'menustrip'.
28 The number is the one you get from intuition after the user has
29 selected a menu.
30 The menunumber must be well-defined.
31 Valid numbers are MENUNULL, which makes the routine return NULL,
32 or valid item number of your menustrip, which contains
33 - a valid menu number
34 - a valid item number
35 - if the menu-item has a sub-item, a valid sub-item number
36 Menu number and item number must be specified. Sub-item, if
37 available, is optional, therefore this function returns either
38 the item or sub-item.
40 INPUTS
41 menustrip - Pointer to the first menu of the menustrip.
42 menunumber - Packed value describing the menu, item and if
43 appropriate sub-item.
45 RESULT
46 Returns NULL for menunumber == MENUNULL or the address of the
47 menuitem described by menunumber.
49 NOTES
51 EXAMPLE
53 BUGS
55 SEE ALSO
57 INTERNALS
59 HISTORY
61 *****************************************************************************/
63 AROS_LIBFUNC_INIT
64 AROS_LIBBASE_EXT_DECL(struct IntuitionBase *,IntuitionBase)
66 struct Menu *thismenu;
67 struct MenuItem *thisitem = NULL;
68 int i;
70 DEBUG_ITEMADDRESS(dprintf("ItemAddress: Strip %p Number 0x%lx (%d/%d/%d)\n",
71 menustrip, menunumber, MENUNUM(menunumber),
72 ITEMNUM(menunumber), SUBNUM(menunumber)));
74 IntuitionBase = IntuitionBase; /* shut up the compiler */
76 SANITY_CHECKR(menustrip,NULL)
78 if ( menunumber != MENUNULL )
80 thismenu = menustrip;
81 DEBUG_ITEMADDRESS2(dprintf("ItemAddress: Menu %p\n", thismenu));
83 for ( i = 0 ; thismenu && i < MENUNUM ( menunumber ) ; i++ )
85 thismenu = thismenu->NextMenu;
86 DEBUG_ITEMADDRESS2(dprintf("ItemAddress: Menu %p\n", thismenu));
89 if (thismenu)
91 thisitem = thismenu->FirstItem;
92 DEBUG_ITEMADDRESS2(dprintf("ItemAddress: Item %p\n", thisitem));
94 for ( i = 0 ; thisitem && i < ITEMNUM ( menunumber ) ; i++ )
96 thisitem = thisitem->NextItem;
97 DEBUG_ITEMADDRESS2(dprintf("ItemAddress: Item %p\n", thisitem));
100 if (thisitem && ( SUBNUM ( menunumber ) != NOSUB ) && thisitem->SubItem )
102 thisitem = thisitem->SubItem;
103 DEBUG_ITEMADDRESS2(dprintf("ItemAddress: SubItem %p\n", thisitem));
105 for ( i = 0 ; thisitem && i < SUBNUM ( menunumber ) ; i++ )
107 DEBUG_ITEMADDRESS2(dprintf("ItemAddress: SubItem %p\n", thisitem));
108 thisitem = thisitem->NextItem;
114 DEBUG_ITEMADDRESS(dprintf("ItemAddress: return %p\n", thisitem));
116 return thisitem;
118 AROS_LIBFUNC_EXIT
119 } /* ItemAddress */