Synchronize with trunk revision 59636 (just before Alex's CreateProcess revamp).
[reactos.git] / base / shell / cmd / misc.c
index 4e3947f..c94fce8 100644 (file)
  *    06-Nov-1999 (Eric Kohl)
  *        Added PagePrompt() and FilePrompt().
  *
- *    30-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
- *        Remove all hardcode string to En.rc
+ *    30-Apr-2005 (Magnus Olsen <magnus@greatlord.com>)
+ *        Remove all hardcoded strings in En.rc
  */
 
-#include <precomp.h>
-
+#include "precomp.h"
 
 /*
  * get a character out-of-band and honor Ctrl-Break characters
 TCHAR
 cgetchar (VOID)
 {
-       HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE);
-       INPUT_RECORD irBuffer;
-       DWORD  dwRead;
-
-       do
-       {
-               ReadConsoleInput (hInput, &irBuffer, 1, &dwRead);
-               if ((irBuffer.EventType == KEY_EVENT) &&
-                       (irBuffer.Event.KeyEvent.bKeyDown == TRUE))
-               {
-                       if (irBuffer.Event.KeyEvent.dwControlKeyState &
-                                (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))
-                       {
-                               if (irBuffer.Event.KeyEvent.wVirtualKeyCode == 'C')
-                               {
-                                       bCtrlBreak = TRUE;
-                                       break;
-                               }
-                       }
-                       else if ((irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
-              (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
-              (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL))
-                       {
-                               ;
-                       }
-
-                       else
-                       {
-                               break;
-                       }
-               }
-       }
-       while (TRUE);
+    HANDLE hInput = GetStdHandle (STD_INPUT_HANDLE);
+    INPUT_RECORD irBuffer;
+    DWORD  dwRead;
+
+    do
+    {
+        ReadConsoleInput (hInput, &irBuffer, 1, &dwRead);
+        if ((irBuffer.EventType == KEY_EVENT) &&
+            (irBuffer.Event.KeyEvent.bKeyDown == TRUE))
+        {
+            if (irBuffer.Event.KeyEvent.dwControlKeyState &
+                 (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))
+            {
+                if (irBuffer.Event.KeyEvent.wVirtualKeyCode == 'C')
+                {
+                    bCtrlBreak = TRUE;
+                    break;
+                }
+            }
+            else if ((irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
+                     (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
+                     (irBuffer.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL))
+            {
+                // Nothing to do
+            }
+            else
+            {
+                break;
+            }
+        }
+    }
+    while (TRUE);
 
 #ifndef _UNICODE
-       return irBuffer.Event.KeyEvent.uChar.AsciiChar;
+    return irBuffer.Event.KeyEvent.uChar.AsciiChar;
 #else
-       return irBuffer.Event.KeyEvent.uChar.UnicodeChar;
+    return irBuffer.Event.KeyEvent.uChar.UnicodeChar;
 #endif /* _UNICODE */
 }
 
@@ -87,45 +85,44 @@ cgetchar (VOID)
  */
 VOID GetPathCase( TCHAR * Path, TCHAR * OutPath)
 {
-       UINT i = 0;
-       TCHAR TempPath[MAX_PATH];
-       WIN32_FIND_DATA FindFileData;
-       HANDLE hFind;
-       _tcscpy(TempPath, _T(""));
-       _tcscpy(OutPath, _T(""));
-
-
-       for(i = 0; i < _tcslen(Path); i++)
-       {
-               if(Path[i] != _T('\\'))
-               {
-                       _tcsncat(TempPath, &Path[i], 1);
-                       if(i != _tcslen(Path) - 1)
-                               continue;
-               }
-               /* Handle the base part of the path different.
-                  Because if you put it into findfirstfile, it will
-                  return your current folder */
-               if(_tcslen(TempPath) == 2 && TempPath[1] == _T(':'))
-               {
-                       _tcscat(OutPath, TempPath);
-                       _tcscat(OutPath, _T("\\"));
-                       _tcscat(TempPath, _T("\\"));
-               }
-               else
-               {
-                       hFind = FindFirstFile(TempPath,&FindFileData);
-                       if(hFind == INVALID_HANDLE_VALUE)
-                       {
-                               _tcscpy(OutPath, Path);
-                               return;
-                       }
-                       _tcscat(TempPath, _T("\\"));
-                       _tcscat(OutPath, FindFileData.cFileName);
-                       _tcscat(OutPath, _T("\\"));
-                       FindClose(hFind);
-               }
-       }
+    UINT i = 0;
+    TCHAR TempPath[MAX_PATH];
+    WIN32_FIND_DATA FindFileData;
+    HANDLE hFind;
+    _tcscpy(TempPath, _T(""));
+    _tcscpy(OutPath, _T(""));
+
+    for(i = 0; i < _tcslen(Path); i++)
+    {
+        if (Path[i] != _T('\\'))
+        {
+            _tcsncat(TempPath, &Path[i], 1);
+            if (i != _tcslen(Path) - 1)
+                continue;
+        }
+        /* Handle the base part of the path different.
+           Because if you put it into findfirstfile, it will
+           return your current folder */
+        if (_tcslen(TempPath) == 2 && TempPath[1] == _T(':'))
+        {
+            _tcscat(OutPath, TempPath);
+            _tcscat(OutPath, _T("\\"));
+            _tcscat(TempPath, _T("\\"));
+        }
+        else
+        {
+            hFind = FindFirstFile(TempPath,&FindFileData);
+            if (hFind == INVALID_HANDLE_VALUE)
+            {
+                _tcscpy(OutPath, Path);
+                return;
+            }
+            _tcscat(TempPath, _T("\\"));
+            _tcscat(OutPath, FindFileData.cFileName);
+            _tcscat(OutPath, _T("\\"));
+            FindClose(hFind);
+        }
+    }
 }
 
 /*
@@ -134,557 +131,565 @@ VOID GetPathCase( TCHAR * Path, TCHAR * OutPath)
 
 BOOL CheckCtrlBreak (INT mode)
 {
-       static BOOL bLeaveAll = FALSE; /* leave all batch files */
-       TCHAR options[4]; /* Yes, No, All */
-       TCHAR c;
-
-       switch (mode)
-       {
-               case BREAK_OUTOFBATCH:
-                       bLeaveAll = 0;
-                       return FALSE;
-
-               case BREAK_BATCHFILE:
-                       if (bLeaveAll)
-                               return TRUE;
-
-                       if (!bCtrlBreak)
-                               return FALSE;
-
-                       LoadString(CMD_ModuleHandle, STRING_COPY_OPTION, options, 4);
-
-                       /* we need to be sure the string arrives on the screen! */
-                       do
-                       {
-                               ConOutResPuts(STRING_CANCEL_BATCH_FILE);
-                               c = _totupper(cgetchar());
-                       } while (!(_tcschr(options, c) || c == _T('\3')) || !c);
-
-                       ConOutPuts (_T("\r\n"));
-
-                       if (c == options[1])
-                               return bCtrlBreak = FALSE; /* ignore */
-
-                       /* leave all batch files */
-                       bLeaveAll = ((c == options[2]) || (c == _T('\3')));
-                       break;
-
-               case BREAK_INPUT:
-                       if (!bCtrlBreak)
-                               return FALSE;
-                       break;
-       }
-
-       /* state processed */
-       bCtrlBreak = FALSE;
-       return TRUE;
+    static BOOL bLeaveAll = FALSE; /* leave all batch files */
+    TCHAR options[4]; /* Yes, No, All */
+    TCHAR c;
+
+    switch (mode)
+    {
+        case BREAK_OUTOFBATCH:
+            bLeaveAll = 0;
+            return FALSE;
+
+        case BREAK_BATCHFILE:
+            if (bLeaveAll)
+                return TRUE;
+
+            if (!bCtrlBreak)
+                return FALSE;
+
+            LoadString(CMD_ModuleHandle, STRING_COPY_OPTION, options, 4);
+
+            /* we need to be sure the string arrives on the screen! */
+            do
+            {
+                ConOutResPuts(STRING_CANCEL_BATCH_FILE);
+                c = _totupper(cgetchar());
+            } while (!(_tcschr(options, c) || c == _T('\3')) || !c);
+
+            ConOutChar(_T('\n'));
+
+            if (c == options[1])
+                return bCtrlBreak = FALSE; /* ignore */
+
+            /* leave all batch files */
+            bLeaveAll = ((c == options[2]) || (c == _T('\3')));
+            break;
+
+        case BREAK_INPUT:
+            if (!bCtrlBreak)
+                return FALSE;
+            break;
+    }
+
+    /* state processed */
+    bCtrlBreak = FALSE;
+    return TRUE;
 }
 
 /* add new entry for new argument */
 BOOL add_entry (LPINT ac, LPTSTR **arg, LPCTSTR entry)
 {
-       LPTSTR q;
-       LPTSTR *oldarg;
-
-       q = cmd_alloc ((_tcslen(entry) + 1) * sizeof (TCHAR));
-       if (NULL == q)
-       {
-               return FALSE;
-       }
-
-       _tcscpy (q, entry);
-       oldarg = *arg;
-       *arg = cmd_realloc (oldarg, (*ac + 2) * sizeof (LPTSTR));
-       if (NULL == *arg)
-       {
-               *arg = oldarg;
-               return FALSE;
-       }
-
-       /* save new entry */
-       (*arg)[*ac] = q;
-       (*arg)[++(*ac)] = NULL;
-
-       return TRUE;
+    LPTSTR q;
+    LPTSTR *oldarg;
+
+    q = cmd_alloc ((_tcslen(entry) + 1) * sizeof (TCHAR));
+    if (NULL == q)
+    {
+        return FALSE;
+    }
+
+    _tcscpy (q, entry);
+    oldarg = *arg;
+    *arg = cmd_realloc (oldarg, (*ac + 2) * sizeof (LPTSTR));
+    if (NULL == *arg)
+    {
+        cmd_free (q);
+        *arg = oldarg;
+        return FALSE;
+    }
+
+    /* save new entry */
+    (*arg)[*ac] = q;
+    (*arg)[++(*ac)] = NULL;
+
+    return TRUE;
 }
 
 static BOOL expand (LPINT ac, LPTSTR **arg, LPCTSTR pattern)
 {
-       HANDLE hFind;
-       WIN32_FIND_DATA FindData;
-       BOOL ok;
-       LPCTSTR pathend;
-       LPTSTR dirpart, fullname;
-
-       pathend = _tcsrchr (pattern, _T('\\'));
-       if (NULL != pathend)
-       {
-               dirpart = cmd_alloc((pathend - pattern + 2) * sizeof(TCHAR));
-               if (NULL == dirpart)
-               {
-                       return FALSE;
-               }
-               memcpy(dirpart, pattern, pathend - pattern + 1);
-               dirpart[pathend - pattern + 1] = _T('\0');
-       }
-       else
-       {
-               dirpart = NULL;
-       }
-       hFind = FindFirstFile (pattern, &FindData);
-       if (INVALID_HANDLE_VALUE != hFind)
-       {
-               do
-               {
-                       if (NULL != dirpart)
-                       {
-                               fullname = cmd_alloc((_tcslen(dirpart) + _tcslen(FindData.cFileName) + 1) * sizeof(TCHAR));
-                               if (NULL == fullname)
-                               {
-                                       ok = FALSE;
-                               }
-                               else
-                               {
-                                       _tcscat (_tcscpy (fullname, dirpart), FindData.cFileName);
-                                       ok = add_entry(ac, arg, fullname);
-                                       cmd_free (fullname);
-                               }
-                       }
-                       else
-                       {
-                               ok = add_entry(ac, arg, FindData.cFileName);
-                       }
-               } while (FindNextFile (hFind, &FindData) && ok);
-               FindClose (hFind);
-       }
-       else
-       {
-               ok = add_entry(ac, arg, pattern);
-       }
-
-       if (NULL != dirpart)
-       {
-               cmd_free (dirpart);
-       }
-
-       return ok;
+    HANDLE hFind;
+    WIN32_FIND_DATA FindData;
+    BOOL ok;
+    LPCTSTR pathend;
+    LPTSTR dirpart, fullname;
+
+    pathend = _tcsrchr (pattern, _T('\\'));
+    if (NULL != pathend)
+    {
+        dirpart = cmd_alloc((pathend - pattern + 2) * sizeof(TCHAR));
+        if (NULL == dirpart)
+        {
+            return FALSE;
+        }
+        memcpy(dirpart, pattern, pathend - pattern + 1);
+        dirpart[pathend - pattern + 1] = _T('\0');
+    }
+    else
+    {
+        dirpart = NULL;
+    }
+    hFind = FindFirstFile (pattern, &FindData);
+    if (INVALID_HANDLE_VALUE != hFind)
+    {
+        do
+        {
+            if (NULL != dirpart)
+            {
+                fullname = cmd_alloc((_tcslen(dirpart) + _tcslen(FindData.cFileName) + 1) * sizeof(TCHAR));
+                if (NULL == fullname)
+                {
+                    ok = FALSE;
+                }
+                else
+                {
+                    _tcscat (_tcscpy (fullname, dirpart), FindData.cFileName);
+                    ok = add_entry(ac, arg, fullname);
+                    cmd_free (fullname);
+                }
+            }
+            else
+            {
+                ok = add_entry(ac, arg, FindData.cFileName);
+            }
+        } while (FindNextFile (hFind, &FindData) && ok);
+        FindClose (hFind);
+    }
+    else
+    {
+        ok = add_entry(ac, arg, pattern);
+    }
+
+    if (NULL != dirpart)
+    {
+        cmd_free (dirpart);
+    }
+
+    return ok;
 }
 
 /*
  * split - splits a line up into separate arguments, deliminators
  *         are spaces and slashes ('/').
  */
-
-LPTSTR *split (LPTSTR s, LPINT args, BOOL expand_wildcards)
+LPTSTR *split (LPTSTR s, LPINT args, BOOL expand_wildcards, BOOL handle_plus)
 {
-       LPTSTR *arg;
-       LPTSTR start;
-       LPTSTR q;
-       INT  ac;
-       INT  len;
-
-       arg = cmd_alloc (sizeof (LPTSTR));
-       if (!arg)
-               return NULL;
-       *arg = NULL;
-
-       ac = 0;
-       while (*s)
-       {
-               BOOL bQuoted = FALSE;
-
-               /* skip leading spaces */
-               while (*s && (_istspace (*s) || _istcntrl (*s)))
-                       ++s;
-
-               start = s;
-
-               /* the first character can be '/' */
-               if (*s == _T('/'))
-                       ++s;
-
-               /* skip to next word delimiter or start of next option */
-               while (_istprint(*s) && (bQuoted || (!_istspace(*s) && *s != _T('/'))))
-               {
-                       /* if quote (") then set bQuoted */
-                       bQuoted ^= (*s == _T('\"'));
-                       ++s;
-               }
-
-               /* a word was found */
-               if (s != start)
-               {
-                       q = cmd_alloc (((len = s - start) + 1) * sizeof (TCHAR));
-                       if (!q)
-                       {
-                               return NULL;
-                       }
-                       memcpy (q, start, len * sizeof (TCHAR));
-                       q[len] = _T('\0');
-                       StripQuotes(q);
-                       if (expand_wildcards && _T('/') != *start &&
-                           (NULL != _tcschr(q, _T('*')) || NULL != _tcschr(q, _T('?'))))
-                       {
-                               if (! expand(&ac, &arg, q))
-                               {
-                                       cmd_free (q);
-                                       freep (arg);
-                                       return NULL;
-                               }
-                       }
-                       else
-                       {
-                               if (! add_entry(&ac, &arg, q))
-                               {
-                                       cmd_free (q);
-                                       freep (arg);
-                                       return NULL;
-                               }
-                       }
-                       cmd_free (q);
-               }
-       }
-
-       *args = ac;
-
-       return arg;
+    LPTSTR *arg;
+    LPTSTR start;
+    LPTSTR q;
+    INT  ac;
+    INT_PTR  len;
+
+    arg = cmd_alloc (sizeof (LPTSTR));
+    if (!arg)
+        return NULL;
+    *arg = NULL;
+
+    ac = 0;
+    while (*s)
+    {
+        BOOL bQuoted = FALSE;
+
+        /* skip leading spaces */
+        while (*s && (_istspace(*s) || _istcntrl(*s)))
+            ++s;
+
+        start = s;
+
+        /* the first character can be '/' */
+        if (*s == _T('/'))
+            ++s;
+
+        /* skip to next word delimiter or start of next option */
+        while (_istprint(*s))
+        {
+            /* if quote (") then set bQuoted */
+            bQuoted ^= (*s == _T('\"'));
+
+            /* Check if we have unquoted text */
+            if (!bQuoted)
+            {
+                /* check for separators */
+                if (_istspace(*s) ||
+                    (*s == _T('/')) ||
+                    (handle_plus && (*s == _T('+'))))
+                {
+                    /* Make length at least one character */
+                    if (s == start) s++;
+                    break;
+                }
+            }
+
+            ++s;
+        }
+
+        /* a word was found */
+        if (s != start)
+        {
+            q = cmd_alloc (((len = s - start) + 1) * sizeof (TCHAR));
+            if (!q)
+            {
+                return NULL;
+            }
+            memcpy (q, start, len * sizeof (TCHAR));
+            q[len] = _T('\0');
+            StripQuotes(q);
+            if (expand_wildcards && (_T('/') != *start) &&
+                (NULL != _tcschr(q, _T('*')) || NULL != _tcschr(q, _T('?'))))
+            {
+                if (! expand(&ac, &arg, q))
+                {
+                    cmd_free (q);
+                    freep (arg);
+                    return NULL;
+                }
+            }
+            else
+            {
+                if (! add_entry(&ac, &arg, q))
+                {
+                    cmd_free (q);
+                    freep (arg);
+                    return NULL;
+                }
+            }
+            cmd_free (q);
+        }
+    }
+
+    *args = ac;
+
+    return arg;
 }
 
-/* splitspace() is a function which uses JUST spaces as delimeters. split() uses "/" AND spaces.
+/*
+ * splitspace() is a function which uses JUST spaces as delimeters. split() uses "/" AND spaces.
  * The way it works is real similar to split(), search the difference ;)
  * splitspace is needed for commands such as "move" where paths as C:\this/is\allowed/ are allowed
  */
 LPTSTR *splitspace (LPTSTR s, LPINT args)
 {
-       LPTSTR *arg;
-       LPTSTR start;
-       LPTSTR q;
-       INT  ac;
-       INT  len;
-
-       arg = cmd_alloc (sizeof (LPTSTR));
-       if (!arg)
-               return NULL;
-       *arg = NULL;
-
-       ac = 0;
-       while (*s)
-       {
-               BOOL bQuoted = FALSE;
-
-               /* skip leading spaces */
-               while (*s && (_istspace (*s) || _istcntrl (*s)))
-                       ++s;
-
-               start = s;
-
-               /* skip to next word delimiter or start of next option */
-               while (_istprint(*s) && (bQuoted || !_istspace(*s)))
-               {
-                       /* if quote (") then set bQuoted */
-                       bQuoted ^= (*s == _T('\"'));
-                       ++s;
-               }
-
-               /* a word was found */
-               if (s != start)
-               {
-                       q = cmd_alloc (((len = s - start) + 1) * sizeof (TCHAR));
-                       if (!q)
-                       {
-                               return NULL;
-                       }
-                       memcpy (q, start, len * sizeof (TCHAR));
-                       q[len] = _T('\0');
-                       StripQuotes(q);
-                       if (! add_entry(&ac, &arg, q))
-                       {
-                               cmd_free (q);
-                               freep (arg);
-                               return NULL;
-                       }
-                       cmd_free (q);
-               }
-       }
-
-       *args = ac;
-
-       return arg;
+    LPTSTR *arg;
+    LPTSTR start;
+    LPTSTR q;
+    INT  ac;
+    INT_PTR  len;
+
+    arg = cmd_alloc (sizeof (LPTSTR));
+    if (!arg)
+        return NULL;
+    *arg = NULL;
+
+    ac = 0;
+    while (*s)
+    {
+        BOOL bQuoted = FALSE;
+
+        /* skip leading spaces */
+        while (*s && (_istspace (*s) || _istcntrl (*s)))
+            ++s;
+
+        start = s;
+
+        /* skip to next word delimiter or start of next option */
+        while (_istprint(*s) && (bQuoted || !_istspace(*s)))
+        {
+            /* if quote (") then set bQuoted */
+            bQuoted ^= (*s == _T('\"'));
+            ++s;
+        }
+
+        /* a word was found */
+        if (s != start)
+        {
+            q = cmd_alloc (((len = s - start) + 1) * sizeof (TCHAR));
+            if (!q)
+            {
+                return NULL;
+            }
+            memcpy (q, start, len * sizeof (TCHAR));
+            q[len] = _T('\0');
+            StripQuotes(q);
+            if (! add_entry(&ac, &arg, q))
+            {
+                cmd_free (q);
+                freep (arg);
+                return NULL;
+            }
+            cmd_free (q);
+        }
+    }
+
+    *args = ac;
+
+    return arg;
 }
 
 /*
  * freep -- frees memory used for a call to split
- *
  */
 VOID freep (LPTSTR *p)
 {
-       LPTSTR *q;
+    LPTSTR *q;
 
-       if (!p)
-               return;
+    if (!p)
+        return;
 
-       q = p;
-       while (*q)
-               cmd_free(*q++);
+    q = p;
+    while (*q)
+        cmd_free(*q++);
 
-       cmd_free(p);
+    cmd_free(p);
 }
 
-
 LPTSTR _stpcpy (LPTSTR dest, LPCTSTR src)
 {
-       _tcscpy (dest, src);
-       return (dest + _tcslen (src));
+    _tcscpy (dest, src);
+    return (dest + _tcslen (src));
 }
 
 VOID
 StripQuotes(TCHAR *in)
 {
-       TCHAR *out = in;
-       for (; *in; in++)
-       {
-               if (*in != _T('"'))
-                       *out++ = *in;
-       }
-       *out = _T('\0');
+    TCHAR *out = in;
+    for (; *in; in++)
+    {
+        if (*in != _T('"'))
+            *out++ = *in;
+    }
+    *out = _T('\0');
 }
 
 
-
 /*
  * Checks if a path is valid (accessible)
  */
-
 BOOL IsValidPathName (LPCTSTR pszPath)
 {
-       TCHAR szOldPath[MAX_PATH];
-       BOOL  bResult;
+    TCHAR szOldPath[MAX_PATH];
+    BOOL  bResult;
 
-       GetCurrentDirectory (MAX_PATH, szOldPath);
-       bResult = SetCurrentDirectory (pszPath);
+    GetCurrentDirectory (MAX_PATH, szOldPath);
+    bResult = SetCurrentDirectory (pszPath);
 
-       SetCurrentDirectory (szOldPath);
+    SetCurrentDirectory (szOldPath);
 
-       return bResult;
+    return bResult;
 }
 
 
 /*
  * Checks if a file exists (accessible)
  */
-
 BOOL IsExistingFile (LPCTSTR pszPath)
 {
-       DWORD attr = GetFileAttributes (pszPath);
-       return (attr != 0xFFFFFFFF && (! (attr & FILE_ATTRIBUTE_DIRECTORY)) );
+    DWORD attr = GetFileAttributes (pszPath);
+    return (attr != 0xFFFFFFFF && (! (attr & FILE_ATTRIBUTE_DIRECTORY)) );
 }
 
 
 BOOL IsExistingDirectory (LPCTSTR pszPath)
 {
-       DWORD attr = GetFileAttributes (pszPath);
-       return (attr != 0xFFFFFFFF && (attr & FILE_ATTRIBUTE_DIRECTORY) );
+    DWORD attr = GetFileAttributes (pszPath);
+    return (attr != 0xFFFFFFFF && (attr & FILE_ATTRIBUTE_DIRECTORY) );
 }
 
 
 BOOL FileGetString (HANDLE hFile, LPTSTR lpBuffer, INT nBufferLength)
 {
-       LPSTR lpString;
-       DWORD  dwRead;
-       INT len = 0;
+    LPSTR lpString;
+    DWORD  dwRead;
+    INT len = 0;
 #ifdef _UNICODE
-       lpString = cmd_alloc(nBufferLength);
+    lpString = cmd_alloc(nBufferLength);
 #else
-       lpString = lpBuffer;
+    lpString = lpBuffer;
 #endif
 
-       if (ReadFile(hFile, lpString, nBufferLength - 1, &dwRead, NULL))
-       {
-               /* break at new line*/
-               CHAR *end = memchr(lpString, '\n', dwRead);
-               len = dwRead;
-               if (end)
-               {
-                       len = (end - lpString) + 1;
-                       SetFilePointer(hFile, len - dwRead, NULL, FILE_CURRENT);
-               }
-       }
-
-       if (!len)
-       {
+    if (ReadFile(hFile, lpString, nBufferLength - 1, &dwRead, NULL))
+    {
+        /* break at new line*/
+        CHAR *end = memchr(lpString, '\n', dwRead);
+        len = dwRead;
+        if (end)
+        {
+            len = (INT)(end - lpString) + 1;
+            SetFilePointer(hFile, len - dwRead, NULL, FILE_CURRENT);
+        }
+    }
+
+    if (!len)
+    {
 #ifdef _UNICODE
-               cmd_free(lpString);
+        cmd_free(lpString);
 #endif
-               return FALSE;
-       }
+        return FALSE;
+    }
 
-       lpString[len++] = '\0';
+    lpString[len++] = '\0';
 #ifdef _UNICODE
-       MultiByteToWideChar(OutputCodePage, 0, lpString, -1, lpBuffer, len);
-       cmd_free(lpString);
+    MultiByteToWideChar(OutputCodePage, 0, lpString, -1, lpBuffer, len);
+    cmd_free(lpString);
 #endif
-       return TRUE;
+    return TRUE;
 }
 
-INT PagePrompt (VOID)
+INT PagePrompt(VOID)
 {
-       INPUT_RECORD ir;
+    INPUT_RECORD ir;
 
-       ConOutResPuts(STRING_MISC_HELP1);
+    ConOutResPuts(STRING_MISC_HELP1);
 
-       RemoveBreakHandler ();
-       ConInDisable ();
+    RemoveBreakHandler();
+    ConInDisable();
 
-       do
-       {
-               ConInKey (&ir);
-       }
-       while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
-              (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
-              (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
+    do
+    {
+        ConInKey(&ir);
+    }
+    while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
+           (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
+           (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
 
-       AddBreakHandler ();
-       ConInEnable ();
+    AddBreakHandler();
+    ConInEnable();
 
-       if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
-           ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) &&
-            (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
-       {
-               bCtrlBreak = TRUE;
-               return PROMPT_BREAK;
-       }
+    if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
+        ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) &&
+         (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
+    {
+        bCtrlBreak = TRUE;
+        return PROMPT_BREAK;
+    }
 
-       return PROMPT_YES;
+    return PROMPT_YES;
 }
 
 
 INT FilePromptYN (UINT resID)
 {
-       TCHAR szMsg[RC_STRING_MAX_SIZE];
-//     TCHAR cKey = 0;
-//     LPTSTR szKeys = _T("yna");
+    TCHAR szMsg[RC_STRING_MAX_SIZE];
+//  TCHAR cKey = 0;
+//  LPTSTR szKeys = _T("yna");
 
-       TCHAR szIn[10];
-       LPTSTR p;
+    TCHAR szIn[10];
+    LPTSTR p;
 
-       if (resID != 0)
-               ConOutResPrintf (resID);
+    if (resID != 0)
+        ConOutResPrintf (resID);
 
-       /* preliminary fix */
-       ConInString (szIn, 10);
-       ConOutPrintf (_T("\n"));
+    /* preliminary fix */
+    ConInString(szIn, 10);
+    ConOutChar(_T('\n'));
 
-       _tcsupr (szIn);
-       for (p = szIn; _istspace (*p); p++)
-               ;
+    _tcsupr (szIn);
+    for (p = szIn; _istspace (*p); p++)
+        ;
 
-       LoadString(CMD_ModuleHandle, STRING_CHOICE_OPTION, szMsg, RC_STRING_MAX_SIZE);
+    LoadString(CMD_ModuleHandle, STRING_CHOICE_OPTION, szMsg, RC_STRING_MAX_SIZE);
 
-       if (_tcsncmp(p, &szMsg[0], 1) == 0)
-               return PROMPT_YES;
-       else if (_tcsncmp(p, &szMsg[1], 1) == 0)
-               return PROMPT_NO;
+    if (_tcsncmp(p, &szMsg[0], 1) == 0)
+        return PROMPT_YES;
+    else if (_tcsncmp(p, &szMsg[1], 1) == 0)
+        return PROMPT_NO;
 #if 0
-       else if (*p == _T('\03'))
-               return PROMPT_BREAK;
+    else if (*p == _T('\03'))
+        return PROMPT_BREAK;
 #endif
 
-       return PROMPT_NO;
-
+    return PROMPT_NO;
 
-       /* unfinished sollution */
+    /* unfinished solution */
 #if 0
-       RemoveBreakHandler ();
-       ConInDisable ();
+    RemoveBreakHandler();
+    ConInDisable();
 
-       do
-       {
-               ConInKey (&ir);
-               cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar);
-               if (_tcschr (szKeys, cKey[0]) == NULL)
-                       cKey = 0;
+    do
+    {
+        ConInKey (&ir);
+        cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar);
+        if (_tcschr (szKeys, cKey[0]) == NULL)
+            cKey = 0;
 
 
-       }
-       while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
-              (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
-              (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
+    }
+    while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
+           (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
+           (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
 
-       AddBreakHandler ();
-       ConInEnable ();
+    AddBreakHandler();
+    ConInEnable();
 
-       if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
-           ((ir.Event.KeyEvent.wVirtualKeyCode == 'C') &&
-            (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
-               return PROMPT_BREAK;
+    if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
+        ((ir.Event.KeyEvent.wVirtualKeyCode == 'C') &&
+         (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
+        return PROMPT_BREAK;
 
-       return PROMPT_YES;
+    return PROMPT_YES;
 #endif
 }
 
 
 INT FilePromptYNA (UINT resID)
 {
-       TCHAR szMsg[RC_STRING_MAX_SIZE];
-//     TCHAR cKey = 0;
-//     LPTSTR szKeys = _T("yna");
+    TCHAR szMsg[RC_STRING_MAX_SIZE];
+//  TCHAR cKey = 0;
+//  LPTSTR szKeys = _T("yna");
 
-       TCHAR szIn[10];
-       LPTSTR p;
+    TCHAR szIn[10];
+    LPTSTR p;
 
-       if (resID != 0)
-               ConOutResPrintf (resID);
+    if (resID != 0)
+        ConOutResPrintf (resID);
 
-       /* preliminary fix */
-       ConInString (szIn, 10);
-       ConOutPrintf (_T("\n"));
+    /* preliminary fix */
+    ConInString(szIn, 10);
+    ConOutChar(_T('\n'));
 
-       _tcsupr (szIn);
-       for (p = szIn; _istspace (*p); p++)
-               ;
+    _tcsupr (szIn);
+    for (p = szIn; _istspace (*p); p++)
+        ;
 
-       LoadString( CMD_ModuleHandle, STRING_COPY_OPTION, szMsg, RC_STRING_MAX_SIZE);
-
-       if (_tcsncmp(p, &szMsg[0], 1) == 0)
-               return PROMPT_YES;
-       else if (_tcsncmp(p, &szMsg[1], 1) == 0)
-               return PROMPT_NO;
-       else if (_tcsncmp(p, &szMsg[2], 1) == 0)
-               return PROMPT_ALL;
+    LoadString( CMD_ModuleHandle, STRING_COPY_OPTION, szMsg, RC_STRING_MAX_SIZE);
 
+    if (_tcsncmp(p, &szMsg[0], 1) == 0)
+        return PROMPT_YES;
+    else if (_tcsncmp(p, &szMsg[1], 1) == 0)
+        return PROMPT_NO;
+    else if (_tcsncmp(p, &szMsg[2], 1) == 0)
+        return PROMPT_ALL;
 #if 0
-       else if (*p == _T('\03'))
-               return PROMPT_BREAK;
+    else if (*p == _T('\03'))
+        return PROMPT_BREAK;
 #endif
 
-       return PROMPT_NO;
-
+    return PROMPT_NO;
 
-/* unfinished sollution */
+    /* unfinished solution */
 #if 0
-       RemoveBreakHandler ();
-       ConInDisable ();
-
-       do
-       {
-               ConInKey (&ir);
-               cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar);
-               if (_tcschr (szKeys, cKey[0]) == NULL)
-                       cKey = 0;
-       }
-       while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
-              (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
-              (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
-
-       AddBreakHandler ();
-       ConInEnable ();
-
-       if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
-           ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) &&
-            (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
-               return PROMPT_BREAK;
-
-       return PROMPT_YES;
+    RemoveBreakHandler();
+    ConInDisable();
+
+    do
+    {
+        ConInKey (&ir);
+        cKey = _totlower (ir.Event.KeyEvent.uChar.AsciiChar);
+        if (_tcschr (szKeys, cKey[0]) == NULL)
+            cKey = 0;
+    }
+    while ((ir.Event.KeyEvent.wVirtualKeyCode == VK_SHIFT) ||
+           (ir.Event.KeyEvent.wVirtualKeyCode == VK_MENU) ||
+           (ir.Event.KeyEvent.wVirtualKeyCode == VK_CONTROL));
+
+    AddBreakHandler();
+    ConInEnable();
+
+    if ((ir.Event.KeyEvent.wVirtualKeyCode == VK_ESCAPE) ||
+        ((ir.Event.KeyEvent.wVirtualKeyCode == _T('C')) &&
+         (ir.Event.KeyEvent.dwControlKeyState & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED))))
+        return PROMPT_BREAK;
+
+    return PROMPT_YES;
 #endif
 }