Jelajahi Sumber

WIP monkey tweaks for android.

Mark Sibly 9 tahun lalu
induk
melakukan
3c26da9e73

+ 4 - 0
modules/monkey/monkey.monkey2

@@ -1,6 +1,10 @@
 
 Namespace monkey
 
+#if __TARGET__="android"
+#import "<liblog.a>"
+#endif
+
 #Import "types.monkey2"
 #Import "math.monkey2"
 #Import "debug.monkey2"

+ 10 - 10
modules/monkey/native/bbdebug.cpp

@@ -1,6 +1,7 @@
 
 #include "bbdebug.h"
 #include "bbarray.h"
+#include <bbmonkey.h>
 
 #if _WIN32
 #include <windows.h>
@@ -39,8 +40,7 @@ namespace bbDB{
 		error( err );
 		exit( 0 );
 #endif
-
-		printf( "Caught signal:%s\n",err );
+		bb_printf( "Caught signal:%s\n",err );
 		exit( -1 );
 	}
 	
@@ -60,11 +60,11 @@ namespace bbDB{
 		
 #if _WIN32
 		if( HANDLE breakEvent=OpenEvent( EVENT_ALL_ACCESS,false,"MX2_BREAK_EVENT" ) ){
-//			printf( "Found BREAK_EVENT!\n" );fflush( stdout );
+//			bb_printf( "Found BREAK_EVENT!\n" );fflush( stdout );
 		    std::thread( [=](){
 		    	for( ;; ){
 		    		WaitForSingleObject( breakEvent,INFINITE );
-//	    			printf( "Break event!\n" );fflush( stdout );
+//	    			bb_printf( "Break event!\n" );fflush( stdout );
 		    		currentContext->stopped=0x10000000;
 		    	}
 		    } ).detach();
@@ -82,7 +82,7 @@ namespace bbDB{
 		bbString type=v->type->type();
 		bbString value=v->type->value( v->var );
 		bbString t=id+":"+type+"="+value+"\n";
-		printf( t.c_str() );
+		bb_printf( "%s",t.c_str() );
 	}
 	
 	void emitStack(){
@@ -90,7 +90,7 @@ namespace bbDB{
 		
 		for( bbDBFrame *f=currentContext->frames;f;f=f->succ ){
 
-			printf( ">%s;%s;%i;%i\n",f->decl,f->srcFile,f->srcPos>>12,f->seq );
+			bb_printf( ">%s;%s;%i;%i\n",f->decl,f->srcFile,f->srcPos>>12,f->seq );
 			
 			for( bbDBVar *v=f->locals;v!=ev;++v ){
 				emitVar( v );
@@ -121,11 +121,11 @@ namespace bbDB{
 	
 	void stopped(){
 
-		printf( "{{!DEBUG!}}\n" );
+		bb_printf( "{{!DEBUG!}}\n" );
 		
 		emitStack();
 
-		printf( "\n" );
+		bb_printf( "\n" );
 		fflush( stdout );
 		
 		for(;;){
@@ -142,14 +142,14 @@ namespace bbDB{
 			case '@':emit( e+1 );continue;
 			case 'q':exit( 0 );return;
 			}
-			printf( "Unrecognized debug cmd: %s\n",buf );fflush( stdout );
+			bb_printf( "Unrecognized debug cmd: %s\n",buf );fflush( stdout );
 			exit( -1 );
 		}
 	}
 	
 	void error( bbString msg ){
 		
-		printf( "\n%s\n",msg.c_str() );
+		bb_printf( "\n%s\n",msg.c_str() );
 		stopped();
 
 	}

+ 33 - 0
modules/monkey/native/bbmonkey.cpp

@@ -1,6 +1,8 @@
 
 #include "bbmonkey.h"
 
+#include <stdarg.h>
+
 int bb_argc;
 char **bb_argv;
 
@@ -8,6 +10,37 @@ void bbMain();
 
 #ifdef __ANDROID__
 
+#include <android/log.h>
+
+void bb_print( bbString str ){
+	__android_log_print( ANDROID_LOG_INFO,"MX2","%s",str.c_str() );
+}
+
+void bb_printf( const char *fmt,... ){
+	va_list args;
+	va_start( args,fmt );
+	__android_log_vprint( ANDROID_LOG_INFO,"MX2",fmt,args );
+	va_end( args );
+}
+
+#else
+
+void bb_print( bbString str ){
+	puts( str.c_str() );fflush( stdout );
+}
+
+void bb_printf( const char *fmt,... ){
+	va_list args;
+	va_start( args,fmt );
+	vprintf( fmt,args );
+	va_end( args );
+	fflush( stdout );
+}
+
+#endif
+
+#ifdef __ANDROID__
+
 extern "C" int SDL_main( int argc,char *argv[] ){
 
 #else

+ 4 - 0
modules/monkey/native/bbmonkey.h

@@ -16,6 +16,10 @@
 extern int bb_argc;
 extern char **bb_argv;
 
+extern void bb_print( bbString str );
+
+extern void bb_printf( const char *fmt,...);
+
 template<class X,class Y> int bbCompare( X x,Y y ){
 	if( y>x ) return -1;
 	return x>y;

+ 0 - 12
modules/monkey/native/bbobject.cpp

@@ -4,15 +4,3 @@
 #include "bbarray.h"
 
 bbNullCtor_t bbNullCtor;
-
-/*
-bbException::bbException(){
-
-	_debugStack=bbDB::stack();
-}
-
-bbException::bbException( bbString message ):bbException(){
-
-	_message=message;
-}
-*/

+ 8 - 5
modules/monkey/native/bbstring.cpp

@@ -97,36 +97,39 @@ bbString bbString::fromChar( int chr ){
 }
 
 bbString bbString::fromCString( const void *data,int size ){
+	if( !data ) return bbString();
 	const char *p=(const char*)data;
 	const char *e=p;
-	while( e<p+size && *e ) ++e;
+	while( e!=p+size && *e ) ++e;
 	return bbString( p,e-p );
 }
 
 bbString bbString::fromWString( const void *data,int size ){
+	if( !data ) return bbString();
 	size/=sizeof(wchar_t);
 	const wchar_t *p=(const wchar_t*)data;
 	const wchar_t *e=p;
-	while( e<p+size && *e ) ++e;
+	while( e!=p+size && *e ) ++e;
 	return bbString( p,e-p );
 }
 
 bbString bbString::fromUtf8String( const void *data,int size ){
+	if( !data ) return bbString();
 
 	const char *p=(const char*)data;
 	const char *e=p+size;
 
 	int len=0;
 		
-	while( p<e && *p ){
+	while( p!=e && *p ){
 		int c=*p++;
 		
 		if( c & 0x80 ){
 			if( (c & 0xe0)==0xc0 ){
-				if( p>=e || (p[0] & 0xc0)!=0x80 ) break;
+				if( p==e || (p[0] & 0xc0)!=0x80 ) break;
 				p+=1;
 			}else if( (c & 0xf0)==0xe0 ){
-				if( p+1>=e || (p[0] & 0xc0)!=0x80 || (p[1] & 0xc0)!=0x80 ) break;
+				if( p+1==e || (p[0] & 0xc0)!=0x80 || (p[1] & 0xc0)!=0x80 ) break;
 				p+=2;
 			}else{
 				break;

+ 5 - 20
modules/monkey/native/bbstring.h

@@ -444,35 +444,20 @@ class bbString{
 	
 	static bbString fromChar( int chr );
 	
-	static bbString fromCString( const void *data,int size );
+	static bbString fromCString( const void *data,int size=-1 );
 
-	static bbString fromWString( const void *data,int size );
+	static bbString fromWString( const void *data,int size=-1 );
 	
-	static bbString fromUtf8String( const void *data,int size );
+	static bbString fromUtf8String( const void *data,int size=-1 );
 	
-	static bbString fromTString( const void *data,int size ){
+	static bbString fromTString( const void *data,int size=-1 ){
 #if _WIN32
 		return fromCString( data,size );
 #else
 		return fromUtf8String( data,size );
 #endif
 	}
-	
-	static bbString fromCString( const void *data ){
-		return fromCString( data,0x7fffffff );
-	}
-	
-	static bbString fromWString( const void *data ){
-		return fromWString( data,0x7fffffff );
-	}
-	
-	static bbString fromUtf8String( const void *data ){
-		return fromUtf8String( data,0x7fffffff );
-	}
-	
-	static bbString fromTString( const void *data ){
-		return fromTString( data,0x7fffffff );
-	}
+
 };
 
 class bbCString{