From: Hermès Bélusca-Maïto Date: Sat, 26 Sep 2015 03:24:55 +0000 (+0000) Subject: [NTVDM] X-Git-Tag: ReactOS-0.4.0~686 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=6a0561cf4f4f28b12df20fe1b57b0b9cd591ffe0 [NTVDM] - Don't hardcode magic values of characters if they have C escape codes. - Print an extra newline on call to the Ctrl-C handler, as it is done on real DOS. - Use a do{}while loop which loops while we don't have read a CR character. svn path=/trunk/; revision=69361 --- diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/bios.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/bios.c index 80bc4224165..c1e51894ab1 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/bios.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/bios.c @@ -68,7 +68,7 @@ VOID DosEchoCharacter(CHAR Character) * Check if this is a special character * NOTE: \r and \n are handled by the underlying driver! */ - if (Character < 0x20 && Character != 0x0A && Character != 0x0D) + if (Character < 0x20 && Character != '\r' && Character != '\n') { DosPrintCharacter(DOS_OUTPUT_HANDLE, '^'); Character += 'A' - 1; diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c index 1e42602cbca..ace165e6e69 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c @@ -165,6 +165,10 @@ BOOLEAN DosControlBreak(VOID) { setCF(0); + /* Print an extra newline */ + DosPrintCharacter(DOS_OUTPUT_HANDLE, '\r'); + DosPrintCharacter(DOS_OUTPUT_HANDLE, '\n'); + /* Call interrupt 0x23 */ Int32Call(&DosContext, 0x23); diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dosfiles.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dosfiles.c index 560fa65a1c3..2d5b940ea54 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dosfiles.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dosfiles.c @@ -675,11 +675,11 @@ BYTE DosReadLineBuffered(WORD FileHandle, DWORD Buffer, BYTE MaxSize) PDOS_DEVICE_NODE Node = DosGetDriverNode(Descriptor->DevicePointer); BYTE LineSize = 0; PCHAR Pointer = FAR_POINTER(Buffer); + CHAR Character; - while (TRUE) + do { USHORT Amount = 1; - CHAR Character; /* Read a character from the device */ Node->ReadRoutine(Node, @@ -757,9 +757,8 @@ BYTE DosReadLineBuffered(WORD FileHandle, DWORD Buffer, BYTE MaxSize) } } - /* Stop on a carriage return */ - if (Character == '\r') break; - } + /* Stop on a carriage return */ + } while (Character != '\r'); return LineSize - 1; } @@ -841,11 +840,11 @@ WORD DosReadFile(WORD FileHandle, { /* Translated input from a character device that isn't CON */ PCHAR Pointer = FAR_POINTER(Buffer); + CHAR Character; while (*BytesRead < Count) { USHORT Amount = 1; - CHAR Character; /* Read a character from the device */ Node->ReadRoutine(Node,