Skip to content

Commit

Permalink
Fixed the for loop error, upload examples of use
Browse files Browse the repository at this point in the history
  • Loading branch information
amigojapan committed May 4, 2012
1 parent 71725da commit 7d4c342
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 11 deletions.
3 changes: 3 additions & 0 deletions FORNEXT.BAS
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
10 FOR A=10 TO 15
20 PRINT A
30 NEXT A
5 changes: 5 additions & 0 deletions FORNEXTNESTED.BAS
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
10 FOR A=1 TO 3
15 FOR B=5 TO 7
20 PRINT B
25 NEXT B
30 NEXT A
34 changes: 23 additions & 11 deletions SDmemBASIC.ino
Original file line number Diff line number Diff line change
Expand Up @@ -249,11 +249,15 @@ void get_Line2(char RealLineNumber) {
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int *callp,callstk[10],forln[10],forend[10],var[100],CurrentLineNumber,quoted;
int *callp,callstk[10];
#define NumberOfNestedLoops 4
int forln[NumberOfNestedLoops],forend[NumberOfNestedLoops],for_itteration[NumberOfNestedLoops];
int var[100],CurrentLineNumber,quoted;
char buf[100],F[2];//size of buf might be reducible
//char *ln[100],*p,*q,*x,*y,*z,*s,*d,*f;
char *p,*q,*x,*y,*z,*s,*d,*f;


char *findstr(char *s,char *o) {
for(x=s;*x;x++){
for(y=x,z=o; *z&&*y==*z; y++)
Expand Down Expand Up @@ -580,16 +584,24 @@ void loop() {
StackCount--;
}
break;
case 'F': // FOR
*(q=findstr(OneLine,"TO"))=0;
p=OneLine+5;
var[i=OneLine[3]]=eqexp();
p=q+2;
forend[i]=eqexp();
forln[i]=CurrentLineNumber;
break;
case 'N': // NEXT
++var[*d]<=forend[*d] && (CurrentLineNumber=forln[*d]);

case 'F': // FOR X=10 TO 15
char varname; int start; int end;
sscanf(OneLine,"FOR %c=%i TO %i",&varname,&start,&end);
//printf("FOR %c=%i TO %i\r\n",varname,start,end);
for_itteration[varname]=start;
forend[varname]=end;
forln[varname]=CurrentLineNumber;
var[varname]=start;
break;
case 'N': // NEXT
sscanf(OneLine,"NEXT %c",&varname);
if(for_itteration[varname]<forend[varname]) {//for loop has not ended
for_itteration[varname]++;//increment itteration number;
var[varname]=for_itteration[varname];
CurrentLineNumber=forln[varname];//goto beginning of for loop
}
break;
}
//CurrentLineNumber++;
}
Expand Down

0 comments on commit 7d4c342

Please sign in to comment.