[Smipl-devel] SF.net SVN: smipl:[41] smipl-devel
Brought to you by:
the_student
From: <the...@us...> - 2009-08-16 19:29:50
|
Revision: 41 http://smipl.svn.sourceforge.net/smipl/?rev=41&view=rev Author: the_student Date: 2009-08-16 19:29:42 +0000 (Sun, 16 Aug 2009) Log Message: ----------- * Changed Splash * Updated FS.zip * Removed unnecessary lines in PartList.lst * Various bug fixes * Some minor UI changes * Added PHYSFS_setSaneConfig to FS_init, programs are now saved, and (if possible), loaded from userdir/.smipl/smipl * Recovered most of SVM's functionality. Modified Paths: -------------- smipl-devel/FS/Console/Splash smipl-devel/FS.zip smipl-devel/PartList.lst smipl-devel/src/Console.h smipl-devel/src/FS/FS.h smipl-devel/src/Init.h smipl-devel/src/SIA/SIASOUND.h smipl-devel/src/SMIPL-header.h smipl-devel/src/SVM.h smipl-devel/src/String.h smipl-devel/src/config.h Modified: smipl-devel/FS/Console/Splash =================================================================== --- smipl-devel/FS/Console/Splash 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/FS/Console/Splash 2009-08-16 19:29:42 UTC (rev 41) @@ -1,4 +1 @@ -SMIPL 50cc - - SMIPLYFY Your life - -PRESS ENTER TO START \ No newline at end of file +SMIPL 50cc - Beta \ No newline at end of file Modified: smipl-devel/FS.zip =================================================================== (Binary files differ) Modified: smipl-devel/PartList.lst =================================================================== --- smipl-devel/PartList.lst 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/PartList.lst 2009-08-16 19:29:42 UTC (rev 41) @@ -1,6 +1 @@ -FS.zip -FS/About /About -FS/Console /Console -FS/Help /Help -FS/Script /Script -FS/Library /Library +FS.zip \ No newline at end of file Modified: smipl-devel/src/Console.h =================================================================== --- smipl-devel/src/Console.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/Console.h 2009-08-16 19:29:42 UTC (rev 41) @@ -4,29 +4,32 @@ if(!using_library)cin.getline(a,length); else {script_file->getline(a,length);if(script_file->eof()){using_script=false;delete script_file;}} } - +int a=0; bool Console(int argc, char** argv) { SMIPL_String cmd; int Lib_start; char *str, *str2; + try{ + sys_clearscreen(); PrintFile("/Console/Splash"); for(;;) { - for(int a=0;a<=10;a++) strcpy(cmd.argv[0], ""); + for(a=0;a<=10;a++) strcpy(cmd.argv[0], ""); + cout<<endl; cout<<"? "; 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("DUMP")) {DumpStack();cout<<endl;DumpMDS();continue;} if(cmd_is("CATALOG")) { if(cmd.argc==1) Catalog("/"); - if(cmd.argc>=2) for(int a=1;a<cmd.argc;a++) Catalog(cmd.argv[a]); + if(cmd.argc>=2) for(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(cmd.argv[1], "START")) { - for(int a=0;a<=10000;a++) { + for(a=0;a<=10000;a++) { cout<<a<<" "; getstr(Program[a], 80); if(!stricmp(Program[a], "PROGRAM END")) break; @@ -50,7 +53,7 @@ delete[]str2; str2=strdup(str, "_START"); MDS_Set(str2, Lib_start); - for(int a=0;a<=10000;a++) { + for(a=0;a<=10000;a++) { cout<<a<<" "; if(library_file->getline(Program[a], 80)==0) {strcpy(Program[a], "PROGRAM END");break;} if(!stricmp(Program[a], "PROGRAM END")) break; @@ -76,7 +79,8 @@ } if(cmd_is("ABOUT")) { if(cmd.argc==1) PrintFile("/About/About"); - if(cmd.argc==2) for(int a=1;a<cmd.argc;a++) { + if(cmd.argc==2) for(a=1;a<cmd.argc;a++) { + strtoupper(cmd.argv[a]); str=strdup("/About/",cmd.argv[a]); PrintFile(str); delete[]str; @@ -85,17 +89,64 @@ } if(cmd_is("HELP")) { if(cmd.argc==1) PrintFile("/Help/Help"); - if(cmd.argc==2) for(int a=1;a<cmd.argc;a++) { + if(cmd.argc==2) for(a=1;a<cmd.argc;a++) { + strtoupper(cmd.argv[a]); str=strdup("/Help/",cmd.argv[a]); PrintFile(str); delete[]str; } continue; } + try{ + if(cmd_is("SAVE")) { + str=new char[80]; + if(cmd.argc==1) { + cout<<"Filename: "; + getstr(str, 80); + } + else strcpy(str,cmd.argv[1]); + OFileStream *the_file=new OFileStream(str); + *the_file<<"SMIPL PROGRAM"<<endl; + cout<<"SAVING... "; + a=0; + do{ + *the_file<<Program[a]<<endl; + }while(strcasecmp(Program[a++], "PROGRAM END")); + cout<<"OK"<<endl; + delete[]str; + delete the_file; + continue; + } + if(cmd_is("LOAD")) { + str=new char[80]; + if(cmd.argc==1) { + cout<<"Filename: "; + getstr(str, 80); + } + else strcpy(str,cmd.argv[1]); + cout<<"LOADING... "; + IFileStream *the_file=new IFileStream(str); + str2=new char[80]; + the_file->getline(str2,80); + if(!strcmp(str2,"SMIPL PROGRAM")) { + a=0; + do{ + the_file->getline(Program[a], 80); + }while(strcmp(Program[a++], "PROGRAM END")); + cout<<"OK"<<endl; + } + else cout<<"FAIL"<<endl; + delete str; + delete str2; + delete the_file; + continue; + } + } + catch(std::runtime_error a) {cout<<a.what()<<endl;continue;} 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++) { + for(a=Lib_start;a<=10000;a++) { cout<<a<<" "; getstr(Program[a], 80); if(!stricmp(Program[a], "PROGRAM END")) break; @@ -104,5 +155,8 @@ } cout<<"HOW DO I "<<cmd.str<<"?"<<endl; } + } + catch(std::runtime_error a) {cout<<a.what()<<endl;return false;} + catch(...) {cout<<"GENERIC ERROR CAUGHT IN CONSOLE"<<endl;} return true; } Modified: smipl-devel/src/FS/FS.h =================================================================== --- smipl-devel/src/FS/FS.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/FS/FS.h 2009-08-16 19:29:42 UTC (rev 41) @@ -40,20 +40,21 @@ char* str; if(PHYSFS_exists(FileName)) { if(!PHYSFS_isDirectory(FileName)) { - sys_clearscreen(); PHYSFS_file *thefile=PHYSFS_openRead(FileName); - str=new char[PHYSFS_fileLength(thefile)/sizeof(char)]; - PHYSFS_read (thefile, str, 1, PHYSFS_fileLength(thefile)); + str=new char[PHYSFS_fileLength(thefile)]; + PHYSFS_read (thefile, str, sizeof(char), PHYSFS_fileLength(thefile)); + cout<<str<<endl; delete[]str; } } else cout<<"\""<<FileName<<"\": not found"<<endl; - pthread_mutex_unlock(&FS); + pthread_mutex_unlock(&FS); } bool FS_init() { SMIPL_String Part; + PHYSFS_setSaneConfig("SMIPL","SMIPL",NULL, 0, 0); fstream PartList("partlist.lst"); if(PartList.is_open()) { while(!PartList.eof()){ Modified: smipl-devel/src/Init.h =================================================================== --- smipl-devel/src/Init.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/Init.h 2009-08-16 19:29:42 UTC (rev 41) @@ -8,6 +8,42 @@ if(!PHYSFS_init(argv[0])) {SetLastSysError((char*)PHYSFS_getLastError());return false;} cout<<"Initializing FileSystem Structure"<<endl; if(!FS_init())return false; + + cout<<"Initializing version globals"<<endl; + MDS_Set("/Global/com.smipl.version.major", 3); + MDS_Set("/Global/com.smipl.version.minor", 50); + MDS_Set("/Global/com.smipl.version.patchlevel", 0); + MDS_Set("/Global/com.smipl.mds.version.major", 2); + MDS_Set("/Global/com.smipl.mds.version.minor", 0); + MDS_Set("/Global/com.smipl.mds.version.patchlevel", 0); + MDS_Set("/Global/com.smipl.sia.version.major", 2); + MDS_Set("/Global/com.smipl.sia.version.minor", 0); + MDS_Set("/Global/com.smipl.sia.version.patchlevel", 0); + MDS_Set("/Global/com.smipl.siasound.version.major", 2); + MDS_Set("/Global/com.smipl.siasound.version.minor", 0); + MDS_Set("/Global/com.smipl.siasound.version.patchlevel", 0); + MDS_Set("/Global/com.smipl.fs.version.major", 2); + MDS_Set("/Global/com.smipl.fs.version.minor", 0); + MDS_Set("/Global/com.smipl.fs.version.patchlevel", 0); + + cout<<"Initializing compile-time globals"<<endl; + MDS_Set("/Global/compiler.isGCC", false); + #ifdef __GNUC__ + MDS_Set("/Global/compiler.isGCC", true); + MDS_Set("/Global/compiler.version.major", __GNUC__); + MDS_Set("/Global/compiler.version.minor", __GNUC_MINOR__); + MDS_Set("/Global/compiler.version.patchlevel",__GNUC_PATCHLEVEL__); + #endif + + cout<<"Initing SIASOUND"<<endl; + MDS_Set("/Global/com.smipl.sia.sound.midi.enable",false); + MDS_Set("/Global/com.smipl.sia.sound.midi.inited",false); + #ifdef EnableMIDI + MDS_Set("/Global/com.smipl.sia.sound.midi.enable",true); + #endif + #ifdef AutoInitMIDI + MIDI_Init(); + #endif } catch(...) {SetLastSysError("EXCEPTION");return false;} Modified: smipl-devel/src/SIA/SIASOUND.h =================================================================== --- smipl-devel/src/SIA/SIASOUND.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/SIA/SIASOUND.h 2009-08-16 19:29:42 UTC (rev 41) @@ -8,6 +8,7 @@ pthread_mutex_lock(&SIA_SOUND); if(MIDI_Out=open("/dev/midi",O_WRONLY,0)<0) goto End; MIDI_OUT_INITED=true; + MDS_Set("/Global/com.smipl.sia.sound.midi.inited",true); End: pthread_mutex_unlock(&SIA_SOUND); } @@ -29,6 +30,7 @@ goto end; } MIDI_OUT_INITED=true; + MDS_Set("/Global/com.smipl.sia.sound.midi.inited",true); end: pthread_mutex_unlock(&SIA_SOUND); } Modified: smipl-devel/src/SMIPL-header.h =================================================================== --- smipl-devel/src/SMIPL-header.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/SMIPL-header.h 2009-08-16 19:29:42 UTC (rev 41) @@ -17,10 +17,10 @@ bool DeInit(); #include "Config.h" #include "String.h" +#include "MDS.h" #include "SIA/SIA.h" #include "SIA/SIASOUND.h" #include "Error.h" -#include "MDS.h" #include "FS/FS.h" //SMIPL UI #include "SVM.h" Modified: smipl-devel/src/SVM.h =================================================================== --- smipl-devel/src/SVM.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/SVM.h 2009-08-16 19:29:42 UTC (rev 41) @@ -1,9 +1,10 @@ char Program[100000][80]; +#define MaxSteps 1000000 struct SVM_Thread{ pthread_t ID; bool AllowGetGlobal,isVM0; char *JailAddress,*str1,*str2; - int StartAddress,Address; + int StartAddress,Address,Steps; pthread_mutex_t Admin; SMIPL_String cmd; value_t number,number2; @@ -68,28 +69,23 @@ ID=pthread_self(); pthread_mutex_unlock(&Admin); MDS_Set("Stack/P", -1); - for(;(Address>100000)&&(Address>0);Address++) { + for(Steps=MaxSteps;(Address>100000)&&(Address>0)&&(Steps>0);Address++) { strcpy(cmd.str,Program[Address]); cmd.Split(); if(cmd_is("STOP")) break; if(!strcasecmp(cmd.str,"PROGRAM END")) break; //Flow control - if(cmd_is("GOTO")) if(cmd.argc>=2) {Atof(cmd.argv[1],&number);Address=number-1;} + if(cmd_is("GOTO")) {if(cmd.argc>=2) {Atof(cmd.argv[1],&number);Address=number-1;}continue;} //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);} + 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);}continue;} //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")); - + 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);continue;} + 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);continue;} + 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);continue;} + 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);continue;} //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; + if(cmd_is("PRINT")) {for(int a=1;a<cmd.argc;a++) {Atof(cmd.argv[a], &number);cout<<cmd.argv[a]<<" = "<<number<<" ";}cout<<endl;continue;} + if(cmd_is("NEWLINE")){cout<<endl;continue;} //MIDI if(cmd_is("MIDI")) { if(!MIDI_OUT_INITED){MIDI_Init();if(!MIDI_OUT_INITED) cout<<"MIDI FAILURE\n";} @@ -101,8 +97,17 @@ 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); + continue; } - - if(Address<0) break; + Atof(cmd.argv[0],&number); + if(number!=0) { + Push(Address); + for(int a=1;a<cmd.argc;a++){Atof(cmd.argv[a],&number2);Push(number2);} + Push(cmd.argc-1); + Address=(int)number-1; + continue; + } + cout<<"Unknown "<<cmd.argv[0]<<endl; + break; } } Modified: smipl-devel/src/String.h =================================================================== --- smipl-devel/src/String.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/String.h 2009-08-16 19:29:42 UTC (rev 41) @@ -1,11 +1,13 @@ pthread_mutex_t do_split=PTHREAD_MUTEX_INITIALIZER; -pthread_mutex_t do_strdup=PTHREAD_MUTEX_INITIALIZER; char *strdup(char *a, char* b) { char* str=new char[strlen(a)+strlen(b)]; strcpy(str,a); strcat(str,b); return str; } +void strtoupper(char*b) { + for(int a=0;b[a]!='\0';a++)b[a]=toupper(b[a]); +} bool isDelim(char a, bool disallow_spaces=true, bool disallow_comparison=true) { if(disallow_spaces)if(a==' ') return true; if(a=='\n') return true; Modified: smipl-devel/src/config.h =================================================================== --- smipl-devel/src/config.h 2009-08-15 20:27:45 UTC (rev 40) +++ smipl-devel/src/config.h 2009-08-16 19:29:42 UTC (rev 41) @@ -12,3 +12,9 @@ #ifdef DARWIN //Darwin (Darwin, OSX) #define system_is_posix //Darwin is POSIX #endif //#ifdef DARWIN + +#define SMIPL_Version "SMIPL 3.50.0 Beta" + +#ifdef EnableMIDI +#define AutoInitMIDI +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |