Post by bluatigro on Apr 2, 2020 10:41:04 GMT
error :
i get a solid black screen
so gprun$() returns aways 'error'
what shoot not happen
it shoot draw rainbows diagonaly
i get a solid black screen
so gprun$() returns aways 'error'
what shoot not happen
it shoot draw rainbows diagonaly
dim in( 2 )
global letter$ : letter$ = "xy"
global width , height , pi
WindowWidth = 600
WindowHeight = 600
width = 600
height = 600
pi = atn( 1 ) * 4
open "draw func" for graphics as #m
#m "trapclose [quit]"
for x = 1 to width
for y = 0 to height
scan
#m "goto " ; x ; " " ; y
#m "color " ; kleur$( x , y , "[ + x y 0 ]" )
#m "down"
#m "set " ; x ; " " ; y
#m "up"
next y
next x
wait
[quit]
close #m
end
function rad( x )
rad = x * pi / 180
end function
function kleur$( x , y , prog$ )
in( 1 ) = x
in( 2 ) = y
uit$ = gprun$( prog$ )
if uit$ = "error" then
kl$ = "black"
else
kl$ = rainbow$( val( uit$ ) )
end if
kleur$ = kl$
end function
function rainbow$( deg )
r = sin( rad( deg ) ) * 127 + 128
g = sin( rad( deg - 120 ) ) * 127 + 128
b = sin( rad( deg + 120) ) * 127 + 128
rainbow$ = rgb$( r , g , b )
end function
function rgb$( r , g , b )
r = int( r ) and 255
g = int( g ) and 255
b = int( b ) and 255
rgb$ = str$( r ) + " " ; g ; " " ; b
end function
function isNumber( x$ )
isNumber = ( val( x$ ) <> 0 ) _
or ( x$ = "0" )
end function
function isInput( x$ )
isInput = ( len( x$ ) = 1 ) _
and ( instr( letter$ , x$ ) <> 0 )
end function
function iif( bool , t , f )
uit = f
if bool then uit = t
iif = uit
end function
function gprun$( prog$ )
''eval function for lisp formula's
''returns a double in a string
''or "error" when a iligal calculation is tryed
''i m not sure i catch all "error"s corectly
''please report mistakes
if prog$ = "" then prog$ = "error"
if len( prog$ ) > proglenmax then prog$ = "error"
while instr( prog$ , "]" ) <> 0 _
and prog$ <> "error"
einde = instr( prog$ , "]" )
begin = einde
while mid$( prog$ , begin , 1 ) <> "[" and begin > 1
begin = begin - 1
wend
part$ = mid$( prog$ , begin , einde - begin + 1 )
f$ = word$( part$ , 2 )
a$ = word$( part$ , 3 )
b$ = word$( part$ , 4 )
c$ = word$( part$ , 5 )
if isInput( a$ ) then
a = in( instr( letter$ , a$ ) )
else
if isNumber( a$ ) then
a = val( a$ )
else
prog$ = "error"
end if
end if
if isInput( b$ ) then
b = in( instr( letter$ , b$ ) )
else
if isNumber( b$ ) then
b = val( b$ )
else
prog$ = "error"
end if
end if
if isInput( c$ ) then
c = in( instr( letter$ , c$ ) )
else
if isNumber( c$ ) then
c = val( c$ )
else
prog$ = "error"
end if
end if
select case f$
case "+" : ab = a + b
case "-" : ab = a - b
case "*" : ab = a * b
case "/"
if abs( b ) < 1e-300 then
prog$ = "error"
else
ab = a / b
end if
case "sqr"
if a < 0 then
prog$ = "error"
else
ab = sqr( a )
end if
case "mod"
if b = 0 _
or b = 1 _
or int( b ) <> b then
prog$ = "error"
else
ab = a mod b
end if
case "abs" : ab = abs( a )
case "int" : ab = int( a )
case "sign"
if a < 0 then
ab = -1
else
if a > 0 then
ab = 1
else
ab = 0
end if
end if
case "^"
''this error migth not be corect
if a < 1e-300 _
or b < 1e-300 _
or abs(log(a)*log(b)) > 300 then
prog$ = "error"
else
ab = a ^ b
end if
case "ln"
if a < 1e-300 then
prog$ = "error"
else
ab = log( a ) / log( exp( 1 ) )
end if
case "log10"
if a < 1e-300 then
prog$ = "error"
else
ab = log( a ) / log( 10 )
end if
case "logX"
''this error migth not be correct
if a < 1e-300 _
or b < 1e-300 _
or b - 1 < 1e-300 then
prog$ = "error"
else
ab = log( a ) / log( b )
end if
case "exp"
''i dont know if 60 is the corect number
if abs( a ) > 60 then
prog$ = "error"
else
ab = exp( a )
end if
case "sin" : ab = sin( a )
case "cos" : ab = cos( a )
case "tan" : ab = tan( a )
case "atn" : ab = atn( a )
case "asin"
if abs( a ) > 1 then
prog$ = "error"
else
ab = asn( a )
end if
case "acos" : ab = acs( a )
if abs( a ) > 1 then
prog$ = "error"
else
ab = acs( a )
end if
case "dsin"
ab = sin( rad( a ) )
case "dcos"
ab = cos( rad( a ) )
case "dtan"
if ( a mod 360 ) = 90 _
or ( a mod 360 ) = 270 then
prog$ = "error"
else
ab = tan( rad( a ) )
end if
case "datn"
ab = degrees( atn( a ) )
case "dasin"
if abs( a ) > 1 then
prog$ = "error"
else
ab = degrees( asn( a ) )
end if
case "dacos"
if abs( a ) > 1 then
prog$ = "error"
else
ab = degrees( acs( a ) )
end if
case "?"
ab = iif( a , b , c )
case "and" : ab = a and b
case "or" : ab = a or b
case "xor" : ab = a xor b
case "not" : ab = not( a )
case "<"
ab = iif( a < b , true , false )
case "<="
ab = iif( a <= b , true , false )
case ">"
ab = iif( a > b , true , false )
case ">="
ab = iif( a >= b , true , false )
case "<?<"
ab = iif( a < b and b < c , true , false )
case "<?<="
ab = iif( a < b and b <= c , true , false )
case "<=?<"
ab = iif( a <= b and b < c , true , false )
case "<=?<="
ab = iif( a <= b and b <= c , true , false )
case "?<<?"
ab = iif( a > b or b > c , true , false )
case "?<<=?"
ab = iif( a > b or b >= c , true , false )
case "?<=<?"
ab = iif( a >= b or b > c , true , false )
case "?<=<=?"
ab = iif( a >= b or b >= c , true , false )
case "="
ab = iif( a = b , true , false )
case "<>"
ab = iif( a <> b , true , false )
case else
prog$ = "error"
end select
if prog$ <> "error" then
l$ = left$( prog$ , begin - 1 )
r$ = mid$( prog$ , einde + 1 _
, len( prog$ ) - einde + 1 )
prog$ = l$ + str$( ab ) + r$
end if
wend
gprun$ = prog$
end function