[NTVDM]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 26 Sep 2015 03:24:55 +0000 (03:24 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Sat, 26 Sep 2015 03:24:55 +0000 (03:24 +0000)
- 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

reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/bios.c
reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c
reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dosfiles.c

index 80bc422..c1e5189 100644 (file)
@@ -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;
index 1e42602..ace165e 100644 (file)
@@ -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);
 
index 560fa65..2d5b940 100644 (file)
@@ -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,