#include #include #include #include #include tsv_t *init_tsv(char *source) { tsv_t *tsv = safe_calloc(1, sizeof(tsv_t *)); tsv->source = source; tsv->i = 0; tsv->c = tsv->source[tsv->i]; return tsv; } void tsv_move(tsv_t *tsv) { if (tsv->c != '\0') { tsv->i++; tsv->c = tsv->source[tsv->i]; } } string_t *tsv_next(tsv_t *tsv) { string_t *s = init_string(NULL); bool escape = false; while (tsv->c != '\t' && !escape) { if (tsv->c == '\0') break; string_push(s, tsv->c); tsv_move(tsv); } return s; }