+int print_console(FILE *stream, const wchar_t *text, DWORD len)
+{
+ static HANDLE hOut;
+ static HANDLE hErr;
+ DWORD out;
+ hOut = GetStdHandle(STD_OUTPUT_HANDLE);
+ hErr = GetStdHandle(STD_ERROR_HANDLE);
+ if (stream == stdout && hOut != INVALID_HANDLE_VALUE && GetFileType(hOut) == FILE_TYPE_CHAR) {
+ if (WriteConsoleW(hOut, text, len, &out, NULL) == 0) return -1;
+ return out;
+ } else if (stream == stderr && hErr != INVALID_HANDLE_VALUE && GetFileType(hErr) == FILE_TYPE_CHAR) {
+ if (WriteConsoleW(hErr, text, len, &out, NULL) == 0) return -1;
+ return out;
+ } else {
+ int ret = fwprintf(stream, L"%s", text);
+ if (ret < 0) return ret;
+ return len;
+ }
+}
+