|
|
|
|
|
|
|
|
|
#include <windows.h> |
|
#include <assert.h> |
|
#include <stdlib.h> |
|
#include <stdio.h> |
|
|
|
#include "TestUtil.cc" |
|
|
|
static void writeChars(const wchar_t *text) { |
|
wcslen(text); |
|
const int len = wcslen(text); |
|
DWORD actual = 0; |
|
BOOL ret = WriteConsoleW( |
|
GetStdHandle(STD_OUTPUT_HANDLE), |
|
text, len, &actual, NULL); |
|
trace("writeChars: ret=%d, actual=%lld", ret, (long long)actual); |
|
} |
|
|
|
static void dumpChars(int x, int y, int w, int h) { |
|
BOOL ret; |
|
const COORD bufSize = {w, h}; |
|
const COORD bufCoord = {0, 0}; |
|
const SMALL_RECT topLeft = {x, y, x + w - 1, y + h - 1}; |
|
CHAR_INFO mbcsData[w * h]; |
|
CHAR_INFO unicodeData[w * h]; |
|
SMALL_RECT readRegion; |
|
readRegion = topLeft; |
|
ret = ReadConsoleOutputW(GetStdHandle(STD_OUTPUT_HANDLE), unicodeData, |
|
bufSize, bufCoord, &readRegion); |
|
assert(ret); |
|
readRegion = topLeft; |
|
ret = ReadConsoleOutputA(GetStdHandle(STD_OUTPUT_HANDLE), mbcsData, |
|
bufSize, bufCoord, &readRegion); |
|
assert(ret); |
|
|
|
printf("\n"); |
|
for (int i = 0; i < w * h; ++i) { |
|
printf("(%02d,%02d) CHAR: %04x %4x -- %02x %4x\n", |
|
x + i % w, y + i / w, |
|
(unsigned short)unicodeData[i].Char.UnicodeChar, |
|
(unsigned short)unicodeData[i].Attributes, |
|
(unsigned char)mbcsData[i].Char.AsciiChar, |
|
(unsigned short)mbcsData[i].Attributes); |
|
} |
|
} |
|
|
|
int main(int argc, char *argv[]) { |
|
system("cls"); |
|
setWindowPos(0, 0, 1, 1); |
|
setBufferSize(80, 38); |
|
setWindowPos(0, 0, 80, 38); |
|
|
|
|
|
const wchar_t text1[] = { |
|
0x3044, |
|
0x2014, |
|
0x3044, |
|
0xFF2D, |
|
0x30FC, |
|
0x0031, |
|
0x2014, |
|
0x0032, |
|
0x005C, |
|
0x3044, |
|
0 |
|
}; |
|
setCursorPos(0, 0); |
|
writeChars(text1); |
|
|
|
setCursorPos(78, 1); |
|
writeChars(L"<>"); |
|
|
|
const wchar_t text2[] = { |
|
0x0032, |
|
0x3044, |
|
0, |
|
}; |
|
setCursorPos(78, 1); |
|
writeChars(text2); |
|
|
|
system("pause"); |
|
|
|
dumpChars(0, 0, 17, 1); |
|
dumpChars(2, 0, 2, 1); |
|
dumpChars(2, 0, 1, 1); |
|
dumpChars(3, 0, 1, 1); |
|
dumpChars(78, 1, 2, 1); |
|
dumpChars(0, 2, 2, 1); |
|
|
|
system("pause"); |
|
system("cls"); |
|
|
|
const wchar_t text3[] = { |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
0x30FC, 0x30FC, 0x30FC, 0xFF2D, |
|
L'\r', '\n', |
|
L'\r', '\n', |
|
0 |
|
}; |
|
writeChars(text3); |
|
system("pause"); |
|
{ |
|
const COORD bufSize = {80, 2}; |
|
const COORD bufCoord = {0, 0}; |
|
SMALL_RECT readRegion = {0, 0, 79, 1}; |
|
CHAR_INFO unicodeData[160]; |
|
BOOL ret = ReadConsoleOutputW(GetStdHandle(STD_OUTPUT_HANDLE), unicodeData, |
|
bufSize, bufCoord, &readRegion); |
|
assert(ret); |
|
for (int i = 0; i < 96; ++i) { |
|
printf("%04x ", unicodeData[i].Char.UnicodeChar); |
|
} |
|
printf("\n"); |
|
} |
|
|
|
return 0; |
|
} |
|
|