Author: hbelusca
Date: Mon Jul  1 00:07:39 2013
New Revision: 59405

URL: http://svn.reactos.org/svn/reactos?rev=59405&view=rev
Log:
[CMD]
Fix the default input & output console modes. Now, you can use the command 
interpreter via serial port redirection, by:
1- Enabling a serial port on the machine on which ReactOS runs.
2- Launching:
   cmd > AUX
   at a command prompt.

Modified:
    trunk/reactos/base/shell/cmd/cmd.c
    trunk/reactos/base/shell/cmd/redir.c

Modified: trunk/reactos/base/shell/cmd/cmd.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/cmd.c?rev=59405&r1=59404&r2=59405&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/cmd.c  [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/cmd.c  [iso-8859-1] Mon Jul  1 00:07:39 2013
@@ -414,21 +414,20 @@
         stui.dwFlags = STARTF_USESHOWWINDOW;
         stui.wShowWindow = SW_SHOWDEFAULT;
 
-        // return console to standard mode
+        /* Set the console to standard mode */
         SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),
-                       ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | 
ENABLE_ECHO_INPUT);
-
-        if (CreateProcess (szFullName,
-                           szFullCmdLine,
-                           NULL,
-                           NULL,
-                           TRUE,
-                           0,   /* CREATE_NEW_PROCESS_GROUP */
-                           NULL,
-                           NULL,
-                           &stui,
-                           &prci))
-
+                       ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | 
ENABLE_ECHO_INPUT);
+
+        if (CreateProcess(szFullName,
+                          szFullCmdLine,
+                          NULL,
+                          NULL,
+                          TRUE,
+                          0,   /* CREATE_NEW_PROCESS_GROUP */
+                          NULL,
+                          NULL,
+                          &stui,
+                          &prci))
         {
             CloseHandle(prci.hThread);
         }
@@ -449,32 +448,33 @@
                 EnterCriticalSection(&ChildProcessRunningLock);
                 dwChildProcessId = prci.dwProcessId;
 
-                WaitForSingleObject (prci.hProcess, INFINITE);
+                WaitForSingleObject(prci.hProcess, INFINITE);
 
                 LeaveCriticalSection(&ChildProcessRunningLock);
 
-                GetExitCodeProcess (prci.hProcess, &dwExitCode);
+                GetExitCodeProcess(prci.hProcess, &dwExitCode);
                 nErrorLevel = (INT)dwExitCode;
             }
-            CloseHandle (prci.hProcess);
+            CloseHandle(prci.hProcess);
         }
         else
         {
             TRACE ("[ShellExecute failed!: %s]\n", debugstr_aw(Full));
-            error_bad_command (first);
+            error_bad_command(first);
             dwExitCode = 1;
         }
 
-        // restore console mode
-        SetConsoleMode (
-            GetStdHandle( STD_INPUT_HANDLE ),
-            ENABLE_PROCESSED_INPUT );
-    }
-
-    /* Get code page if it has been change */
+        /* Restore our default console mode */
+        SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),
+                       ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | 
ENABLE_ECHO_INPUT);
+        SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),
+                       ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
+    }
+
+    /* Get code page if it has been changed */
     InputCodePage= GetConsoleCP();
     OutputCodePage = GetConsoleOutputCP();
-    SetConsoleTitle (szWindowTitle);
+    SetConsoleTitle(szWindowTitle);
 
     return dwExitCode;
 }
@@ -1360,7 +1360,7 @@
  */
 
 BOOL
-ReadLine (TCHAR *commandline, BOOL bMore)
+ReadLine(TCHAR *commandline, BOOL bMore)
 {
     TCHAR readline[CMDLINE_LENGTH];
     LPTSTR ip;
@@ -1426,7 +1426,7 @@
 /*
  * control-break handler.
  */
-BOOL WINAPI BreakHandler (DWORD dwCtrlType)
+BOOL WINAPI BreakHandler(DWORD dwCtrlType)
 {
     DWORD           dwWritten;
     INPUT_RECORD    rec;
@@ -1637,18 +1637,18 @@
         NtReadVirtualMemoryPtr = 
(NtReadVirtualMemoryProc)GetProcAddress(NtDllModule, "NtReadVirtualMemory");
     }
 
-    InitLocale ();
+    InitLocale();
 
     /* get default input and output console handles */
-    hOut = GetStdHandle (STD_OUTPUT_HANDLE);
-    hIn  = GetStdHandle (STD_INPUT_HANDLE);
+    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
+    hIn  = GetStdHandle(STD_INPUT_HANDLE);
 
     /* Set EnvironmentVariable PROMPT if it does not exists any env value.
        for you can change the EnvirommentVariable for prompt before cmd start
        this patch are not 100% right, if it does not exists a PROMPT value cmd 
should use
        $P$G as defualt not set EnvirommentVariable PROMPT to $P$G if it does 
not exists */
     if (GetEnvironmentVariable(_T("PROMPT"),lpBuffer, sizeof(lpBuffer) / 
sizeof(lpBuffer[0])) == 0)
-        SetEnvironmentVariable (_T("PROMPT"), _T("$P$G"));
+        SetEnvironmentVariable(_T("PROMPT"), _T("$P$G"));
 
 #ifdef FEATURE_DIR_STACK
     /* initialize directory stack */
@@ -1667,10 +1667,13 @@
         SetEnvironmentVariable (_T("COMSPEC"), ModuleName);
     }
 
-    /* add ctrl break handler */
-    AddBreakHandler ();
-
-    SetConsoleMode (hIn, ENABLE_PROCESSED_INPUT);
+    /* Add ctrl break handler */
+    AddBreakHandler();
+
+    /* Set our default console mode */
+    SetConsoleMode(hOut, 0); // Reinitialize the console output mode
+    SetConsoleMode(hOut, ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
+    SetConsoleMode(hIn , ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | 
ENABLE_ECHO_INPUT);
 
     cmdLine = GetCommandLine();
     TRACE ("[command args: %s]\n", debugstr_aw(cmdLine));
@@ -1800,10 +1803,15 @@
     /* free GetEnvVar's buffer */
     GetEnvVar(NULL);
 
-    /* remove ctrl break handler */
-    RemoveBreakHandler ();
-    SetConsoleMode(GetStdHandle( STD_INPUT_HANDLE ),
-                   ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT | 
ENABLE_ECHO_INPUT);
+    /* Remove ctrl break handler */
+    RemoveBreakHandler();
+
+    /* Restore the default console mode */
+    SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),
+                   ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT | 
ENABLE_ECHO_INPUT);
+    SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),
+                   ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT);
+
     DeleteCriticalSection(&ChildProcessRunningLock);
 }
 

Modified: trunk/reactos/base/shell/cmd/redir.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/base/shell/cmd/redir.c?rev=59405&r1=59404&r2=59405&view=diff
==============================================================================
--- trunk/reactos/base/shell/cmd/redir.c        [iso-8859-1] (original)
+++ trunk/reactos/base/shell/cmd/redir.c        [iso-8859-1] Mon Jul  1 
00:07:39 2013
@@ -61,8 +61,7 @@
     static SECURITY_ATTRIBUTES SecAttr = { sizeof(SECURITY_ATTRIBUTES), NULL, 
TRUE };
 
     /* Some parameters used for read, write, and append, respectively */
-    static
-    struct REDIR_PARAMS
+    static struct REDIR_PARAMS
     {
         DWORD dwDesiredAccess;
         DWORD dwShareMode;


Reply via email to