Don't echo when STDIN isn't the CON device.


svn path=/trunk/; revision=69357
This commit is contained in:
Aleksandar Andrejevic 2015-09-25 22:09:37 +00:00
parent 7f662fde76
commit 357395eacc
2 changed files with 53 additions and 50 deletions

View file

@ -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;

View file

@ -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
{