Added errno support
[akaros.git] / kern / arch / sparc / console.c
1 #include <arch/frontend.h>
2 #include <pmap.h>
3
4 void
5 cons_init(void)
6 {
7 }
8
9 // `High'-level console I/O.  Used by readline and cprintf.
10
11 void
12 cputbuf(const char*COUNT(len) buf, int len)
13 {
14         int32_t errno;
15         frontend_syscall(0,RAMP_SYSCALL_write,1,PADDR((int32_t)buf),len,&errno);
16 }
17
18 // Low-level console I/O
19
20 inline void
21 cons_putc(int c)
22 {
23         if(c == '\b' || c == 0x7F)
24         {
25                 char buf[3] = {'\b', ' ', '\b'};
26                 cputbuf(buf,3);
27         }
28         else
29         {
30                 char ch = c;
31                 cputbuf(&ch,1);
32         }
33 }
34
35 void
36 cputchar(int c)
37 {
38         char ch = c;
39         cputbuf(&ch,1);
40 }
41
42 int
43 cons_getc()
44 {
45         char ch;
46         int32_t errno;
47         int32_t ret = frontend_syscall(0,RAMP_SYSCALL_read,0,PADDR((int32_t)&ch),1,&errno);
48         if(ch == 0x7F)
49                 ch = '\b';
50         return ret <= 0 ? 0 : ch;
51         //int ret = sys_nbgetch();
52         //return ret < 0 ? 0 : ret;
53 }
54
55 int
56 getchar(void)
57 {
58         int c;
59
60         while ((c = cons_getc()) == 0)
61                 /* do nothing */;
62         return c;
63 }
64
65 int
66 iscons(int fdnum)
67 {
68         // used by readline
69         return 1;
70 }