summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authoreban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-06-03 16:04:37 +0000
committereban <eban@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-06-03 16:04:37 +0000
commit99a9c703c631f3e3d5b43eb83bb82842125cb0ac (patch)
treefbc07ad6739b5d7eb827ebd8cc807eef4774a234 /ext
parent30efd6b3a62975cb4094f4e414d6b7ee9849cf3f (diff)
see ChangeLog
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@726 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/Win32API/Win32API.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/ext/Win32API/Win32API.c b/ext/Win32API/Win32API.c
index 433d13abeb..3f0ceae9e1 100644
--- a/ext/Win32API/Win32API.c
+++ b/ext/Win32API/Win32API.c
@@ -2,7 +2,7 @@
Win32API - Ruby Win32 API Import Facility
*/
-#ifndef _MSC_VER
+#if !defined _MSC_VER && !defined NT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
@@ -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;
}