Author: aandrejevic
Date: Tue Dec 10 01:30:53 2013
New Revision: 61256
URL:
http://svn.reactos.org/svn/reactos?rev=61256&view=rev
Log:
[NTVDM]
Fix the file reading subfunction (AH = 3Fh) of INT 21h.
When reading from the console, it always stops on a carriage return.
Modified:
branches/ntvdm/subsystems/ntvdm/dos.c
Modified: branches/ntvdm/subsystems/ntvdm/dos.c
URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/dos.c?re…
==============================================================================
--- branches/ntvdm/subsystems/ntvdm/dos.c [iso-8859-1] (original)
+++ branches/ntvdm/subsystems/ntvdm/dos.c [iso-8859-1] Tue Dec 10 01:30:53 2013
@@ -2001,26 +2001,34 @@
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
{