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?rev... ============================================================================== --- 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 {