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