3 #ifdef MRB_DISABLE_STDIO
4 # error print conflicts 'MRB_DISABLE_STDIO' configuration in your 'build_config.rb'
7 #include <mruby/string.h>
14 # define isatty(x) _isatty(x)
15 # define fileno(x) _fileno(x)
20 printstr(mrb_state *mrb, mrb_value obj)
22 if (mrb_string_p(obj)) {
24 if (isatty(fileno(stdout))) {
26 int mlen = (int)RSTRING_LEN(obj);
27 char* utf8 = RSTRING_PTR(obj);
28 int wlen = MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, NULL, 0);
29 wchar_t* utf16 = (wchar_t*)mrb_malloc(mrb, (wlen+1) * sizeof(wchar_t));
30 if (MultiByteToWideChar(CP_UTF8, 0, utf8, mlen, utf16, wlen) > 0) {
32 WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE),
33 utf16, wlen, &written, NULL);
38 fwrite(RSTRING_PTR(obj), RSTRING_LEN(obj), 1, stdout);
46 mrb_printstr(mrb_state *mrb, mrb_value self)
48 mrb_value argv = mrb_get_arg1(mrb);
56 mrb_mruby_print_gem_init(mrb_state* mrb)
59 krn = mrb->kernel_module;
60 mrb_define_method(mrb, krn, "__printstr__", mrb_printstr, MRB_ARGS_REQ(1));
64 mrb_mruby_print_gem_final(mrb_state* mrb)