BBS: Inland Empire Archive Date: 03-19-93 (21:00) Number: 372 From: QUINN TYLER JACKSON Refer#: NONE To: ALL Recvd: NO Subj: Formula Solver 1.4 5/ Conf: (2) Quik_Bas
>>> Continued from previous message
ELSE
ErrorCode = eqjDivisionByZero
END IF
CASE "?" ' random number from 0 to x, seed y
RANDOMIZE y
x = RND * x
CASE "<<" ' bitshift left y by x bits
x = INT(y) * 2 ^ INT(x)
CASE ">>" ' bitshift right y by x bits
x = INT(y) \ 2 ^ INT(x)
CASE "!" ' factorial
Temp& = 1
FOR i% = 1 TO x
Temp& = Temp& * i%
NEXT i%
x = Temp&
CASE "`"
x = ABS(x)
CASE "#" ' absolute
x = INT(x)
CASE "<" ' logical less than than
x = x < y
CASE "<=", "=<" ' logical less than or equal to
x = x <= y
CASE ">" ' logical greater than
x = x > y
CASE ">=", "=>" ' logical greater than or equal to
x = x >= y
CASE "==" ' logical equality
x = x = y
CASE "<>" ' logical inequality
x = x <> y
CASE "|=", "=|" ' logical implication
x = x IMP y
CASE "&=", "=&" ' logical equivlance
x = x EQV y
CASE "&" ' bitwise AND
x = x AND y
CASE "|" ' bitwise OR
x = x OR y
CASE "~" ' bitwise XOR
x = x XOR y
END SELECT
END SUB
SUB sqjAssignFun (FunctName$, Formula$, Protection%)
FunctName$ = UCASE$(FunctName$)
ParPtr% = INSTR(FunctName$, "[")
NamePart$ = LEFT$(FunctName$, ParPtr% - 1)
ParamPart$ = MID$(FunctName$, ParPtr% + 1, LEN(FunctName$) - ParPtr% -_
1)
' First we see if this function is already in the list
FOR i% = 1 TO SymPtr
IF SymTable(i%).SymType = SymFUNCTION THEN
IF RTRIM$(SymTable(i%).SymName) = NamePart$ THEN
IF SymTable(i%).SymLvl <> PROTECTED THEN
' Since it was, just change its formula
IF ParamPart$ <> "" THEN
' Make sure it just isn't a formula
' that uses empty parenthesis for the params.
ParTable(SymTable(i%).TabPtr) = ParamPart$
END IF
ELSE
ErrorCode = eqjProtectedFunction
END IF
ForTable(SymTable(i%).TabPtr) = Formula$
EXIT SUB
END IF
END IF
NEXT i%
IF SymPtr < SYMMAX THEN
' Since it wasn't, put it there
FunPtr = FunPtr + 1
SymPtr = SymPtr + 1
IF FunPtr <= FUNMAX THEN
SymTable(SymPtr).SymName = NamePart$
SymTable(SymPtr).SymType = SymFUNCTION
SymTable(SymPtr).SymLvl = Protection%
SymTable(SymPtr).TabPtr = FunPtr
ParTable(FunPtr) = ParamPart$
ForTable(FunPtr) = Formula$
ELSE
ErrorCode = eqjFunctionTableFull
END IF
ELSE
ErrorCode = eqjSymbolTableFull
END IF
END SUB
SUB sqjAssignVar (VarName$, VarValue, Protection%)
VarName$ = UCASE$(VarName$)
' First we see if this variable is already in the list
FOR i% = 1 TO SymPtr
IF SymTable(i%).SymType = SymVARIABLE THEN
IF RTRIM$(SymTable(i%).SymName) = VarName$ THEN
IF SymTable(i%).SymLvl <> PROTECTED THEN
IF SymTable(i%).SymLvl = LvlPtr THEN
' Since it was, just change its value
VarTable(SymTable(i%).TabPtr) = VarValue
EXIT SUB
END IF
ELSE
ErrorCode = eqjProtectedVariable
EXIT SUB
END IF
END IF
END IF
NEXT i%
IF SymPtr < SYMMAX THEN
' Since it wasn't, put it there
VariPtr = VariPtr + 1
SymPtr = SymPtr + 1
IF VariPtr <= VARMAX THEN
SymTable(SymPtr).SymName = VarName$
SymTable(SymPtr).SymType = SymVARIABLE
SymTable(SymPtr).TabPtr = VariPtr
SymTable(SymPtr).SymLvl = Protection%
VarTable(VariPtr) = VarValue
ELSE
ErrorCode = eqjVariableTableFull
END IF
ELSE
ErrorCode = eqjSymbolTableFull
END IF
END SUB
SUB sqjDesParse (Phase%, x)
SHARED TestDeep% ' This variable used for testing how deep recursion_
goes
' This is the central cortex of this module.
' It uses wicked recursion, so beware! In fact, this routine is so
' recursive that unless you're a major masochist, you'd better leave it
' well enough alone!
TestDeep% = TestDeep% + 1 ' Used for testing phase only
>>> Continued to next message
* OLX 2.1 TD * A program is just a big bug that happened to work....
--- Maximus/2 2.01wb

Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET