#include #include #include "overlay.h" int overlay_init(Overlay* overlay) { overlay->messages = NULL; overlay->next_id = 0; return 0; } void overlay_done(Overlay* overlay) { overlay_message* next = NULL; for ( overlay_message* message = overlay->messages; NULL != message; message = next) { next = message->next; free(message->string); free(message); } } int overlay_clear(Overlay* overlay) { int n_cleared = 0; for ( overlay_message* message = overlay->messages; NULL != message; message = message->next) { free(message->string); free(message); ++n_cleared; } overlay_init(overlay); return n_cleared; } int overlay_clear_message(Overlay* overlay, int id) { int result = -1; overlay_message* last = NULL; overlay_message* message = overlay->messages; for ( ; NULL != message && message->id != id; last = message, message = message->next ); if (NULL != message) { result = 0; if (NULL == last) { overlay->messages = message->next; } else { last->next = message->next; } free(message->string); free(message); } return result; } int overlay_add_message(Overlay* overlay, const char* string, int expiry) { overlay_message* message = calloc(1, sizeof(*message)); message->string = strdup(string); message->id = ++(overlay->next_id); message->expiry = expiry; message->next = NULL; if (NULL == overlay->messages) { overlay->messages = message; } else { overlay_message* last = overlay->messages; for ( ; NULL != last->next; last = last->next); last->next = message; } return message->id; }