struct list_node {
  struct list_node * next;
  UINT data;
};

typedef struct list_node * LIST;

extern LIST list_new();
extern list_is_empty();
extern LIST list_prepend(/* list, data */);
extern LIST list_next();
extern LIST list_data();
extern LIST list_delete_one(/* l */);
extern list_delete_all(/* l */);
extern UINT list_for_all(/* list, function, state */);
extern LIST list_reverse(/* list */);

#define NULL_LIST  ((LIST)0)
#define list_new() ((LIST)0)
#define list_is_empty(l) ((l) == list_new())
#define list_next(l) ((l) -> next)
#define list_data(l) ((l) -> data)

