# HG changeset patch # User John Tsiombikas # Date 1314822218 -10800 # Node ID eec4999989608551b377a6fcf95b1899d42a2a19 # Parent 1705e550bd91937751f9fab86a42b6c41bef79a4 foo diff -r 1705e550bd91 -r eec499998960 src/dsys.c --- a/src/dsys.c Wed Aug 31 05:08:54 2011 +0300 +++ b/src/dsys.c Wed Aug 31 23:23:38 2011 +0300 @@ -41,7 +41,11 @@ demo->src_tm = demo->start_tm = -1; - /* TODO */ + if(read_script(demo, fp) == -1) { + free(demo); + return 0; + } + return demo; } @@ -57,6 +61,52 @@ } + +static int read_script(struct dsys_demo *demo, FILE *fp) +{ + int nline = 0; + char buf[512], *line, tok; + int timestamp; + struct dsys_event *ev; + + while(fgets(buf, sizeof buf, fp)) { + nline++; + + line = buf;/*strip_ws(buf);*/ + + if(!line || !*line) { + continue; + } + + if(!(tok = strtok(line, SEP)) || !isdigit(*tok)) { + fprintf(stderr, "error reading script at line: %d: expected timestamp\n", nline); + return -1; + } + timestamp = atoi(tok); + + if(!(tok = strtok(0, SEP))) { + fprintf(stderr, "error reading script at line: %d: expected event name\n", nline); + return -1; + } + + if(!(ev = malloc(sizeof *ev))) { + perror("read_script: failed to allocate memory for an event\n"); + return -1; + } + ev->t0 = t0; + ev->t1 = t1; + + if(!(ev->name = malloc(strlen(tok) + 1))) { + free(ev); + sprintf("read_script: failed to allocate memory for the event name: %s\n", tok); + return -1; + } + } + + return 0; +} + + void dsys_update(struct dsys_demo *demo, demotime_t tm) { demo->src_tm = tm;