}
BOOL ConsolePrompt(LPCTSTR pPromptMsg, LPTSTR pResponse, DWORD MaxTchar, BOOL Echo)
/* ΠΡΠ²Π΅ΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ Π½Π΅Π³ΠΎ ΠΎΡΠ²Π΅Ρ. */
{
HANDLE hStdIn, hStdOut;
DWORD TcharIn, EchoFlag;
BOOL Success;
hStdIn = CreateFile(_T("CONIN$"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
hStdOut = CreateFile(_T("CONOUT$"), GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
EchoFlag = Echo ? ENABLE_ECHO_INPUT : 0;
Success = SetConsoleMode(hStdIn, ENABLE_LINE_INPUT | EchoFlag | ENABLE_PROCESSED_INPUT) &&
SetConsoleMode (hStdOut, ENABLE_WRAP_AT_EOL_OUTPUT | ENABLE_PROCESSED_OUTPUT) &&
PrintStrings (hStdOut, pPromptMsg, NULL) &&
ReadConsole (hStdIn, pResponse, MaxTchar, &TcharIn, NULL);
if (Success) pResponse [TcharIn β 2] = '\0';
CloseHandle (hStdIn);
CloseHandle (hStdOut);
return Success;
}
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ»Π΅Π²ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Success, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ»ΡΠΆΠΈΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΡΠΏΠ΅ΡΠ½ΠΎΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Ρ Π²ΡΠ³ΠΎΠ΄ΠΎΠΉ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ANSI Π‘ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠΎΠ΅ "ΡΠΎΠΊΡΠ°ΡΠ΅Π½Π½ΠΎΠ΅" Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ; ΠΏΠΎΡΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ ΡΠ°ΡΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠ»Π΅Π²Π° ΠΎΡ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ "ΠΈ" (&&), Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ FALSE, ΠΎΡΡΠ°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠΏΡΠ°Π²Π° ΠΎΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅Π³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΡΠ΅Π»ΠΎΠΌ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ. ΠΠ°Π½Π½ΡΠΉ ΡΡΠΈΠ»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ΅ΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠΎΠΉΠ½ΡΡ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², Π½Π΅ Π·Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΎΠ². ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ GetLastError. Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ Π² Windows Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠΎΡΡΡΠ΅Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ.
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π½Π΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ; ΠΈΡ Π²ΡΠ²ΠΎΠ΄, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π² Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ WriteConsole Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. Π ΡΠ²ΡΠ·ΠΈ Ρ ΡΡΠΈΠΌ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΡΠ²ΠΎΠΉΡΡΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΌ ΡΠ΅ΠΆΠΈΠΌΠΎΠΌ Π»ΠΈΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π² Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½ Ρ ΠΊΠΎΠ½ΡΠΎΠ»ΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠ½ΠΊΡΠΈΡ ReadConsole Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ, ΡΡΠΎ Π΄ΠΈΠΊΡΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π²ΡΡΠ°Π²ΠΊΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½ΡΠ»Π΅Π²ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΏΠΎΡΠ»Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΊΠ°ΡΠ΅ΡΠΊΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΌΠ΅ΡΡΠ°Ρ .
ΠΡΠΈΠΌΠ΅Ρ: ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 1.2 Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΡΡ ΡΠ°ΠΌΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΈΠΏΠ° DWORD Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ GetLastError. ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅ΡΠ° ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ UNIX errno, Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π³Π»Π°Π²Π° 7), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΎΠ±Π»Π°ΡΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
Π€ΡΠ½ΠΊΡΠΈΡ FormatMessage ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ ΡΠΎΠ±ΠΎΠΉ ΡΡΠ°Π·Ρ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΎΠΌ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ², ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 2.2 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ReportError, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ Π²Ρ ΠΎΠ΄ΡΡΠ΅ΠΉ Π² ΡΠΎΡΡΠ°Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π‘ ΡΡΠ½ΠΊΡΠΈΠΈ perror, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π² [40] ΡΡΠ½ΠΊΡΠΈΡΠΌ err_sys ΠΈ err_ret. Π€ΡΠ½ΠΊΡΠΈΡ ReportError ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΈ Π»ΠΈΠ±ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π²ΡΡ ΠΎΠ΄Π° ΠΏΠΎ ΠΎΡΠΈΠ±ΠΊΠ΅, Π»ΠΈΠ±ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΎΠ±ΡΡΠ½ΡΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π’ΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ .
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ FormatMessage. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ GetLastError, a Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ»Π°Π³. Π‘Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π±ΡΡΠ΅ΡΠ΅, Π²ΡΠ΄Π΅Π»ΡΠ΅ΠΌΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π°Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅. ΠΠΌΠ΅ΡΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π―Π·ΡΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ ΠΊΠ°ΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΡΡΠ½ΠΊΡΠΈΡ Format-Message Π΄Π°Π»Π΅Π΅ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅ Π½Π΅ Π΄Π°Π΅ΡΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ ReportError ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ, ΠΈ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ . Π Π³Π»Π°Π²Π΅ 4 ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 2.2 Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» EvryThng.h. ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΡΠ°ΠΌΠΎΠ³ΠΎ Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΡΠ°ΠΉΠ»Ρ <windows.h>, Envirmnt.h ΠΈ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°Π½Ρ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 2.1. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² Π½Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ PrintMsg, PrintStrings ΠΈ ReportError. ΠΠΎ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», Π»ΠΈΡΡΠΈΠ½Π³ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ HeapFree, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ ΠΏΠΎΡΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ± ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 5.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.2. Π€ΡΠ½ΠΊΡΠΈΡ Report Error, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ²#include "EvryThng.h"
VOID ReportError(LPCTSTR UserMessage, DWORD ExitCode, BOOL PrintErrorMsg)
/* Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ . */
{
DWORD eMsgLen, LastErr = GetLastError();
LPTSTR lpvSysMsg;
HANDLE hStdErr = GetStdHandle(STD_ERROR_HANDLE);
PrintMsg(hStdErr, UserMessage);
if (PrintErrorMsg) {
eMsgLen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, LastErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpvSysMsg, 0, NULL);
PrintStrings (hStdErr, _T("\n"), lpvSysMsg, _T("\n"), NULL);
/* ΠΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π±Π»ΠΎΠΊ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. */
HeapFree(GetProcessHeap(), 0, lpvSysMsg); /* Π‘ΠΌ. Π³Π». 5. */
}
if (ExitCode > 0) ExitProcess (ExitCode);
else return;
}
ΠΡΠΈΠΌΠ΅Ρ: ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²ΡΠ²ΠΎΠ΄Π°
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ 2.3 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ² Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ»ΡΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ UNIX cat, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π±ΡΡΠ΅ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²Π²ΠΎΠ΄Π°, Π΅ΡΠ»ΠΈ ΡΠ°ΠΉΠ»Ρ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ) Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π²ΡΠ²ΠΎΠ΄Π°.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.3 Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ»Π½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΎΡΠΈΠ±ΠΎΠΊ. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΎΠΏΡΡΠ΅Π½Π° ΠΈΠ»ΠΈ ΡΠ²Π΅Π΄Π΅Π½Π° ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΡ, Π½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² Π·Π°Π²Π΅ΡΡΠ΅Π½Π½ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π½Π° Web-ΡΠ°ΠΉΡΠ΅. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Options (Π΅Π΅ Π»ΠΈΡΡΠΈΠ½Π³ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π), Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π² ΡΠΎΡΡΠ°Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π½Π° Web-ΡΠ°ΠΉΡΠ΅, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΌΠ°ΡΡΠΈΠ²Π° argv, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. Π€ΡΠ½ΠΊΡΠΈΡ Options Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ getopt, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π² UNIX.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 2.3. cat: Π²ΡΠ²ΠΎΠ΄ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²ΡΠ²ΠΎΠ΄Π°/* ΠΠ»Π°Π²Π° 2. cat. */
/* cat [ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ] [ΡΠ°ΠΉΠ»Ρ] ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ βs, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΊΠ°Π·Π°Π½Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. */
#include "EvryThng.h"
#define BUF_SIZE 0x200
static VOID CatFile(HANDLE, HANDLE);
int _tmain(int argc, LPTSTR argv[]) {
HANDLE hInFile, hStdIn = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
BOOL DashS;
int iArg, iFirstFile;
/* ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ DashS Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Π·Π°Π΄Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° "-s" Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. */
/* iFirstFile β ΠΈΠ½Π΄Π΅ΠΊΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² ΡΠΏΠΈΡΠΊΠ΅ argv[]. */
iFirstFile = Options(argc, argv, _T("s"), &DashS, NULL);
if (iFirstFile == argc) { /*ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΏΠΈΡΠΊΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².*/
/* ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π²Π²ΠΎΠ΄Π°. */
CatFile(hStdIn, hStdOut);
return 0;
}
/* ΠΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ°ΠΉΠ». */
for (iArg = iFirstFile; iArg < argc; iArg++) {
hInFile = CreateFile(argv [iArg], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hInFile == INVALID_HANDLE_VALUE && !DashS) ReportError (_T("Cat: ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΎΡΠΊΡΡΡΠΈΠΈ ΡΠ°ΠΉΠ»Π°"), 1, TRUE);
CatFile (hInFile, hStdOut);