From: server <server1@server1.server1>
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;h=refs%2Fheads%2Fmaster;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 <stdio.h>
+#include <stdlib.h>
+#include <sys/sysinfo.h>
 #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.