Subversion Repositories Kolibri OS

Rev

Rev 4921 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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