From: server Date: Thu, 23 Jan 2025 04:03:34 +0000 (-0500) Subject: Wed Jan 22 11:03:34 PM EST 2025 X-Git-Url: http://www.foleosoft.com/?a=commitdiff_plain;ds=inline;p=IdyllicBASIC.git Wed Jan 22 11:03:34 PM EST 2025 --- 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 0000000..af2fcc6 Binary files /dev/null and b/bin/idyll differ 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.