[Smipl-devel] SF.net SVN: smipl:[39] smipl-devel
Brought to you by:
the_student
From: <the...@us...> - 2009-08-15 19:37:32
|
Revision: 39 http://smipl.svn.sourceforge.net/smipl/?rev=39&view=rev Author: the_student Date: 2009-08-15 19:37:23 +0000 (Sat, 15 Aug 2009) Log Message: ----------- * Started internationalizing. * Added MIDI, PRINT, and POWER. Modified Paths: -------------- smipl-devel/src/Console.h smipl-devel/src/SMIPL-header.h smipl-devel/src/SVM.h Added Paths: ----------- smipl-devel/international/ smipl-devel/international/NO-nb/ smipl-devel/international/NO-nb/About/ smipl-devel/international/NO-nb/Help/ Modified: smipl-devel/src/Console.h =================================================================== --- smipl-devel/src/Console.h 2009-08-15 18:55:10 UTC (rev 38) +++ smipl-devel/src/Console.h 2009-08-15 19:37:23 UTC (rev 39) @@ -1,5 +1,3 @@ -#define cmd_is(c) !strcasecmp(command.argv[0],c) - bool using_script=false, using_library=false; IFileStream *library_file, *script_file; void getstr(char *a,int length) { @@ -8,25 +6,25 @@ } bool Console(int argc, char** argv) { - SMIPL_String command; + SMIPL_String cmd; int Lib_start; char *str, *str2; for(;;) { - for(int a=0;a<=10;a++) strcpy(command.argv[0], ""); + for(int a=0;a<=10;a++) strcpy(cmd.argv[0], ""); cout<<"? "; - getstr(command.str, 80); - command.Split(); + getstr(cmd.str, 80); + cmd.Split(); if(cmd_is("")) continue; if(cmd_is("QUIT")) break; if(cmd_is("EXIT")) break; if(cmd_is("DUMP")) {DumpStack();DumpMDS();continue;} if(cmd_is("CATALOG")) { - if(command.argc==1) Catalog("/"); - if(command.argc>=2) for(int a=1;a<command.argc;a++) Catalog(command.argv[a]); + if(cmd.argc==1) Catalog("/"); + if(cmd.argc>=2) for(int a=1;a<cmd.argc;a++) Catalog(cmd.argv[a]); continue;} if(cmd_is("RUN")) {VM0.Run(0);continue;} if(cmd_is("PROGRAM")) { - if(!stricmp(command.argv[1], "START")) { + if(!stricmp(cmd.argv[1], "START")) { for(int a=0;a<=10000;a++) { cout<<a<<" "; getstr(Program[a], 80); @@ -76,26 +74,26 @@ continue; } if(cmd_is("ABOUT")) { - if(command.argc==1) PrintFile("/About/About"); - if(command.argc==2) for(int a=1;a<command.argc;a++) { - str=strdup("/About/",command.argv[a]); + if(cmd.argc==1) PrintFile("/About/About"); + if(cmd.argc==2) for(int a=1;a<cmd.argc;a++) { + str=strdup("/About/",cmd.argv[a]); PrintFile(str); delete[]str; } continue; } if(cmd_is("HELP")) { - if(command.argc==1) PrintFile("/Help/Help"); - if(command.argc==2) for(int a=1;a<command.argc;a++) { - str=strdup("/Help/",command.argv[a]); + if(cmd.argc==1) PrintFile("/Help/Help"); + if(cmd.argc==2) for(int a=1;a<cmd.argc;a++) { + str=strdup("/Help/",cmd.argv[a]); PrintFile(str); delete[]str; } continue; } - if(isdigit(command.argv[0][0])) { - if(command.argc==1) { - Lib_start=(int)atof(command.argv[0]); + if(isdigit(cmd.argv[0][0])) { + if(cmd.argc==1) { + Lib_start=(int)atof(cmd.argv[0]); for(int a=Lib_start;a<=10000;a++) { cout<<a<<" "; getstr(Program[a], 80); @@ -103,7 +101,7 @@ } } } - cout<<"HOW DO I "<<command.str<<"?"<<endl; + cout<<"HOW DO I "<<cmd.str<<"?"<<endl; } return true; } Modified: smipl-devel/src/SMIPL-header.h =================================================================== --- smipl-devel/src/SMIPL-header.h 2009-08-15 18:55:10 UTC (rev 38) +++ smipl-devel/src/SMIPL-header.h 2009-08-15 19:37:23 UTC (rev 39) @@ -12,6 +12,7 @@ #include <physfs.h> #include "FS/physfs_stream.cpp" //SMIPL Core systems +#define cmd_is(c) !strcasecmp(cmd.argv[0],c) bool Init(int,char**); bool DeInit(); #include "Config.h" Modified: smipl-devel/src/SVM.h =================================================================== --- smipl-devel/src/SVM.h 2009-08-15 18:55:10 UTC (rev 38) +++ smipl-devel/src/SVM.h 2009-08-15 19:37:23 UTC (rev 39) @@ -7,6 +7,7 @@ pthread_mutex_t Admin; SMIPL_String cmd; value_t number,number2; + MIDI_Message MIDI_Melding; void MDS_Get(char* Name, value_t* value) { pthread_mutex_lock(&Admin); @@ -67,21 +68,41 @@ ID=pthread_self(); pthread_mutex_unlock(&Admin); MDS_Set("Stack/P", -1); - while(1) { + for(;(Address>100000)&&(Address>0);Address++) { strcpy(cmd.str,Program[Address]); cmd.Split(); - if(!strcasecmp(cmd.argv[0],"STOP")) break; + if(cmd_is("STOP")) break; if(!strcasecmp(cmd.str,"PROGRAM END")) break; - if(!strcasecmp(cmd.argv[0],"GOTO")) if(cmd.argc>=2) {Atof(cmd.argv[1],&number);Address=number-1;} - if(!strcasecmp(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(!strcasecmp(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(!strcasecmp(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(!strcasecmp(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(!strcasecmp(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);} + //Flow control + if(cmd_is("GOTO")) if(cmd.argc>=2) {Atof(cmd.argv[1],&number);Address=number-1;} + //Set + if(cmd_is("SET")) for(int a=1;a<cmd.argc;a+=2) {Atof(cmd.argv[a+1],&number);MDS_Set(cmd.argv[a], number);} + //Basic Arithmetic + if(cmd_is("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(cmd_is("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(cmd_is("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(cmd_is("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);} + //Trig + if(cmd_is("ROOT")) for(int a=1;a<cmd.argc;a++){Atof(cmd.argv[a], &number);number=sqrt(number);MDS_Set(cmd.argv[a], number);} + if(cmd_is("LOG")) ; + if(cmd_is("POWER")); + //IO + if(cmd_is("PRINT")) {for(int a=1;a<cmd.argc;a++) {Atof(cmd.argv[a], &number);cout<<cmd.argv[a]<<" = "<<number<<" ";}cout<<endl;} + if(cmd_is("NEWLINE"))cout<<endl; + //MIDI + if(cmd_is("MIDI")) { + if(!MIDI_OUT_INITED){MIDI_Init();if(!MIDI_OUT_INITED) cout<<"MIDI FAILURE\n";} + MIDI_Melding.data[0] = 0x90; // MIDI note-on message (requires to data bytes) + MIDI_Melding.data[1] = 60; // MIDI note-on message: Key number (60 = middle C) + MIDI_Melding.data[2] = 100; // MIDI note-on message: Key velocity (100 = loud) + MIDI_Melding.data[3] = 0; // Unused parameter + if(cmd.argc==2) {Atof(cmd.argv[1], &number);MIDI_Melding.data[1]=(int)number;} + if(cmd.argc==3) {Atof(cmd.argv[1], &number);MIDI_Melding.data[1]=(int)number;Atof(cmd.argv[2], &number);MIDI_Melding.data[2]=number;} + if(cmd.argc>=4) {Atof(cmd.argv[1], &number);MIDI_Melding.data[0]=number;Atof(cmd.argv[2], &number);MIDI_Melding.data[1]=number;Atof(cmd.argv[3], &number);MIDI_Melding.data[3]=number;} + MIDI_Write(MIDI_Melding); + } - Address++; - if(Address>100000) break; if(Address<0) break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |