'\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
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
\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
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
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
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
\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
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
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