Kmsg debug routine
[akaros.git] / kern / arch / sparc / console.c
1 #include <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         frontend_syscall(0,APPSERVER_SYSCALL_write,1,PADDR((int32_t)buf),len,0,0);
15 }
16
17 // Low-level console I/O
18
19 inline void
20 cons_putc(int c)
21 {
22         if(c == '\b' || c == 0x7F)
23         {
24                 char buf[3] = {'\b', ' ', '\b'};
25                 cputbuf(buf,3);
26         }
27         else
28         {
29                 char ch = c;
30                 cputbuf(&ch,1);
31         }
32 }
33
34 void
35 cputchar(int c)
36 {
37         char ch = c;
38         cputbuf(&ch,1);
39 }
40
41 int
42 cons_getc()
43 {
44         char ch;
45         uintptr_t paddr = PADDR((uintptr_t)&ch);
46         int32_t ret = frontend_syscall(0,APPSERVER_SYSCALL_read,0,paddr,1,0,0);
47         if(ch == 0x7F)
48                 ch = '\b';
49         return ret <= 0 ? 0 : ch;
50         //int ret = sys_nbgetch();
51         //return ret < 0 ? 0 : ret;
52 }
53
54 int
55 getchar(void)
56 {
57         int c;
58
59         while ((c = cons_getc()) == 0)
60                 /* do nothing */;
61         return c;
62 }
63
64 int
65 iscons(int fdnum)
66 {
67         // used by readline
68         return 1;
69 }