cmdutils: a program a directory.
[reactos.git] / rosapps / cmdutils / y / y.c
diff --git a/rosapps/cmdutils/y/y.c b/rosapps/cmdutils/y/y.c
new file mode 100644 (file)
index 0000000..c048d85
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Y.C - Y external command.
+ *
+ * clone from 4nt y command
+ *
+ * 02 Oct 1999 (Paolo Pantaleo)
+ *     started
+ *
+ *
+ */
+
+#define BUFF_SIZE 4096
+
+#include <windows.h>
+#include <stdio.h>
+#include <tchar.h>
+
+static
+VOID ConErrPrintf (LPTSTR szFormat, ...)
+{
+       DWORD dwWritten;
+       TCHAR szOut[BUFF_SIZE];
+       va_list arg_ptr;
+
+       va_start (arg_ptr, szFormat);
+       _vstprintf (szOut, szFormat, arg_ptr);
+       va_end (arg_ptr);
+
+       WriteFile (GetStdHandle (STD_ERROR_HANDLE), szOut, _tcslen(szOut), &dwWritten, NULL);
+}
+
+
+static
+VOID ConOutPuts (LPTSTR szText)
+{
+       DWORD dwWritten;
+
+       WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), szText, _tcslen(szText), &dwWritten, NULL);
+       WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), "\n", 1, &dwWritten, NULL);
+}
+
+
+int main (int argc, char **argv)
+{
+       INT i;
+       HANDLE hFind;
+       HANDLE hConsoleIn, hConsoleOut, hFile;
+       char buff[BUFF_SIZE];
+       DWORD dwRead,dwWritten;
+       BOOL bRet;
+       WIN32_FIND_DATA FindData;
+
+       hConsoleIn = GetStdHandle(STD_INPUT_HANDLE);
+       hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
+
+       if (_tcsncmp (argv[1], _T("/?"), 2) == 0)
+       {
+               ConOutPuts(_T("copy stdin to stdout and then files to stdout\n"
+                             "\n"
+                             "Y [files]\n"
+                             "\n"
+                             "files         files to copy to stdout"));
+               return 0;
+       }
+
+       /*stdin to stdout*/
+       do
+       {
+               bRet = ReadFile(hConsoleIn,buff,sizeof(buff),&dwRead,NULL);
+
+               if (dwRead>0 && bRet)
+                       WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL);
+
+       } while(dwRead>0 && bRet);
+
+
+       /*files to stdout*/
+       Sleep(0);
+
+       for (i = 1; i < argc; i++)
+       {
+               hFind=FindFirstFile(argv[i],&FindData);
+
+               if (hFind==INVALID_HANDLE_VALUE)
+               {
+                       ConErrPrintf("File not found - %s\n",argv[i]);
+                       continue;
+               }
+
+               do
+               {
+                       hFile = CreateFile(FindData.cFileName,
+                               GENERIC_READ,
+                               FILE_SHARE_READ,NULL,
+                               OPEN_EXISTING,
+                               FILE_ATTRIBUTE_NORMAL,NULL);
+
+                       if(hFile == INVALID_HANDLE_VALUE)
+                       {
+                               ConErrPrintf("File not found - %s\n",FindData.cFileName);
+                               continue;
+                       }
+
+                       do
+                       {
+                               bRet = ReadFile(hFile,buff,sizeof(buff),&dwRead,NULL);
+
+                               if (dwRead>0 && bRet)
+                                       WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL);
+
+                       } while(dwRead>0 && bRet);
+
+                       CloseHandle(hFile);
+
+               }
+               while(FindNextFile(hFind,&FindData));
+
+               FindClose(hFile);
+       }
+
+       return 0;
+}