Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1.  
  2. #include <stddef.h>
  3. #include "io.h"
  4.  
  5. extern __io_handle __io_tab[64];
  6.  
  7. static int fake_io(const char *path, const void *buff,
  8.            size_t offset, size_t count, size_t *done)
  9. {
  10.     *done = 0;
  11.     return 10;
  12. };
  13.  
  14. static int fake_io_read(const char *path, void *buff,
  15.            size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io")));
  16.  
  17. static int fake_io_write(const char *path, const void *buff,
  18.            size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io")));
  19.  
  20. static inline void debug_out(const char val)
  21. {
  22.     __asm__ __volatile__(
  23.     "int $0x40 \n\t"
  24.     ::"a"(63), "b"(1),"c"(val));
  25. }
  26.  
  27. static int debugwrite(const char *path, const void *buff,
  28.                  size_t offset, size_t count, size_t *writes)
  29. {
  30.     int ret = count;
  31.     const char *p = buff;
  32.  
  33.     while (count--)
  34.     {
  35.         debug_out(*p++);
  36.     };
  37.     *writes = ret;
  38.     return ret;
  39. };
  40.  
  41. void init_stdio()
  42. {
  43.     __io_handle *ioh;
  44.  
  45.     ioh = &__io_tab[__io_alloc()];
  46.     ioh->mode  = _READ|_ISTTY;
  47.     ioh->read  = &fake_io_read;
  48.     ioh->write = &fake_io_write;
  49.  
  50.     ioh = &__io_tab[__io_alloc()];
  51.     ioh->mode  = _WRITE|_ISTTY;
  52.     ioh->read  = &fake_io_read;
  53.     ioh->write = &debugwrite;
  54.  
  55.     ioh = &__io_tab[__io_alloc()];
  56.     ioh->mode  = _WRITE|_ISTTY;
  57.     ioh->read  = &fake_io_read;
  58.     ioh->write = &debugwrite;
  59.  
  60. }
  61.