Initial revision
[ssr] / StraySrc / Libraries / Sapphire / csapph / h / llistMan
CommitLineData
2ee739cc 1/*
2 * llistMan.h
3 *
4 * [Generated from llistMan, 25 September 1996]
5 */
6
7#if !defined(__CC_NORCROFT) || !defined(__arm)
8 #error You must use the Norcroft ARM Compiler for Sapphire programs
9#endif
10
11#pragma include_only_once
12#pragma force_top_level
13
14#ifndef __llistMan_h
15#define __llistMan_h
16
17#ifndef __sapphire_h
18 #include "sapphire.h"
19#endif
20
21/*----- Overview ----------------------------------------------------------*
22 *
23 * Functions provided:
24 *
25 * llist_create
26 * llist_destroy
27 * llist_addItem
28 * llist_removeItem
29 * llist_reinsert
30 * llist_setFlags
31 * llist_items
32 * llist_enumerate
33 * llist_itemToIndex
34 * llist_indexToItem
35 * llist_registerSort
36 * llist_init
37 * llist_desc
38 */
39
40/* --- llist_create --- *
41 *
42 * On entry: R0 == pointer to 12 byte list head to fill in
43 * R1 == sort routine to use (0 for none)
44 *
45 * On exit: List head filled in appropriately
46 *
47 * Use: This call set up list. It must be made just once, before
48 * and other list alls are made. On entry, R0 must point to
49 * 12 bytes in memory, which is filled in by this call.
50 * Example code may look like:
51 *
52 * ADR R0,myList
53 * LDR R1,=myStrCmp
54 * BL llist_create
55 *
56 * .
57 * .
58 * .
59 *
60 * mylist DCD 0,0
61 */
62
63extern routine llist_create;
64
65/* --- llist_destroy --- *
66 *
67 * On entry: R0 == pointer to list head
68 *
69 * On exit: R0 corrupted
70 *
71 * Use: Destroys the given list.
72 */
73
74extern routine llist_destroy;
75
76/* --- llist_addItem --- *
77 *
78 * On entry: R0 == pointer to list head
79 * R1 == pointer to user data (or 0 if none to copy)
80 * R2 == size of user data
81 *
82 * On exit: R0 preserved
83 * R1 == pointer to the new user data
84 * May return an error
85 *
86 * Use: This call will add an item to a list. Notice that the
87 * item is entirely allocated by the list manager, it does not
88 * point to the data that you supply it, instead it
89 * copies the data into the newly created item. For this reason
90 * if 0 is supplied as the user data, nothing is copied.
91 * It is the returned user data pointer, that must be
92 * used to reference the item in other llist calls.
93 */
94
95extern routine llist_addItem;
96
97/* --- llist_removeItem --- *
98 *
99 * On entry: R0 == list head pointer
100 * R1 == pointer to item to remove (as returned by addItem)
101 *
102 * On exit: --
103 *
104 * Use: This call removes the item from the given list. All
105 * memory taken up by the item is freed. If the value
106 * passed in R1 is not an item in the list, then all hell is
107 * likely to break loose, so I don't advise making this mistake.
108 */
109
110extern routine llist_removeItem;
111
112/* --- llist_reinsert --- *
113 *
114 * On entry: R0 == pointer to list head
115 * R1 == item to reinsert
116 *
117 * On exit: --
118 *
119 * Use: Reinserts the given item into the list. This call is
120 * used if the item is updated in such a way that its
121 * position in the list may change.
122 */
123
124extern routine llist_reinsert;
125
126/* --- llist_setFlags --- *
127 *
128 * On entry: R1 == pointer to list item
129 * R2 == BIC word
130 * R3 == EOR word
131 *
132 * On exit: R2 == the new flags word
133 *
134 * Use: Sets the flags associated with the given item. If you
135 * just wish to read them, set R2 and R3 to 0.
136 */
137
138extern routine llist_setFlags;
139
140/* --- llist_items --- *
141 *
142 * On entry: R0 == pointer to list head
143 *
144 * On exit: R1 == number of items in list
145 *
146 * Use: Returns the number of items in the list given. This is
147 * a cached value, and so is very fast.
148 */
149
150extern routine llist_items;
151
152/* --- llist_enumerate --- *
153 *
154 * On entry: R0 == pointer to list head
155 * R1 == pointer to item (0 for first)
156 * R2 == mask word
157 * R3 == test word
158 *
159 * On exit: CS and R1 == next item that matches
160 * CC and R1 corrupted if no more items
161 *
162 * Use: This calls return each item in the list, one at a time,
163 * as long as the item matches the pattern given.
164 */
165
166extern routine llist_enumerate;
167
168/* --- llist_itemToIndex --- *
169 *
170 * On entry: R0 == pointer to list head
171 * R1 == point to the item
172 *
173 * On exit: R1 == index of the item, -1 if it's not there
174 *
175 * Use: Returns the index of the item given, indexed from 0.
176 */
177
178extern routine llist_itemToIndex;
179
180/* --- llist_indexToItem --- *
181 *
182 * On entry: R0 == pointer to list head
183 * R1 == point to the index (indexed from 0)
184 *
185 * On exit: R1 == the item itself, or 0 if index doesn't exist
186 *
187 * Use: Returns the index of the item given, indexed from 0.
188 */
189
190extern routine llist_indexToItem;
191
192/* --- llist_registerSort --- *
193 *
194 * On entry: R0 == pointer to list head
195 * R1 == pointer to new sort routine
196 *
197 * On exit: --
198 *
199 * Use: Registers a new sort routine to be used on the given
200 * list. This call will also cause a complete resort
201 * of the given list using a mergesort algorithm -- O(n log n).
202 */
203
204extern routine llist_registerSort;
205
206/* --- llist_init --- *
207 *
208 * On entry: --
209 *
210 * On exit: --
211 *
212 * Use: Initialises the llistMan unit.
213 */
214
215extern routine llist_init;
216
217/* --- llist_desc --- *
218 *
219 * A llist decription for use with listbox
220 */
221
222extern routine llist_desc;
223
224/*----- That's all, folks -------------------------------------------------*/
225
226#endif