mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 04:23:32 +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 ***********************************************************/
|
/* 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)
|
CHAR DosReadCharacter(WORD FileHandle)
|
||||||
{
|
{
|
||||||
WORD BytesRead;
|
WORD BytesRead;
|
||||||
|
@ -66,6 +111,13 @@ CHAR DosReadCharacter(WORD FileHandle)
|
||||||
1,
|
1,
|
||||||
&BytesRead);
|
&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 */
|
/* Restore the old mode and return the character */
|
||||||
if (Descriptor) Descriptor->DeviceInfo = OldDeviceInfo;
|
if (Descriptor) Descriptor->DeviceInfo = OldDeviceInfo;
|
||||||
return Sda->ByteBuffer;
|
return Sda->ByteBuffer;
|
||||||
|
|
|
@ -161,51 +161,6 @@ static BOOLEAN DosChangeDirectory(LPSTR Directory)
|
||||||
|
|
||||||
/* PUBLIC FUNCTIONS ***********************************************************/
|
/* 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)
|
BOOLEAN DosControlBreak(VOID)
|
||||||
{
|
{
|
||||||
setCF(0);
|
setCF(0);
|
||||||
|
@ -260,7 +215,6 @@ VOID WINAPI DosInt21h(LPWORD Stack)
|
||||||
DPRINT("INT 21h, AH = 01h\n");
|
DPRINT("INT 21h, AH = 01h\n");
|
||||||
|
|
||||||
Character = DosReadCharacter(DOS_INPUT_HANDLE);
|
Character = DosReadCharacter(DOS_INPUT_HANDLE);
|
||||||
DosEchoCharacter(Character);
|
|
||||||
if (Character == 0x03 && DosControlBreak()) break;
|
if (Character == 0x03 && DosControlBreak()) break;
|
||||||
|
|
||||||
setAL(Character);
|
setAL(Character);
|
||||||
|
@ -337,11 +291,8 @@ VOID WINAPI DosInt21h(LPWORD Stack)
|
||||||
/* Input */
|
/* Input */
|
||||||
if (DosCheckInput())
|
if (DosCheckInput())
|
||||||
{
|
{
|
||||||
CHAR Character = DosReadCharacter(DOS_INPUT_HANDLE);
|
|
||||||
DosEchoCharacter(Character);
|
|
||||||
|
|
||||||
Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_ZF;
|
Stack[STACK_FLAGS] &= ~EMULATOR_FLAG_ZF;
|
||||||
setAL(Character);
|
setAL(DosReadCharacter(DOS_INPUT_HANDLE));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue