|
- #include <stdlib.h>
- #include <string.h>
-
- #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;
- }
|