DECLARE FUNCTION Add$ (nnn1$, nnn2$)
DECLARE FUNCTION AddComma$ (N$)
DECLARE FUNCTION Div$ (nnn1$, nnn2$)
DECLARE FUNCTION Fact$ (nn$)
DECLARE FUNCTION FindCPUMathErrors! ()
DECLARE FUNCTION IsGreater! (nnn1$, nnn2$)
DECLARE FUNCTION Mul$ (nnn1$, nnn2$)
DECLARE FUNCTION Pwr$ (n1$, n2$)
DECLARE FUNCTION RemoveSpace$ (t$)
DECLARE FUNCTION RemoveZero$ (n1$)
DECLARE FUNCTION Solve$ (oe$, Meth!)
DECLARE FUNCTION SolveSimple$ (equ$, Meth!)
DECLARE FUNCTION Subt$ (nnn1$, nnn2$)
DECLARE FUNCTION Switch$ (tof1!, r1$, tof2!, r2$)
DECLARE FUNCTION Trim$ (t$)

FUNCTION Add$ (nnn1$, nnn2$)
n1$ = Trim$(nnn1$): n2$ = Trim$(nnn2$)
IF INSTR(n1$, "-") <> 0 XOR INSTR(n2$, "-") <> 0 THEN
IF INSTR(n2$, "-") <> 0 THEN Add$ = Subt$(RIGHT$(n1$, LEN(n1$) - INSTR(n1$, "-")), RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-"))): EXIT FUNCTION
IF INSTR(n1$, "-") <> 0 THEN Add$ = Subt$(RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-")), RIGHT$(n1$, LEN(n1$) - INSTR(n1$, "-"))): EXIT FUNCTION
END IF
IF INSTR(n1$, "-") <> 0 AND INSTR(n2$, "-") <> 0 THEN Neg$ = "-": n1$ = RIGHT$(n1$, LEN(n1$) - INSTR(n1$, "-")): n2$ = RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-"))




IF INSTR(n1$, ".") <> 0 OR INSTR(n2$, ".") <> 0 THEN
IF INSTR(n1$, ".") = 0 THEN n1$ = n1$ + ".0"
IF INSTR(n2$, ".") = 0 THEN n2$ = n2$ + ".0"
IF INSTR(n1$, ".") > INSTR(n2$, ".") THEN n2$ = STRING$(INSTR(n1$, ".") - INSTR(n2$, "."), "0") + n2$ ELSE n1$ = STRING$(INSTR(n2$, ".") - INSTR(n1$, "."), "0") + n1$
IF LEN(n1$) - INSTR(n1$, ".") > LEN(n2$) - INSTR(n2$, ".") THEN n2$ = n2$ + STRING$((LEN(n1$) - INSTR(n1$, ".")) - (LEN(n2$) - INSTR(n2$, ".")), "0") ELSE n1$ = n1$ + STRING$((LEN(n2$) - INSTR(n2$, ".")) - (LEN(n1$) - INSTR(n1$, ".")), "0")
Stor = LEN(n1$) - INSTR(n1$, ".")
IF INSTR(n1$, ".") <> 0 THEN n1$ = LEFT$(n1$, INSTR(n1$, ".") - 1) + RIGHT$(n1$, (LEN(n1$) - INSTR(n1$, ".")))
IF INSTR(n2$, ".") <> 0 THEN n2$ = LEFT$(n2$, INSTR(n2$, ".") - 1) + RIGHT$(n2$, (LEN(n2$) - INSTR(n2$, ".")))
ELSE
IF LEN(n1$) > LEN(n2$) THEN n2$ = STRING$(LEN(n1$) - LEN(n2$), "0") + n2$ ELSE n1$ = STRING$(LEN(n2$) - LEN(n1$), "0") + n1$
END IF

FOR q = LEN(n1$) TO 1 STEP -1
mx$ = LTRIM$(RTRIM$(STR$((VAL(MID$(n1$, q, 1)) + VAL(MID$(n2$, q, 1))) + Rmd)))
Rmd = VAL(LEFT$(mx$, LEN(mx$) - 1)): mx$ = RIGHT$(mx$, 1)
cc$ = mx$ + cc$
NEXT q
IF Rmd = 0 THEN D$ = cc$ ELSE D$ = LTRIM$(RTRIM$(STR$(Rmd))) + cc$
IF Stor <> 0 THEN D$ = LEFT$(D$, LEN(D$) - Stor) + "." + RIGHT$(D$, Stor)
Add$ = Neg$ + D$

END FUNCTION

FUNCTION AddComma$ (N$)
IF INSTR(N$, ".") = 0 THEN dd = LEN(N$) ELSE dd = INSTR(N$, ".") - 1
FOR q = dd TO 1 STEP -1
IF (dd - q) MOD 3 = 0 AND q <> dd THEN mm$ = "," + mm$
mm$ = MID$(N$, q, 1) + mm$
NEXT q
IF INSTR(N$, ".") <> 0 THEN dc$ = "." + RIGHT$(N$, LEN(N$) - INSTR(N$, "."))
AddComma$ = mm$ + dc$
END FUNCTION

FUNCTION Div$ (nnn1$, nnn2$)
n1$ = nnn1$: n2$ = nnn2$
IF IsGreater(n1$, n2$) = 3 THEN Div$ = "1": EXIT FUNCTION
IF INSTR(n1$, ".") = 0 THEN Mrk = LEN(n1$) ELSE Mrk = INSTR(n1$, ".")
DIM Num$(9)
Num$(1) = n2$
FOR q = 2 TO 9
        Num$(q) = Mul$(n2$, Trim$(STR$(q)))
NEXT q
Level = LEN(n1$)
DO
        Level = Level - 1
        c = LEN(n1$) - Level: Cl$ = ""
        DO UNTIL 1 = 2
                Cl$ = LEFT$(n1$, c)
                IF IsGreater(n1$, Cl$) = 1 OR IsGreater(n1$, Cl$) = 3 THEN EXIT DO ELSE c = c + 1
        LOOP
        mmx = c
        Cl$ = LEFT$(n1$, mmx)
        FOR g = 1 TO 9
                IF IsGreater(Cl$, Num$(g)) = 2 THEN mmz = g - 1: EXIT FOR
        NEXT g
        tt$ = tt$ + Trim$(STR$(mmz))
        IF Level >= 0 THEN Post$ = STRING$(Level, "0"): pre$ = "" 'ELSE pre$ = "." + STRING$(Level * -1, "0"): Post$ = ""
        n1$ = RemoveZero$(Subt$(n1$, Num$(mmz) + Post$))
IF Level < 0 AND n1$ <> "0" THEN n1$ = n1$ + "0"
'if Instr(Mrk,tt$,)
LOOP UNTIL n1$ = "0" OR Stpp
tt$ = RemoveZero$(tt$)
'Debug.Print Mrk
IF LEN(tt$) = Mrk - 1 THEN Div$ = tt$ ELSE Div$ = LEFT$(tt$, Mrk) + "." + RIGHT$(tt$, LEN(tt$) - (Mrk + 1))
END FUNCTION

SUB Errorr (Msg$)
PRINT "Error:"; Msg$
END SUB

FUNCTION Fact$ (nn$)
ff$ = nn$
gg$ = nn$
DO
ff$ = RemoveZero$(Subt$(ff$, "1"))
gg$ = RemoveZero$(Mul$(gg$, ff$))
LOOP UNTIL RemoveZero$(ff$) = "1"
Fact$ = RemoveZero$(gg$)
END FUNCTION

FUNCTION FindCPUMathErrors
CLS
VIEW PRINT 1 TO 24
LOCATE 1, 1: PRINT "CPU"; TAB(36); " ³ "; "VMPU"
LOCATE 2, 1: PRINT STRING$(36, 196) + "Å" + STRING$(42, 196);
LOCATE 25, 1: PRINT "Press Any Key to Stop Test";
VIEW PRINT 3 TO 24
IF 33.1 / 331 <> .1 THEN ErrErrs = 1: PRINT 33.1 / 331; TAB(36); " ³ .1"
g$ = "-40"
inc$ = ".001"
DO
g$ = Add$(g$, inc$)
IF IsGreater(STR$(VAL(g$) - VAL(inc$)), Subt$(g$, inc$)) <> 3 THEN ErrErr1 = 1
IF VAL(g$) - VAL(inc$) <> VAL(Subt$(g$, inc$)) AND ErrErr1 = 1 THEN PRINT VAL(g$) - VAL(inc$); TAB(36); " ³ "; VAL(Subt$(g$, inc$)): ErrErrs = ErrErrs + 1

IF IsGreater(STR$(VAL(g$) * VAL(inc$)), Mul$(g$, inc$)) <> 3 THEN ErrErr2 = 1
IF VAL(g$) * VAL(inc$) <> VAL(Mul$(g$, inc$)) AND ErrErr2 = 1 THEN PRINT VAL(g$) * VAL(inc$); TAB(36); " ³ "; VAL(Mul$(g$, inc$)): ErrErrs = ErrErrs + 1

IF IsGreater(STR$(VAL(g$) + VAL(inc$)), Add$(g$, inc$)) <> 3 THEN ErrErr3 = 1
IF VAL(g$) + VAL(inc$) <> VAL(Add$(g$, inc$)) AND ErrErr3 = 1 THEN PRINT VAL(g$) + VAL(inc$); TAB(36); " ³ "; VAL(Add$(g$, inc$)): ErrErrs = ErrErrs + 1


'LOCATE CSRLIN, 1: PRINT g$; ", Errors:"; ErrErrs;
ErrErr1 = 0: ErrErr2 = 0: ErrErr3 = 0: ErrErr4 = 0:
IF INKEY$ <> "" THEN PRINT : EXIT DO
LOOP UNTIL g$ = "40"
FindCPUMathErrors = ErrErrs
X = CSRLIN
VIEW PRINT 1 TO 25
LOCATE X, 1
END FUNCTION

FUNCTION IsGreater (nnn1$, nnn2$)
n1$ = nnn1$: n2$ = nnn2$
IF INSTR(n1$, "-") <> 0 AND INSTR(n2$, "-") = 0 THEN IsGreater = 2: EXIT FUNCTION
IF INSTR(n2$, "-") <> 0 AND INSTR(n1$, "-") = 0 THEN IsGreater = 1: EXIT FUNCTION
IF INSTR(n2$, "-") <> 0 AND INSTR(n1$, "-") <> 0 THEN nn1$ = n1$: nn2$ = n2$: n1$ = nn2$: n2$ = nn1$

n1$ = RIGHT$(n1$, LEN(n1$) - INSTR(n1$, "-")): n2$ = RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-"))


IF INSTR(n1$, ".") <> 0 OR INSTR(n2$, ".") <> 0 THEN
IF INSTR(n1$, ".") = 0 THEN n1$ = n1$ + ".0"
IF INSTR(n2$, ".") = 0 THEN n2$ = n2$ + ".0"
IF INSTR(n1$, ".") > INSTR(n2$, ".") THEN n2$ = STRING$(INSTR(n1$, ".") - INSTR(n2$, "."), "0") + n2$ ELSE n1$ = STRING$(INSTR(n2$, ".") - INSTR(n1$, "."), "0") + n1$
IF LEN(n1$) - INSTR(n1$, ".") > LEN(n2$) - INSTR(n2$, ".") THEN n2$ = n2$ + STRING$((LEN(n1$) - INSTR(n1$, ".")) - (LEN(n2$) - INSTR(n2$, ".")), "0") ELSE n1$ = n1$ + STRING$((LEN(n2$) - INSTR(n2$, ".")) - (LEN(n1$) - INSTR(n1$, ".")), "0")
Stor = LEN(n1$) - INSTR(n1$, ".")
IF INSTR(n1$, ".") <> 0 THEN n1$ = LEFT$(n1$, INSTR(n1$, ".") - 1) + RIGHT$(n1$, (LEN(n1$) - INSTR(n1$, ".")))
IF INSTR(n2$, ".") <> 0 THEN n2$ = LEFT$(n2$, INSTR(n2$, ".") - 1) + RIGHT$(n2$, (LEN(n2$) - INSTR(n2$, ".")))
ELSE
IF LEN(n1$) > LEN(n2$) THEN n2$ = STRING$(LEN(n1$) - LEN(n2$), "0") + n2$ ELSE n1$ = STRING$(LEN(n2$) - LEN(n1$), "0") + n1$
END IF


FOR q = 1 TO LEN(n1$)
IF VAL(MID$(n1$, q, 1)) > VAL(MID$(n2$, q, 1)) THEN IsGreater = 1: EXIT FUNCTION
IF VAL(MID$(n2$, q, 1)) > VAL(MID$(n1$, q, 1)) THEN IsGreater = 2: EXIT FUNCTION
NEXT q
IsGreater = 3
END FUNCTION

FUNCTION Mul$ (nnn1$, nnn2$)
nn1$ = Trim$(nnn1$): nn2$ = Trim$(nnn2$)
IF nn1$ = "1" THEN Mul$ = nn2$: EXIT FUNCTION
IF nn2$ = "1" THEN Mul$ = nn1$: EXIT FUNCTION
IF nn1$ = "-1" THEN nn2$ = " " + nn2$: MID$(nn2$, VAL(Switch$(INSTR(nn2$, "-") = 0, "1", INSTR(nn2$, "-") <> 0, STR$(INSTR(nn2$, "-")))), 1) = Switch$(INSTR(nn2$, "-") <> 0, " ", INSTR(nn2$, "-") = 0, "-"): Mul$ = Trim$(nn2$): EXIT FUNCTION
IF nn2$ = "-1" THEN nn1$ = " " + nn1$: MID$(nn1$, VAL(Switch$(INSTR(nn1$, "-") = 0, "1", INSTR(nn1$, "-") <> 0, STR$(INSTR(nn1$, "-")))), 1) = Switch$(INSTR(nn1$, "-") <> 0, " ", INSTR(nn1$, "-") = 0, "-"): Mul$ = Trim$(nn1$): EXIT FUNCTION


IF LEFT$(nn1$, 1) = "-" XOR LEFT$(nn2$, 1) = "-" THEN Neg$ = "-" ELSE Neg$ = ""

IF IsGreater(n1$, n2$) = 2 THEN nn1$ = n2$: nn2$ = n1$: n1$ = nn1$: n2$ = nn2$

IF INSTR(n1$, ".") <> 0 OR INSTR(n2$, ".") <> 0 THEN
IF INSTR(n1$, ".") = 0 THEN n1$ = n1$ + ".0"
IF INSTR(n2$, ".") = 0 THEN n2$ = n2$ + ".0"
IF INSTR(n1$, ".") > INSTR(n2$, ".") THEN n2$ = STRING$(INSTR(n1$, ".") - INSTR(n2$, "."), "0") + n2$ ELSE n1$ = STRING$(INSTR(n2$, ".") - INSTR(n1$, "."), "0") + n1$
IF LEN(n1$) - INSTR(n1$, ".") > LEN(n2$) - INSTR(n2$, ".") THEN n2$ = n2$ + STRING$((LEN(n1$) - INSTR(n1$, ".")) - (LEN(n2$) - INSTR(n2$, ".")), "0") ELSE n1$ = n1$ + STRING$((LEN(n2$) - INSTR(n2$, ".")) - (LEN(n1$) - INSTR(n1$, ".")), "0")
Stor = LEN(n1$) - INSTR(n1$, ".")
IF INSTR(n1$, ".") <> 0 THEN n1$ = LEFT$(n1$, INSTR(n1$, ".") - 1) + RIGHT$(n1$, (LEN(n1$) - INSTR(n1$, ".")))
IF INSTR(n2$, ".") <> 0 THEN n2$ = LEFT$(n2$, INSTR(n2$, ".") - 1) + RIGHT$(n2$, (LEN(n2$) - INSTR(n2$, ".")))
ELSE
IF LEN(n1$) > LEN(n2$) THEN n2$ = STRING$(LEN(n1$) - LEN(n2$), "0") + n2$ ELSE n1$ = STRING$(LEN(n2$) - LEN(n1$), "0") + n1$
END IF


IF INSTR(nn1$, ".") <> 0 OR INSTR(nn2$, ".") <> 0 THEN
IF INSTR(nn1$, ".") = 0 THEN nn1$ = nn1$ + ".0"
IF INSTR(nn2$, ".") = 0 THEN nn2$ = nn2$ + ".0"

Stor = (LEN(nn1$) - INSTR(nn1$, ".")) + (LEN(nn2$) - INSTR(nn2$, "."))
IF INSTR(nn1$, ".") <> 0 THEN nn1$ = LEFT$(nn1$, INSTR(nn1$, ".") - 1) + RIGHT$(nn1$, (LEN(nn1$) - INSTR(nn1$, ".")))
IF INSTR(nn2$, ".") <> 0 THEN nn2$ = LEFT$(nn2$, INSTR(nn2$, ".") - 1) + RIGHT$(nn2$, (LEN(nn2$) - INSTR(nn2$, ".")))
END IF

FOR q1 = LEN(nn2$) TO 1 STEP -1
ccc$ = STRING$(LEN(nn2$) - q1, "0")
FOR q2 = LEN(nn1$) TO 1 STEP -1
mmm$ = RTRIM$(LTRIM$(STR$((VAL(MID$(nn1$, q2, 1)) * VAL(MID$(nn2$, q1, 1))) + Rmd)))
Rmd = VAL(LEFT$(mmm$, LEN(mmm$) - 1)): mmm$ = RIGHT$(mmm$, 1)
ccc$ = mmm$ + ccc$
NEXT q2
ccc$ = LTRIM$(RTRIM$(STR$(Rmd))) + ccc$
tt$ = Add$(tt$, ccc$)
Rmd = 0
NEXT q1
IF (LEN(tt$) - Stor) < 0 THEN tt$ = STRING$((LEN(tt$) - Stor) * -1, "0") + tt$
IF Stor > 0 THEN tt$ = LEFT$(tt$, LEN(tt$) - Stor) + "." + RIGHT$(tt$, Stor)

Mul$ = Neg$ + tt$
END FUNCTION

FUNCTION Pwr$ (n1$, n2$)
nz1$ = n1$
nz2$ = n1$
gg$ = n2$
DO
nz1$ = RemoveZero$(Mul$(nz1$, nz2$))
gg$ = RemoveZero$(Subt$(gg$, "1"))
LOOP UNTIL RemoveZero$(gg$) = "1"
Pwr$ = RemoveZero$(nz1$)
END FUNCTION

FUNCTION RemoveSpace$ (t$)
FOR q = 1 TO LEN(t$)
IF MID$(t$, q, 1) = " " THEN  ELSE dd$ = dd$ + MID$(t$, q, 1)
NEXT q
RemoveSpace$ = dd$
END FUNCTION

FUNCTION RemoveZero$ (n1$)
Neg = INSTR(n1$, "-")
IF INSTR(n1$, ".") = 0 THEN ddd = LEN(n1$) ELSE ddd = INSTR(n1$, ".")
FOR q = 1 + Neg TO ddd
IF MID$(n1$, q, 1) <> "0" THEN EXIT FOR
NEXT q
IF Neg <> 0 THEN Nx$ = "-" ELSE Nx$ = ""
IF RIGHT$(n1$, LEN(n1$) - q + 1) = "" THEN Rz$ = "0" ELSE Rz$ = RIGHT$(n1$, LEN(n1$) - q + 1)
IF INSTR(Rz$, ".") = 1 THEN Rz$ = "0" + Rz$
IF INSTR(Rz$, ".") = 0 THEN RemoveZero$ = Nx$ + Rz$: EXIT FUNCTION
FOR q = LEN(Rz$) TO INSTR(Rz$, ".") STEP -1
IF MID$(Rz$, q, 1) <> "0" THEN EXIT FOR
NEXT q
RemoveZero$ = Nx$ + LEFT$(Rz$, q)

END FUNCTION

FUNCTION Solve$ (oe$, Meth)
e$ = Trim$(RemoveSpace$(oe$))
DO
m = INSTR(e$, "^")
IF m = 0 THEN m = INSTR(e$, "*")
IF m = 0 THEN m = INSTR(e$, "/")
IF m = 0 THEN m = INSTR(e$, "+"): dd = 12
IF m = 0 THEN m = INSTR(e$, "-"): dd = 12
IF m = 1 AND dd = 12 THEN m = 0
dd = 0
IF m = 0 THEN GOTO Solved
FOR q = 1 TO m - 1
IF LTRIM$(RTRIM$(STR$(VAL(MID$(e$, m - q, 1))))) <> MID$(e$, m - q, 1) AND MID$(e$, m - q, 1) <> "." AND (q = 1 AND LEFT$(e$, 1) <> "-") THEN EXIT FOR
NEXT q
FOR q1 = m - 1 TO LEN(e$)
IF LTRIM$(RTRIM$(STR$(VAL(MID$(e$, m + q1, 1))))) <> MID$(e$, m + q1, 1) AND MID$(e$, m + q1, 1) <> "." THEN EXIT FOR
NEXT q1
eq$ = MID$(e$, m - q + 1, (m - q) - 1 + (q1 + m))
'MSGBOX e$ + ", " + eq$ + STR$(q) + STR$(q1)
'k$ = (eq$)
e$ = LEFT$(e$, m - q) + SolveSimple$(eq$, Meth) + MID$(e$, q1 + m, LEN(e$))
Solved:
LOOP UNTIL m = 0
Solve$ = e$
END FUNCTION

FUNCTION SolveSimple$ (equ$, Meth)
IF Meth = 0 THEN
IF INSTR(equ$, "^") <> 0 THEN z1$ = Trim$(MID$(equ$, 1, INSTR(equ$, "^") - 1)): z2$ = Trim$(MID$(equ$, INSTR(equ$, "^") + 1, LEN(equ$) - INSTR(equ$, "^"))): SolveSimple$ = RemoveZero$(Pwr$(z1$, z2$)): EXIT FUNCTION
IF INSTR(equ$, "*") <> 0 THEN z1$ = Trim$(MID$(equ$, 1, INSTR(equ$, "*") - 1)): z2$ = Trim$(MID$(equ$, INSTR(equ$, "*") + 1, LEN(equ$) - INSTR(equ$, "*"))): SolveSimple$ = RemoveZero$(Mul$(z1$, z2$)): EXIT FUNCTION
IF INSTR(equ$, "/") <> 0 THEN z1$ = Trim$(MID$(equ$, 1, INSTR(equ$, "/") - 1)): z2$ = Trim$(MID$(equ$, INSTR(equ$, "/") + 1, LEN(equ$) - INSTR(equ$, "/"))): SolveSimple$ = RemoveZero$(Div$(z1$, z2$)): EXIT FUNCTION
IF INSTR(equ$, "+") <> 0 THEN z1$ = Trim$(MID$(equ$, 1, INSTR(equ$, "+") - 1)): z2$ = Trim$(MID$(equ$, INSTR(equ$, "+") + 1, LEN(equ$) - INSTR(equ$, "+"))): SolveSimple$ = RemoveZero$(Add$(z1$, z2$)): EXIT FUNCTION
IF INSTR(equ$, "-") <> 0 THEN z1$ = Trim$(MID$(equ$, 1, INSTR(equ$, "-") - 1)): z2$ = Trim$(MID$(equ$, INSTR(equ$, "-") + 1, LEN(equ$) - INSTR(equ$, "-"))): SolveSimple$ = RemoveZero$(Subt$(z1$, z2$)): EXIT FUNCTION
ELSE
IF INSTR(equ$, "^") <> 0 THEN z1 = VAL(MID$(equ$, 1, INSTR(equ$, "^") - 1)): z2 = VAL(MID$(equ$, INSTR(equ$, "^") + 1, LEN(equ$) - INSTR(equ$, "^"))): SolveSimple$ = Trim$(STR$(z1 ^ z2)): EXIT FUNCTION
IF INSTR(equ$, "*") <> 0 THEN z1 = VAL(MID$(equ$, 1, INSTR(equ$, "*") - 1)): z2 = VAL(MID$(equ$, INSTR(equ$, "*") + 1, LEN(equ$) - INSTR(equ$, "*"))): SolveSimple$ = Trim$(STR$(z1 * z2)): EXIT FUNCTION
IF INSTR(equ$, "/") <> 0 THEN z1 = VAL(MID$(equ$, 1, INSTR(equ$, "/") - 1)): z2 = VAL(MID$(equ$, INSTR(equ$, "/") + 1, LEN(equ$) - INSTR(equ$, "/"))): SolveSimple$ = Trim$(STR$(z1 / z2)): EXIT FUNCTION
IF INSTR(equ$, "+") <> 0 THEN z1 = VAL(MID$(equ$, 1, INSTR(equ$, "+") - 1)): z2 = VAL(MID$(equ$, INSTR(equ$, "+") + 1, LEN(equ$) - INSTR(equ$, "+"))): SolveSimple$ = Trim$(STR$(z1 + z2)): EXIT FUNCTION
IF INSTR(equ$, "-") <> 0 THEN z1 = VAL(MID$(equ$, 1, INSTR(equ$, "-") - 1)): z2 = VAL(MID$(equ$, INSTR(equ$, "-") + 1, LEN(equ$) - INSTR(equ$, "-"))): SolveSimple$ = Trim$(STR$(z1 - z2)): EXIT FUNCTION

END IF
END FUNCTION

FUNCTION Subt$ (nnn1$, nnn2$)
n1$ = nnn1$: n2$ = nnn2$

IF (INSTR(n2$, "-") <> 0 AND INSTR(n1$, "-") = 0) THEN Subt$ = Add$(n1$, RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-"))): EXIT FUNCTION
IF (INSTR(n1$, "-") <> 0 AND INSTR(n2$, "-") = 0) THEN Subt$ = "-" + Add$(n2$, RIGHT$(n1$, LEN(n1$) - INSTR(n1$, "-"))): EXIT FUNCTION
IF (INSTR(n1$, "-") <> 0 AND INSTR(n2$, "-") <> 0) THEN n1$ = RIGHT$(n1$, LEN(n2$) - INSTR(n2$, "-")): n2$ = RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-")): IsAnsNeg = 1

IF IsGreater(n1$, n2$) = 2 THEN Neg = (1 + IsAnsNeg) MOD 2: dd1$ = n1$: dd2$ = n2$: n1$ = dd2$: n2$ = dd1$

IF INSTR(n1$, "-") <> 0 AND INSTR(n2$, "-") <> 0 THEN Neg = 1: n1$ = RIGHT$(n1$, LEN(n1$) - INSTR(n1$, "-")): n2$ = RIGHT$(n2$, LEN(n2$) - INSTR(n2$, "-")): Subt$ = "-" + Add$(n1$, n2$): EXIT FUNCTION



IF INSTR(n1$, ".") <> 0 OR INSTR(n2$, ".") <> 0 THEN
IF INSTR(n1$, ".") = 0 THEN n1$ = n1$ + ".0"
IF INSTR(n2$, ".") = 0 THEN n2$ = n2$ + ".0"
IF INSTR(n1$, ".") > INSTR(n2$, ".") THEN n2$ = STRING$(INSTR(n1$, ".") - INSTR(n2$, "."), "0") + n2$ ELSE n1$ = STRING$(INSTR(n2$, ".") - INSTR(n1$, "."), "0") + n1$
IF LEN(n1$) - INSTR(n1$, ".") > LEN(n2$) - INSTR(n2$, ".") THEN n2$ = n2$ + STRING$((LEN(n1$) - INSTR(n1$, ".")) - (LEN(n2$) - INSTR(n2$, ".")), "0") ELSE n1$ = n1$ + STRING$((LEN(n2$) - INSTR(n2$, ".")) - (LEN(n1$) - INSTR(n1$, ".")), "0")
Stor = LEN(n1$) - INSTR(n1$, ".")
IF INSTR(n1$, ".") <> 0 THEN n1$ = LEFT$(n1$, INSTR(n1$, ".") - 1) + RIGHT$(n1$, (LEN(n1$) - INSTR(n1$, ".")))
IF INSTR(n2$, ".") <> 0 THEN n2$ = LEFT$(n2$, INSTR(n2$, ".") - 1) + RIGHT$(n2$, (LEN(n2$) - INSTR(n2$, ".")))
ELSE
IF LEN(n1$) > LEN(n2$) THEN n2$ = STRING$(LEN(n1$) - LEN(n2$), "0") + n2$ ELSE n1$ = STRING$(LEN(n2$) - LEN(n1$), "0") + n1$
END IF


FOR q = LEN(n1$) TO 1 STEP -1

IF VAL(MID$(n1$, q, 1)) < VAL(MID$(n2$, q, 1)) THEN
    Num1 = VAL(MID$(n1$, q, 1)) + 10
    l = 0
    DO
        l = l + 1
        Br$ = MID$(n1$, q - l, 1)
        IF Br$ = "0" THEN MID$(n1$, q - l, 1) = "9"
    LOOP UNTIL Br$ <> "0"
    MID$(n1$, q - l, 1) = RTRIM$(LTRIM$(STR$(VAL(MID$(n1$, q - l, 1)) - 1)))
ELSE
    Num1 = VAL(MID$(n1$, q, 1))
END IF
sc = Num1 - VAL(MID$(n2$, q, 1))
cc$ = Trim$(STR$(sc)) + cc$
NEXT q
IF Neg = 1 THEN cc$ = "-" + cc$
IF Stor <> 0 THEN cc$ = LEFT$(cc$, LEN(cc$) - Stor) + "." + RIGHT$(cc$, Stor)

Subt$ = cc$

END FUNCTION

FUNCTION Switch$ (tof1, r1$, tof2, r2$)
IF tof1 = -1 THEN Switch$ = r1$
IF tof2 = -1 THEN Switch$ = r2$
END FUNCTION

FUNCTION Trim$ (t$)
Trim$ = LTRIM$(RTRIM$(t$))
END FUNCTION

