2 #include <mruby/string.h>
10 # define isatty(x) _isatty(x)
11 # define fileno(x) _fileno(x)
16 printstr(mrb_state *mrb, mrb_value obj)
18 if (mrb_string_p(obj)) {
20 if (isatty(fileno(stdout))) {
22 int mlen = (int)RSTRING_LEN(obj);
23 char* utf8 = RSTRING_PTR(obj);
24 int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, NULL, 0);
25 wchar_t* utf16 = (wchar_t*)mrb_malloc(mrb, (wlen+1) * sizeof(wchar_t));
26 if (MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, utf16, wlen) > 0) {
28 WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
29 utf16, wlen, &written, NULL);
34 fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
42 mrb_printstr(mrb_state *mrb, mrb_value self)
46 mrb_get_args(mrb, "o", &argv);
53 mrb_mruby_print_gem_init(mrb_state* mrb)
56 krn = mrb->kernel_module;
57 mrb_define_method(mrb, krn, "__printstr__", mrb_printstr, MRB_ARGS_REQ(1));
61 mrb_mruby_print_gem_final(mrb_state* mrb)