btmux-0.6-rc3/doc/
btmux-0.6-rc3/event/
btmux-0.6-rc3/game/
btmux-0.6-rc3/game/maps/
btmux-0.6-rc3/game/mechs/
btmux-0.6-rc3/include/
btmux-0.6-rc3/misc/
btmux-0.6-rc3/python/
btmux-0.6-rc3/src/hcode/btech/
btmux-0.6-rc3/tree/
/*
 * Doubly Linked List
 */

/* Doubly Linked List Node */
typedef struct dllist_node_t {
    struct dllist_node_t *next, *prev;
    void *data;
} dllist_node;

/* DLLIST - Doesn't store data just
 * size of list and has pointer to
 * head node and tail node */
typedef struct dllist_t {
    struct dllist_node_t *head, *tail;
    unsigned int size;
} dllist;

/* The various create functions */
dllist *dllist_create_list();
dllist_node *dllist_create_node(void *data);

/* The different destroy functions
 * destroy_node returns the data */
int dllist_destroy_list(dllist *ddlist);
void *dllist_destroy_node(dllist_node *node);   /* Shouldn't include this one but whatever */

/* The various insert functions */
void dllist_insert_after(dllist *dllist, dllist_node *node, dllist_node *newnode);
void dllist_insert_before(dllist *dllist, dllist_node *node, dllist_node *newnode);
void dllist_insert_beginning(dllist *dllist, dllist_node *newnode);
void dllist_insert_end(dllist *dllist, dllist_node *newnode);

/* Remove nodes and return the data */
void *dllist_remove(dllist *dllist, dllist_node *node);
void *dllist_remove_node_at_pos(dllist *dllist, int pos);

/* Utility functions */
dllist_node *dllist_head(dllist *dllist);
dllist_node *dllist_tail(dllist *dllist);
dllist_node *dllist_next(dllist_node *node);
dllist_node *dllist_prev(dllist_node *node);

void *dllist_data(dllist_node *node);
int dllist_size(dllist *dllist);
void *dllist_get_node(dllist *dllist, int pos);