Rev 1575 | Rev 1592 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1575 | Rev 1578 | ||
---|---|---|---|
Line 203... | Line 203... | ||
203 | static void change_console(int newcons) |
203 | static void change_console(int newcons) |
204 | { |
204 | { |
205 | connection_t *conn; |
205 | connection_t *conn; |
206 | static int console_pixmap = -1; |
206 | static int console_pixmap = -1; |
207 | int i, j; |
207 | int i, j; |
- | 208 | keyfield_t *field; |
|
- | 209 | style_t *style; |
|
208 | char c; |
210 | char c; |
209 | 211 | ||
210 | if (newcons == active_console) |
212 | if (newcons == active_console) |
211 | return; |
213 | return; |
212 | 214 | ||
Line 239... | Line 241... | ||
239 | gcons_change_console(newcons); |
241 | gcons_change_console(newcons); |
240 | conn = &connections[active_console]; |
242 | conn = &connections[active_console]; |
241 | 243 | ||
242 | set_style(&conn->screenbuffer.style); |
244 | set_style(&conn->screenbuffer.style); |
243 | curs_goto(conn->screenbuffer.position_y, conn->screenbuffer.position_x); |
245 | curs_goto(conn->screenbuffer.position_y, conn->screenbuffer.position_x); |
- | 246 | curs_visibility(0); |
|
- | 247 | ||
244 | if (interbuffer) { |
248 | if (interbuffer) { |
245 | for (i = 0; i < conn->screenbuffer.size_x; i++) |
249 | for (i = 0; i < conn->screenbuffer.size_x; i++) |
246 | for (j = 0; j < conn->screenbuffer.size_y; j++) |
250 | for (j = 0; j < conn->screenbuffer.size_y; j++) |
247 | interbuffer[i + j*conn->screenbuffer.size_x] = *get_field_at(&(conn->screenbuffer),i, j); |
251 | interbuffer[i + j*conn->screenbuffer.size_x] = *get_field_at(&(conn->screenbuffer),i, j); |
248 | /* This call can preempt, but we are already at the end */ |
252 | /* This call can preempt, but we are already at the end */ |
249 | sync_send_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, NULL); |
253 | j = sync_send_2(fb_info.phone, FB_DRAW_TEXT_DATA, 0, 0, NULL, NULL); |
- | 254 | }; |
|
- | 255 | ||
- | 256 | if ((!interbuffer) || (j != 0)){ |
|
250 | curs_visibility(conn->screenbuffer.is_cursor_visible); |
257 | set_style(&conn->screenbuffer.style); |
251 | } else { |
- | |
252 | clrscr(); |
258 | clrscr(); |
- | 259 | style = &conn->screenbuffer.style; |
|
253 | 260 | ||
254 | for (i = 0; i < conn->screenbuffer.size_x; i++) |
261 | for (j = 0; j < conn->screenbuffer.size_y; j++) |
255 | for (j = 0; j < conn->screenbuffer.size_y; j++) { |
262 | for (i = 0; i < conn->screenbuffer.size_x; i++) { |
256 | c = get_field_at(&(conn->screenbuffer),i, j)->character; |
263 | field = get_field_at(&(conn->screenbuffer),i, j); |
- | 264 | if (!style_same(*style, field->style)) |
|
- | 265 | set_style(&field->style); |
|
257 | if (c && c != ' ') |
266 | style = &field->style; |
- | 267 | if ((field->character == ' ') && (style_same(field->style, conn->screenbuffer.style))) |
|
- | 268 | continue; |
|
- | 269 | ||
258 | prtchr(c, j, i); |
270 | prtchr(field->character, j, i); |
259 | } |
271 | } |
260 | - | ||
261 | curs_visibility(conn->screenbuffer.is_cursor_visible); |
- | |
262 | } |
272 | } |
- | 273 | ||
- | 274 | curs_visibility(conn->screenbuffer.is_cursor_visible); |
|
263 | } |
275 | } |
264 | 276 | ||
265 | /** Handler for keyboard */ |
277 | /** Handler for keyboard */ |
266 | static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall) |
278 | static void keyboard_events(ipc_callid_t iid, ipc_call_t *icall) |
267 | { |
279 | { |