2005-11-05 21:20:19

by Samuel Thibault

[permalink] [raw]
Subject: [PATCH] Set the vga cursor even when hidden

Hi,

Some visually impaired people use hardware devices which directly read
the vga screen. When newt for instance asks to hide the cursor for
better visual aspect, the kernel puts the vga cursor out of the screen,
so that the cursor position can't be read by the hardware device. This
is a great loss for such people.

Here is a patch which uses the same technique as CUR_NONE for hiding the
cursor while still moving it.

Mario, you should apply it to the speakup kernel for access floppies
asap. I'll submit a 2.4 patch too.

Signed-off-by: [email protected]

--- linux/drivers/video/console/vgacon.c.orig 2005-11-05 21:51:03.000000000 +0100
+++ linux/drivers/video/console/vgacon.c 2005-11-05 21:51:31.000000000 +0100
@@ -448,7 +448,8 @@ static void vgacon_cursor(struct vc_data
vgacon_scrolldelta(c, 0);
switch (mode) {
case CM_ERASE:
- write_vga(14, (vga_vram_end - vga_vram_base - 1) / 2);
+ write_vga(14, (c->vc_pos - vga_vram_base) / 2);
+ vgacon_set_cursor_size(c->vc_x, 31, 30);
break;

case CM_MOVE:

Regards,
Samuel Thibault


2005-11-05 21:26:18

by Samuel Thibault

[permalink] [raw]
Subject: [PATCH 2.4] Set the vga cursor even when hidden

Hi,

Some visually impaired people use hardware devices which directly read
the vga screen. When newt for instance asks to hide the cursor for
better visual aspect, the kernel puts the vga cursor out of the screen,
so that the cursor position can't be read by the hardware device. This
is a great loss for such people.

Here is a patch which uses the same technique as CUR_NONE for hiding the
cursor while still moving it.

Mario, you should apply it to the speakup kernel for access floppies
asap.

--- linux-2.4.31/drivers/video/vgacon.c.orig 2002-08-03 02:39:45.000000000 +0200
+++ linux-2.4.31/drivers/video/vgacon.c 2005-11-05 22:22:12.000000000 +0100
@@ -432,7 +432,8 @@ static void vgacon_cursor(struct vc_data
vgacon_scrolldelta(c, 0);
switch (mode) {
case CM_ERASE:
- write_vga(14, (vga_vram_end - vga_vram_base - 1)/2);
+ write_vga(14, (c->vc_pos-vga_vram_base)/2);
+ vgacon_set_cursor_size(c->vc_x, 31, 30);
break;

case CM_MOVE:

2005-11-06 00:37:38

by Antonino A. Daplas

[permalink] [raw]
Subject: Re: [PATCH] Set the vga cursor even when hidden

Samuel Thibault wrote:
> Hi,
>
> Some visually impaired people use hardware devices which directly read
> the vga screen. When newt for instance asks to hide the cursor for
> better visual aspect, the kernel puts the vga cursor out of the screen,
> so that the cursor position can't be read by the hardware device. This
> is a great loss for such people.
>
> Here is a patch which uses the same technique as CUR_NONE for hiding the
> cursor while still moving it.

Note that this method will produce a split block cursor with EGA, which is
still supported by vgacon, but possibly not used anymore. Why not use
this method (scanline_end < scanline_start) for VGA, and the default method
(moving the cursor out of the screen) for the rest?

Or why not just set bit 5 of the cursor start register (port 0x0a) to disable
the cursor, and clear to enable? I believe this will also work for the
other types.

Tony

2005-11-06 00:44:57

by Samuel Thibault

[permalink] [raw]
Subject: Re: [PATCH] Set the vga cursor even when hidden

Hi,

Antonino A. Daplas, le Sun 06 Nov 2005 08:37:27 +0800, a ?crit :
> Why not use this method (scanline_end < scanline_start) for VGA, and
> the default method (moving the cursor out of the screen) for the rest?

Well, visually impaired people might want to use other cards as well.

> Or why not just set bit 5 of the cursor start register (port 0x0a) to disable
> the cursor, and clear to enable? I believe this will also work for the
> other types.

If this works, it would be fine.

Regards,
Samuel

2005-11-06 00:45:30

by Linus Torvalds

[permalink] [raw]
Subject: Re: [PATCH] Set the vga cursor even when hidden



On Sun, 6 Nov 2005, Antonino A. Daplas wrote:
>
> Note that this method will produce a split block cursor with EGA, which is
> still supported by vgacon, but possibly not used anymore. Why not use
> this method (scanline_end < scanline_start) for VGA, and the default method
> (moving the cursor out of the screen) for the rest?

I do believe that we can ignore EGA controllers these days.

Or at least accept the fact that anybody who owns an EGA system isn't
actually likely to care about what his screen looks like.

The EGA support was pretty much a joke even when Linux started ;)

Linus

2005-11-06 01:40:26

by Antonino A. Daplas

[permalink] [raw]
Subject: Re: [PATCH] Set the vga cursor even when hidden

Linus Torvalds wrote:
>
> On Sun, 6 Nov 2005, Antonino A. Daplas wrote:
>> Note that this method will produce a split block cursor with EGA, which is
>> still supported by vgacon, but possibly not used anymore. Why not use
>> this method (scanline_end < scanline_start) for VGA, and the default method
>> (moving the cursor out of the screen) for the rest?
>
> I do believe that we can ignore EGA controllers these days.
>
> Or at least accept the fact that anybody who owns an EGA system isn't
> actually likely to care about what his screen looks like.
>
> The EGA support was pretty much a joke even when Linux started ;)
>

Okay, it was a half-hearted comment in the first place :-)

Tony

2005-11-06 02:11:37

by Antonino A. Daplas

[permalink] [raw]
Subject: Re: [PATCH] Set the vga cursor even when hidden

Samuel Thibault wrote:
> Hi,
>
> Antonino A. Daplas, le Sun 06 Nov 2005 08:37:27 +0800, a ?crit :
>> Why not use this method (scanline_end < scanline_start) for VGA, and
>> the default method (moving the cursor out of the screen) for the rest?
>
> Well, visually impaired people might want to use other cards as well.

See Linus's comments about that :-)

>
>> Or why not just set bit 5 of the cursor start register (port 0x0a) to disable
>> the cursor, and clear to enable? I believe this will also work for the
>> other types.
>
> If this works, it would be fine.

No, forget about that. It sounds simple, but when the cursor is moved, the
cursor is unavoidably reenabled again (in vgacon_set_cursor_size). So this method
will require more work for what's it worth. Your patch is much simpler and uses
known working code.

Tony