+}
+
+void *alist::first()
+{
+ cur_item = 1;
+ if (num_items == 0) {
+ return NULL;
+ } else {
+ return items[0];
+ }
+}
+
+void *alist::last()
+{
+ if (num_items == 0) {
+ return NULL;
+ } else {
+ cur_item = num_items;
+ return items[num_items-1];
+ }
+}
+
+void *alist::next()
+{
+ if (cur_item >= num_items) {
+ return NULL;
+ } else {
+ return items[cur_item++];
+ }
+}
+
+void *alist::prev()
+{
+ if (cur_item <= 1) {
+ return NULL;
+ } else {
+ return items[--cur_item];
+ }
+}
+
+/*
+ * prepend an item to the list
+ */
+void alist::prepend(void *item) {
+ grow_list();
+ if (num_items == 0) {
+ items[num_items++] = item;
+ return;
+ }
+ for (int i=num_items; i > 0; i--) {
+ items[i] = items[i-1];
+ }
+ items[0] = item;
+ num_items++;
+}
+
+
+/*
+ * Append an item to the list
+ */
+void alist::append(void *item) {
+ grow_list();