' Logical equation solver ' made by Svjatoslav Agejenko ' in 2002 ' H-Page: svjatoslav.eu ' E-Mail: svjatoslavagejenko@gmail.com ' Solves logical equations. ' AND OR XOR etc... DECLARE SUB rmslg (x1!, x3!, l!) DECLARE SUB getp (a!, b!) DECLARE SUB movm (x1!, n!) DECLARE SUB lihts (x1, x2, l) DECLARE SUB klea () DECLARE SUB lendm (x1!, m!) DECLARE SUB mov (x1!, n!) DECLARE SUB lendp (x1!, m!) DECLARE SUB teeslg (x1!, x2!, l!) DECLARE SUB prepare () DECLARE SUB tee (x1!, x2!) DECLARE SUB lahend (x1, x2) DECLARE SUB prn (x!, y!, c!, c1!, a$) DECLARE SUB sist () DECLARE SUB start () DIM SHARED font(0 TO 7, 0 TO 7, 0 TO 122) DIM SHARED tehe(0 TO 79) DIM SHARED muut(1 TO 8, 1 TO 100) DIM SHARED muun(1 TO 8) DIM SHARED vast(1 TO 100) DIM SHARED xloc(0 TO 79) DIM SHARED xlah(0 TO 79, 0 TO 100) DIM SHARED xlahn DIM SHARED tehl DIM SHARED nm DIM SHARED prnp start 13 sist prepare GOTO 13 SUB getp (a, b) SELECT CASE a CASE 5 b = 1 CASE 3, 4 b = 2 CASE 2 b = 3 CASE 1 b = 4 CASE 40, 41 b = 100 END SELECT END SUB SUB klea FOR a = 1 TO 50 a$ = INKEY$ NEXT a END SUB SUB lahend (x1, x2) DIM muu(65 TO 122) FOR a = 65 TO 122 muu(a) = 0 NEXT a muu(116) = 1 muu(118) = 1 nm = 0 FOR a = x1 TO x2 b = tehe(a) IF ((b >= 65) AND (b <= 90)) OR ((b >= 97) AND (b <= 122)) THEN IF muu(b) = 0 THEN nm = nm + 1 muun(nm) = b muu(b) = 1 END IF END IF NEXT a muun(nm + 1) = 116 muun(nm + 2) = 118 f = 2 ^ nm tehl = f FOR a = 1 TO nm d = 1 e = 1 f = f / 2 FOR b = 1 TO 2 ^ nm IF e > f THEN d = -d: e = 1 IF d = 1 THEN c = ASC("t") ELSE c = ASC("v") muut(a, b) = c e = e + 1 NEXT b NEXT a FOR a = 1 TO tehl muut(nm + 1, a) = 116 muut(nm + 2, a) = 118 NEXT a nm = nm + 2 DIM bck(0 TO 79) FOR a = 0 TO 79 bck(a) = tehe(a) xloc(a) = a NEXT a LOCATE 5, 1 teeslg x1, x2, a 'FOR b = x1 TO x2 + a 'prn b, 20, 14, 1, CHR$(tehe(b)) 'NEXT b tee x1, x2 + a FOR a = 0 TO 79 tehe(a) = bck(a) NEXT a FOR a = 1 TO tehl prn x2 + 1, a, 14, 0, CHR$(vast(a)) NEXT a END SUB SUB lendm (x1, m) IF tehe(x1) <> 41 THEN m = 1: GOTO 19 c = x1 d = 1 20 c = c - 1 IF tehe(c) = 40 THEN d = d - 1 IF tehe(c) = 41 THEN d = d + 1 IF d > 0 THEN GOTO 20 m = x1 - c 19 END SUB SUB lendp (x1, m) IF tehe(x1) <> 40 THEN m = 1: GOTO 17 c = x1 d = 1 18 c = c + 1 IF tehe(c) = 40 THEN d = d + 1 IF tehe(c) = 41 THEN d = d - 1 IF d > 0 THEN GOTO 18 m = c - x1 + 1 17 END SUB SUB lihts (x1, x2, l) rmslg x1, x2, l1 l = l1 'BEEP prnp = prnp + 1 FOR a = x1 TO x2 - l prn a, 0, 13, 1, CHR$(tehe(a)) NEXT a END SUB SUB mov (x1, n) FOR a = 79 - n TO x1 STEP -1 tehe(a + n) = tehe(a) xloc(a + n) = xloc(a) NEXT a END SUB SUB movm (x1, n) FOR a = x1 TO 79 - n tehe(a) = tehe(a + n) xloc(a) = xloc(a + n) NEXT a END SUB SUB prepare CLS ln = 79 FOR a = 0 TO 79 5 IF tehe(a) = 32 OR tehe(a) = 0 THEN FOR b = a TO 78 tehe(b) = tehe(b + 1) NEXT b ln = ln - 1 IF ln <= a - 1 THEN GOTO 6 GOTO 5 END IF NEXT a 6 CLS FOR a = 0 TO ln prn a, 0, 13, 1, CHR$(tehe(a)) NEXT a prn 0, 1, 7, 0, "Do you want to simplyfy it (unfinished so press N)" a = 0 23 klea a$ = INPUT$(1) IF a$ = "n" OR a$ = "N" THEN GOTO 24 IF a$ = "y" OR a$ = "Y" THEN ELSE GOTO 23 a = 1 24 prn 0, 1, 7, 0, SPACE$(79) l = 0 IF a = 1 THEN lihts 0, ln, l lahend 0, ln - l a$ = INPUT$(1) END SUB SUB prn (x, y, c, c1, a$) x1 = x * 8 y1 = (y + prnp) * 8 FOR b = 1 TO LEN(a$) LINE (x1, y1)-(x1 + 7, y1 + 7), c1, BF d = ASC(RIGHT$(LEFT$(a$, b), 1)) IF d > 122 THEN GOTO 22 FOR y2 = 0 TO 7 FOR x2 = 0 TO 7 c2 = font(x2, y2, d) IF c2 > 0 THEN PSET (x1 + x2, y1 + y2), c NEXT x2 NEXT y2 22 x1 = x1 + 8 NEXT b END SUB SUB rmslg (x1, x3, l) x2 = x3 l2 = 0 'FOR a = x1 TO x2 a = x1 26 IF tehe(a) = 40 THEN IF a = x1 THEN p1 = 100 ELSE getp tehe(a - 1), p1 c = a d = 1 p2 = 0 25 c = c + 1 IF tehe(c) = 40 THEN d = d + 1 IF tehe(c) = 41 THEN d = d - 1 IF d = 1 THEN IF (tehe(c) > 0) AND (tehe(c) <= 5) THEN getp tehe(c), b IF b > p2 THEN p2 = b END IF END IF IF d > 0 THEN GOTO 25 IF c + 1 > x2 THEN p3 = 100 ELSE getp tehe(c + 1), p3 IF (p1 > p2) AND (p3 >= p2) THEN movm c, 1 movm a, 1 l2 = l2 + 2 x2 = x2 - 2 a = a - 1 END IF END IF 'NEXT a a = a + 1 IF a <= x2 THEN GOTO 26 l = l2 END SUB SUB sist CLS prn 0, 0, 3, 0, "enter equation (ESC to quit) keys: 1 - " + CHR$(1) + " 2 - " + CHR$(2) + " 3 - " + CHR$(3) + " 4 - " + CHR$(4) + " 5 - " + CHR$(5) prn 0, 1, 3, 0, "example: a" + CHR$(1) + "b" + CHR$(2) + "(g" + CHR$(3) + "b)" FOR a = 0 TO 79 tehe(a) = 0 NEXT a x = 0 1 FOR a = 0 TO 79 IF a = x THEN prn a, 2, 14, 1, CHR$(tehe(a)) ELSE prn a, 2, 3, 0, CHR$(tehe(a)) NEXT a 2 a$ = INKEY$ IF a$ = "" THEN GOTO 2 IF a$ = CHR$(27) THEN SYSTEM IF a$ = CHR$(0) + "M" THEN x = x + 1 IF a$ = CHR$(0) + "K" THEN x = x - 1 IF x < 0 THEN x = 0 IF x > 79 THEN x = 79 IF LEN(a$) = 1 THEN SELECT CASE ASC(a$) CASE 32, 40, 41, 65 TO 90, 97 TO 122 3 FOR a = 78 TO x STEP -1 tehe(a + 1) = tehe(a) NEXT a tehe(x) = ASC(a$) x = x + 1 CASE 8 IF x > 0 THEN FOR a = x - 1 TO 78 tehe(a) = tehe(a + 1) NEXT a x = x - 1 END IF CASE 49 TO 53 a$ = CHR$(ASC(a$) - 48) GOTO 3 CASE 13 GOTO 4 END SELECT END IF GOTO 1 4 END SUB SUB start prnp = 0 SCREEN 7 FOR a = 0 TO 122 LOCATE 1, 1 SELECT CASE a CASE 7 CASE 1 LINE (0, 0)-(7, 7), 0, BF LINE (2, 1)-(0, 3), 15 LINE (1, 4)-(2, 5), 15 LINE (5, 1)-(7, 3), 15 LINE (6, 4)-(5, 5), 15 LINE (1, 2)-(5, 2), 15 LINE (1, 4)-(5, 4), 15 CASE 2 LINE (0, 0)-(7, 7), 0, BF LINE (5, 1)-(7, 3), 15 LINE (6, 4)-(5, 5), 15 LINE (1, 2)-(5, 2), 15 LINE (1, 4)-(5, 4), 15 CASE 3 LINE (0, 0)-(7, 7), 0, BF LINE (0, 0)-(3, 7), 15 LINE (6, 0)-(3, 7), 15 CASE 4 LINE (0, 0)-(7, 7), 0, BF LINE (0, 7)-(3, 0), 15 LINE (6, 7)-(3, 0), 15 CASE 5 LINE (0, 0)-(7, 7), 0, BF LINE (0, 0)-(4, 0), 15 LINE (4, 1)-(4, 7), 15 CASE ELSE PRINT CHR$(a) END SELECT FOR y = 0 TO 7 FOR x = 0 TO 7 font(x, y, a) = POINT(x, y) NEXT x NEXT y NEXT a SCREEN 12 END SUB SUB tee (x1, x2) DIM opr(1 TO 2, 1 TO tehl) ng = 0 ngx = 0 oprm = 1 oe = 0 oex = 0 FOR a = x1 TO x2 b = tehe(a) SELECT CASE b CASE 40 c = a d = 1 10 c = c + 1 IF tehe(c) = ASC("(") THEN d = d + 1 IF tehe(c) = ASC(")") THEN d = d - 1 IF d = 0 THEN GOTO 11 GOTO 10 11 tee a + 1, c - 1 a = c FOR c = 1 TO tehl opr(oprm, c) = vast(c) NEXT c GOTO 12 CASE 5 ng = 1 ngx = a CASE 1 TO 4 oe = b oex = a CASE 65 TO 90, 97 TO 122 FOR c = 1 TO nm IF muun(c) = b THEN d = c: GOTO 8 NEXT c 8 FOR c = 1 TO tehl opr(oprm, c) = muut(d, c) prn xloc(a), c, 3, 0, CHR$(muut(d, c)) NEXT c 12 IF ng = 1 THEN GOSUB mkneg IF oprm = 2 THEN SELECT CASE oe CASE 1 FOR c = 1 TO tehl d = opr(1, c) e = opr(2, c) IF d = e THEN f = ASC("t") ELSE f = ASC("v") opr(1, c) = f prn xloc(oex), c, 12, 0, CHR$(f) NEXT c CASE 2 FOR c = 1 TO tehl d = opr(1, c) e = opr(2, c) f = ASC("t") IF (d = ASC("t")) AND (e = ASC("v")) THEN f = ASC("v") opr(1, c) = f prn xloc(oex), c, 12, 0, CHR$(f) NEXT c CASE 3 FOR c = 1 TO tehl d = opr(1, c) e = opr(2, c) f = ASC("t") IF (d = ASC("v")) AND (e = ASC("v")) THEN f = ASC("v") opr(1, c) = f prn xloc(oex), c, 12, 0, CHR$(f) NEXT c CASE 4 FOR c = 1 TO tehl d = opr(1, c) e = opr(2, c) f = ASC("v") IF (d = ASC("t")) AND (e = ASC("t")) THEN f = ASC("t") opr(1, c) = f prn xloc(oex), c, 12, 0, CHR$(f) NEXT c END SELECT ELSE oprm = oprm + 1 END IF END SELECT NEXT a GOTO 9 mkneg: FOR c = 1 TO tehl d = opr(oprm, c) IF d = ASC("t") THEN d = ASC("v") ELSE d = ASC("t") prn xloc(ngx), c, 4, 0, CHR$(d) opr(oprm, c) = d NEXT c ng = 0 RETURN 9 FOR c = 1 TO tehl vast(c) = opr(1, c) NEXT c END SUB SUB teeslg (x1, x4, l) x2 = x4 h = 0 FOR e = 1 TO 4 g = 1 'FOR a = x1 TO x2 a = x1 21 b = tehe(a) IF b = 40 THEN c = a d = 1 14 c = c + 1 IF tehe(c) = 40 THEN d = d + 1 IF tehe(c) = 41 THEN d = d - 1 IF d = 0 THEN GOTO 15 GOTO 14 15 IF e = 1 THEN teeslg a + 1, c - 1, l ELSE l = 0 a = c + l x2 = x2 + l h = h + l GOTO 16 END IF IF (b = 5) AND (e = 1) AND (g > 1) THEN mov a, 1 tehe(a) = 40 lendp a + 2, f mov a + 2 + f, 1 tehe(a + 2 + f) = 41 h = h + 2 x2 = x2 + 2 a = a + 2 + f GOTO 16 END IF IF (b = 3 OR b = 4) AND (e = 2) AND (g > 2) THEN lendm a - 1, f mov a - f, 1 tehe(a - f) = 40 lendp a + 2, f mov a + 2 + f, 1 tehe(a + 2 + f) = 41 h = h + 2 x2 = x2 + 2 a = a + 2 + f GOTO 16 END IF IF (b = 2) AND (e = 3) AND (g > 3) THEN lendm a - 1, f mov a - f, 1 tehe(a - f) = 40 lendp a + 2, f mov a + 2 + f, 1 tehe(a + 2 + f) = 41 h = h + 2 x2 = x2 + 2 a = a + 2 + f GOTO 16 END IF SELECT CASE b CASE 5 g = 1 CASE 3, 4 g = 2 CASE 2 g = 3 CASE 1 g = 4 END SELECT 16 a = a + 1 IF a <= x2 THEN GOTO 21 NEXT e l = h END SUB