PATCH: Fix support for wide consoles in vt.c and include/linux/selection.h
Subsystems (2)
Hi.
In implementing a 'nice' display for Software Suspend, some users with wide VTs reported problems with distortion. These changes from signed to unsigned int/char fixed the issue and have been tested for around a year (guesstimate).
The only other user of getconsxy is vc_screen.c. It might benefit from matching changes, although the users who reported the problem to me said nothing about other issues with their displays, so far as I recall.
To actually use the functions from Suspend, the functions also had to be made non-static. Of course I could make this into 2 patches if desired.
Regards,
Nigel
drivers/char/vt.c +10 -10
@@ -149,13 +149,13 @@static void vc_init (unsigned int console,unsigned int rows,unsigned int cols,int do_clear);static void blank_screen (unsigned long dummy); -static void gotoxy (int currcons,int new_x,int new_y); +void gotoxy (int currcons,unsigned int new_x,unsigned int new_y);static void save_cur (int currcons); -static void reset_terminal (int currcons,int do_clear); +void reset_terminal (int currcons,int do_clear);static void con_flush_chars (struct tty_struct *tty);static void set_vesa_blanking (unsigned long arg);static void set_cursor (int currcons); -static void hide_cursor (int currcons); +void hide_cursor (int currcons);static void unblank_screen_t (unsigned long dummy);static void console_callback (void *ignored);
@@ -530,7 +530,7 @@ sw->con_putc (vc_cons[currcons].d, i, y, x); } -static void hide_cursor (int currcons) +void hide_cursor (int currcons) {if (currcons == sel_cons)clear_selection ();
@@ -859,9 +859,9 @@* might also be negative. If the given position is out of * bounds, the cursor is placed at the nearest margin. */ -static void gotoxy (int currcons,int new_x,int new_y) +void gotoxy (int currcons,unsigned int new_x,unsigned int new_y) { -int min_y, max_y; +unsigned int min_y, max_y;if (new_x <0 ) x =0 ;
@@ -888,7 +888,7 @@ }/* for absolute user moves, when decom is set */ -static void gotoxay (int currcons,int new_x,int new_y) +static void gotoxay (int currcons,unsigned int new_x,unsigned int new_y) {gotoxy (currcons, new_x, decom ? (top+new_y) : new_y); }
@@ -1403,7 +1403,7 @@ ESpalette };/* console_sem is held (except via vc_init()) */ -static void reset_terminal (int currcons,int do_clear) +void reset_terminal (int currcons,int do_clear) { top =0 ; bottom = video_num_lines;
@@ -2996,13 +2996,13 @@return screenpos (currcons,2 * w_offset, viewed); } -void getconsxy (int currcons,char *p) +void getconsxy (int currcons,unsigned char *p) { p[0 ] = x; p[1 ] = y; } -void putconsxy (int currcons,char *p) +void putconsxy (int currcons,unsigned char *p) {gotoxy (currcons, p[0 ], p[1 ]);set_cursor (currcons);
include/linux/selection.h +2 -2
@@ -36,8 +36,8 @@extern void complement_pos (int currcons,int offset);extern void invert_screen (int currcons,int offset,int count,int shift); -extern void getconsxy (int currcons,char *p); -extern void putconsxy (int currcons,char *p); +extern void getconsxy (int currcons,unsigned char *p); +extern void putconsxy (int currcons,unsigned char *p);extern u16 vcs_scr_readw (int currcons,const u16 *org);extern void vcs_scr_writew (int currcons,u16 val,u16 *org);
Signature · 2 lines
My work on Software Suspend is graciously brought to you by LinuxFund.org.
Quoted 7 lines · Nigel Cunningham
Hi.
In implementing a 'nice' display for Software Suspend, some users with wide VTs reported problems with distortion. These changes from signed to unsigned int/char fixed the issue and have been tested for around a year (guesstimate).
Quoted 6 lines
The only other user of getconsxy is
vc_screen.c. It might benefit from matching changes, although the users who reported the problem to me said nothing about other issues with their displays, so far as I recall.To actually use the functions from Suspend, the functions also had to be made non-static. Of course I could make this into 2 patches if desired.
Also make sure you grab the console semaphore when doing those things, or recent 2.6's (at least -mm) will probably bark on you :)
Ben.