/* tagspace engine * -scut */ typedef struct ts_tag { struct ts_tag * next; unsigned int rel; unsigned int len; } ts_tag; ts_tag * ts_add (ts_tag *t, unsigned int rel, unsigned int len) { ts_tag * w; for (w = t ; w != NULL ; w = w->next) { if (w->rel <= rel && (w->rel + w->len) >= (rel + len)) return (t); /* already in */ /* case 1: a part of rel is already in the tag */ if (w->rel <= rel && (w->rel + w->len) >= rel) { w->len = rel + len - w->rel; return (t); } /* case 2: end of rel cuts tag */ /* XXX: TODO: FIXME */ } w = calloc (1, sizeof (ts_tag)); w->next = t; w->rel = rel; w->len = len; return (w); }