[Back to CURSOR SWAG index]  [Back to Main SWAG index]  [Original]

MN> Anyone have any code on hiding the cursor and then bringing it back.

MN>                               -+- Mike Normand -+-


I've seen many replies to this but all suffer the same disadvantage: they all
assume you know the size of the cursor. A little bit debugging BASIC reveals
what's up (by the way, you'll find it described in some good books): you have
to set bit 5 For the start line and the cursor will disappear since this value
is not allowed. To get the cursor back again, clear bit 5 again. Use this
solution, if you Really just want to turn on/off the cursor. CursorOn/CursorOff
do *not* change the cursor shape!!! and do *not* need an external Variable to
manage this.

The  PUSH BP / POP BP  is needed For some *very* old BIOS versions using CGA/
monochrome :-( display, that trash BP during an INT 10h. If you just want do
support EGA/VGA :-) and better, just push 'em out.

-----------------------------------------------------
Procedure CursorOff; Assembler;
Asm
    push bp            { For old BIOSs }
    xor  ax, ax
    mov  es, ax
    mov  bh, Byte ptr es:[462h]  { get active page }
    mov  ah, 3
    int  10h           { get cursor Characteristics }
    or   ch, 00100000b
    mov  ah, 1
    int  10h           { set cursor Characteristics }
    pop  bp            { restore bp For old BIOSs }
end;

Procedure CursorOn; Assembler;
Asm
    push bp            { old BIOSs like this... }
    xor  ax, ax
    mov  es, ax
    mov  bh, Byte ptr es:[462h]  { get active page }
    mov  ah, 3
    int  10h           { get cursor Characteristics }
    and  ch, 00011111b
    mov  ah, 1
    int  10h           { set cursor Characteristics }
    pop  bp            { ...and this, too }
end;

[Back to CURSOR SWAG index]  [Back to Main SWAG index]  [Original]