*/
struct ulas {
- char **strs;
- size_t strslen;
-
char *filename;
size_t line;
+ // holds the current token
+ struct ulas_str tok;
+
// internal counter
// used whenever a new unique number might be needed
int icntr;
struct ulas_config ulas_cfg_from_env(void);
void ulas_init(struct ulas_config cfg);
+void ulas_free(void);
int ulas_main(struct ulas_config cfg);
// ensure the string buffer is at least n bytes long, if not realloc
struct ulas_str ulas_strensr(struct ulas_str *s, size_t maxlen);
+// require at least n bytes + the current strlen
+struct ulas_str ulas_strreq(struct ulas_str *s, size_t n);
+
void ulas_strfree(struct ulas_str *s);
/*
struct ulas ulas;
void ulas_init(struct ulas_config cfg) {
+ // init global cfg
if (ulasin == NULL) {
ulasin = stdin;
}
}
ulascfg = cfg;
+ // init assembly context
memset(&ulas, 0, sizeof(ulas));
+
+ ulas.tok = ulas_str(8);
}
+void ulas_free(void) { ulas_strfree(&ulas.tok); }
+
int ulas_icntr(void) { return ulas.icntr++; }
struct ulas_config ulas_cfg_from_env(void) {
fclose(ulasin);
}
+ ulas_free();
+
return rc;
}
return *s;
}
+struct ulas_str ulas_strreq(struct ulas_str *s, size_t n) {
+ return ulas_strensr(s, strnlen(s->buf, s->maxlen)+n);
+}
+
void ulas_strfree(struct ulas_str *s) {
if (s->buf) {
free(s->buf);
fprintf(dst, "%s", line);
+ // read the first token and decide
+
return rc;
}