home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / spmio10.zip / gcc2 / pmio / pmstdio.cc < prev    next >
C/C++ Source or Header  |  1994-06-18  |  883b  |  46 lines

  1. #include <pmio.h>
  2. #include <stdio.h>
  3.  
  4. static int pmio_stdwrite (void *, char *buf, int len)
  5. {
  6.   put_std (len, buf);
  7.   return len;
  8. }
  9.  
  10. // Note: Backspace doesn't work correctly.
  11. static int pmio_stdread (void *, char *buf, int len)
  12. {
  13.   if (len == 0)
  14.     return 0;
  15.   buf[0] = getch ();
  16.   while (buf[0] == 0)
  17.     {
  18.       (void) getch ();
  19.       buf[0] = getch ();
  20.     }
  21.   if (buf[0] == '\r')
  22.     buf[0] = '\n';
  23.   put_std (1, &buf[0]);
  24.   return 1;
  25. }
  26.  
  27. void start_pmstdio ()
  28. {
  29.   FILE *f;
  30.   f = fwopen (0, pmio_stdwrite);
  31.   if (!f)
  32.     return; // This should never happen...
  33.   setvbuf (f, 0, _IONBF, 0);
  34.   fclose (stdout);
  35.   fclose (stderr);
  36.   *stdout = *f;  // Evil! evil! evil!
  37.   *stderr = *f;
  38.   
  39.   f = fropen (0, pmio_stdread);
  40.   if (!f)
  41.     return; // This should never happen...
  42.   setvbuf (f, 0, _IONBF, 0);
  43.   fclose (stdin);
  44.   *stdin = *f;
  45. }
  46.