Subversion Repositories Kolibri OS

Rev

Rev 4921 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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