[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]
{
{ CURSORUN.PAS }
UNIT cursorUnit;
{
Hey Guys and Gals! Please don't assume anything about what video
mode I'm using on my computer! And, thus, don't tangle my
cursor! This unit provides the =only= proper way to put the cursor
on and off -- put the code you have been given by other people,
that sets the cursor to some different, fixed states in order to
show/hide it, where they all belong: in the Bit Bucket!
}
INTERFACE
type cursorType = record eLine, sLine: byte end;
var Cursor: cursorType;
{ since BP can't handle typecasting with macro functions,
we'll also have use for this one: }
xCursor: word absolute Cursor;
oldCursor: word;
function getCursor: word; inline(
$B7/0/ { mov bh,0 }
$B4/3/ { mov ah,3 }
$CD/$10/ { int 10h }
$89/$C8); { mov ax,cx }
procedure setCursor(C: word); inline(
$59/ { pop cx }
$B4/1/ { mov ah,1 }
$CD/$10); { int 10h }
procedure cursorOn;
procedure cursorOff;
procedure blinkSlow; { those three won't work on EGA/VGA }
procedure blinkFast;
procedure blinkNormal;
IMPLEMENTATION
procedure cursorOn;
begin setCursor(getCursor and not $2000) end;
procedure cursorOff;
begin setCursor(getCursor or $2000) end;
procedure blinkSlow;
begin setCursor(getCursor and not $2000 or $4000) end;
procedure blinkFast;
begin setCursor(getCursor or $6000) end;
procedure blinkNormal;
begin setCursor(getCursor and not $6000) end;
BEGIN { always save old cursor first }
oldCursor:=getCursor
END. { of Unit init }
{- And here's a short test program, that'll show you how to use the
unit cursorUnit -}
program TestCursor; { test of Cursor unit }
{$D-,E-,G+,I-,L-,S-}
uses cursorUnit;
begin
xCursor:=getCursor;
with Cursor do begin
writeln;
writeln('Present start- and endline of cursor:',sLine:3,eLine:3);
write ('Change start to 0 to create block type ');
sLine:=0; setCursor(xCursor); readln;
write ('Make cursor a thin line ');
sLine:=eLine; setCursor(xCursor); readln;
write ('Turn cursor off preserving present size ');
cursorOff; readln;
write ('Notice how we get our thin cursor back ');
cursorOn; readln;
{ those three won't work properly on EGA/VGA }
{blinkSlow; readln;
blinkFast; readln;
blinkNormal; readln}
end;
write('Restore original cursor ');
setCursor(oldCursor); readln
end.
[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]