Windows2000/private/ntos/w32/ntcon/client/tmode.c
2020-09-30 17:12:32 +02:00

197 lines
5.8 KiB
C

/*++
Copyright (c) 1985 - 1999, Microsoft Corporation
Module Name:
tmode.c
Abstract:
Console input and output mode test program
Author:
Therese Stowell (thereses) 4-Oct-1991
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#pragma hdrstop
#define UNPROCESSED_LENGTH 7
#define PROCESSED_LENGTH 6
CHAR UnprocessedString[UNPROCESSED_LENGTH] = "a\tbcd\b\r";
CHAR ProcessedString[PROCESSED_LENGTH] = "a\tbc\r\n";
DWORD
main(VOID)
{
BOOL Success;
DWORD OldInputMode,OldOutputMode;
DWORD NewInputMode,NewOutputMode;
CHAR buff[512];
DWORD n;
// test input and output modes
// Input Mode flags:
// ENABLE_PROCESSED_INPUT 0x0001
// ENABLE_LINE_INPUT 0x0002
// ENABLE_ECHO_INPUT 0x0004
// ENABLE_WINDOW_INPUT 0x0008
// ENABLE_MOUSE_INPUT 0x0010
// Output Mode flags:
// ENABLE_PROCESSED_OUTPUT 0x0001
// ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
NewInputMode = ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT;
Success = GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),
&OldInputMode
);
if (OldInputMode & NewInputMode != NewInputMode) {
DbgPrint("ERROR: OldInputMode is %x\n",OldInputMode);
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),NewInputMode);
}
NewOutputMode = ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT;
Success = GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),
&OldOutputMode
);
if (OldOutputMode & NewOutputMode != NewOutputMode) {
DbgPrint("ERROR: OldOutputMode is %x\n",OldOutputMode);
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),NewOutputMode);
}
// mode set:
// ENABLE_PROCESSED_INPUT - backspace, tab, cr, lf, ctrl-z
// ENABLE_LINE_INPUT - wait for linefeed
// ENABLE_ECHO_INPUT
// ENABLE_PROCESSED_OUTPUT - backspace, tab, cr, lf, bell
DbgPrint("input mode is ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT\n");
DbgPrint("output mode is ENABLE_PROCESSED_OUTPUT\n");
DbgPrint("type aTabbcdBackspaceCr\n");
DbgPrint("a bc should be output string\n");
Success = ReadFile(GetStdHandle(STD_INPUT_HANDLE),buff,512, &n, NULL);
if (!Success) {
DbgPrint("ReadFile returned error %d\n",GetLastError());
return 1;
}
if (n != PROCESSED_LENGTH) {
DbgPrint("n is %d\n",n);
}
if (strncmp(ProcessedString,buff,n)) {
DbgPrint("strncmp failed\n");
DbgPrint("ProcessedString contains %s\n",ProcessedString);
DbgPrint("buff contains %s\n",buff);
DbgBreakPoint();
}
// mode set:
// ENABLE_PROCESSED_INPUT
// ENABLE_LINE_INPUT
// ENABLE_ECHO_INPUT
DbgPrint("input mode is ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT\n");
DbgPrint("output mode is 0\n");
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_WRAP_AT_EOL_OUTPUT);
DbgPrint("type aTabbcdBackspaceCr\n");
DbgPrint("a0x90x8bc0xd0xa should be output string\n");
Success = ReadFile(GetStdHandle(STD_INPUT_HANDLE),buff,512, &n, NULL);
if (!Success) {
DbgPrint("ReadFile returned error %d\n",GetLastError());
return 1;
}
if (n != PROCESSED_LENGTH) {
DbgPrint("n is %d\n",n);
}
if (strncmp(ProcessedString,buff,n)) {
DbgPrint("strncmp failed\n");
DbgPrint("ProcessedString contains %s\n",ProcessedString);
DbgPrint("buff contains %s\n",buff);
DbgBreakPoint();
}
// mode set:
// ENABLE_LINE_INPUT
// ENABLE_ECHO_INPUT
// ENABLE_PROCESSED_OUTPUT
DbgPrint("input mode is ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT\n");
DbgPrint("output mode is ENABLE_PROCESSED_OUTPUT\n");
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT);
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
DbgPrint("type aTabbcdBackspaceCr\n");
DbgPrint("a bc should be output string\n");
Success = ReadFile(GetStdHandle(STD_INPUT_HANDLE),buff,512, &n, NULL);
if (!Success) {
DbgPrint("ReadFile returned error %d\n",GetLastError());
return 1;
}
if (n != UNPROCESSED_LENGTH) {
DbgPrint("n is %d\n",n);
}
if (strncmp(UnprocessedString,buff,n)) {
DbgPrint("strncmp failed\n");
DbgPrint("UnprocessedString contains %s\n",ProcessedString);
DbgPrint("buff contains %s\n",buff);
DbgBreakPoint();
}
// mode set:
// ENABLE_PROCESSED_INPUT
// ENABLE_PROCESSED_OUTPUT
DbgPrint("input mode is ENABLE_PROCESSED_INPUT\n");
DbgPrint("output mode is ENABLE_PROCESSED_OUTPUT\n");
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),ENABLE_PROCESSED_INPUT);
DbgPrint("type aTabbcdBackspaceCr\n");
DbgPrint("no string should be output\n");
Success = ReadFile(GetStdHandle(STD_INPUT_HANDLE),buff,512, &n, NULL);
if (!Success) {
DbgPrint("ReadFile returned error %d\n",GetLastError());
return 1;
}
{ DWORD i=0;
DWORD j;
while (Success) {
DbgPrint("n is %d\n",n);
for (j=0;j<n;j++,i++) {
if (UnprocessedString[i] != buff[j]) {
DbgPrint("strncmp failed\n");
DbgPrint("UnprocessedString[i] is %c\n",UnprocessedString[i]);
DbgPrint("buff[j] is %c\n",buff[j]);
DbgBreakPoint();
}
}
Success = ReadFile(GetStdHandle(STD_INPUT_HANDLE),buff,512, &n, NULL);
if (!Success) {
DbgPrint("ReadFile returned error %d\n",GetLastError());
return 1;
}
}
}
SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),OldInputMode);
SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),OldOutputMode);
}