From 3f3d43616d066d2280540fe57a43eaff07b17ce2 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Mon, 13 Nov 2023 19:39:45 +0100 Subject: [PATCH] WIP: assembly --- include/ulas.h | 10 +++++++--- src/test.c | 2 ++ src/ulas.c | 14 ++++++++++++++ 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/ulas.h b/include/ulas.h index d5d4178..a772c9b 100644 --- a/include/ulas.h +++ b/include/ulas.h @@ -94,12 +94,12 @@ struct ulas_str { */ 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; @@ -226,6 +226,7 @@ extern struct ulas_config ulascfg; 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); @@ -250,6 +251,9 @@ struct ulas_str ulas_str(size_t n); // 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); /* diff --git a/src/test.c b/src/test.c index f5badfd..51c9731 100644 --- a/src/test.c +++ b/src/test.c @@ -152,5 +152,7 @@ int main(int arc, char **argv) { test_strbuf(); test_preproc(); + ulas_free(); + return 0; } diff --git a/src/ulas.c b/src/ulas.c index f6e2dc6..0e9d7b3 100644 --- a/src/ulas.c +++ b/src/ulas.c @@ -11,6 +11,7 @@ struct ulas_config ulascfg; struct ulas ulas; void ulas_init(struct ulas_config cfg) { + // init global cfg if (ulasin == NULL) { ulasin = stdin; } @@ -22,9 +23,14 @@ void ulas_init(struct ulas_config cfg) { } 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) { @@ -89,6 +95,8 @@ cleanup: fclose(ulasin); } + ulas_free(); + return rc; } @@ -224,6 +232,10 @@ struct ulas_str ulas_strensr(struct ulas_str *s, size_t maxlen) { 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); @@ -694,6 +706,8 @@ int ulas_asmline(FILE *dst, FILE *src, const char *line, size_t n) { fprintf(dst, "%s", line); + // read the first token and decide + return rc; } -- 2.30.2