diff options
Diffstat (limited to 'ext/-test-/win32')
| -rw-r--r-- | ext/-test-/win32/console/attribute.c | 69 | ||||
| -rw-r--r-- | ext/-test-/win32/console/depend | 1 | ||||
| -rw-r--r-- | ext/-test-/win32/console/extconf.rb | 5 | ||||
| -rw-r--r-- | ext/-test-/win32/console/init.c | 11 | ||||
| -rw-r--r-- | ext/-test-/win32/dln/depend | 9 | ||||
| -rw-r--r-- | ext/-test-/win32/dln/dlntest.c | 17 | ||||
| -rw-r--r-- | ext/-test-/win32/dln/extconf.rb | 34 | ||||
| -rw-r--r-- | ext/-test-/win32/dln/libdlntest.c | 4 | ||||
| -rw-r--r-- | ext/-test-/win32/dln/libdlntest.def | 2 | ||||
| -rw-r--r-- | ext/-test-/win32/fd_setsize/depend | 1 | ||||
| -rw-r--r-- | ext/-test-/win32/fd_setsize/extconf.rb | 4 | ||||
| -rw-r--r-- | ext/-test-/win32/fd_setsize/fd_setsize.c | 55 |
12 files changed, 212 insertions, 0 deletions
diff --git a/ext/-test-/win32/console/attribute.c b/ext/-test-/win32/console/attribute.c new file mode 100644 index 0000000000..b43ba23a5c --- /dev/null +++ b/ext/-test-/win32/console/attribute.c @@ -0,0 +1,69 @@ +#include <ruby.h> + +static VALUE rb_cConsoleScreenBufferInfo; + +static HANDLE +io_handle(VALUE io) +{ + int fd = NUM2INT(rb_funcallv(io, rb_intern("fileno"), 0, 0)); + HANDLE h = (HANDLE)rb_w32_get_osfhandle(fd); + + if (h == (HANDLE)-1) rb_raise(rb_eIOError, "invalid io"); + return h; +} + +static VALUE +console_info(VALUE klass, VALUE io) +{ + HANDLE h = io_handle(io); + CONSOLE_SCREEN_BUFFER_INFO csbi; + + if (!GetConsoleScreenBufferInfo(h, &csbi)) + rb_syserr_fail(rb_w32_map_errno(GetLastError()), "not console"); + return rb_struct_new(rb_cConsoleScreenBufferInfo, + INT2FIX(csbi.dwSize.X), + INT2FIX(csbi.dwSize.Y), + INT2FIX(csbi.dwCursorPosition.X), + INT2FIX(csbi.dwCursorPosition.Y), + INT2FIX(csbi.wAttributes)); +} + +static VALUE +console_set_attribute(VALUE klass, VALUE io, VALUE attr) +{ + HANDLE h = io_handle(io); + + SetConsoleTextAttribute(h, (WORD)NUM2INT(attr)); + return Qnil; +} + +#define FOREGROUND_MASK (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY) +#define BACKGROUND_MASK (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY) + +void +Init_attribute(VALUE m) +{ + rb_cConsoleScreenBufferInfo = rb_struct_define_under(m, "ConsoleScreenBufferInfo", + "size_x", "size_y", + "cur_x", "cur_y", + "attr", NULL); + rb_define_singleton_method(m, "console_info", console_info, 1); + rb_define_singleton_method(m, "console_attribute", console_set_attribute, 2); + + rb_define_const(m, "FOREGROUND_MASK", INT2FIX(FOREGROUND_MASK)); + rb_define_const(m, "FOREGROUND_BLUE", INT2FIX(FOREGROUND_BLUE)); + rb_define_const(m, "FOREGROUND_GREEN", INT2FIX(FOREGROUND_GREEN)); + rb_define_const(m, "FOREGROUND_RED", INT2FIX(FOREGROUND_RED)); + rb_define_const(m, "FOREGROUND_INTENSITY", INT2FIX(FOREGROUND_INTENSITY)); + + rb_define_const(m, "BACKGROUND_MASK", INT2FIX(BACKGROUND_MASK)); + rb_define_const(m, "BACKGROUND_BLUE", INT2FIX(BACKGROUND_BLUE)); + rb_define_const(m, "BACKGROUND_GREEN", INT2FIX(BACKGROUND_GREEN)); + rb_define_const(m, "BACKGROUND_RED", INT2FIX(BACKGROUND_RED)); + rb_define_const(m, "BACKGROUND_INTENSITY", INT2FIX(BACKGROUND_INTENSITY)); + +#ifndef COMMON_LVB_REVERSE_VIDEO +#define COMMON_LVB_REVERSE_VIDEO 0x4000 +#endif + rb_define_const(m, "REVERSE_VIDEO", INT2FIX(COMMON_LVB_REVERSE_VIDEO)); +} diff --git a/ext/-test-/win32/console/depend b/ext/-test-/win32/console/depend new file mode 100644 index 0000000000..f4f65adf9a --- /dev/null +++ b/ext/-test-/win32/console/depend @@ -0,0 +1 @@ +attribute.o: $(ruby_headers) $(hdrdir)/ruby/win32.h diff --git a/ext/-test-/win32/console/extconf.rb b/ext/-test-/win32/console/extconf.rb new file mode 100644 index 0000000000..5162172890 --- /dev/null +++ b/ext/-test-/win32/console/extconf.rb @@ -0,0 +1,5 @@ +# frozen_string_literal: false +if $mingw or $mswin + require_relative "../../auto_ext.rb" + auto_ext +end diff --git a/ext/-test-/win32/console/init.c b/ext/-test-/win32/console/init.c new file mode 100644 index 0000000000..f2e0d1c821 --- /dev/null +++ b/ext/-test-/win32/console/init.c @@ -0,0 +1,11 @@ +#include "ruby.h" + +#define init(n) {void Init_##n(VALUE m); Init_##n(m);} + +void +Init_console(void) +{ + VALUE mBug = rb_define_module("Bug"); + VALUE m = rb_define_module_under(mBug, "Win32"); + TEST_INIT_FUNCS(init); +} diff --git a/ext/-test-/win32/dln/depend b/ext/-test-/win32/dln/depend new file mode 100644 index 0000000000..c3f14db4f7 --- /dev/null +++ b/ext/-test-/win32/dln/depend @@ -0,0 +1,9 @@ +$(TARGET_SO): $(DLNTESTLIB) + +$(DLNTESTLIB): dlntest.dll + +dlntest.dll: libdlntest.o libdlntest.def + $(ECHO) linking shared-object $(@F) + -$(Q)$(RM) $@ + -$(Q)$(MAKEDIRS) $(@D) + $(Q) $(DLNTEST_LDSHARED) diff --git a/ext/-test-/win32/dln/dlntest.c b/ext/-test-/win32/dln/dlntest.c new file mode 100644 index 0000000000..3e6037ac07 --- /dev/null +++ b/ext/-test-/win32/dln/dlntest.c @@ -0,0 +1,17 @@ +#include <ruby.h> + +extern __declspec(dllimport) void dlntest_ordinal(void); + +static VALUE +dln_dlntest(VALUE self) +{ + dlntest_ordinal(); + return self; +} + +void +Init_dln(void) +{ + VALUE m = rb_define_module_under(rb_define_module("Bug"), "Win32"); + rb_define_module_function(m, "dlntest", dln_dlntest, 0); +} diff --git a/ext/-test-/win32/dln/extconf.rb b/ext/-test-/win32/dln/extconf.rb new file mode 100644 index 0000000000..bea52cfec3 --- /dev/null +++ b/ext/-test-/win32/dln/extconf.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: false +if $mingw or $mswin + dlntestlib = "dlntest.#{$LIBEXT}" + $LOCAL_LIBS << " #{dlntestlib}" + $srcs = ["dlntest.c"] + $objs = ["dlntest.o"] + testdll = "dlntest.dll" + $cleanfiles << testdll + $cleanfiles << "dlntest.#{$LIBEXT}" + $cleanfiles << "libdlntest.#{$OBJEXT}" + config_string('cleanobjs') {|t| $cleanfiles.concat(t.gsub(/\$\*/, 'dlntest').split)} + + create_makefile("-test-/win32/dln") do |m| + m << "\n""DLNTESTLIB = #{dlntestlib}\n" + if $mingw + m << "\n" + m << "dlntest.dll: DEFFILE := $(srcdir)/libdlntest.def\n" + m << "dlntest.dll: DLDFLAGS += -Wl,--out-implib,$(DLNTESTLIB)\n" + end + m + end + m = File.read("Makefile") + m.sub!(/(.*)\$\(DLNTEST_LDSHARED\)$/) do + pre = $1 + link_so = LINK_SO.gsub(/^/) {pre} + link_so.sub!(/\$\(LOCAL_LIBS\)/, '') + link_so.gsub!(/-\$\(arch\)/, '') + link_so.gsub!(/:.so=/, ':.dll=') + link_so.sub!(/\$\(OBJS\)/, "libdlntest.#{$OBJEXT}") + link_so.sub!(/\$\(DEFFILE\)/, "$(srcdir)/libdlntest.def") + link_so + end and File.binwrite("Makefile", m) + FileUtils.rm_f(RbConfig.expand(testdll.dup)) +end diff --git a/ext/-test-/win32/dln/libdlntest.c b/ext/-test-/win32/dln/libdlntest.c new file mode 100644 index 0000000000..5923b732c8 --- /dev/null +++ b/ext/-test-/win32/dln/libdlntest.c @@ -0,0 +1,4 @@ +void +dlntest_ordinal(void) +{ +} diff --git a/ext/-test-/win32/dln/libdlntest.def b/ext/-test-/win32/dln/libdlntest.def new file mode 100644 index 0000000000..85bc9c7a55 --- /dev/null +++ b/ext/-test-/win32/dln/libdlntest.def @@ -0,0 +1,2 @@ +EXPORTS +dlntest_ordinal @1 NONAME diff --git a/ext/-test-/win32/fd_setsize/depend b/ext/-test-/win32/fd_setsize/depend new file mode 100644 index 0000000000..7d40e8d572 --- /dev/null +++ b/ext/-test-/win32/fd_setsize/depend @@ -0,0 +1 @@ +fd_setsize.o: $(ruby_headers) $(hdrdir)/ruby/win32.h diff --git a/ext/-test-/win32/fd_setsize/extconf.rb b/ext/-test-/win32/fd_setsize/extconf.rb new file mode 100644 index 0000000000..caa4b85a1b --- /dev/null +++ b/ext/-test-/win32/fd_setsize/extconf.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: false +if $mingw or $mswin + create_makefile("-test-/win32/fd_setsize") +end diff --git a/ext/-test-/win32/fd_setsize/fd_setsize.c b/ext/-test-/win32/fd_setsize/fd_setsize.c new file mode 100644 index 0000000000..e29114a0ca --- /dev/null +++ b/ext/-test-/win32/fd_setsize/fd_setsize.c @@ -0,0 +1,55 @@ +#undef FD_SETSIZE +/* redefine smaller size then default 64 */ +#define FD_SETSIZE 32 +#include <ruby.h> + +static VALUE +test_select(VALUE self) +{ + int sd = socket(AF_INET, SOCK_DGRAM, 0); + struct timeval zero; + fd_set read; + fd_set write; + fd_set error; + + zero.tv_sec = 0; + zero.tv_usec = 0; + + FD_ZERO(&read); + FD_ZERO(&write); + FD_ZERO(&error); + + FD_SET(sd, &read); + FD_SET(sd, &write); + FD_SET(sd, &error); + + select(sd+1, &read, &write, &error, &zero); + + return Qtrue; +} + +static VALUE +test_fdset(VALUE self) +{ + int i; + fd_set set; + + FD_ZERO(&set); + + for (i = 0; i < FD_SETSIZE * 2; i++) { + int sd = socket(AF_INET, SOCK_DGRAM, 0); + FD_SET(sd, &set); + if (set.fd_count > FD_SETSIZE) { + return Qfalse; + } + } + return Qtrue; +} + +void +Init_fd_setsize(void) +{ + VALUE m = rb_define_module_under(rb_define_module("Bug"), "Win32"); + rb_define_module_function(m, "test_select", test_select, 0); + rb_define_module_function(m, "test_fdset", test_fdset, 0); +} |
