mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 22:55:41 +00:00
[NTVDM]
Don't echo when STDIN isn't the CON device. svn path=/trunk/; revision=69357
This commit is contained in:
parent
7f662fde76
commit
357395eacc
2 changed files with 53 additions and 50 deletions
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue