mirror of
https://github.com/reactos/reactos.git
synced 2024-07-12 15:45:20 +00:00
[NTVDM]
Fix the file reading subfunction (AH = 3Fh) of INT 21h. When reading from the console, it always stops on a carriage return. svn path=/branches/ntvdm/; revision=61256
This commit is contained in:
parent
b20613401f
commit
76f1085bdc
|
@ -2001,26 +2001,34 @@ VOID WINAPI DosInt21h(LPWORD Stack)
|
|||
WORD Count = getCX();
|
||||
WORD BytesRead = 0;
|
||||
WORD ErrorCode = ERROR_SUCCESS;
|
||||
CHAR Character;
|
||||
|
||||
if (IsConsoleHandle(DosGetRealHandle(Handle)))
|
||||
{
|
||||
while (Stack[STACK_COUNTER] < Count)
|
||||
{
|
||||
/* Read a character from the BIOS */
|
||||
// FIXME: Security checks!
|
||||
Buffer[Stack[STACK_COUNTER]] = LOBYTE(BiosGetCharacter());
|
||||
Character = LOBYTE(BiosGetCharacter());
|
||||
|
||||
/* Stop if the BOP needs to be repeated */
|
||||
if (getCF()) break;
|
||||
|
||||
/* Increment the counter */
|
||||
Stack[STACK_COUNTER]++;
|
||||
// FIXME: Security checks!
|
||||
Buffer[Stack[STACK_COUNTER]++] = Character;
|
||||
|
||||
if (Character == '\r')
|
||||
{
|
||||
/* Stop on first carriage return */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Stack[STACK_COUNTER] < Count)
|
||||
ErrorCode = ERROR_NOT_READY;
|
||||
else
|
||||
BytesRead = Count;
|
||||
if (Character != '\r')
|
||||
{
|
||||
if (Stack[STACK_COUNTER] < Count) ErrorCode = ERROR_NOT_READY;
|
||||
else BytesRead = Count;
|
||||
}
|
||||
else BytesRead = Stack[STACK_COUNTER];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue