1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-07-22 18:25:13 +00:00

Addition of precompiler into QB64 via $LET, $IF, $ELSEIF, $ELSE, $END IF commands.

This commit is contained in:
SMcNeill 2015-07-28 08:08:20 -04:00
parent e5a50f8bb1
commit 73fa19c1fb
2 changed files with 18981 additions and 18598 deletions

View file

@ -6246,6 +6246,8 @@ FOR y = 0 TO (idewy - 9)
ELSEIF inquote OR MID$(a2$, m, 1) = CHR$(34) THEN ELSEIF inquote OR MID$(a2$, m, 1) = CHR$(34) THEN
COLOR 14 COLOR 14
END IF END IF
If InValidLine(l) and 1 then color 7
LOCATE y + 3, 2 + m - 1 LOCATE y + 3, 2 + m - 1
PRINT MID$(a2$, m, 1); PRINT MID$(a2$, m, 1);
NEXT m NEXT m

View file

@ -26,6 +26,21 @@ Set_OrderOfOperations 'This will also make certain our directories are valid, an
DIM SHARED MakeAndroid 'build an Android project (refer to SUB UseAndroid) DIM SHARED MakeAndroid 'build an Android project (refer to SUB UseAndroid)
REDIM EveryCaseSet(100), SelectCaseCounter AS _UNSIGNED LONG REDIM EveryCaseSet(100), SelectCaseCounter AS _UNSIGNED LONG
DIM ExecLevel(255), ExecCounter AS INTEGER
REDIM SHARED UserDefine(1, 100) AS STRING '0 element is the name, 1 element is the string value
REDIM SHARED InValidLine(10000) AS _BIT
DIM DefineElse(255) AS _BYTE
DIM SHARED UserDefineCount AS INTEGER
UserDefine(0, 0) = "WINDOWS": UserDefine(0, 1) = "WIN"
UserDefine(0, 2) = "LINUX"
UserDefine(0, 3) = "MAC": UserDefine(0, 4) = "MACOSX"
UserDefine(0, 5) = "32BIT": UserDefine(0, 6) = "64BIT"
IF INSTR(_OS$, "WIN") THEN UserDefine(1, 0) = "-1": UserDefine(1, 1) = "-1" ELSE UserDefine(1, 0) = "0": UserDefine(1, 1) = "0"
IF INSTR(_OS$, "LINUX") THEN UserDefine(1, 2) = "-1" ELSE UserDefine(1, 2) = "0"
IF INSTR(_OS$, "MAC") THEN UserDefine(1, 3) = "-1": UserDefine(1, 4) = "-1" ELSE UserDefine(1, 3) = "0": UserDefine(1, 4) = "0"
IF INSTR(_OS$, "32BIT") THEN UserDefine(1, 5) = "-1": UserDefine(1, 6) = "0" ELSE UserDefine(1, 5) = "0": UserDefine(1, 6) = "-1"
'refactor patch 'refactor patch
DIM SHARED Refactor_Source AS STRING DIM SHARED Refactor_Source AS STRING
@ -1336,6 +1351,9 @@ stringprocessinghappened = 0
subfuncn = 0 subfuncn = 0
subfunc = "" subfunc = ""
SelectCaseCounter = 0 SelectCaseCounter = 0
ExecCounter = 0
UserDefineCount = 6
REDIM SHARED InValidLine(10000) AS _BIT
''create a type for storing memory blocks ''create a type for storing memory blocks
''UDT ''UDT
@ -1490,11 +1508,144 @@ layout = ""
layoutok = 0 layoutok = 0
linenumber = linenumber + 1 linenumber = linenumber + 1
IF linenumber > UBOUND(InValidLine) THEN REDIM _PRESERVE InValidLine(UBOUND(InValidLine) + 1000) AS _BIT 'color information flag for each line
InValidLine(linenumber) = 0
IF LEN(wholeline$) THEN IF LEN(wholeline$) THEN
wholeline$ = lineformat(wholeline$) wholeline$ = lineformat(wholeline$)
IF Error_Happened THEN GOTO errmes IF Error_Happened THEN GOTO errmes
temp$ = LTRIM$(RTRIM$(UCASE$(wholestv$)))
IF LEFT$(temp$, 5) = "$LET " THEN
temp$ = LTRIM$(MID$(temp$, 5)) 'simply shorten our string to parse
'For starters, let's make certain that we have 3 elements to deal with
temp = INSTR(temp$, "=") 'without an = in there, we can't get a value from the left and right side
IF temp = 0 THEN a$ = "Invalid Syntax. $LET <flag> = <value>": GOTO errmes
l$ = RTRIM$(LEFT$(temp$, temp - 1)): r$ = LTRIM$(MID$(temp$, temp + 1))
'then validate to make certain the left side looks proper
l1$ = ""
FOR i = 1 TO LEN(l$)
a = ASC(l$, i)
SELECT CASE a
CASE 32 'strip out spaces
CASE 46: l1$ = l1$ + CHR$(a)
CASE IS < 48, IS > 90: a$ = "Invalid symbol left of equal sign (" + CHR$(a) + ")": GOTO errmes
CASE ELSE: l1$ = l1$ + CHR$(a)
END SELECT
NEXT
l$ = l1$
IF LEFT$(r$, 1) = CHR$(34) THEN r$ = LTRIM$(MID$(r$, 2))
IF RIGHT$(r$, 1) = CHR$(34) THEN r$ = RTRIM$(LEFT$(r$, LEN(r$) - 1))
IF LEFT$(r$, 1) = "-" THEN
r1$ = "-"
r$ = LTRIM$(MID$(r$, 2))
ELSE
r1$ = ""
END IF
'then validate to make certain the left side looks proper
FOR i = 1 TO LEN(r$)
a = ASC(r$, i)
SELECT CASE a
CASE 32
CASE 46 'periods are fine.
r1$ = r1$ + "."
CASE IS < 48, IS > 90
a$ = "Invalid symbol right of equal sign (" + CHR$(a) + ")": GOTO errmes
CASE ELSE
r1$ = r1$ + CHR$(a)
END SELECT
NEXT
r$ = r1$
layout$ = "$LET " + l$ + " = " + r$
'First look to see if we have an existing setting like this and if so, update it
FOR i = 7 TO UserDefineCount 'UserDefineCount 1-6 are reserved for automatic OS/BIT detection
IF UserDefine(0, i) = l$ THEN UserDefine(1, i) = r$: GOTO finishedlinepp
NEXT
'Otherwise create a new setting and set the initial value for it
UserDefineCount = UserDefineCount + 1
IF UserDefineCount > UBOUND(UserDefine, 2) THEN
REDIM _PRESERVE UserDefine(1, UBOUND(UserDefine, 2) + 10) 'Add another 10 elements to the array so it'll expand as the user adds to it
END IF
UserDefine(0, UserDefineCount) = l$
UserDefine(1, UserDefineCount) = r$
GOTO finishedlinepp
END IF
IF LEFT$(temp$, 4) = "$IF " THEN
IF RIGHT$(temp$, 5) <> " THEN" THEN a$ = "$IF without THEN": GOTO errmes
temp$ = LTRIM$(MID$(temp$, 4)) 'strip off the $IF and extra spaces
temp$ = RTRIM$(LEFT$(temp$, LEN(temp$) - 4)) 'and strip off the THEN and extra spaces
temp = INSTR(temp$, "=")
ExecCounter = ExecCounter + 1
ExecLevel(ExecCounter) = -1 'default to a skip value
DefineElse(ExecCounter) = 1 '1 says we have an $IF statement at this level
result = EvalPreIF(temp$, a$)
IF a$ <> "" THEN GOTO errmes
IF result <> 0 THEN
ExecLevel(ExecCounter) = ExecLevel(ExecCounter - 1) 'So we inherit the execlevel from above
IF ExecLevel(ExecCounter) = 0 THEN DefineElse(ExecCounter) = DefineElse(ExecCounter) OR 4 'Else if used and conditon found
END IF
GOTO finishedlinepp 'and then we're finished -- and at this point we didn't make a match so we exit with a DONT READ type flag on our code.
END IF
IF temp$ = "$ELSE" THEN
IF DefineElse(ExecCounter) = 0 THEN a$ = "$ELSE without $IF": GOTO errmes
IF DefineElse(ExecCounter) AND 2 THEN a$ = "$IF block already has $ELSE statement in it": GOTO errmes
DefineElse(ExecCounter) = DefineElse(ExecCounter) OR 2 'set the flag to declare an $ELSE already in this block
IF DefineElse(ExecCounter) AND 4 THEN 'If we executed code in a previous IF or ELSE IF statement, we can't do it here
ExecLevel(ExecCounter) = -1 'So we inherit the execlevel from above
ELSE
ExecLevel(ExecCounter) = ExecLevel(ExecCounter - 1) 'If we were processing code before, code after this segment is going to be SKIPPED
END IF
GOTO finishedlinepp
END IF
IF LEFT$(temp$, 5) = "$ELSE" THEN 'looking for $ELSE IF
temp$ = LTRIM$(MID$(temp$, 6))
IF LEFT$(temp$, 3) = "IF " THEN
IF DefineElse(ExecCounter) = 0 THEN a$ = "$ELSE IF without $IF": GOTO errmes
IF DefineElse(ExecCounter) AND 2 THEN a$ = "$ELSE IF cannot follow $ELSE": GOTO errmes
IF RIGHT$(temp$, 5) <> " THEN" THEN a$ = "$ELSE IF without THEN": GOTO errmes
IF DefineElse(ExecCounter) AND 4 THEN 'If we executed code in a previous IF or ELSE IF statement, we can't do it here
ExecLevel(ExecCounter) = -1
GOTO finishedlinepp
END IF
temp$ = LTRIM$(MID$(temp$, 3)) 'strip off the IF and extra spaces
temp$ = RTRIM$(LEFT$(temp$, LEN(temp$) - 4)) 'and strip off the THEN and extra spaces
result = EvalPreIF(temp$, a$)
IF a$ <> "" THEN GOTO errmes
IF result <> 0 THEN
ExecLevel(ExecCounter) = ExecLevel(ExecCounter - 1) 'So we inherit the execlevel from above
IF ExecLevel(ExecCounter) = 0 THEN DefineElse(ExecCounter) = DefineElse(ExecCounter) OR 4 'Else if used and conditon found
END IF
GOTO finishedlinepp 'and then we're finished -- and at this point we didn't make a match so we exit with a DONT READ type flag on our code.
END IF
END IF
IF temp$ = "$END IF" OR temp$ = "$ENDIF" THEN
IF DefineElse(ExecCounter) = 0 THEN a$ = "$END IF without $IF": GOTO errmes
DefineElse(ExecCounter) = 0 'We no longer have an $IF block at this level
ExecCounter = ExecCounter - 1
GOTO finishedlinepp
END IF
IF ExecLevel(ExecCounter) THEN
IF linenumber > UBOUND(InValidLine) THEN REDIM _PRESERVE InValidLine(UBOUND(InValidLine) + 10000) AS _BIT
InValidLine(linenumber) = -1
GOTO finishedlinepp 'we don't check for anything inside lines that we've marked for skipping
END IF
cwholeline$ = wholeline$ cwholeline$ = wholeline$
wholeline$ = eleucase$(wholeline$) '********REMOVE THIS LINE LATER******** wholeline$ = eleucase$(wholeline$) '********REMOVE THIS LINE LATER********
@ -2534,6 +2685,12 @@ IF idemode = 0 AND inclevel = 0 THEN a3$ = lineinput3$
IF a3$ = CHR$(13) THEN EXIT DO IF a3$ = CHR$(13) THEN EXIT DO
linenumber = linenumber + 1 linenumber = linenumber + 1
IF InValidLine(linenumber) THEN
layoutok = 1
layout$ = SPACE$(controllevel) + LTRIM$(RTRIM$(a3$))
IF idemode GOTO ideret4 ELSE GOTO skipide4
END IF
layout = "" layout = ""
layoutok = 1 layoutok = 1
@ -2556,6 +2713,10 @@ IF Debug THEN PRINT #9, "########" + a3$ + "########"
layoutdone = 1 'validates layout of any following goto finishednonexec/finishedline layoutdone = 1 'validates layout of any following goto finishednonexec/finishedline
'We've already figured out in the prepass which lines are invalidated by the precompiler
'No need to go over those lines again.
'IF InValidLine(linenumber) THEN goto skipide4 'layoutdone = 0: GOTO finishednonexec
'QB64 Metacommands 'QB64 Metacommands
IF ASC(a3$) = 36 THEN '$ IF ASC(a3$) = 36 THEN '$
@ -2626,10 +2787,54 @@ Resize = 1: Resize_Scale = 2
GOTO finishednonexec GOTO finishednonexec
END IF END IF
IF LEFT$(a3u$, 5) = "$LET " THEN GOTO finishednonexec 'we dealt with this basically in the prepass
' so we could define CONST and such and have them available for later IDE passes
IF a3u$ = "$END IF" OR a3u$ = "$ENDIF" THEN
layout$ = "$END IF"
controltype(controllevel) = 0
controllevel = controllevel - 1
GOTO finishednonexec
END IF
IF LEFT$(a3u$, 4) = "$IF " THEN
temp$ = LTRIM$(MID$(a3u$, 4)) 'strip off the $IF and extra spaces
temp$ = RTRIM$(LEFT$(temp$, LEN(temp$) - 4)) 'and strip off the THEN and extra spaces
temp = INSTR(temp$, "=")
controllevel = controllevel + 1
controltype(controllevel) = 6
IF temp = 0 THEN layout$ = "$IF " + temp$ + " THEN": GOTO finishednonexec 'no = sign in the $IF statement, so we're going to assume the user is doing something like $IF flag
l$ = RTRIM$(LEFT$(temp$, temp - 1)): r$ = LTRIM$(MID$(temp$, temp + 1))
layout$ = "$IF " + l$ + " = " + r$ + " THEN"
GOTO finishednonexec
END IF
IF a3u$ = "$ELSE" THEN
layout$ = "$ELSE"
lhscontrollevel = lhscontrollevel - 1
GOTO finishednonexec
END IF
IF LEFT$(a3u$, 5) = "$ELSE" THEN
temp$ = LTRIM$(MID$(a3u$, 6))
IF LEFT$(temp$, 3) = "IF " THEN
lhscontrollevel = lhscontrollevel - 1
temp$ = LTRIM$(MID$(temp$, 3)) 'strip off the IF and extra spaces
temp$ = RTRIM$(LEFT$(temp$, LEN(temp$) - 4)) 'and strip off the THEN and extra spaces
temp = INSTR(temp$, "=")
IF temp = 0 THEN layout$ = "$ELSE IF " + temp$ + " THEN": GOTO finishednonexec 'no = sign in the $IF statement, so we're going to assume the user is doing something like $IF flag
l$ = RTRIM$(LEFT$(temp$, temp - 1)): r$ = LTRIM$(MID$(temp$, temp + 1))
layout$ = "$ELSE IF " + l$ + " = " + r$ + " THEN"
GOTO finishednonexec
END IF
END IF
END IF 'QB64 Metacommands END IF 'QB64 Metacommands
linedataoffset = DataOffset linedataoffset = DataOffset
entireline$ = lineformat(a3$): IF LEN(entireline$) = 0 THEN GOTO finishednonexec entireline$ = lineformat(a3$): IF LEN(entireline$) = 0 THEN GOTO finishednonexec
@ -3926,7 +4131,7 @@ IF declaringlibrary THEN GOTO declibjmp1
IF closedmain = 0 THEN closemain IF closedmain = 0 THEN closemain
'check for open controls (copy #2) 'check for open controls (copy #2)
IF controllevel THEN IF controllevel <> 0 AND controltype(controllevel) <> 6 THEN 'It's OK for subs to be inside $IF blocks
x = controltype(controllevel) x = controltype(controllevel)
IF x = 1 THEN a$ = "IF without END IF" IF x = 1 THEN a$ = "IF without END IF"
IF x = 2 THEN a$ = "FOR without NEXT" IF x = 2 THEN a$ = "FOR without NEXT"
@ -4404,7 +4609,7 @@ IF sf THEN
IF LEN(subfunc) = 0 THEN a$ = "END " + secondelement$ + " without " + secondelement$: GOTO errmes IF LEN(subfunc) = 0 THEN a$ = "END " + secondelement$ + " without " + secondelement$: GOTO errmes
'check for open controls (copy #3) 'check for open controls (copy #3)
IF controllevel THEN IF controllevel <> 0 AND controltype(controllevel) <> 6 THEN 'It's OK for subs to be inside $IF blocks
x = controltype(controllevel) x = controltype(controllevel)
IF x = 1 THEN a$ = "IF without END IF" IF x = 1 THEN a$ = "IF without END IF"
IF x = 2 THEN a$ = "FOR without NEXT" IF x = 2 THEN a$ = "FOR without NEXT"
@ -9885,7 +10090,7 @@ GOTO ideret4 'return control to IDE
END IF END IF
'layout is not currently used by the compiler (as appose to the IDE), if it was it would be used here 'layout is not currently used by the compiler (as appose to the IDE), if it was it would be used here
skipide4:
LOOP LOOP
ide5: ide5:
@ -9898,10 +10103,12 @@ IF definingtype THEN linenumber = definingtypeerror: a$ = "TYPE without END TYPE
'check for open controls (copy #1) 'check for open controls (copy #1)
IF controllevel THEN IF controllevel THEN
x = controltype(controllevel) x = controltype(controllevel)
a$ = "Unidentified open control block"
IF x = 1 THEN a$ = "IF without END IF" IF x = 1 THEN a$ = "IF without END IF"
IF x = 2 THEN a$ = "FOR without NEXT" IF x = 2 THEN a$ = "FOR without NEXT"
IF x = 3 OR x = 4 THEN a$ = "DO without LOOP" IF x = 3 OR x = 4 THEN a$ = "DO without LOOP"
IF x = 5 THEN a$ = "WHILE without WEND" IF x = 5 THEN a$ = "WHILE without WEND"
IF x = 6 THEN a$ = "$IF without $END IF"
IF (x >= 10 AND x <= 17) OR x = 18 OR x = 19 THEN a$ = "SELECT CASE without END SELECT" IF (x >= 10 AND x <= 17) OR x = 18 OR x = 19 THEN a$ = "SELECT CASE without END SELECT"
linenumber = controlref(controllevel) linenumber = controlref(controllevel)
GOTO errmes GOTO errmes
@ -24008,6 +24215,180 @@ END IF
END IF END IF
END FUNCTION END FUNCTION
FUNCTION EvalPreIF (text$, err$)
temp$ = text$ 'so we don't corrupt the string sent to us for evaluation
err$ = "" 'null the err message to begin with
'first order of business is to solve for <>=
DIM PC_Op(3) AS STRING
PC_Op(1) = "="
PC_Op(2) = "<"
PC_Op(3) = ">"
DO
'look for the existence of the first symbol if there is any
firstsymbol$ = "": first = 0
FOR i = 1 TO UBOUND(PC_Op)
temp = INSTR(temp$, PC_Op(i))
IF first = 0 THEN first = temp: firstsymbol$ = PC_Op(i)
IF temp <> 0 AND temp < first THEN first = temp: firstsymbol$ = PC_Op(i)
NEXT
IF firstsymbol$ <> "" THEN 'we've got = < >; let's see if we have a combination of them
secondsymbol = 0: second = 0
FOR i = first + 1 TO LEN(temp$)
a$ = MID$(temp$, i, 1)
SELECT CASE a$
CASE " " 'ignore spaces
CASE "=", "<", ">"
IF a$ = firstsymbol$ THEN err$ = "Duplicate operator (" + a$ + ")": EXIT SUB
second = i: secondsymbol$ = a$
CASE ELSE 'we found a symbol we don't recognize
EXIT FOR
END SELECT
NEXT
END IF
IF first THEN 'we found a symbol
l$ = RTRIM$(LEFT$(temp$, first - 1))
IF second THEN rightstart = second + 1 ELSE rightstart = first + 1
r$ = LTRIM$(MID$(temp$, rightstart))
symbol$ = MID$(temp$, first, 1) + MID$(temp$, second, 1)
'now we check for spaces to separate this segment from any other AND/OR conditions and such
FOR i = LEN(l$) TO 1 STEP -1
IF ASC(l$, i) = 32 THEN EXIT FOR
NEXT
leftside$ = RTRIM$(LEFT$(temp$, i))
l$ = LTRIM$(RTRIM$(MID$(temp$, i + 1, LEN(l$) - i)))
rightstop = LEN(r$)
FOR i = 1 TO LEN(r$)
IF ASC(r$, i) = 32 THEN EXIT FOR
NEXT
rightside$ = LTRIM$(MID$(r$, i + 1))
r$ = LTRIM$(RTRIM$(LEFT$(r$, i - 1)))
IF symbol$ = "=<" THEN symbol$ = "<="
IF symbol$ = "=>" THEN symbol$ = ">="
IF symbol$ = "><" THEN symbol$ = "<>"
result$ = " 0 "
IF symbol$ = "<>" THEN 'check to see if we're NOT equal in any case with <>
FOR i = 0 TO UserDefineCount
IF UserDefine(0, i) = l$ AND UserDefine(1, i) <> r$ THEN result$ = " -1 ": GOTO finishedcheck
NEXT
END IF
IF INSTR(symbol$, "=") THEN 'check to see if we're equal in any case with =
FOR i = 0 TO UserDefineCount
IF UserDefine(0, i) = l$ AND UserDefine(1, i) = r$ THEN result$ = " -1 ": GOTO finishedcheck
NEXT
END IF
IF INSTR(symbol$, ">") THEN 'check to see if we're greater than in any case with >
FOR i = 0 TO UserDefineCount
IF VerifyNumber(r$) AND VerifyNumber(UserDefine(1, i)) THEN 'we're comparing numeric values
IF UserDefine(0, i) = l$ AND VAL(UserDefine(1, i)) > VAL(r$) THEN result$ = " -1 ": GOTO finishedcheck
ELSE
IF UserDefine(0, i) = l$ AND UserDefine(1, i) > r$ THEN result$ = " -1 ": GOTO finishedcheck
END IF
NEXT
END IF
IF INSTR(symbol$, "<") THEN 'check to see if we're less than in any case with <
FOR i = 0 TO UserDefineCount
IF VerifyNumber(r$) AND VerifyNumber(UserDefine(1, i)) THEN 'we're comparing numeric values
IF UserDefine(0, i) = l$ AND VAL(UserDefine(1, i)) < VAL(r$) THEN result$ = " -1 ": GOTO finishedcheck
ELSE
IF UserDefine(0, i) = l$ AND UserDefine(1, i) < r$ THEN result$ = " -1 ": GOTO finishedcheck
END IF
NEXT
END IF
finishedcheck:
temp$ = leftside$ + result$ + rightside$
END IF
LOOP UNTIL first = 0
'And at this point we should now be down to a statement with nothing but AND/OR/XORS in it
PC_Op(1) = " AND "
PC_Op(2) = " OR "
PC_Op(3) = " XOR "
DO
first = 0
FOR i = 1 TO UBOUND(PC_Op)
IF PC_Op(i) <> "" THEN
t = INSTR(temp$, PC_Op(i))
IF first <> 0 THEN
IF t < first AND t <> 0 THEN first = t: firstsymbol = i
ELSE
first = t: firstsymbol = i
END IF
END IF
NEXT
IF first = 0 THEN EXIT DO
leftside$ = RTRIM$(LEFT$(temp$, first - 1))
symbol$ = MID$(temp$, first, LEN(PC_Op(firstsymbol)))
t$ = MID$(temp$, first + LEN(PC_Op(firstsymbol)))
t = INSTR(t$, " ") 'the first space we come to
IF t THEN
m$ = LTRIM$(RTRIM$(LEFT$(t$, t - 1)))
rightside$ = LTRIM$(MID$(t$, t))
ELSE
m$ = LTRIM$(MID$(t$, t))
rightside$ = ""
END IF
leftresult = 0
IF VerifyNumber(leftside$) THEN
IF VAL(leftside$) <> 0 THEN leftresult = -1
ELSE
FOR i = 0 TO UserDefineCount
IF UserDefine(0, i) = leftside$ THEN
t$ = LTRIM$(RTRIM$(UserDefine(1, i)))
IF t$ <> "0" AND t$ <> "" THEN leftresult = -1: EXIT FOR
END IF
NEXT
END IF
rightresult = 0
IF VerifyNumber(m$) THEN
IF VAL(m$) <> 0 THEN rightresult = -1
ELSE
FOR i = 0 TO UserDefineCount
IF UserDefine(0, i) = m$ THEN
t$ = LTRIM$(RTRIM$(UserDefine(1, i)))
IF t$ <> "0" AND t$ <> "" THEN rightresult = -1: EXIT FOR
END IF
NEXT
END IF
SELECT CASE LTRIM$(RTRIM$(symbol$))
CASE "AND"
IF leftresult <> 0 AND rightresult <> 0 THEN result$ = " -1 " ELSE result$ = " 0 "
CASE "OR"
IF leftresult <> 0 OR rightresult <> 0 THEN result$ = " -1 " ELSE result$ = " 0 "
CASE "XOR"
IF leftresult <> rightresult THEN result$ = " -1 " ELSE result$ = " 0 "
END SELECT
temp$ = result$ + rightside$
LOOP
IF VerifyNumber(temp$) THEN
EvalPreIF = VAL(temp$)
ELSE
IF INSTR(temp$, " ") THEN err$ = "Invalid Resolution of $IF; check statements" 'If we've got more than 1 statement, it's invalid
FOR i = 0 TO UserDefineCount
IF UserDefine(0, i) = temp$ THEN
t$ = LTRIM$(RTRIM$(UserDefine(1, i)))
IF t$ <> "0" AND t$ <> "" THEN EvalPreIF = -1: EXIT FOR
END IF
NEXT
END IF
END SUB
FUNCTION VerifyNumber (text$)
t$ = LTRIM$(RTRIM$(text$))
v = VAL(t$)
t1$ = LTRIM$(STR$(v))
IF t$ = t1$ THEN VerifyNumber = -1
END FUNCTION
'$INCLUDE:'subs_functions\extensions\opengl\opengl_methods.bas' '$INCLUDE:'subs_functions\extensions\opengl\opengl_methods.bas'