diff options
author | Thomas White <taw@bitwiz.me.uk> | 2019-02-17 23:04:20 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.me.uk> | 2019-02-17 23:04:20 +0100 |
commit | 135cc1ef50930b86189be2303f68ab387ebf7f27 (patch) | |
tree | 862b828c73c44e0f5ed77ce035db855da15083f8 /libstorycode/presentation.c | |
parent | 6a31d8c2ba70c1a5342bc827091a2076e65fb2e0 (diff) |
WIP on parser
Diffstat (limited to 'libstorycode/presentation.c')
-rw-r--r-- | libstorycode/presentation.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/libstorycode/presentation.c b/libstorycode/presentation.c index 2ac751f..e393020 100644 --- a/libstorycode/presentation.c +++ b/libstorycode/presentation.c @@ -27,6 +27,8 @@ #include <stdlib.h> #include <string.h> +#include <assert.h> +#include <stdio.h> #include "presentation.h" #include "stylesheet.h" @@ -39,6 +41,7 @@ struct _presentation Narrative *narrative; int n_slides; Slide **slides; + int max_slides; }; @@ -51,10 +54,44 @@ Presentation *presentation_new() p->narrative = NULL; p->slides = NULL; p->n_slides = 0; + p->max_slides = 0; return p; } + void presentation_free(Presentation *p) { free(p); } + + +void presentation_add_stylesheet(Presentation *p, Stylesheet *ss) +{ + assert(p->stylesheet == NULL); + p->stylesheet = ss; +} + + +void presentation_add_narrative(Presentation *p, Narrative *n) +{ + assert(p->narrative == NULL); + p->narrative = n; +} + + +void presentation_add_slide(Presentation *p, Slide *s) +{ + assert(p->n_slides <= p->max_slides); + if ( p->n_slides == p->max_slides ) { + Slide **nslides = realloc(p->slides, + (p->max_slides+8)*sizeof(Slide *)); + if ( nslides == NULL ) { + fprintf(stderr, "Failed to allocate memory for slide\n"); + return; + } + p->slides = nslides; + p->max_slides += 8; + } + + p->slides[p->n_slides++] = s; +} |