From a8411bdfac2a8aa4e58a10ce39e647e36d675909 Mon Sep 17 00:00:00 2001 From: server Date: Wed, 22 Jan 2025 23:03:34 -0500 Subject: [PATCH] Wed Jan 22 11:03:34 PM EST 2025 --- Makefile | 17 ++++++++++++++++- bin/idyll | Bin 0 -> 93632 bytes build.sh | 1 + src/hardware/hardware.c | 26 +++++++++++++++++++++++--- src/hardware/hardware.h | 8 ++++++++ src/idyllic.c | 10 ++++++---- src/main.c | 2 ++ src/parsing/evaluator.h | 4 ++-- 8 files changed, 58 insertions(+), 10 deletions(-) create mode 100755 bin/idyll create mode 100644 build.sh diff --git a/Makefile b/Makefile index 263f47d..048c49f 100755 --- a/Makefile +++ b/Makefile @@ -1,2 +1,17 @@ make: - gcc src/main.c -o build/idyll -DDESKTOP + mkdir -p bin + gcc src/main.c -g -o bin/idyll -DDESKTOP -DWORD64 + +install: + mkdir -p bin + gcc src/main.c -o bin/idyll -DDESKTOP -DWORD64 + sudo cp bin/idyll /usr/local/bin/ + +remove: + sudo rm /usr/local/bin/idyll + +uninstall: + sudo rm /usr/local/bin/idyll + +clean: + rm -r bin diff --git a/bin/idyll b/bin/idyll new file mode 100755 index 0000000000000000000000000000000000000000..af2fcc6c2a0902b4e5286e9f9d9b7348e584453f GIT binary patch literal 93632 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 literal 0 HcmV?d00001 diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..b763c2c --- /dev/null +++ b/build.sh @@ -0,0 +1 @@ +make $@ diff --git a/src/hardware/hardware.c b/src/hardware/hardware.c index 37db3fa..dcb759c 100755 --- a/src/hardware/hardware.c +++ b/src/hardware/hardware.c @@ -3,23 +3,43 @@ #ifdef DESKTOP #include +#include +#include #define false 0 #define true 1 -unsigned char RAM[125000]; +unsigned char* RAM; +ibword RAM_SIZE; FILE *OPEN_FILE; +void initRAM() { + RAM = malloc(1000); + RAM_SIZE = 1000; +} + +void freeRAM() { + RAM_SIZE = 0; + free(RAM); +} + //Get size of RAM. ibword sizeRAM() { - return 125000; + struct sysinfo info; + if (sysinfo(&info) == 0) { + unsigned long long available = (info.freeram * info.mem_unit) + (info.freeswap * info.mem_unit); + return (ibword)available; + } + return 32000; } //Read a byte from RAM. char readRAM(ibword pos) { + if (pos >= RAM_SIZE) RAM = realloc(RAM, ++RAM_SIZE); return RAM[pos]; } -//Write a byte to RAM. +//Write a byte to RAM. void writeRAM(ibword pos, char b) { + if (pos >= RAM_SIZE) RAM = realloc(RAM, ++RAM_SIZE); RAM[pos] = b; } diff --git a/src/hardware/hardware.h b/src/hardware/hardware.h index 39ba0d5..af06f7b 100755 --- a/src/hardware/hardware.h +++ b/src/hardware/hardware.h @@ -6,8 +6,16 @@ typedef unsigned char bool; #endif #define undefined -1 #ifdef DESKTOP +#ifdef WORD64 +typedef unsigned long long ibword; +#endif +#ifdef WORD32 typedef unsigned int ibword; #endif +#ifdef WORD16 +typedef unsigned short ibword; +#endif +#endif #ifdef ARDUINO typedef unsigned short ibword; #endif diff --git a/src/idyllic.c b/src/idyllic.c index 0c39476..2ad619a 100755 --- a/src/idyllic.c +++ b/src/idyllic.c @@ -162,10 +162,12 @@ char evalAssignment(char *newstr) { //Check if key exists. ibword addr; if (newstr == NULL) + { addr = findNode(key); - if (addr == (ibword)undefined && newstr == NULL) - return ERROR_KEY_NOT_FOUND; - + if (addr == (ibword)undefined && newstr == NULL) + return ERROR_KEY_NOT_FOUND; + } + //Skip to equal sign. char isArray = 0; while (c != '=' && !isEOL(c)) { @@ -1159,4 +1161,4 @@ char eval(char *line) { if (!copyStringIntoLineBuff(line)) return ERROR_SYNTAX; return evalLine(0, 0); -} \ No newline at end of file +} diff --git a/src/main.c b/src/main.c index 0a8091a..98e241d 100755 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,7 @@ #include "idyllic.c" void main(int argc, char **args) { + initRAM(); if (argc == 2) { if (!fileExistsOnDevice(args[1])) { printf("File `%s` not found.\n", args[1]); @@ -38,4 +39,5 @@ void main(int argc, char **args) { printString("Too long.\n"); } } + freeRAM(); } diff --git a/src/parsing/evaluator.h b/src/parsing/evaluator.h index 0d9d49d..d4b2481 100755 --- a/src/parsing/evaluator.h +++ b/src/parsing/evaluator.h @@ -57,11 +57,11 @@ void appendAdr(ibword num); //Copies a numeric formula to EVAL_BUFF for numeric processing. // Returns false if a variable didn't exist. -char copyFormulaIntoEvalBuff(); +char copyFormulaIntoEvalBuff(ibword pos, ibword size); //Copies a string or string formula to EVAL_BUFF for string processing. // Returns false if a variable didn't exist. -char copyStringIntoEvalBuff(); +char copyStringIntoEvalBuff(ibword pos, ibword size); //If EVAL_BUFF contains a string formula, use this to read // a character from it. Characters are shifted out of it. -- 2.39.5