1 /*
2  * Motif
3  *
4  * Copyright (c) 1987-2012, The Open Group. All rights reserved.
5  *
6  * These libraries and programs are free software; you can
7  * redistribute them and/or modify them under the terms of the GNU
8  * Lesser General Public License as published by the Free Software
9  * Foundation; either version 2 of the License, or (at your option)
10  * any later version.
11  *
12  * These libraries and programs are distributed in the hope that
13  * they will be useful, but WITHOUT ANY WARRANTY; without even the
14  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15  * PURPOSE. See the GNU Lesser General Public License for more
16  * details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with these librararies and programs; if not, write
20  * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
21  * Floor, Boston, MA 02110-1301 USA
22  *
23  */
24 
25 #ifndef _LIST_H
26 #define _LIST_H
27 
28 #if defined(VMS) || defined (__VMS)
29 #include <X11/apienvset.h>
30 #endif
31 
32 #include <Xm/Xm.h>
33 #include <Xm/Ext.h>
34 
35 #ifdef __cplusplus
36 extern "C" {
37 #endif
38 
39 /************************************************************
40  *
41  * Stack Data structure.
42  *
43  ************************************************************/
44 
45 typedef struct _XmStackRec {
46     int top, alloc;    		/* The top node of the stack, and the number
47 				   of allocated nodes. */
48     XtPointer * elems;		/* The stack elements. */
49 } XmStackRec, *XmStack;
50 
51 /************************************************************
52  *
53  *  Global function defs.
54  *
55  ************************************************************/
56 
57 XmStack _XmStackInit(void);
58 void _XmStackFree(XmStack), _XmStackPush(XmStack, XtPointer);
59 XtPointer _XmStackPop(XmStack);
60 
61 /************************************************************
62  *
63  * Queue Data structure.
64  *
65  ************************************************************/
66 
67 typedef struct __XmQElem {
68     struct __XmQElem *next, *prev;	/* doubly linked list. */
69     XtPointer data;		/* The data associated with this element. */
70     Boolean alloced;
71 } _XmQElem;
72 
73 typedef struct _XmQueueRec {
74     _XmQElem *first, *last;	/* the first and last elements. */
75     _XmQElem *free_elems;		/* Unused elements. */
76 } XmQueueRec, *XmQueue;
77 
78 /************************************************************
79  *
80  *  Global function defs.
81  *
82  ************************************************************/
83 
84 XmQueue _XmQueueInit(void);
85 void _XmQueueFree(XmQueue), _XmQueuePush(XmQueue, XtPointer);
86 XtPointer _XmQueuePop(XmQueue);
87 int _XmQueueCount(XmQueue);
88 
89 /*
90  * Internal functions used only by other parts of the utils library.
91  */
92 
93 void _Xm_AddQueue(XmQueue, _XmQElem *, _XmQElem *);
94 _XmQElem * _Xm_RemQueue(_XmQElem **);
95 _XmQElem * _Xm_GetNewElement(XmQueue);
96 
97 /************************************************************
98  *
99  * New types.
100  *
101  ************************************************************/
102 
103 typedef _XmQElem XmListElem;
104 typedef XmQueueRec *XmList;
105 typedef Boolean (*XmListFunc)(XmListElem *, XtPointer);
106 
107 /************************************************************
108  *
109  * Macros.
110  *
111  ************************************************************/
112 
113 #define XmListElemNext(elem) (elem)->next
114 #define XmListElemPrev(elem) (elem)->prev
115 #define XmListElemData(elem) (elem)->data
116 
117 #define XmListFirst(list) (list)->first
118 #define XmListLast(list) (list)->last
119 
120 /************************************************************
121  *
122  *  Global function defs.
123  *
124  ************************************************************/
125 
126 void _XmListFree(XmList), _XmListRemove(XmList, XmListElem *);
127 
128 XmListElem * _XmListAddAfter(XmList, XmListElem *, XtPointer);
129 XmListElem * _XmListAddBefore(XmList, XmListElem *, XtPointer);
130 
131 XmList _XmListInit(void);
132 
133 int _XmListCount(XmList);
134 
135 XmListElem *_XmListExec(XmList, XmListElem *, XmListElem *, XmListFunc, XtPointer);
136 
137 #ifdef __cplusplus
138 }	/* Closes scope of 'extern "C"' declaration */
139 #endif
140 
141 #if defined(VMS) || defined (__VMS)
142 #include <X11/apienvrst.h>
143 #endif
144 
145 /* #ifdef XmRENAME_WIDGETS */
146 /* #define USE_OLD_NAMES */
147 /* #endif */
148 
149 #ifdef USE_OLD_NAMES
150 
151 #define ListAddAfter	_XmListAddAfter
152 #define ListAddBefore	_XmListAddBefore
153 #define ListCount	_XmListCount
154 #define ListExec	_XmListExec
155 #define ListFree	_XmListFree
156 #define ListInit	_XmListInit
157 #define ListRemove	_XmListRemove
158 #define QueueCount	_XmQueueCount
159 #define QueueFree	_XmQueueFree
160 #define QueueInit	_XmQueueInit
161 #define QueuePop	_XmQueuePop
162 #define QueuePush	_XmQueuePush
163 #define StackFree	_XmStackFree
164 #define StackInit	_XmStackInit
165 #define StackPop	_XmStackPop
166 #define StackPush	_XmStackPush
167 #define _AddQueue	_Xm_AddQueue
168 #define _GetNewElement	_Xm_GetNewElement
169 #define _RemQueue	_Xm_RemQueue
170 
171 #define Stack		XmStack
172 #define StackRec	XmStackRec
173 #define QElem		_XmQElem
174 #define QueueRec	XmQueueRec
175 #define Queue		XmQueue
176 #define ListElem	XmListElem
177 #define List		XmList
178 #define ListFunc	XmListFunc
179 
180 #define ListElemNext	XmListElemNext
181 #define ListElemPrev	XmListElemPrev
182 #define ListElemData	XmListElemData
183 #define ListFirst	XmListFirst
184 #define ListLast	XmListLast
185 
186 #endif /* USE_OLD_NAMES */
187 
188 #endif /* _LIST_H */
189