home *** CD-ROM | disk | FTP | other *** search
/ Programming Win32 Under the API / ProgrammingWin32UnderTheApiPatVillani.iso / Chapter7 / 7-3 / reverse.c < prev   
C/C++ Source or Header  |  2000-02-24  |  1KB  |  63 lines

  1. //
  2. // Copyright (c) 2000
  3. // Pasquale J. Villani
  4. // All Rights reserved
  5. //
  6. // This is our child process.  It reads data from standard input,
  7. // flips characters in the buffer from upper case to lower case and vice versa,
  8. // then write the buffer out.
  9. //
  10.  
  11. #include <windows.h>
  12. #include <ctype.h>
  13.  
  14. #define BUFSIZE 4096  
  15.  
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.     CHAR chBuf[BUFSIZE];
  20.     DWORD dwRead, dwWritten, dwIdx;
  21.     HANDLE hStdin, hStdout; BOOL fSuccess;
  22.  
  23.     // First, get handles to standard input and standard output so we
  24.     // can use them later.
  25.     hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  26.     hStdin = GetStdHandle(STD_INPUT_HANDLE);
  27.     if ((hStdout == INVALID_HANDLE_VALUE) ||
  28.         (hStdin == INVALID_HANDLE_VALUE))
  29.     {
  30.         ExitProcess(1);
  31.     }
  32.  
  33.     // Loop until either there's no input or a failure on the output,
  34.     // converting characters in between.
  35.     for (;;)
  36.     {
  37.         // Read from standard input. 
  38.         fSuccess = ReadFile(hStdin, chBuf, BUFSIZE, &dwRead, NULL);
  39.         if (!fSuccess || dwRead == 0)
  40.         {
  41.             break;
  42.         }
  43.  
  44.         // Flip upper case to lower case and vice versa
  45.         for( dwIdx = 0; dwIdx < dwRead; dwIdx++ )
  46.         {
  47.             if(islower(chBuf[dwIdx]))
  48.                 chBuf[dwIdx] = _toupper(chBuf[dwIdx]);
  49.             else if(isupper(chBuf[dwIdx]))
  50.                 chBuf[dwIdx] = _tolower(chBuf[dwIdx]);
  51.         }
  52.  
  53.         fSuccess = WriteFile(hStdout, chBuf, dwRead, &dwWritten, NULL);
  54.         if (!fSuccess)
  55.         {
  56.             break;
  57.         }
  58.     }
  59. }
  60.  
  61.  
  62.  
  63.