From 655e96fa59f62f7d31b2d9d470947f97aceb7b92 Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 9 May 2000 04:53:16 +0000 Subject: 2000-05-09 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/Win32API/Win32API.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'ext/Win32API') diff --git a/ext/Win32API/Win32API.c b/ext/Win32API/Win32API.c index 433d13abeb..27693c7257 100644 --- a/ext/Win32API/Win32API.c +++ b/ext/Win32API/Win32API.c @@ -132,6 +132,7 @@ Win32API_Call(argc, argv, obj) VALUE import_type; int nimport, timport, texport, i; int items; + int ret; items = rb_scan_args(argc, argv, "0*", &args); @@ -162,7 +163,7 @@ Win32API_Call(argc, argv, obj) mov eax, lParam push eax } -#elif defined(__CYGWIN__) || defined(__MINGW32__) +#elif defined __GNUC__ asm volatile ("pushl %0" :: "g" (lParam)); #else #error @@ -184,7 +185,7 @@ Win32API_Call(argc, argv, obj) mov eax, pParam push eax } -#elif defined(__CYGWIN__) || defined(__MINGW32__) +#elif defined __GNUC__ asm volatile ("pushl %0" :: "g" (pParam)); #else #error @@ -194,6 +195,22 @@ Win32API_Call(argc, argv, obj) } } +#if defined __GNUC__ + asm volatile ("call *%1" : "=r" (ret) : "g" (ApiFunction)); + switch (texport) { + case _T_NUMBER: + case _T_INTEGER: + Return = INT2NUM(ret); + break; + case _T_POINTER: + Return = rb_str_new2((char *)ret); + break; + case _T_VOID: + default: + Return = INT2NUM(0); + break; + } +#else switch (texport) { case _T_NUMBER: ApiFunctionNumber = (ApiNumber *) ApiFunction; @@ -214,6 +231,7 @@ Win32API_Call(argc, argv, obj) Return = INT2NUM(0); break; } +#endif return Return; } -- cgit v1.2.3