Rev 1492 | Rev 1500 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1492 | Rev 1498 | ||
---|---|---|---|
Line 38... | Line 38... | ||
38 | #include "sysio.h" |
38 | #include "sysio.h" |
39 | 39 | ||
40 | /* Allow only 1 connection */ |
40 | /* Allow only 1 connection */ |
41 | static int client_connected = 0; |
41 | static int client_connected = 0; |
42 | 42 | ||
43 | #define CLRSCR "\033[2J" |
- | |
44 | - | ||
45 | static void sysput(char c) |
43 | static void sysput(char c) |
46 | { |
44 | { |
47 | __SYSCALL3(SYS_IO, 1, (sysarg_t)&c, (sysarg_t) 1); |
45 | __SYSCALL3(SYS_IO, 1, (sysarg_t)&c, (sysarg_t) 1); |
48 | } |
46 | } |
49 | 47 | ||
50 | static void sysputs(char *s) |
48 | static void sysputs(char *s) |
51 | { |
49 | { |
52 | __SYSCALL3(SYS_IO, 1, (sysarg_t)s, strlen(s)); |
50 | __SYSCALL3(SYS_IO, 1, (sysarg_t)s, strlen(s)); |
53 | } |
51 | } |
54 | 52 | ||
- | 53 | /** Send clearscreen sequence to console */ |
|
- | 54 | static void clrscr(void) |
|
- | 55 | { |
|
- | 56 | sysputs("\033[2J"); |
|
- | 57 | } |
|
- | 58 | ||
- | 59 | /** Send ansi sequence to console to change cursor position */ |
|
55 | static void curs_goto(unsigned int row, unsigned int col) |
60 | static void curs_goto(unsigned int row, unsigned int col) |
56 | { |
61 | { |
57 | char control[20]; |
62 | char control[20]; |
58 | 63 | ||
59 | if (row > 100 || col > 100) |
64 | if (row > 200 || col > 200) |
60 | return; |
65 | return; |
61 | 66 | ||
62 | snprintf(control, 20, "\033[%d;%df",row, col); |
67 | snprintf(control, 20, "\033[%d;%df",row, col); |
63 | sysputs(control); |
68 | sysputs(control); |
64 | } |
69 | } |
65 | 70 | ||
- | 71 | /** ANSI terminal emulation main thread */ |
|
66 | static void sysio_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
72 | static void sysio_client_connection(ipc_callid_t iid, ipc_call_t *icall) |
67 | { |
73 | { |
68 | int retval; |
74 | int retval; |
69 | ipc_callid_t callid; |
75 | ipc_callid_t callid; |
70 | ipc_call_t call; |
76 | ipc_call_t call; |
Line 104... | Line 110... | ||
104 | break; |
110 | break; |
105 | case FB_GET_CSIZE: |
111 | case FB_GET_CSIZE: |
106 | ipc_answer_fast(callid, 0, 25, 80); |
112 | ipc_answer_fast(callid, 0, 25, 80); |
107 | continue; |
113 | continue; |
108 | case FB_CLEAR: |
114 | case FB_CLEAR: |
109 | sysputs(CLRSCR); |
115 | clrscr(); |
110 | retval = 0; |
116 | retval = 0; |
111 | break; |
117 | break; |
112 | default: |
118 | default: |
113 | retval = ENOENT; |
119 | retval = ENOENT; |
114 | } |
120 | } |
115 | ipc_answer_fast(callid,retval,0,0); |
121 | ipc_answer_fast(callid,retval,0,0); |
116 | } |
122 | } |
117 | } |
123 | } |
118 | 124 | ||
- | 125 | /** ANSI terminal emulation initialization */ |
|
119 | void sysio_init(void) |
126 | void sysio_init(void) |
120 | { |
127 | { |
121 | async_set_client_connection(sysio_client_connection); |
128 | async_set_client_connection(sysio_client_connection); |
122 | sysputs(CLRSCR); |
129 | clrscr(); |
123 | curs_goto(0,0); |
130 | curs_goto(0,0); |
124 | } |
131 | } |