Phase 2: variables, arrays, program execution, and control flow
Add variable storage (scalar and array), program line storage with RUN/LIST/NEW, and full control flow: FOR/NEXT, GOTO, GOSUB/RETURN, IF/THEN/ELSE, WHILE/WEND, ON GOTO/GOSUB, DATA/READ/RESTORE. New modules: interp.c (1445 lines - execution loop and statement dispatcher), vars.c, arrays.c, input.c. Version bumped to 0.2.0. 16 test programs pass including Leibniz pi and prime sieve.
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
10 REM Array test
|
||||
20 DIM A(10), B$(5)
|
||||
30 FOR I = 0 TO 10
|
||||
40 A(I) = I * I
|
||||
50 NEXT I
|
||||
60 FOR I = 0 TO 10
|
||||
70 PRINT A(I);
|
||||
80 NEXT I
|
||||
90 PRINT
|
||||
100 B$(0) = "Zero"
|
||||
110 B$(1) = "One"
|
||||
120 B$(2) = "Two"
|
||||
130 FOR I = 0 TO 2
|
||||
140 PRINT B$(I)
|
||||
150 NEXT I
|
||||
@@ -0,0 +1,12 @@
|
||||
10 REM Control flow: GOTO, IF, FOR, GOSUB combined
|
||||
20 GOTO 40
|
||||
30 PRINT "SKIP THIS"
|
||||
40 PRINT "Start"
|
||||
50 FOR I = 1 TO 3
|
||||
60 IF I = 2 THEN GOSUB 200
|
||||
70 PRINT "I ="; I
|
||||
80 NEXT I
|
||||
90 PRINT "End"
|
||||
100 END
|
||||
200 PRINT " (subroutine called)";
|
||||
210 RETURN
|
||||
@@ -0,0 +1,9 @@
|
||||
10 REM DATA/READ test
|
||||
20 DATA 10, 20, 30, "hello", "world"
|
||||
30 READ A, B, C
|
||||
40 PRINT A; B; C
|
||||
50 READ D$, E$
|
||||
60 PRINT D$; " "; E$
|
||||
70 RESTORE
|
||||
80 READ X
|
||||
90 PRINT "After RESTORE:"; X
|
||||
@@ -0,0 +1,6 @@
|
||||
10 REM DEF FN test
|
||||
20 DEF FN SQ(X) = X * X
|
||||
30 DEF FN CU(X) = X * X * X
|
||||
40 PRINT "5 squared ="; FN SQ(5)
|
||||
50 PRINT "3 cubed ="; FN CU(3)
|
||||
60 PRINT "Sum ="; FN SQ(3) + FN CU(2)
|
||||
@@ -0,0 +1,10 @@
|
||||
10 REM FOR/NEXT test
|
||||
20 FOR I = 1 TO 5
|
||||
30 PRINT I;
|
||||
40 NEXT I
|
||||
50 PRINT
|
||||
60 REM FOR with STEP
|
||||
70 FOR I = 10 TO 0 STEP -2
|
||||
80 PRINT I;
|
||||
90 NEXT I
|
||||
100 PRINT
|
||||
@@ -0,0 +1,15 @@
|
||||
10 REM GOSUB/RETURN test
|
||||
20 PRINT "Main program"
|
||||
30 GOSUB 100
|
||||
40 PRINT "Back from first sub"
|
||||
50 GOSUB 200
|
||||
60 PRINT "Back from second sub"
|
||||
70 END
|
||||
100 REM First subroutine
|
||||
110 PRINT "In first subroutine"
|
||||
120 GOSUB 200
|
||||
130 PRINT "Back in first sub"
|
||||
140 RETURN
|
||||
200 REM Second subroutine
|
||||
210 PRINT "In second subroutine"
|
||||
220 RETURN
|
||||
@@ -0,0 +1,8 @@
|
||||
10 REM IF/THEN/ELSE test
|
||||
20 X = 5
|
||||
30 IF X > 3 THEN PRINT "X > 3" ELSE PRINT "X <= 3"
|
||||
40 IF X < 3 THEN PRINT "X < 3" ELSE PRINT "X >= 3"
|
||||
50 REM IF with GOTO
|
||||
60 IF X = 5 THEN GOTO 80
|
||||
70 PRINT "Should not print"
|
||||
80 PRINT "Jumped to 80"
|
||||
@@ -0,0 +1,6 @@
|
||||
10 REM Leibniz formula for pi
|
||||
20 S = 0
|
||||
30 FOR I = 0 TO 999
|
||||
40 S = S + (-1)^I / (2*I+1)
|
||||
50 NEXT I
|
||||
60 PRINT "Pi approx:"; 4*S
|
||||
@@ -0,0 +1,7 @@
|
||||
10 REM Nested FOR loops - multiplication table
|
||||
20 FOR I = 1 TO 5
|
||||
30 FOR J = 1 TO 5
|
||||
40 PRINT I*J;
|
||||
50 NEXT J
|
||||
60 PRINT
|
||||
70 NEXT I
|
||||
@@ -0,0 +1,11 @@
|
||||
10 REM ON GOTO/GOSUB test
|
||||
20 FOR I = 1 TO 3
|
||||
30 ON I GOTO 100, 200, 300
|
||||
40 NEXT I
|
||||
50 END
|
||||
100 PRINT "Branch 1"
|
||||
110 GOTO 40
|
||||
200 PRINT "Branch 2"
|
||||
210 GOTO 40
|
||||
300 PRINT "Branch 3"
|
||||
310 GOTO 40
|
||||
@@ -0,0 +1,18 @@
|
||||
10 REM Sieve of Eratosthenes
|
||||
20 N = 100
|
||||
30 DIM P(100)
|
||||
40 FOR I = 2 TO N
|
||||
50 P(I) = 1
|
||||
60 NEXT I
|
||||
70 FOR I = 2 TO SQR(N)
|
||||
80 IF P(I) = 0 THEN GOTO 120
|
||||
90 FOR J = I*2 TO N STEP I
|
||||
100 P(J) = 0
|
||||
110 NEXT J
|
||||
120 NEXT I
|
||||
130 C = 0
|
||||
140 FOR I = 2 TO N
|
||||
150 IF P(I) = 1 THEN PRINT I; : C = C + 1
|
||||
160 NEXT I
|
||||
170 PRINT
|
||||
180 PRINT C; "primes found"
|
||||
@@ -0,0 +1,11 @@
|
||||
10 REM Variable types test
|
||||
20 A% = 42
|
||||
30 B! = 3.14
|
||||
40 C# = 2.718281828
|
||||
50 D$ = "Hello"
|
||||
60 PRINT A%; B!; C#
|
||||
70 PRINT D$
|
||||
80 REM DEFINT test
|
||||
90 DEFINT X-Z
|
||||
100 X = 7.9
|
||||
110 PRINT X
|
||||
@@ -0,0 +1,8 @@
|
||||
10 REM WHILE/WEND test
|
||||
20 X = 1
|
||||
30 WHILE X <= 10
|
||||
40 IF X MOD 2 = 0 THEN PRINT X;
|
||||
50 X = X + 1
|
||||
60 WEND
|
||||
70 PRINT
|
||||
80 PRINT "Done"
|
||||
Reference in New Issue
Block a user