#! perl # Copyright (C) 2003-2007, The Perl Foundation. # $Id: testsuite.pl 21232 2007-09-12 19:30:46Z paultcochrane $ # Relies on "testrun.pl" being setup correctly. # # $tn = 0; while (1) { { local $/ = ""; $_ = ; } if ( /type / or /select/ ) { # /function/ print "Skipped\n"; next; } last unless $_; last if /STOPPLEASE/; @c = m/^'\s*(.*)/gm; print join( "\n", @c ), "\n====================== $tn\n" if @c; $tn++; open( OF, ">", "_testsuite.bas" ) || die; print OF $_; close(OF); if ( !system("perl compile.pl _testsuite.bas") ) { system("perl testrun.pl > _output2"); open( O, '>', "_output2" ) || die; print ; close(O); print "\n"; } } __DATA__ input a$, print a$ STOPPLEASE ' Expect 10 sub second(b() ) b(5)=10 end sub sub first(a() ) call second(a()) end sub dim t(),f() call first(t()) print t(5) ' Keys test, "interesting" dim a$(),b$() b$("Key 1")="This is" b$("Key 2")="an" B$("Hi Mom!")="interesting" B$(0)="development. keys a$(), b$() i=0 do t$=a$(i) print t$, print tab$(10),b$(t$) i=i+1 loop while t$ <> "" ' 5 and PI dim a$(), m() a$(1)="5" print a$(1) m(99)=3.14 print m(99) ' basic I/O 1..5 open "_testfile" for output as #3 for i=1 to 5 print #3, i next i close #3 open "_testfile" for input as #5 for i = 1 to 5 input #5,a$ print a$, next i close #5 print ' Expect 5, 0, "Hello" common i, a$ sub mysub print "In the sub\n" print i print j print a$ print c$ end sub j=2 i=5 a$="Hello" c$="WRONG" call mysub() ' Expect 10 sub second(b() ) b(5)=10 end sub sub first(a() ) call second(a()) end sub dim t(),f() call first(t()) print t(5) ' Expect OK y=59.7363 x=19.506 if ( y > 0 ) and (x > 0) then print "OK" end if ' Passing string arrays, expect 99 and "Hello" function foo(i, thing$()) print i print thing$(10) foo=1 end function dim fool$() fool$(10)="Hello" a=foo(99, fool$()) ' String Arrays, expect "One" dim g$() g$(5)="One" g$(6)="Two" print g$(5) ' Evil BASIC bug, expect 55 dim B(1), z(1) Z(54,6)=54 B(54)=1 Z1= 54 Z(Z1,6)= 54 B(Z(Z1,6))= 55 print B(Z(Z1,6)) ' Comparison operator tests if 4<5 then print "Ok" else print "Wrong" if 5<5 then print "Wrong" else print "Ok" if 6<5 then print "Wrong" else print "OK" if 4<=5 then print "Ok" else print "Wrong" if 5<=5 then print "Ok" else print "Wrong" if 6<=5 then print "Wrong" else print "OK" if 4=5 then print "Wrong" else print "Ok" if 5=4 then print "Wrong" else print "Ok" if 5=5 then print "Ok" else print "Wrong" if 5>4 then print "Ok" else print "Wrong" if 5>5 then print "Wrong" else print "Ok" if 4>5 then print "Wrong" else print "OK" if 5>=4 then print "Ok" else print "Wrong" if 5>=5 then print "Ok" else print "Wrong" if 4>=5 then print "Wrong" else print "OK" ' Exit for, count 1-3 for i=1 to 5 if i=4 then exit for print i next i ' Branch test, all OK in sequence PRINT "1 in module-level code" GOSUB Sub1 PRINT "ERR this line in main routine should be skipped" Label1: PRINT "5 back in module-level code" END Sub1: PRINT "2 in subroutine one" GOSUB Sub2 PRINT "ERR this line in subroutine one should be skipped" Label2: PRINT "4 back in subroutine one" RETURN Label1 Sub2: PRINT "3 in subroutine two" RETURN Label2 'Cannot return from here to main 'program - only to SUB1. ' Exit tests sub mysub(b,c) print "Print me" exit sub print "Don't print me" end sub function foo$ foo$="Right one" exit function foo$="Wrong one" end function call mysub( 78, 80) t$=foo$ print t$ t=0 do print "This is right" exit do print "This is wrong" t=t+1 loop until t>1 ' Mathmagic dim m(1), ba(1) fa=-1 m0=48100 m=48000 w=-19 t=3 m(t)=-100 ba(fa+1)=9 w=w+M(T)+INT(M(T) * BA(FA + 1) / (BA(FA + 1) + 1) * (M0 - M) * .0001) print w ' INT madness. 0, 0, 0, -1, -1, 3 print int(.8), print int(.3), print int(0), print int(-.8), print int(-.3), print int(3.14) ' Simple subs, Made it here sub mysub() print "Made it here" end sub call mysub() ' Arguments. Expect 2 and 4 sub twice(a) print a a=a*2 end sub t=2 call twice t print t ' Passing arrays, twice, expect 12 function aftwo(y()) print y(4) end function function arrfunc(x()) u=aftwo(x()) arrfunc=55 end function dim g(10) g(5)=666 g(4)=12 a=g(5)+0 y=arrfunc(g()) ' Passing arrays (expect 12) function arrfunc(x()) print x(4) arrfunc=55 end function dim g(10) g(4)=12 y=arrfunc(g()) ' Function Array scopes, expect 4, 5.6 function mine(a) dim t(6) s=32 t(3)=2 mine=a*2 print t(3)*2 end function dim t(7) z=55 t(3)=5.6 a=mine(5) print t(3) 1740 print "Branched" end ' Logical Operators print " AND OR XOR EQV IMP a & ! b" for i = 0 to 1 for j = 0 to 1 print i; j; if i and j then a$="True " else a$="False " if i or j then b$="True " else b$="False " if i eqv j then d$="True " else d$="False " if i imp j then e$="True " else e$="False " if i and not j then f$="True " else f$="False " print a$;b$;c$;d$;e$;f$ next j,i ' Function Array scopes, expect 4, 5.6 function mine(a) dim t(6) t(3)=2 mine=a*2 print t(3)*2 end function dim t(7) t(3)=5.6 a=mine(5) print t(3) ' Unary minus goodness Dim t7(1),w(10) w=20 w(2)=5 t7(0)=0 w=w-(T7(0) * T7(0) * 12) ' Expect 20 print w ' Expect -20 print -w ' Expect -5 print -w(2) ' Expect 3 print 5-2 ' Expect 3 also print 5+-2 ' Expect 0 print 6-abs(-6) ' Some register confusion, expect .PTFCDR Dim c(10), a$(10), u(10) 510 FOR I = 0 TO 6 520 READ A$(I), U(I) print A$(I); 530 NEXT I 540 DATA ".",0,"P",100,"T",500,"F",350 550 DATA "C",325,"D",900,"R",20000 ' Read/data Hello World - 10 read a$ print a$ if a$ = "-" then end goto 10 100 data "Hello", "World", "-", 56.6 ' Compilation bug, expect "Ok" i$="N" if i$="N" then goto 35 end 35 print "Ok" end ' Compilation bug, expect "Ok" dim s(1) goto 10 INPUT S(0, 1), S(0, 2), S(0, 3), S(0, 4) 10 print "Ok" end ' Odd bug in static strings. Expect "Ok" dim O(1) IF E$ <> "O" THEN 5030 print "Wrong!" end 5030 print "Ok" end ' Equals bug, should print = greeting dim a$(1) a$(2)="World" a$="Hello" A$ = A$ + "=" + A$(2) print a$ ' Do/While/Loop stuff. All 5 a=0 do while a<5 a=a+1 loop print a a=0 do until a>4 a=a+1 loop print a a=0 do a=a+1 loop while a<5 print a a=0 do a=a+1 loop until a>4 print a ' Swap a$="Hello" b$="Goodbye" print a$,b$ swap a$,b$ print a$,b$ ' Bubble sort cities TRUE=1 FALSE=0 DIM A$(4) A$(1) = "New York" A$(2) = "Boston" A$(3) = "Chicago" A$(4) = "Seattle" Max = 4 'UBOUND(A$) Exchange=TRUE ' Force first pass through the array. WHILE Exchange ' Sort until no elements are exchanged. Exchange=FALSE ' Compare the array elements by pairs. When two are exchanged, ' force another pass by setting Exchange to TRUE. FOR I = 2 TO Max IF A$(I-1) > A$(I) THEN Exchange = TRUE B$=A$(I-1) A$(I-1)=A$(I) A$(I)=B$ ' SWAP A$(I - 1), A$(I) END IF NEXT WEND ' CLS FOR I = 1 TO 4 PRINT A$(I) NEXT I END ' mid/left/right 2-9, 1-5, 6-0 t$="1234567890" print mid$(t$, 2, 8) print left$(t$, 5) print right$(t$, 5) ' instr s1$="The longer string" found$="longer" bogus$="not" print "Found (5): ", instr(s1$, found$) print "Bogus (0): ", instr(s1$, bogus$) print "Null (1): ", instr(s1$, "") print "Start (11): ", instr(6, s1$, " ") print "Inval (0): ", instr(4, bogus$, "t") ' instr() tests s1$="Mixed case" print ucase$(s1$);" Upper" print lcase$(s1$);" Lower" a$=" Flush " print ">";ltrim$(a$) print rtrim$(a$);"<" ' A's and -'s print string$(10,75-10) print string$(20, "-") ' ON..GOTO 200! and then Oats.. t=2 on t goto 100, 200, 300 print "No match\n" FIN: for i = 1 to 3 on i gosub oats, peas, beans next i print end 100 print "100!" goto FIN 200 print "200!" goto FIN 300 print "300!" goto FIN oats: print "Oats", return peas: print "Peas", return beans: print "Beans", return ' Truth s$="Hello" if s$ then print "This is true" else print "Oops (string)" s$="" if s$ then print "Should not happen (string)" i%=0 if i% then print "Should not happen (int)" i%=54 if i% then print "This is true" else print "Oops (int)" i=0 if i then print "Should not happen (flo)" i=55 if i then print "This is true" else print "Oops (flo)" ' Expect OK if 2 > 1 then print "Ok" else print "All is not right" end if ' Count from 9 to 0, print 5 dim y(10) i=10 tloop: y(i)=i i=i-1 print i if i then goto tloop print y(5) ' Column alignment print "Hello";tab$(15);"World" print "Foo";tab$(15);"Stuff" print "I am the very model of a modern";tab$(15);"More" print "Hello","Again",d dim c$(1) for i = 1 to 20 : read c$(i) : next print for i = 1 to 20 step 4 print c$(i);tab$(12);c$(i+1);tab$(22);c$(i+2);tab$(32);c$(i+3) next print data "ABANDON","CHART","COMPUTER" data "DAMAGES","DESTRUCT","DOCK","IDLE","IMPULSE","LRSCAN","NAVIGATE","PHASERS","QUIT" data "SHIELDS","SOS","SRSCAN","STATUS","TORPEDO","TRANSFER","VISUAL","WARP" ' Random number distribution randomize timer max=10 dim a(max) for i = 0 to 100 b=rnd*max+1 a(b)=a(b)+1 next i for i = 1 to max print , for j = 0 to a(i) print "*"; next j print next i ' Trig w=15 dim a$(w) for i = 0 to (22/7)*2 step 0.40 for j = 1 to w*2 a$(j)=" " next j a$(w+w*sin(i)+1)="*" a$(w+w*cos(i)+1)="+" for j = 1 to w*2 print a$(j); next j print next i ' Expect Correct DIM A(1,1) RO=1 IF A(RO,5)=0 THEN GOSUB 20: REM GOO end 20 print "Correct" return ' Expect Hello A World print "Hello " + chr$(65); print " World" ' Expect 21 and "Correct" print 1+int(20) if t = 6 then print "Hi" elseif t=1 then print "Wrong" else print "Correct" end if if p$ = "Hello" then print "Whoa" ' Count by .5's and True! after 3 for t=1 to 10 step 0.5 print t, print sqr(t), if t=3 then print "True!" next t ' Expect OK if 2 > 1 then print "Ok" else print "All is not right" end if ' Three random numbers print str$(rnd) print str$(rnd()) print str$(rnd(1)) ' Expect Hello A World print "Hello " + chr$(65); print " World" ' Expect nothing Dim A(10) z=3 c=c+a(z) ' String function, whoa function a$ a$="Whoa" end function print a$ ' Changed ref'd var from 5 to 12 function myfunc(a) print a a=12 myfunc=80 end function z=5 T=myfunc(z) print z ' Basic Hello a$="Hello" print a$ ' Simplest function, return 10 function twice(number) twice=2*number end function a=twice(5) print a ' Expect -7 t%=-7 print t% ' Expect 9 print (2+3*5-(6+abs(0-3)))+1 ' Expect a Hello, World! print "Hello, "; ' COmment print "World!" ' Expect Correct DIM A(1,1) RO=1 IF A(RO,5)=0 THEN GOSUB 20: REM GOO end 20 print "Correct" return ' Expect Correct t=0 g=0 if t then print "Wrong" else if g then print "Wrong again" else print "Correct" end if end if ' Expect Correct t=0 g=0 if t then ' t is false, don't go here. print "Mistake" elseif g then print "Also a mistake" else print "Correct" end if ' Simple variable assignment, expect 7 a=0 b=7 a=b print a ' Expect rough PI print 22/7 ' Expect 6.00000 t=6 print t ' Expect -7 t%=-7 print t% ' Expect 7 t%=7 print t%*1 ' Also expect 7 t%=7 print 1*t% ' Expect correct t=0 if t then print "Wrong" else print "Correct" ' Expect correct t=0 if t then print "Wrong" else print "Correct" end if ' Expect correct t=1 if t then print "Correct" else print "Wrong" end if ' Factorial of 5 is 120 function factorial(a) if a then factorial=a*factorial(a-1) else factorial=1 end function T=factorial(5) print T! ' Correct and factorial of 4 is 24 function factorial(a) if a then factorial=a*factorial(a-1) else factorial=1 end function t=0 g=0 if t then print "Mistake" elseif g then print "Also a mistake" else print "Correct now 24" print factorial(4) end if ' Changed ref'd var from 5 to 12 function myfunc(a) print a a=12 myfunc=80 end function z=5 T=myfunc(z) print z ' Basic Hello a$="Hello" print a$ ' Concatenation greeting a$="Hello," b$=" world!" c$=a$+b$ print c$ ' String function, whoa function a$ a$="Whoa" end function print a$ ' String reference, no way function a$(u$) u$="No way" a$="Hello" end function t$="Not me" e$=a$(t$) print t$ ' references to references, expect 99 function last(t) t=99 last=0 end function function middle(s) middle=last(s) end function function start(r) start=middle(r) end function h=12 y=start(h) print h ' Basic structure 6, Hello and PI type newtype foo as integer bar as string narf as double end type dim t as newtype t.foo=6 t.bar="Hello" t.narf=3.1415 print t.foo print t.bar print t.narf ' Variable-depth structure references type first foo as integer bar as string end type type second other as first narf as integer pnext as first end type type third number as integer start as second end type dim t as first dim u as second dim v as third ' Results in 6, 15, and "Hello" t.foo=6 print t.foo u.other.foo=15 print u.other.foo v.start.pnext.bar="Hello" print v.start.pnext.bar ' Member functions, give 0 and 3 (modified) type first foo as integer bar as string end type type second other as first narf as double pnext as first end type type third number as integer start as second end type dim y as third t=y.start.narf+3 print y.start.narf print t ' Deep-copy of structures, 34 (NOT 99) type first foo as integer bar as string end type type second link as first end type type third poit as integer fwd as second end type dim x as third dim y as third dim k as second x.fwd.link.foo=34 y.fwd=x.fwd x.fwd.link.foo=99 print y.fwd.link.foo ' Structure assignment torture ' Expect: 99, 1, "user-type first" type first foo as integer bar as string end type type second other as first narf as integer pnext as first end type dim x as second dim y as second dim t as first x.other.foo=1 x.other.bar="one" x.narf=99 x.pnext.foo=2 x.pnext.bar="two" y=x print y.narf t=x.other print t.foo print t ' Passing structures ' Expect: 100, 12 and 103 type first foo as integer bar as string end type function mine (a, b, c as first) a=12 b=99 c.foo=103 mine=100 end function dim z as first z.foo=13 print mine(foo,20,z) print foo print z.foo ' Should print 100, 103 type first foo as integer bar as string end type type second pointer as first number as integer end type function mine (a, b, q as first) q.foo=103 mine=100 end function dim z as second z.number=13 z.pointer.foo=12 print mine(foo,20,z.pointer) print z.pointer.foo ' Array access, 132 type first foo as integer bar as string end type dim y(5) y(3)=66 dim u(5) as first print y(3)*2 ' Array structure access, 56/0 type first foo as integer bar as string end type dim u(5) as first u(2).foo=56 print u(2).foo ' Array assignment, 78 dim y(5) y(1)=78 print y(1) ' Casting with arrays, 5.00000 dim y!(10) j=2 i%=5.34 y!(i)=i% print y!(i) ' Count from 9 to 0, print 5 dim y(10) i=10 tloop: y(i)=i i=i-1 print i if i then goto tloop print y(5) ' Truth s$="Hello" if s$ then print "This is true" else print "Oops (string)" s$="" if s$ then print "Should not happen (string)" i%=0 if i% then print "Should not happen (int)" i%=54 if i% then print "This is true" else print "Oops (int)" i=0 if i then print "Should not happen (flo)" i=55 if i then print "This is true" else print "Oops (flo)" ' Passing arrays (expect 12) function arrfunc(x()) print x(4) arrfunc=55 end function dim g(10) g(5)=666 g(4)=12 a=g(5)+0 y=arrfunc(g()) ' Passing arrays, twice, expect 12 function aftwo(y()) print y(4) end function function arrfunc(x()) u=aftwo(x()) arrfunc=55 end function dim g(10) g(5)=666 g(4)=12 a=g(5)+0 y=arrfunc(g()) ' For loops, by two and backwards for i = 0 to 10 step 2 print i, next i print for i = 10 to 3 step -1 print i next i print ' For loops. 3..6 nested in 1..3 function foo for y=3 to 6 print y, next y foo=99 end function for t%=1 to 3 h=foo() print " ", t% next t% ' Swap a$="Hello" b$="Goodbye" print a$,b$ swap a$,b$ print a$,b$ ' Anti-crawling, gives 0 function foo print y foo=99 end function y=66.66 u=foo() ' Bubble sort cities TRUE=1 FALSE=0 DIM A$(4) A$(1) = "New York" A$(2) = "Boston" A$(3) = "Chicago" A$(4) = "Seattle" Max = 4 'UBOUND(A$) Exchange=TRUE ' Force first pass through the array. WHILE Exchange ' Sort until no elements are exchanged. Exchange=FALSE ' Compare the array elements by pairs. When two are exchanged, ' force another pass by setting Exchange to TRUE. FOR I = 2 TO Max IF A$(I-1) > A$(I) THEN Exchange = TRUE B$=A$(I-1) A$(I-1)=A$(I) A$(I)=B$ ' SWAP A$(I - 1), A$(I) END IF NEXT WEND ' CLS FOR I = 1 TO 4 PRINT A$(I) NEXT I END ' Do/While/Loop stuff. All 5 a=0 do while a<5 a=a+1 loop print a a=0 do until a>4 a=a+1 loop print a a=0 do a=a+1 loop while a<5 print a a=0 do a=a+1 loop until a>4 print a ' Branch test, all OK in sequence PRINT "1 in module-level code" GOSUB Sub1 PRINT "ERR this line in main routine should be skipped" Label1: PRINT "5 back in module-level code" END Sub1: PRINT "2 in subroutine one" GOSUB Sub2 PRINT "ERR this line in subroutine one should be skipped" Label2: PRINT "4 back in subroutine one" RETURN Label1 Sub2: PRINT "3 in subroutine two" RETURN Label2 'Cannot return from here to main 'program - only to SUB1. ' Exit tests sub mysub(b,c) print "Print me" exit sub print "Don't print me" end sub function foo$ foo$="Right one" exit function foo$="Wrong one" end function call mysub 78, 80 t$=foo$ print t$ t=0 do print "This is right" exit do print "This is wrong" t=t+1 loop until t>1 ' Function test: A, 3, 90 print chr$(65) print int(3.1415) print asc("Z") ' Logical Operators (not NOT) print " AND OR XOR EQV IMP" for i = 0 to 1 for j = 0 to 1 print i; j; if i and j then a$="True " else a$="False " if i or j then b$="True " else b$="False " if i xor j then c$="True " else c$="False " if i eqv j then d$="True " else d$="False " if i imp j then e$="True " else e$="False " print a$;b$;c$;d$;e$ next j,i ' Select-case (all positive) t=50 select case t case 10 print "Wrong" case 50 select case g case 6 print "Wrong again!" case 0 print "Right (nest)!" end select print "Ongoing (right also)" end select select case t*1+0 case 1 to 10, t*2, >100 print "Wrong 1!" case 49 to 49, t*2, g print "Wrong 2!" case t print "Ok!" end select select case h case 99 print "Wrong 3!" case <5 print "Ok!" case <10 ' Fallthrough print "Ok (not!)" end select select case h case 1 print "Nothing!" case 2 print "Wrong-o!" case else print "Right!" end select a$="one" select case a$ case "zero" print "Bzzt" case "two" print "not" case "one" print "Correct!" end select ' mid/left/right 2-9, 1-5, 6-0 t$="1234567890" print mid$(t$, 2, 8) print left$(t$, 5) print right$(t$, 5) ' instr s1$="The longer string" found$="longer" bogus$="not" print "Found (5): ", instr(s1$, found$) print "Bogus (0): ", instr(s1$, bogus$) print "Null (1): ", instr(s1$, "") print "Start (11): ", instr(6, s1$, " ") print "Inval (0): ", instr(4, bogus$, "t") ' instr() tests s1$="Mixed case" print ucase$(s1$);" Upper" print lcase$(s1$);" Lower" a$=" Flush " print ">";ltrim$(a$) print rtrim$(a$);"<" ' A's and -'s print string$(10,75-10) print string$(20, "-") ' Read, data, restore ' Numbers, symbols in two rows and then two rows of identical numbers type foo first as integer end type dim y as foo read a,b,y.first read a$,t$,d$ print a,b,y.first print a$,t$,d$ for i=1 to 5 read h print h, next i print restore 20 for i=1 to 5 read h print h, next i print data 56, -78, 12.3, "Foo", lol, +#^ 20 data 10,20,30,40,50 ' basic I/O 1..5 open "_testfile" for output as #3 for i=1 to 5 print #3, i next i close #3 open "_testfile" for input as #2 for i = 1 to 5 input #2,a$ print a$, next i close #2 print ' ON..GOTO 200! and then Oats.. t=2 on t goto 100, 200, 300 print "No match\n" FIN: for i = 1 to 3 on i gosub oats, peas, beans next i print end 100 print "100!" goto FIN 200 print "200!" goto FIN 300 print "300!" goto FIN oats: print "Oats", return peas: print "Peas", return beans: print "Beans", return ' Random number distribution randomize timer max=10 dim a(max) for i = 0 to 100 b=rnd*max+1 a(b)=a(b)+1 next i for i = 1 to max print , for j = 0 to a(i) print "*"; next j print next i ' Square roots and sgn print 10,sqr(10) print 32767,sqr(32767) print 0,sqr(0) print 0.5,sqr(0.5) print 2,sqr(2) for i = -1 to 1 print "Sign of ";i;" is ",sgn(i) next i ' "shared" Whoa, 66666, Goodbye, 909090, 101010 type struct first as integer end type sub foo shared thing$ shared narf as struct shared bar() shared lot$() shared poit() as struct thing$="Whoa" bar(5)=66666 lot$(2)="Goodbye" narf.first=909090 poit(4).first=101010 end sub dim narf as struct dim bar(1) dim lot$(1) dim poit(1) as struct dim h$(1) thing$="Hello" bar(5)=55555 lot$(2)="Aloha" narf.first=999 poit(4).first=111111 call foo() print thing$, print bar(5), print lot$(2), print narf.first, print poit(4).first ' ADD bug, Return OK function foo$ foo$="Return OK" a$="Blah" end function print foo$() ' Some assembly required print "Hello, world" _STARTASM print "Include me in the assembly.\n" _ENDASM print "Goodbye, world" ' Column alignment print "Hello";tab$(15);"World" print "Foo";tab$(15);"Stuff" print "I am the very model of a modern";tab$(15);"More" print "Hello","Again",d dim c$(1) for i = 1 to 20 : read c$(i) : next print for i = 1 to 20 step 4 print c$(i);tab$(12);c$(i+1);tab$(22);c$(i+2);tab$(32);c$(i+3) next print data "ABANDON","CHART","COMPUTER" data "DAMAGES","DESTRUCT","DOCK","IDLE","IMPULSE","LRSCAN","NAVIGATE","PHASERS","QUIT" data "SHIELDS","SOS","SRSCAN","STATUS","TORPEDO","TRANSFER","VISUAL","WARP" ' Nested if/else bug bump=1 LOOPY: if bump < -1 then goto LAST if bump < 1 then if bump = 0 then print "Second" else print "Third" end if end if print "First, and every" bump=bump-1 goto LOOPY LAST: print "All done" ' Mystery typeshift bug (OK) type foo first as integer end type dim a as foo print a.first=x print a.first print "OK" ' Default case fallthrough t=3 select case t case 1 print "One" case 2 print "Two" case 3 print "Correct" case else print "WRONG!" end select print "All done." # Local Variables: # mode: cperl # cperl-indent-level: 4 # fill-column: 100 # End: # vim: expandtab shiftwidth=4: