Răsfoiți Sursa

Added support for WParam and LParam on Win32.

woollybah 9 ani în urmă
părinte
comite
1ea7ef23f1

+ 4 - 0
appstub.mod/debugger.stdio.glue.c

@@ -102,6 +102,10 @@ void bmx_debugger_DebugDecl_ArrayDeclIndexedPart(struct BBDebugDecl * decl, BBAr
 		case '[':size=sizeof(void*);break;
 		case '(':size=sizeof(void*);break;
 		case 'z':size=sizeof(BBSIZET);break;
+#ifdef _WIN32
+		case 'w':size=sizeof(WPARAM);break;
+		case 'x':size=sizeof(LPARAM);break;
+#endif
 	}
 
 	decl->var_address = ((char*)BBARRAYDATA(arr, arr->dims)) + size * index;

+ 10 - 0
appstub.mod/debugger_mt.stdio.bmx

@@ -156,6 +156,10 @@ Function TypeName$( tag$ Var )
 		Return "WString"
 	Case "t"
 		Return "size_t"
+	Case "W"
+		Return "WParam"
+	Case "X"
+		Return "LParam"
 	Case ":","?","#","@"
 		Local id$=Ident( tag )
 		While tag And tag[0]=Asc(".")
@@ -332,6 +336,12 @@ Function DebugDeclValue$( decl:Int Ptr,inst:Byte Ptr )
 		Return String.FromDouble( (Double Ptr p)[0] )
 	Case Asc("t")
 		Return String.FromSizet( (Size_T Ptr p)[0] )
+?win32
+	Case Asc("W")
+		Return String.FromWParam( (WParam Ptr p)[0] )
+	Case Asc("X")
+		Return String.FromLParam( (LParam Ptr p)[0] )
+?
 	Case Asc("$")
 		p=(Byte Ptr Ptr p)[0]
 		Return DebugEscapeString( bmx_debugger_DebugDecl_StringFromAddress(p) )

+ 10 - 0
blitz.mod/blitz.bmx

@@ -1003,3 +1003,13 @@ bbdoc: End a user defined Interface declaration
 keyword: "EndInterface"
 End Rem
 
+Rem
+bbdoc: WPARAM Type
+keyword: "WParam"
+End Rem
+
+Rem
+bbdoc: LPARAM Type
+keyword: "LParam"
+End Rem
+

+ 20 - 0
blitz.mod/blitz_array.c

@@ -92,6 +92,10 @@ static BBArray *allocateArray( const char *type,int dims,int *lens, unsigned sho
 	case '[':size=sizeof(void*);flags=0;break;
 	case '(':size=sizeof(void*);break;
 	case 'z':size=sizeof(BBSIZET);break;
+	#ifdef _WIN32
+	case 'w':size=sizeof(WPARAM);break;
+	case 'x':size=sizeof(LPARAM);break;
+	#endif
 	#ifdef __x86_64__
 	case 'h':size=sizeof(BBFLOAT64);break;
 	case 'j':size=sizeof(BBINT128);break;
@@ -382,6 +386,10 @@ QSORTARRAY( BBUInt64,qsort_y );
 QSORTARRAY( float,qsort_f );
 QSORTARRAY( double,qsort_d );
 QSORTARRAY( BBSIZET,qsort_z );
+#ifdef _WIN32
+QSORTARRAY( WPARAM,qsort_w );
+QSORTARRAY( LPARAM,qsort_x );
+#endif
 #undef LESSTHAN
 #define LESSTHAN(X,Y) ((*X)->clas->Compare(*(X),*(Y))<0)
 QSORTARRAY( BBObject*,qsort_obj );
@@ -396,6 +404,10 @@ QSORTARRAY( BBUInt64,qsort_y_d );
 QSORTARRAY( float,qsort_f_d );
 QSORTARRAY( double,qsort_d_d );
 QSORTARRAY( BBSIZET,qsort_z_d );
+#ifdef _WIN32
+QSORTARRAY( WPARAM,qsort_w_d );
+QSORTARRAY( LPARAM,qsort_x_d );
+#endif
 #undef LESSTHAN
 #define LESSTHAN(X,Y) ((*X)->clas->Compare(*(X),*(Y))>0)
 QSORTARRAY( BBObject*,qsort_obj_d );
@@ -418,6 +430,10 @@ void bbArraySort( BBArray *arr,int ascending ){
 		case 'd':qsort_d( (double*)p,(double*)p+n );break;
 		case '$':case ':':qsort_obj( (BBObject**)p,(BBObject**)p+n );break;
 		case 'z':qsort_z( (BBSIZET*)p,(BBSIZET*)p+n );break;
+#ifdef _WIN32
+		case 'w':qsort_w( (WPARAM*)p,(WPARAM*)p+n );break;
+		case 'x':qsort_x( (LPARAM*)p,(LPARAM*)p+n );break;
+#endif
 		}
 	}else{
 		switch( arr->type[0] ){
@@ -431,6 +447,10 @@ void bbArraySort( BBArray *arr,int ascending ){
 		case 'd':qsort_d_d( (double*)p,(double*)p+n );break;
 		case '$':case ':':qsort_obj_d( (BBObject**)p,(BBObject**)p+n );break;
 		case 'z':qsort_z_d( (BBSIZET*)p,(BBSIZET*)p+n );break;
+#ifdef _WIN32
+		case 'w':qsort_w_d( (WPARAM*)p,(WPARAM*)p+n );break;
+		case 'x':qsort_x_d( (LPARAM*)p,(LPARAM*)p+n );break;
+#endif
 		}
 	}
 }

+ 5 - 0
blitz.mod/blitz_classes.i

@@ -61,6 +61,11 @@ String^Object{
 	-ToULong:ULong()="bbStringToULong"
 	+FromULong:String( ulongValue:ULong )="bbStringFromULong"
 
+	-ToWParam:WParam()="bbStringToWParam"
+	+FromWParam:String( wparamValue:WParam )="bbStringFromWParam"
+	-ToLParam:LParam()="bbStringToLParam"
+	+FromLParam:String( lparamValue:LParam )="bbStringFromLParam"
+
 }AF="bbStringClass"
 
 ___Array^Object{

+ 107 - 1
blitz.mod/blitz_string.c

@@ -70,7 +70,14 @@ BBClass bbStringClass={
 	bbStringFromUInt,
 	bbStringToULong,
 	bbStringFromULong
-
+	
+#ifdef _WIN32	
+	,
+	bbStringToWParam,
+	bbStringFromWParam,
+	bbStringToLParam,
+	bbStringFromLParam
+#endif
 };
 
 BBString bbEmptyString={
@@ -580,6 +587,105 @@ double bbStringToDouble( BBString *t ){
 	return n;
 }
 
+#ifdef _WIN32
+WPARAM bbStringToWParam( BBString *t ){
+	int i=0;
+	WPARAM n=0;
+	
+	while( i<t->length && isspace(t->buf[i]) ) ++i;
+	if( i==t->length ) return 0;
+	
+	if( t->buf[i]=='+' ) ++i;
+	else if( t->buf[i]=='-' ) ++i;
+	if( i==t->length ) return 0;
+
+	if( t->buf[i]=='%' ){
+		for( ++i;i<t->length;++i ){
+			int c=t->buf[i];
+			if( c!='0' && c!='1' ) break;
+			n=n*2+(c-'0');
+		}
+	}else if( t->buf[i]=='$' ){
+		for( ++i;i<t->length;++i ){
+			int c=toupper(t->buf[i]);
+			if( !isxdigit(c) ) break;
+			if( c>='A' ) c-=('A'-'0'-10);
+			n=n*16+(c-'0');
+		}
+	}else{
+		for( ;i<t->length;++i ){
+			int c=t->buf[i];
+			if( !isdigit(c) ) break;
+			n=n*10+(c-'0');
+		}
+	}
+	return n;
+}
+
+BBString *bbStringFromWParam( WPARAM n ){
+	char buf[64];
+
+#ifdef __x86_64__
+	sprintf(buf, "%llu", n);
+#else
+	sprintf(buf, "%u", n);
+#endif
+
+	return bbStringFromBytes( buf, strlen(buf) );
+}
+
+LPARAM bbStringToLParam( BBString *t ){
+	int i=0,neg=0;
+	LPARAM n=0;
+	
+	while( i<t->length && isspace(t->buf[i]) ) ++i;
+	if( i==t->length ) return 0;
+	
+	if( t->buf[i]=='+' ) ++i;
+	else if( neg=(t->buf[i]=='-') ) ++i;
+	if( i==t->length ) return 0;
+
+	if( t->buf[i]=='%' ){
+		for( ++i;i<t->length;++i ){
+			int c=t->buf[i];
+			if( c!='0' && c!='1' ) break;
+			n=n*2+(c-'0');
+		}
+	}else if( t->buf[i]=='$' ){
+		for( ++i;i<t->length;++i ){
+			int c=toupper(t->buf[i]);
+			if( !isxdigit(c) ) break;
+			if( c>='A' ) c-=('A'-'0'-10);
+			n=n*16+(c-'0');
+		}
+	}else{
+		for( ;i<t->length;++i ){
+			int c=t->buf[i];
+			if( !isdigit(c) ) break;
+			n=n*10+(c-'0');
+		}
+	}
+	return neg ? -n : n;
+}
+
+BBString *bbStringFromLParam( LPARAM n ){
+	char buf[64];
+
+#ifdef __x86_64__
+	sprintf(buf, "%lld", n);
+#else
+	sprintf(buf, "%d", n);
+#endif
+
+	return bbStringFromBytes( buf, strlen(buf) );
+}
+
+
+#endif
+
+
+
+
 BBString *bbStringToLower( BBString *str ){
 	int k;
 	BBString *t;

+ 7 - 0
blitz.mod/blitz_string.h

@@ -67,6 +67,13 @@ char*	bbStringToCString( BBString *str );
 BBChar*	bbStringToWString( BBString *str );
 char*	bbStringToUTF8String( BBString *str );
 
+#ifdef _WIN32
+WPARAM  bbStringToWParam( BBString *str );
+LPARAM  bbStringToLParam( BBString *str );
+BBString* bbStringFromWParam( WPARAM n );
+BBString* bbStringFromLParam( LPARAM n );
+#endif
+
 BBArray*	bbStringSplit( BBString *str,BBString *sep );
 BBString*	bbStringJoin( BBString *sep,BBArray *bits );