author | Alan Dipert
<alan@dipert.org> 2024-03-29 23:58:42 UTC |
committer | Alan Dipert
<alan@dipert.org> 2024-03-29 23:58:42 UTC |
parent | dd8848b51dab975a9966b586f75e2abeb00ce1bc |
Makefile | +5 | -2 |
lines.c | +85 | -0 |
lines.h | +14 | -0 |
main.c | +4 | -1 |
diff --git a/Makefile b/Makefile index 9f558af..82b1ee3 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,11 @@ YFLAGS=-d all: usbasic -usbasic: lex.yy.o usbasic.tab.o parse.o vec.o main.o - $(CC) $(CFLAGS) -o usbasic lex.yy.o usbasic.tab.o parse.o vec.o main.o -lgc -lfl -lreadline -lhistory +usbasic: lex.yy.o usbasic.tab.o parse.o vec.o lines.o main.o + $(CC) $(CFLAGS) -o usbasic lex.yy.o usbasic.tab.o parse.o vec.o lines.o main.o -lgc -lfl -lreadline -lhistory + +lines.o: lines.c lines.h vec.h parse.h + $(CC) $(CFLAGS) -c lines.c vec.o: vec.c vec.h $(CC) $(CFLAGS) -c vec.c diff --git a/lines.c b/lines.c new file mode 100644 index 0000000..d06ad4f --- /dev/null +++ b/lines.c @@ -0,0 +1,85 @@ +/* + * This file is part of Unicorn Sparkle Basic and is released under + * CC0 1.0 Universal License. See LICENSE.txt file or + * https://creativecommons.org/publicdomain/zero/1.0/ for full license + * text. + */ + +#include "lines.h" + +struct node_tag **lines_make() { + struct node_tag** lines = vector_create(); + return lines; +} + +void lines_add(struct node_tag **lines, struct node_tag *line) { + vector_add(&lines, line); +} + +void lines_print(struct node_tag **lines) { + printf("Size = %zu\n", vector_size(lines)); +} + +/* #include <stdio.h> */ +/* #include <stdlib.h> */ + +/* typedef struct { */ +/* double* array; */ +/* size_t used; */ +/* size_t size; */ +/* } Vector; */ + +/* void initVector(Vector *v, size_t initialSize) { */ +/* v->array = (double *)malloc(initialSize * sizeof(double)); */ +/* v->used = 0; */ +/* v->size = initialSize; */ +/* } */ + +/* void insertSorted(Vector *v, double element) { */ +/* // Check for reallocation needs */ +/* if (v->used == v->size) { */ +/* v->size *= 2; */ +/* v->array = (double *)realloc(v->array, v->size * sizeof(double)); */ +/* } */ + +/* // Binary search to find the correct insertion point */ +/* size_t low = 0, high = v->used; */ +/* while (low < high) { */ +/* size_t mid = low + (high - low) / 2; */ +/* if (v->array[mid] < element) { */ +/* low = mid + 1; */ +/* } else { */ +/* high = mid; */ +/* } */ +/* } */ + +/* // Insert element at the correct position */ +/* for (size_t i = v->used; i > low; --i) { */ +/* v->array[i] = v->array[i - 1]; */ +/* } */ +/* v->array[low] = element; */ +/* v->used++; */ +/* } */ + +/* void freeVector(Vector *v) { */ +/* free(v->array); */ +/* v->array = NULL; */ +/* v->used = v->size = 0; */ +/* } */ + +/* int main() { */ +/* Vector v; */ +/* initVector(&v, 5); */ + +/* insertSorted(&v, 3.0); */ +/* insertSorted(&v, 1.0); */ +/* insertSorted(&v, 4.0); */ +/* insertSorted(&v, 2.0); */ + +/* for (size_t i = 0; i < v.used; i++) { */ +/* printf("%f ", v.array[i]); */ +/* } */ + +/* freeVector(&v); */ +/* return 0; */ +/* } */ diff --git a/lines.h b/lines.h new file mode 100644 index 0000000..c1be860 --- /dev/null +++ b/lines.h @@ -0,0 +1,14 @@ +/* + * This file is part of Unicorn Sparkle Basic and is released under + * CC0 1.0 Universal License. See LICENSE.txt file or + * https://creativecommons.org/publicdomain/zero/1.0/ for full license + * text. + */ + +#include "parse.h" +#include "vec.h" + +struct node_tag **lines_make(); +void lines_add(struct node_tag **lines, struct node_tag *line); +void lines_print(struct node_tag **lines); + diff --git a/main.c b/main.c index 55e628c..844cfd0 100644 --- a/main.c +++ b/main.c @@ -5,15 +5,18 @@ * text. */ -#include "parse.h" +#include "lines.h" #include <stdio.h> void read_loop() { struct node_tag *line; + struct node_tag **lines = lines_make(); while (1) { if ((line = read_line_stdin("🦄 "))) { printf("It parsed 👍\n"); printf("linum: %g\n", line->data.line.linum); + lines_add(lines, line); + lines_print(lines); } } }