Use FileGetString instead of ReadFile, because ReadFile doesn't return a null termina...
[reactos.git] / reactos / subsys / system / cmd / type.c
index a187f79..877bf44 100644 (file)
  *        Added multiple file support (copied from y.c)
  *
  *    30-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
- *        Remove all hardcode string to En.rc  
+ *        Remove all hardcode string to En.rc
  */
 
-#include "precomp.h"
+#include <precomp.h>
 #include "resource.h"
 
 #ifdef INCLUDE_CMD_TYPE
@@ -37,19 +37,18 @@ INT cmd_type (LPTSTR cmd, LPTSTR param)
        TCHAR szMsg[RC_STRING_MAX_SIZE];
        TCHAR  buff[256];
        HANDLE hFile, hConsoleOut;
-       DWORD  dwRead;
-       DWORD  dwWritten;
        BOOL   bRet;
        INT    argc,i;
        LPTSTR *argv;
        LPTSTR errmsg;
+       BOOL bPaging = FALSE;
+       BOOL bFirstTime = TRUE;
 
        hConsoleOut=GetStdHandle (STD_OUTPUT_HANDLE);
 
        if (!_tcsncmp (param, _T("/?"), 2))
        {
-               LoadString(GetModuleHandle(NULL), STRING_TYPE_HELP1, szMsg, RC_STRING_MAX_SIZE);
-               ConOutPuts(szMsg);
+               ConOutResPaging(TRUE,STRING_TYPE_HELP1);
                return 0;
        }
 
@@ -60,16 +59,26 @@ INT cmd_type (LPTSTR cmd, LPTSTR param)
        }
 
        argv = split (param, &argc, TRUE);
-       
+
+       for(i = 0; i < argc; i++)
+       {
+               if(*argv[i] == _T('/') && _tcslen(argv[i]) >= 2 && _totupper(argv[i][1]) == _T('P'))
+               {
+                       bPaging = TRUE;
+               }
+       }
+
        for (i = 0; i < argc; i++)
        {
-               if (_T('/') == argv[i][0])
+               if (_T('/') == argv[i][0] && _totupper(argv[i][1]) != _T('P'))
                {
-                       LoadString(GetModuleHandle(NULL), STRING_TYPE_ERROR1, szMsg, RC_STRING_MAX_SIZE);
+                       LoadString(CMD_ModuleHandle, STRING_TYPE_ERROR1, szMsg, RC_STRING_MAX_SIZE);
                        ConErrPrintf(szMsg, argv[i] + 1);
                        continue;
                }
 
+       nErrorLevel = 0;
+
                hFile = CreateFile(argv[i],
                        GENERIC_READ,
                        FILE_SHARE_READ,NULL,
@@ -89,17 +98,26 @@ INT cmd_type (LPTSTR cmd, LPTSTR param)
                                       NULL);
                        ConErrPrintf (_T("%s - %s"), argv[i], errmsg);
                        LocalFree (errmsg);
+      nErrorLevel = 1;
                        continue;
                }
-
+               
                do
                {
-                       bRet = ReadFile(hFile,buff,sizeof(buff),&dwRead,NULL);
-
-                       if (dwRead>0 && bRet)
-                               WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL);
-                       
-               } while(dwRead>0 && bRet);
+                        bRet = FileGetString (hFile, buff, sizeof(buff) / sizeof(TCHAR));
+                       if(bPaging)
+                       {
+                               if(bRet)
+                                       ConOutPrintfPaging(bFirstTime, buff);
+                       }
+                       else
+                       {                               
+                               if(bRet)
+                                       ConOutPrintf(buff);
+                       }
+                       bFirstTime = FALSE;
+
+               } while(bRet);
 
                CloseHandle(hFile);
        }