[Smipl-devel] SF.net SVN: smipl:[30] smipl-devel
Brought to you by:
the_student
From: <the...@us...> - 2009-08-06 10:24:35
|
Revision: 30 http://smipl.svn.sourceforge.net/smipl/?rev=30&view=rev Author: the_student Date: 2009-08-06 10:24:24 +0000 (Thu, 06 Aug 2009) Log Message: ----------- Added IF, and IF! Made disallow_spaces_in_names enforceable Added the <line_number> edit-mode, and also the <line_number> <line> Modified Paths: -------------- smipl-devel/Console.h smipl-devel/SVM.h smipl-devel/String.h Modified: smipl-devel/Console.h =================================================================== --- smipl-devel/Console.h 2009-08-04 17:51:20 UTC (rev 29) +++ smipl-devel/Console.h 2009-08-06 10:24:24 UTC (rev 30) @@ -103,6 +103,15 @@ DumpRoot(); continue; } + if(isdigit(command.argv[0][0])) { + number=atoi(command.argv[0]); + if(command.argc==1) EnterProgram=true; + if(command.argc>=2) { + strcpy(Program[(int)number], command.argv[1]); + for(int a=2;a<command.argc;a++) {strcat(Program[(int)number], " ");strcat(Program[(int)number], command.argv[a]);} + } + continue; + } cout<<"Unknown command:\""<<command.argv[0]<<"\"!"<<endl; } } Modified: smipl-devel/SVM.h =================================================================== --- smipl-devel/SVM.h 2009-08-04 17:51:20 UTC (rev 29) +++ smipl-devel/SVM.h 2009-08-06 10:24:24 UTC (rev 30) @@ -22,6 +22,7 @@ pthread_mutex_t Admin; SMIPL_String cmd; value_t number,number2; + int a; void MDS_Get(char* Name, value_t* value) { pthread_mutex_lock(&Admin); @@ -96,39 +97,36 @@ ID=pthread_self(); pthread_mutex_unlock(&Admin); MDS_Set("Stack/P", 0); + try{ while(1) { strcpy(cmd.str,Program[Address]); cmd.Split(); if(!stricmp(cmd.argv[0],"STOP")) break; if(!stricmp(cmd.str,"PROGRAM END")) break; - if(!stricmp(cmd.argv[0],"SET")) for(int a=1;a<cmd.argc;a+=2) {Atof(cmd.argv[a+1],&number);MDS_Set(cmd.argv[a], number);} + if(!stricmp(cmd.argv[0],"SET")) for(a=1;a<cmd.argc;a+=2) {Atof(cmd.argv[a+1],&number);MDS_Set(cmd.argv[a], number);} //Arithmetic - if(!stricmp(cmd.argv[0],"ADD")) {Atof(cmd.argv[1],&number);for(int a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number+=number2;}MDS_Set(cmd.argv[1], number);} - if(!stricmp(cmd.argv[0],"SUBRACT")) {Atof(cmd.argv[1],&number);for(int a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number-=number2;}MDS_Set(cmd.argv[1], number);} - if(!stricmp(cmd.argv[0],"MULTIPLY")) {Atof(cmd.argv[1],&number);for(int a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number*=number2;}MDS_Set(cmd.argv[1], number);} - if(!stricmp(cmd.argv[0],"DIVIDE")) {Atof(cmd.argv[1],&number);for(int a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number/=number2;}MDS_Set(cmd.argv[1], number);} + if(!stricmp(cmd.argv[0],"ADD")) {Atof(cmd.argv[1],&number);for(a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number+=number2;}MDS_Set(cmd.argv[1], number);} + if(!stricmp(cmd.argv[0],"SUBRACT")) {Atof(cmd.argv[1],&number);for(a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number-=number2;}MDS_Set(cmd.argv[1], number);} + if(!stricmp(cmd.argv[0],"MULTIPLY")) {Atof(cmd.argv[1],&number);for(a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number*=number2;}MDS_Set(cmd.argv[1], number);} + if(!stricmp(cmd.argv[0],"DIVIDE")) {Atof(cmd.argv[1],&number);for(a=2;a<cmd.argc;a++){Atof(cmd.argv[a], &number2);number/=number2;}MDS_Set(cmd.argv[1], number);} //Stack - if(!stricmp(cmd.argv[0],"PUSH")) {for(int a=1;a<cmd.argc;a++) {Atof(cmd.argv[a],&number);Push(number);}} - if(!stricmp(cmd.argv[0],"POP")) {for(int a=1;a<cmd.argc;a++) {Pop(&number);MDS_Set(cmd.argv[a], number);}} + if(!stricmp(cmd.argv[0],"PUSH")) {for(a=1;a<cmd.argc;a++) {Atof(cmd.argv[a],&number);Push(number);}} + if(!stricmp(cmd.argv[0],"POP")) {for(a=1;a<cmd.argc;a++) {Pop(&number);MDS_Set(cmd.argv[a], number);}} //Flow control + if(!stricmp(cmd.argv[0],"IF")) {Atof(cmd.argv[1], &number);if(cmd.argc>=3) {Atof(cmd.argv[2], &number2);if(cmd.Op=='=') if(number!=number2) Address++;if(cmd.Op=='>') if(number<=number2) Address++;if(cmd.Op=='<') if(number>=number2) Address++;}else if(!number) Address++;} + if(!stricmp(cmd.argv[0],"IF!")) {Atof(cmd.argv[1], &number);if(cmd.argc>=3) {Atof(cmd.argv[2], &number2);if(cmd.Op=='=') if(number==number2) Address++;if(cmd.Op=='>') if(number>number2) Address++;if(cmd.Op=='<') if(number<number2) Address++;}else if(!number) Address++;} if(!stricmp(cmd.argv[0],"GOTO")) if(cmd.argc>=2) {Atof(cmd.argv[1],&number);Address=number-1;} if(!stricmp(cmd.argv[0],"GOSUB")) if(cmd.argc>=2) {Push((value_t)Address);Atof(cmd.argv[1],(value_t*)&Address);Address-=1;} - if(!stricmp(cmd.argv[0],"RETURN")) { - Pop((value_t*)&Address); - for(int a=1;a<cmd.argc;a++) { - Atof(cmd.argv[1], &number); - MDS_Set("RETURN", number); - Push(number); - } - } + if(!stricmp(cmd.argv[0],"RETURN")) {Pop((value_t*)&Address);for(a=1;a<cmd.argc;a++) {Atof(cmd.argv[1], &number);MDS_Set("RETURN", number);Push(number);}} Address++; if(Address>100000) break; if(Address<0) break; } - + } + catch(...) {cout<<"EXCEPTION"<<endl;} } Modified: smipl-devel/String.h =================================================================== --- smipl-devel/String.h 2009-08-04 17:51:20 UTC (rev 29) +++ smipl-devel/String.h 2009-08-06 10:24:24 UTC (rev 30) @@ -41,7 +41,7 @@ while(!isDelim(str[c1],disallow_spaces_in_names)) { if(argc!=0) argv[argc][c2]=str[c1]; else argv[argc][c2]=toupper(str[c1]); - if(argv[argc][c2]=='"') disallow_spaces_in_names=!disallow_spaces_in_names; + if(argv[argc][c2]=='"') if(!force_disallow_spaces_in_names) disallow_spaces_in_names=!disallow_spaces_in_names; c1++; c2++; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |