Better code readability master
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 30 Jun 2025 16:26:59 +0000 (19:26 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Mon, 30 Jun 2025 16:26:59 +0000 (19:26 +0300)
Math/Truth table calculator/truth.bas

index 9d417f2..2d7bf8d 100755 (executable)
@@ -6,7 +6,7 @@
 '\r
 ' Changelog:\r
 ' 2002, Initial version\r
-' 2024.09, Improved program readability using AI\r
+' 2024 - 2025, Improved program readability\r
 '\r
 '\r
 ' A truth table is a mathematical table used to determine the output of a\r
@@ -38,12 +38,13 @@ DECLARE SUB printText (x!, y!, c!, c1!, a$)
 DECLARE SUB sist ()\r
 DECLARE SUB start ()\r
 DIM SHARED font(0 TO 7, 0 TO 7, 0 TO 122)\r
-DIM SHARED tehe(0 TO 79)\r
-DIM SHARED muut(1 TO 8, 1 TO 100)\r
-DIM SHARED muun(1 TO 8)\r
-DIM SHARED vast(1 TO 100)\r
-DIM SHARED xloc(0 TO 79)\r
-DIM SHARED xlah(0 TO 79, 0 TO 100)\r
+\r
+' Logical expression storage and processing arrays\r
+DIM SHARED logicalExpression(0 TO 79) ' Stores ASCII values of logical expression\r
+DIM SHARED variableValues(1 TO 8, 1 TO 100) ' Stores variable values for each combination\r
+DIM SHARED variableNames(1 TO 8) ' Stores ASCII values of variable names\r
+DIM SHARED resultValues(1 TO 100) ' Stores computed result values\r
+DIM SHARED expressionPosition(0 TO 79) ' Stores screen positions of expression characters\r
 DIM SHARED xlahn\r
 DIM SHARED tehl\r
 DIM SHARED nm\r
@@ -92,18 +93,18 @@ muu(118) = 1 ' v
 \r
 nm = 0\r
 FOR a = x1 TO x2\r
-    b = tehe(a)\r
+    b = logicalExpression(a)\r
     IF ((b >= 65) AND (b <= 90)) OR ((b >= 97) AND (b <= 122)) THEN\r
         IF muu(b) = 0 THEN\r
             nm = nm + 1\r
-            muun(nm) = b\r
+            variableNames(nm) = b\r
             muu(b) = 1\r
         END IF\r
     END IF\r
 NEXT a\r
 \r
-muun(nm + 1) = 116 ' t\r
-muun(nm + 2) = 118 ' v\r
+variableNames(nm + 1) = 116 ' t\r
+variableNames(nm + 2) = 118 ' v\r
 \r
 f = 2 ^ nm\r
 tehl = f\r
@@ -114,22 +115,22 @@ FOR a = 1 TO nm
     FOR b = 1 TO 2 ^ nm\r
         IF e > f THEN d = -d: e = 1\r
         IF d = 1 THEN c = ASC("t") ELSE c = ASC("v")\r
-        muut(a, b) = c\r
+        variableValues(a, b) = c\r
         e = e + 1\r
     NEXT b\r
 NEXT a\r
 \r
 FOR a = 1 TO tehl\r
-    muut(nm + 1, a) = 116 ' t\r
-    muut(nm + 2, a) = 118 ' v\r
+    variableValues(nm + 1, a) = 116 ' t\r
+    variableValues(nm + 2, a) = 118 ' v\r
 NEXT a\r
 \r
 nm = nm + 2\r
 \r
 DIM bck(0 TO 79)\r
 FOR a = 0 TO 79\r
-    bck(a) = tehe(a)\r
-    xloc(a) = a\r
+    bck(a) = logicalExpression(a)\r
+    expressionPosition(a) = a\r
 NEXT a\r
 \r
 LOCATE 5, 1\r
@@ -138,24 +139,24 @@ teeslg x1, x2, a
 tee x1, x2 + a\r
 \r
 FOR a = 0 TO 79\r
-    tehe(a) = bck(a)\r
+    logicalExpression(a) = bck(a)\r
 NEXT a\r
 \r
 FOR a = 1 TO tehl\r
-    printText x2 + 1, a, 14, 0, CHR$(vast(a))\r
+    printText x2 + 1, a, 14, 0, CHR$(resultValues(a))\r
 NEXT a\r
 \r
 END SUB\r
 \r
 SUB lendm (x1, m)\r
 ' Measures the length of a logical expression enclosed in parentheses\r
-IF tehe(x1) <> 41 THEN m = 1: GOTO 19\r
+IF logicalExpression(x1) <> 41 THEN m = 1: GOTO 19\r
 c = x1\r
 d = 1\r
 20\r
 c = c - 1\r
-IF tehe(c) = 40 THEN d = d - 1\r
-IF tehe(c) = 41 THEN d = d + 1\r
+IF logicalExpression(c) = 40 THEN d = d - 1\r
+IF logicalExpression(c) = 41 THEN d = d + 1\r
 IF d > 0 THEN GOTO 20\r
 m = x1 - c\r
 19\r
@@ -163,13 +164,13 @@ END SUB
 \r
 SUB lendp (x1, m)\r
 ' Measures the length of a logical expression enclosed in parentheses\r
-IF tehe(x1) <> 40 THEN m = 1: GOTO 17\r
+IF logicalExpression(x1) <> 40 THEN m = 1: GOTO 17\r
 c = x1\r
 d = 1\r
 18\r
 c = c + 1\r
-IF tehe(c) = 40 THEN d = d + 1\r
-IF tehe(c) = 41 THEN d = d - 1\r
+IF logicalExpression(c) = 40 THEN d = d + 1\r
+IF logicalExpression(c) = 41 THEN d = d - 1\r
 IF d > 0 THEN GOTO 18\r
 m = c - x1 + 1\r
 17\r
@@ -178,16 +179,16 @@ END SUB
 SUB mov (x1, n)\r
 ' Moves a portion of the logical expression to the right\r
 FOR a = 79 - n TO x1 STEP -1\r
-    tehe(a + n) = tehe(a)\r
-    xloc(a + n) = xloc(a)\r
+    logicalExpression(a + n) = logicalExpression(a)\r
+    expressionPosition(a + n) = expressionPosition(a)\r
 NEXT a\r
 END SUB\r
 \r
 SUB movM (x1, n)\r
 ' Moves a portion of the logical expression to the left\r
 FOR a = x1 TO 79 - n\r
-    tehe(a) = tehe(a + n)\r
-    xloc(a) = xloc(a + n)\r
+    logicalExpression(a) = logicalExpression(a + n)\r
+    expressionPosition(a) = expressionPosition(a + n)\r
 NEXT a\r
 END SUB\r
 \r
@@ -198,9 +199,9 @@ CLS
 ln = 79\r
 FOR a = 0 TO 79\r
 5\r
-    IF tehe(a) = 32 OR tehe(a) = 0 THEN\r
+    IF logicalExpression(a) = 32 OR logicalExpression(a) = 0 THEN\r
         FOR b = a TO 78\r
-            tehe(b) = tehe(b + 1)\r
+            logicalExpression(b) = logicalExpression(b + 1)\r
         NEXT b\r
         ln = ln - 1\r
         IF ln <= a - 1 THEN GOTO 6\r
@@ -212,7 +213,7 @@ NEXT a
 CLS\r
 \r
 FOR a = 0 TO ln\r
-    printText a, 0, 13, 1, CHR$(tehe(a))\r
+    printText a, 0, 13, 1, CHR$(logicalExpression(a))\r
 NEXT a\r
 \r
 printText 0, 1, 7, 0, SPACE$(79)\r
@@ -252,30 +253,30 @@ SUB removeRedundancies (startIndex, endIndex, removalCount)
     parenthesesCount = 0\r
 \r
     a = startIndex\r
-26  IF tehe(a) = 40 THEN\r
+26  IF logicalExpression(a) = 40 THEN\r
         ' We found an opening parenthesis. Now let's see if it can be removed.\r
-        IF a = startIndex THEN p1 = 100 ELSE getOperatorPriority tehe(a - 1), p1\r
+        IF a = startIndex THEN p1 = 100 ELSE getOperatorPriority logicalExpression(a - 1), p1\r
 \r
         c = a\r
         d = 1\r
         p2 = 0\r
 \r
 25      c = c + 1\r
-        IF tehe(c) = 40 THEN d = d + 1\r
-        IF tehe(c) = 41 THEN d = d - 1\r
+        IF logicalExpression(c) = 40 THEN d = d + 1\r
+        IF logicalExpression(c) = 41 THEN d = d - 1\r
 \r
         ' Once d returns to 1, we are back to one level of parentheses,\r
         ' meaning we can check operator priority inside.\r
         IF d = 1 THEN\r
-            IF (tehe(c) > 0) AND (tehe(c) <= 5) THEN\r
-                getOperatorPriority tehe(c), b\r
+            IF (logicalExpression(c) > 0) AND (logicalExpression(c) <= 5) THEN\r
+                getOperatorPriority logicalExpression(c), b\r
                 IF b > p2 THEN p2 = b\r
             END IF\r
         END IF\r
 \r
         IF d > 0 THEN GOTO 25\r
 \r
-        IF c + 1 > currentEnd THEN p3 = 100 ELSE getOperatorPriority tehe(c + 1), p3\r
+        IF c + 1 > currentEnd THEN p3 = 100 ELSE getOperatorPriority logicalExpression(c + 1), p3\r
 \r
         ' If the operator outside is higher priority than what's inside,\r
         ' we can safely remove the parentheses.\r
@@ -301,13 +302,13 @@ printText 0, 0, 3, 0, "Enter equation (ESC to quit) keys: 1 - " + CHR$(1) + "
 printText 0, 1, 3, 0, "Example: a" + CHR$(1) + "b" + CHR$(2) + "(g" + CHR$(3) + "b)"\r
 \r
 FOR a = 0 TO 79\r
-    tehe(a) = 0\r
+    logicalExpression(a) = 0\r
 NEXT a\r
 \r
 x = 0\r
 1\r
 FOR a = 0 TO 79\r
-    IF a = x THEN printText a, 2, 14, 1, CHR$(tehe(a)) ELSE printText a, 2, 3, 0, CHR$(tehe(a))\r
+    IF a = x THEN printText a, 2, 14, 1, CHR$(logicalExpression(a)) ELSE printText a, 2, 3, 0, CHR$(logicalExpression(a))\r
 NEXT a\r
 2\r
 a$ = INKEY$\r
@@ -324,14 +325,14 @@ IF LEN(a$) = 1 THEN
         CASE 32, 40, 41, 65 TO 90, 97 TO 122\r
 3\r
             FOR a = 78 TO x STEP -1\r
-                tehe(a + 1) = tehe(a)\r
+                logicalExpression(a + 1) = logicalExpression(a)\r
             NEXT a\r
-            tehe(x) = ASC(a$)\r
+            logicalExpression(x) = ASC(a$)\r
             x = x + 1\r
         CASE 8\r
             IF x > 0 THEN\r
                 FOR a = x - 1 TO 78\r
-                    tehe(a) = tehe(a + 1)\r
+                    logicalExpression(a) = logicalExpression(a + 1)\r
                 NEXT a\r
                 x = x - 1\r
             END IF\r
@@ -414,22 +415,22 @@ oe = 0
 oex = 0\r
 \r
 FOR a = x1 TO x2\r
-    b = tehe(a)\r
+    b = logicalExpression(a)\r
     SELECT CASE b\r
         CASE 40\r
             c = a\r
             d = 1\r
 10\r
             c = c + 1\r
-            IF tehe(c) = ASC("(") THEN d = d + 1\r
-            IF tehe(c) = ASC(")") THEN d = d - 1\r
+            IF logicalExpression(c) = ASC("(") THEN d = d + 1\r
+            IF logicalExpression(c) = ASC(")") THEN d = d - 1\r
             IF d = 0 THEN GOTO 11\r
             GOTO 10\r
 11\r
             tee a + 1, c - 1\r
             a = c\r
             FOR c = 1 TO tehl\r
-                opr(oprm, c) = vast(c)\r
+                opr(oprm, c) = resultValues(c)\r
             NEXT c\r
             GOTO 12\r
         CASE 5\r
@@ -440,12 +441,12 @@ FOR a = x1 TO x2
             oex = a\r
         CASE 65 TO 90, 97 TO 122\r
             FOR c = 1 TO nm\r
-                IF muun(c) = b THEN d = c: GOTO 8\r
+                IF variableNames(c) = b THEN d = c: GOTO 8\r
             NEXT c\r
 8\r
             FOR c = 1 TO tehl\r
-                opr(oprm, c) = muut(d, c)\r
-                printText xloc(a), c, 3, 0, CHR$(muut(d, c))\r
+                opr(oprm, c) = variableValues(d, c)\r
+                printText expressionPosition(a), c, 3, 0, CHR$(variableValues(d, c))\r
             NEXT c\r
 12\r
             IF ng = 1 THEN GOSUB mkneg\r
@@ -457,7 +458,7 @@ FOR a = x1 TO x2
                             e = opr(2, c)\r
                             IF d = e THEN f = ASC("t") ELSE f = ASC("v")\r
                             opr(1, c) = f\r
-                            printText xloc(oex), c, 12, 0, CHR$(f)\r
+                            printText expressionPosition(oex), c, 12, 0, CHR$(f)\r
                         NEXT c\r
                     CASE 2\r
                         FOR c = 1 TO tehl\r
@@ -466,7 +467,7 @@ FOR a = x1 TO x2
                             f = ASC("t")\r
                             IF (d = ASC("t")) AND (e = ASC("v")) THEN f = ASC("v")\r
                             opr(1, c) = f\r
-                            printText xloc(oex), c, 12, 0, CHR$(f)\r
+                            printText expressionPosition(oex), c, 12, 0, CHR$(f)\r
                         NEXT c\r
                     CASE 3\r
                         FOR c = 1 TO tehl\r
@@ -475,7 +476,7 @@ FOR a = x1 TO x2
                             f = ASC("t")\r
                             IF (d = ASC("v")) AND (e = ASC("v")) THEN f = ASC("v")\r
                             opr(1, c) = f\r
-                            printText xloc(oex), c, 12, 0, CHR$(f)\r
+                            printText expressionPosition(oex), c, 12, 0, CHR$(f)\r
                         NEXT c\r
                     CASE 4\r
                         FOR c = 1 TO tehl\r
@@ -484,7 +485,7 @@ FOR a = x1 TO x2
                             f = ASC("v")\r
                             IF (d = ASC("t")) AND (e = ASC("t")) THEN f = ASC("t")\r
                             opr(1, c) = f\r
-                            printText xloc(oex), c, 12, 0, CHR$(f)\r
+                            printText expressionPosition(oex), c, 12, 0, CHR$(f)\r
                         NEXT c\r
                 END SELECT\r
             ELSE\r
@@ -500,7 +501,7 @@ mkneg:
     FOR c = 1 TO tehl\r
         d = opr(oprm, c)\r
         IF d = ASC("t") THEN d = ASC("v") ELSE d = ASC("t")\r
-        printText xloc(ngx), c, 4, 0, CHR$(d)\r
+        printText expressionPosition(ngx), c, 4, 0, CHR$(d)\r
         opr(oprm, c) = d\r
     NEXT c\r
     ng = 0\r
@@ -508,7 +509,7 @@ RETURN
 9\r
 \r
 FOR c = 1 TO tehl\r
-    vast(c) = opr(1, c)\r
+    resultValues(c) = opr(1, c)\r
 NEXT c\r
 END SUB\r
 \r
@@ -520,14 +521,14 @@ FOR e = 1 TO 4
     g = 1\r
     a = x1\r
 21\r
-    b = tehe(a)\r
+    b = logicalExpression(a)\r
     IF b = 40 THEN\r
         c = a\r
         d = 1\r
 14\r
         c = c + 1\r
-        IF tehe(c) = ASC("(") THEN d = d + 1\r
-        IF tehe(c) = ASC(")") THEN d = d - 1\r
+        IF logicalExpression(c) = ASC("(") THEN d = d + 1\r
+        IF logicalExpression(c) = ASC(")") THEN d = d - 1\r
         IF d = 0 THEN GOTO 15\r
         GOTO 14\r
 15\r
@@ -540,10 +541,10 @@ FOR e = 1 TO 4
 \r
     IF (b = 5) AND (e = 1) AND (g > 1) THEN\r
         mov a, 1\r
-        tehe(a) = 40\r
+        logicalExpression(a) = 40\r
         lendp a + 2, f\r
         mov a + 2 + f, 1\r
-        tehe(a + 2 + f) = 41\r
+        logicalExpression(a + 2 + f) = 41\r
         h = h + 2\r
         x2 = x2 + 2\r
         a = a + 2 + f\r
@@ -553,10 +554,10 @@ FOR e = 1 TO 4
     IF (b = 3 OR b = 4) AND (e = 2) AND (g > 2) THEN\r
         lendm a - 1, f\r
         mov a - f, 1\r
-        tehe(a - f) = 40\r
+        logicalExpression(a - f) = 40\r
         lendp a + 2, f\r
         mov a + 2 + f, 1\r
-        tehe(a + 2 + f) = 41\r
+        logicalExpression(a + 2 + f) = 41\r
         h = h + 2\r
         x2 = x2 + 2\r
         a = a + 2 + f\r
@@ -566,10 +567,10 @@ FOR e = 1 TO 4
     IF (b = 2) AND (e = 3) AND (g > 3) THEN\r
         lendm a - 1, f\r
         mov a - f, 1\r
-        tehe(a - f) = 40\r
+        logicalExpression(a - f) = 40\r
         lendp a + 2, f\r
         mov a + 2 + f, 1\r
-        tehe(a + 2 + f) = 41\r
+        logicalExpression(a + 2 + f) = 41\r
         h = h + 2\r
         x2 = x2 + 2\r
         a = a + 2 + f\r