version bump
[smdp.git] / src / markdown.c
index 2648dc1..c03d307 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * An implementation of markdown objects.
- * Copyright (C) 2014 Michael Goehler
+ * Copyright (C) 2018 Michael Goehler
  *
  * This file is part of mdp.
  *
@@ -26,8 +26,8 @@
 
 line_t *new_line() {
     line_t *x = malloc(sizeof(line_t));
-    x->text = (void*)0;
-    x->prev = x->next = (void*)0;
+    x->text = NULL;
+    x->prev = x->next = NULL;
     x->bits = x->length = x->offset = 0;
     return x;
 }
@@ -41,9 +41,9 @@ line_t *next_line(line_t *prev) {
 
 slide_t *new_slide() {
     slide_t *x = malloc(sizeof(slide_t));
-    x->line = (void*)0;
-    x->prev = x->next = (void*)0;
-    x->lines = 0;
+    x->line = NULL;
+    x->prev = x->next = NULL;
+    x->lines = x->stop = 0;
     return x;
 }
 
@@ -56,8 +56,34 @@ slide_t *next_slide(slide_t *prev) {
 
 deck_t *new_deck() {
     deck_t *x = malloc(sizeof(deck_t));
-    x->header = (void*)0;
-    x->slide = (void*)0;
+    x->header = NULL;
+    x->slide = new_slide();
     x->slides = x->headers = 0;
     return x;
 }
+
+void free_line(line_t *line) {
+    line_t *next;
+    while (line) {
+        next = line->next;
+        if(line->text)
+            (line->text->delete)(line->text);
+        free(line);
+        line = next;
+    }
+}
+
+void free_deck(deck_t *deck) {
+    slide_t *slide, *next;
+    if (deck == NULL)
+        return;
+    slide = deck->slide;
+    while (slide) {
+        free_line(slide->line);
+        next = slide->next;
+        free(slide);
+        slide = next;
+    }
+    free_line(deck->header);
+    free(deck);
+}