Guest User

Untitled

a guest
Jan 18th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. int _wprintf(const wchar_t* format, ...)
  2. {
  3. int r;
  4. static int utf8ModeSet = 0;
  5. static wchar_t* bufWchar = NULL;
  6. static size_t bufWcharCount = 256;
  7. static char* bufMchar = NULL;
  8. static size_t bufMcharCount = 256;
  9. va_list vl;
  10. int mcharCount = 0;
  11.  
  12. if (utf8ModeSet == 0)
  13. {
  14. if (!SetConsoleOutputCP(CP_UTF8))
  15. {
  16. DWORD err = GetLastError();
  17. fprintf(stderr, "SetConsoleOutputCP(CP_UTF8) failed with error 0x%Xn", err);
  18. utf8ModeSet = -1;
  19. }
  20. else
  21. {
  22. utf8ModeSet = 1;
  23. }
  24. }
  25.  
  26. if (utf8ModeSet != 1)
  27. {
  28. va_start(vl, format);
  29. r = vwprintf(format, vl);
  30. va_end(vl);
  31. return r;
  32. }
  33.  
  34. if (bufWchar == NULL)
  35. {
  36. if ((bufWchar = malloc(bufWcharCount * sizeof(wchar_t))) == NULL)
  37. {
  38. return -1;
  39. }
  40. }
  41.  
  42. for (;;)
  43. {
  44. va_start(vl, format);
  45. r = vswprintf(bufWchar, bufWcharCount, format, vl);
  46. va_end(vl);
  47.  
  48. if (r < 0)
  49. {
  50. break;
  51. }
  52.  
  53. if (r + 2 <= bufWcharCount)
  54. {
  55. break;
  56. }
  57.  
  58. free(bufWchar);
  59. if ((bufWchar = malloc(bufWcharCount * sizeof(wchar_t) * 2)) == NULL)
  60. {
  61. return -1;
  62. }
  63. bufWcharCount *= 2;
  64. }
  65.  
  66. if (r > 0)
  67. {
  68. if (bufMchar == NULL)
  69. {
  70. if ((bufMchar = malloc(bufMcharCount)) == NULL)
  71. {
  72. return -1;
  73. }
  74. }
  75.  
  76. for (;;)
  77. {
  78. mcharCount = WideCharToMultiByte(CP_UTF8,
  79. 0,
  80. bufWchar,
  81. -1,
  82. bufMchar,
  83. bufMcharCount,
  84. NULL,
  85. NULL);
  86. if (mcharCount > 0)
  87. {
  88. break;
  89. }
  90.  
  91. if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
  92. {
  93. return -1;
  94. }
  95.  
  96. free(bufMchar);
  97. if ((bufMchar = malloc(bufMcharCount * 2)) == NULL)
  98. {
  99. return -1;
  100. }
  101. bufMcharCount *= 2;
  102. }
  103. }
  104.  
  105. if (mcharCount > 1)
  106. {
  107. DWORD numberOfCharsWritten, consoleMode;
  108.  
  109. if (GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &consoleMode))
  110. {
  111. fflush(stdout);
  112. if (!WriteConsoleA(GetStdHandle(STD_OUTPUT_HANDLE),
  113. bufMchar,
  114. mcharCount - 1,
  115. &numberOfCharsWritten,
  116. NULL))
  117. {
  118. return -1;
  119. }
  120. }
  121. else
  122. {
  123. if (fputs(bufMchar, stdout) == EOF)
  124. {
  125. return -1;
  126. }
  127. }
  128. }
  129.  
  130. return r;
  131. }
  132.  
  133. _wprintf(L"xA0xA1xA2xA3xA4xA5xA6xA7"
  134. L"xA8xA9xAAxABxACxADxAExAF"
  135. L"xB0xB1xB2xB3xB4xB5xB6xB7"
  136. L"xB8xB9xBAxBBxBCxBDxBExBF"
  137. L"n"
  138. L"xC0xC1xC2xC3xC4xC5xC6xC7"
  139. L"xC8xC9xCAxCBxCCxCDxCExCF"
  140. L"xD0xD1xD2xD3xD4xD5xD6xD7"
  141. L"xD8xD9xDAxDBxDCxDDxDExDF"
  142. L"n"
  143. L"xE0xE1xE2xE3xE4xE5xE6xE7"
  144. L"xE8xE9xEAxEBxECxEDxEExEF"
  145. L"xF0xF1xF2xF3xF4xF5xF6xF7"
  146. L"xF8xF9xFAxFBxFCxFDxFExFF"
  147. L"n");
  148.  
  149. _wprintf(L"x391x392x393x394x395x396x397"
  150. L"x398x399x39Ax39Bx39Cx39Dx39Ex39F"
  151. L"x3A0x3A1x3A2x3A3x3A4x3A5x3A6x3A7"
  152. L"x3A8x3A9x3AAx3ABx3ACx3ADx3AEx3AFx3B0"
  153. L"n"
  154. L"x3B1x3B2x3B3x3B4x3B5x3B6x3B7"
  155. L"x3B8x3B9x3BAx3BBx3BCx3BDx3BEx3BF"
  156. L"x3C0x3C1x3C2x3C3x3C4x3C5x3C6x3C7"
  157. L"x3C8x3C9x3CAx3CBx3CCx3CDx3CE"
  158. L"n");
  159.  
  160. _wprintf(L"x410x411x412x413x414x415x401x416x417"
  161. L"x418x419x41Ax41Bx41Cx41Dx41Ex41F"
  162. L"x420x421x422x423x424x425x426x427"
  163. L"x428x429x42Ax42Bx42Cx42Dx42Ex42F"
  164. L"n"
  165. L"x430x431x432x433x434x435x451x436x437"
  166. L"x438x439x43Ax43Bx43Cx43Dx43Ex43F"
  167. L"x440x441x442x443x444x445x446x447"
  168. L"x448x449x44Ax44Bx44Cx44Dx44Ex44F"
  169. L"n");
  170.  
  171.  ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿
  172. ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß
  173. àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ
  174. ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰ
  175. αβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ
  176. АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
  177. абвгдеёжзийклмнопрстуфхцчшщъыьэюя
  178.  
  179. printf("my name is Sexe9nn");
Add Comment
Please, Sign In to add comment