mirror of
https://github.com/ApfelTeeSaft/reactos.git
synced 2026-09-02 04:13:34 +00:00
[NTVDM]
Don't echo when STDIN isn't the CON device. svn path=/trunk/; revision=69357
This commit is contained in:
@@ -43,6 +43,51 @@ PBIOS_DATA BiosData;
|
||||
|
||||
/* PUBLIC FUNCTIONS ***********************************************************/
|
||||
|
||||
VOID DosEchoCharacter(CHAR Character)
|
||||
{
|
||||
switch (Character)
|
||||
{
|
||||
case '\0':
|
||||
{
|
||||
/* Nothing */
|
||||
break;
|
||||
}
|
||||
|
||||
case '\r':
|
||||
case '\n':
|
||||
{
|
||||
/* Print both a carriage return and a newline */
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\r');
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\n');
|
||||
break;
|
||||
}
|
||||
|
||||
case '\b':
|
||||
{
|
||||
/* Erase the character */
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\b');
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, ' ');
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\b');
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
/* Check if this is a special character */
|
||||
if (Character < 0x20)
|
||||
{
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '^');
|
||||
Character += 'A' - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Echo the character */
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, Character);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CHAR DosReadCharacter(WORD FileHandle)
|
||||
{
|
||||
WORD BytesRead;
|
||||
@@ -66,6 +111,13 @@ CHAR DosReadCharacter(WORD FileHandle)
|
||||
1,
|
||||
&BytesRead);
|
||||
|
||||
/* Check if the file is actually the CON device */
|
||||
if (Descriptor && Descriptor->DeviceInfo & FILE_INFO_DEVICE)
|
||||
{
|
||||
/* Echo the character */
|
||||
DosEchoCharacter(Sda->ByteBuffer);
|
||||
}
|
||||
|
||||
/* Restore the old mode and return the character */
|
||||
if (Descriptor) Descriptor->DeviceInfo = OldDeviceInfo;
|
||||
return Sda->ByteBuffer;
|
||||
|
||||
@@ -161,51 +161,6 @@ static BOOLEAN DosChangeDirectory(LPSTR Directory)
|
||||
|
||||
/* PUBLIC FUNCTIONS ***********************************************************/
|
||||
|
||||
VOID DosEchoCharacter(CHAR Character)
|
||||
{
|
||||
switch (Character)
|
||||
{
|
||||
case '\0':
|
||||
{
|
||||
/* Nothing */
|
||||
break;
|
||||
}
|
||||
|
||||
case '\r':
|
||||
case '\n':
|
||||
{
|
||||
/* Print both a carriage return and a newline */
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\r');
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\n');
|
||||
break;
|
||||
}
|
||||
|
||||
case '\b':
|
||||
{
|
||||
/* Erase the character */
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\b');
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, ' ');
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '\b');
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
/* Check if this is a special character */
|
||||
if (Character < 0x20)
|
||||
{
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, '^');
|
||||
Character += 'A' - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Echo the character */
|
||||
DosPrintCharacter(DOS_OUTPUT_HANDLE, Character);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN DosControlBreak(VOID)
|
||||
{
|
||||
setCF(0);
|
||||
@@ -260,7 +215,6 @@ VOID WINAPI DosInt21h(LPWORD Stack)
|
||||
DPRINT("INT 21h, AH = 01h\n");
|
||||
|
||||
Character = DosReadCharacter(DOS_INPUT_HANDLE);
|
||||
DosEchoCharacter(Character);
|
||||
if (Character == 0x03 && DosControlBreak()) break;
|
||||
|
||||
setAL(Character);
|
||||
@@ -337,11 +291,8 @@ VOID WINAPI DosInt21h(LPWORD Stack)
|
||||
/* Input */
|
||||
if (DosCheckInput())
|
||||
{
|
||||
CHAR Character = DosReadCharacter(DOS_INPUT_HANDLE);
|
||||
DosEchoCharacter(Character);
|
||||
|
||||
Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_ZF;
|
||||
setAL(Character);
|
||||
setAL(DosReadCharacter(DOS_INPUT_HANDLE));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user