1 /*
2 * Y.C - Y external command.
3 *
4 * clone from 4nt y command
5 *
6 * 02 Oct 1999 (Paolo Pantaleo)
7 * started
8 *
9 *
10 */
11
12 #define BUFF_SIZE 4096
13
14 #include <windows.h>
15 #include <stdio.h>
16 #include <tchar.h>
17
18 static
ConErrPrintf(LPTSTR szFormat,...)19 VOID ConErrPrintf (LPTSTR szFormat, ...)
20 {
21 DWORD dwWritten;
22 TCHAR szOut[BUFF_SIZE];
23 va_list arg_ptr;
24
25 va_start (arg_ptr, szFormat);
26 _vstprintf (szOut, szFormat, arg_ptr);
27 va_end (arg_ptr);
28
29 WriteFile (GetStdHandle (STD_ERROR_HANDLE), szOut, _tcslen(szOut), &dwWritten, NULL);
30 }
31
32
33 static
ConOutPuts(LPTSTR szText)34 VOID ConOutPuts (LPTSTR szText)
35 {
36 DWORD dwWritten;
37
38 WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), szText, _tcslen(szText), &dwWritten, NULL);
39 WriteFile (GetStdHandle (STD_OUTPUT_HANDLE), "\n", 1, &dwWritten, NULL);
40 }
41
42
main(int argc,char ** argv)43 int main (int argc, char **argv)
44 {
45 INT i;
46 HANDLE hFind;
47 HANDLE hConsoleIn, hConsoleOut, hFile;
48 char buff[BUFF_SIZE];
49 DWORD dwRead,dwWritten;
50 BOOL bRet;
51 WIN32_FIND_DATA FindData;
52
53 hConsoleIn = GetStdHandle(STD_INPUT_HANDLE);
54 hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
55
56 if (argc == 2 && _tcsncmp (argv[1], _T("/?"), 2) == 0)
57 {
58 ConOutPuts(_T("copy stdin to stdout and then files to stdout\n"
59 "\n"
60 "Y [files]\n"
61 "\n"
62 "files files to copy to stdout"));
63 return 0;
64 }
65
66 /*stdin to stdout*/
67 do
68 {
69 bRet = ReadFile(hConsoleIn,buff,sizeof(buff),&dwRead,NULL);
70
71 if (dwRead>0 && bRet)
72 WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL);
73
74 } while(dwRead>0 && bRet);
75
76
77 /*files to stdout*/
78 Sleep(0);
79
80 for (i = 1; i < argc; i++)
81 {
82 hFind=FindFirstFile(argv[i],&FindData);
83
84 if (hFind==INVALID_HANDLE_VALUE)
85 {
86 ConErrPrintf("File not found - %s\n",argv[i]);
87 continue;
88 }
89
90 do
91 {
92 hFile = CreateFile(FindData.cFileName,
93 GENERIC_READ,
94 FILE_SHARE_READ,NULL,
95 OPEN_EXISTING,
96 FILE_ATTRIBUTE_NORMAL,NULL);
97
98 if(hFile == INVALID_HANDLE_VALUE)
99 {
100 ConErrPrintf("File not found - %s\n",FindData.cFileName);
101 continue;
102 }
103
104 do
105 {
106 bRet = ReadFile(hFile,buff,sizeof(buff),&dwRead,NULL);
107
108 if (dwRead>0 && bRet)
109 WriteFile(hConsoleOut,buff,dwRead,&dwWritten,NULL);
110
111 } while(dwRead>0 && bRet);
112
113 CloseHandle(hFile);
114
115 }
116 while(FindNextFile(hFind,&FindData));
117
118 FindClose(hFind);
119 }
120
121 return 0;
122 }
123