ref: 0b3f9e8300f084a030c21db509c1b31cfcc29ab5
dir: /cue.c/
#include <u.h> #include <libc.h> #include "cuefs.h" #include "y.tab.h" Timestamp parsetime(int min, int sec, int frames) { sec += min*60; frames += sec*75; return (Timestamp){frames}; } Cuesheet* newsheet(void) { return emallocz(sizeof(Cuesheet), 1); } AFile* lastfile(Cuesheet *c) { if(c->files == nil) return nil; if(c->curfile == nil) c->curfile = c->files; while(c->curfile->next != nil) c->curfile = c->curfile->next; return c->curfile; } Entry* lastentry(Cuesheet *c) { if(c->entries == nil) return nil; if(c->curentry == nil) c->curentry = c->entries; while(c->curentry->next != nil) c->curentry = c->curentry->next; return c->curentry; } void atleast(Timestamps *ts, int val) { if(ts->maxindex > val) return; ts->starts = erealloc(ts->starts, (val+1) * sizeof(*ts->starts)); ts->maxindex = val; } void setperformer(Cuesheet *c, char *artist) { artist = strdup(artist); if(c->curentry == nil) setstr(nil, &c->performer, artist); else setstr(c->performer, &c->curentry->performer, artist); } void settitle(Cuesheet *c, char *title) { title = strdup(title); if(c->curentry == nil) setstr(nil, &c->title, title); else setstr(nil, &c->curentry->title, title); } void addfile(Cuesheet *c, char *name, int format) { AFile *new; lastfile(c); new = emalloc(sizeof(*new)); new->name = strdup(name); new->type = format; new->next = nil; if(c->files == nil) c->files = new; else c->curfile->next = new; c->curfile = new; } void addnewtrack(Cuesheet *c, int i) { Entry *new; lastentry(c); new = emallocz(sizeof(*new), 1); new->file = c->curfile; new->performer = c->performer; new->index = i; if(c->entries == nil) c->entries = new; else c->curentry->next = nil; c->curentry = new; } void settimestamp(Cuesheet *c, int i, Timestamp t) { if(c->curentry == nil) parserfatal("timestamp outside of track"); atleast(c->curentry, i); c->curentry->starts[i] = t; }