Use FileGetString instead of ReadFile, because ReadFile doesn't return a null termina...
[reactos.git] / reactos / subsys / system / cmd / type.c
index e5cac81..877bf44 100644 (file)
  *
  *    19-Jan-1999 (Paolo Pantaleo <paolopan@freemail.it>)
  *        Added multiple file support (copied from y.c)
+ *
+ *    30-Apr-2005 (Magnus Olsen) <magnus@greatlord.com>)
+ *        Remove all hardcode string to En.rc
  */
 
-#include "precomp.h"
+#include <precomp.h>
+#include "resource.h"
 
 #ifdef INCLUDE_CMD_TYPE
 
 
 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))
        {
-               ConOutPuts (_T("Displays the contents of text files.\n\n"
-                                          "TYPE [drive:][path]filename"));
+               ConOutResPaging(TRUE,STRING_TYPE_HELP1);
                return 0;
        }
 
@@ -55,14 +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'))
                {
-                       ConErrPrintf(_T("Invalid option \"%S\"\n"), argv[i] + 1);
+                       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,
@@ -82,21 +98,30 @@ 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);
+                        bRet = FileGetString (hFile, buff, sizeof(buff) / sizeof(TCHAR));
+                       if(bPaging)
+                       {
+                               if(bRet)
+                                       ConOutPrintfPaging(bFirstTime, buff);
+                       }
+                       else
+                       {                               
+                               if(bRet)
+                                       ConOutPrintf(buff);
+                       }
+                       bFirstTime = FALSE;
 
-                       if (dwRead>0 && bRet)
-                               WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL);
-                       
-               } while(dwRead>0 && bRet);
+               } while(bRet);
 
                CloseHandle(hFile);
-       }       
-       
+       }
+
        freep (argv);
 
        return 0;