Pascal Cursor

Cursor

uses MyUnit;

type
     CursorShape = record
                    ScreenMask : array [0..15] of word;
                    CursorMask : array [0..15] of word;
                    Xhot, Yhot : integer;
                   end;


const
      CrossHair : CursorShape =
      (ScreenMask : ($FC7F, $FC7F, $FC7F, $FC7F, $FC7F, $FC7F, $0101, $0381,
                    $0101, $FC7F, $FC7F, $FC7F, $FC7F, $FC7F, $FC7F, $FFFF);
       CursorMask : ($0000, $0100, $0100, $0100, $0100, $0100, $0000, $7C7C,
                    $0000, $0100, $0100, $0100, $0100, $0100, $0000, $0000);
       Xhot       : 7;
       Yhot       : 7);
   Check : CursorShape =
     (ScreenMask : ($FFF0, $FFE0, $FFC0, $FF81, $FF03, $0607, $000F, $001F,
                    $C03F, $F07F, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF);
      CursorMask : ($0000, $0006, $000C, $0018, $0030, $0060, $70C0, $1D80,
                    $0700, $0000, $0000, $0000, $0000, $0000, $0000, $0000);
      Xhot       : 6;
      Yhot       : 7);

   Hand : CursorShape =
     (ScreenMask : ($E1FF, $E1FF, $E1FF, $E1FF, $E1FF, $E000, $E000, $E000,
                    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000);
      CursorMask : ($0C00, $1200, $1200, $1200, $1200, $13B6, $1249, $1249,
                    $7249, $9001, $9001, $9001, $8001, $8001, $8001, $FFFF);
      Xhot       : 5;
      Yhot       : 0);

   Cross : CursorShape =
     (ScreenMask : ($07E0, $0180, $0000, $C003, $F00F, $C003, $0000, $0180,
                    $07E0, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF, $FFFF);
      CursorMask : ($0000, $700E, $1C38, $0660, $03C0, $0660, $1C38, $700E,
                    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000);
      Xhot       : 7;
      Yhot       : 4);
   Standard : CursorShape =
     (ScreenMask : ($3FFF, $1FFF, $0FFF, $07FF, $03FF, $01FF, $00FF, $007F,
                    $003F, $001F, $01FF, $10FF, $30FF, $F87F, $F87F, $FC3F);
      CursorMask : ($0000, $4000, $6000, $7000, $7800, $7C00, $7E00, $7F00,
                    $7F80, $7FC0, $7C00, $4600, $0600, $0300, $0300, $0180);
      Xhot       : -1;
      Yhot       : -1);
      HourGlass : CursorShape =
     (ScreenMask : ($0000, $0000, $0000, $0000, $8001, $C003, $E007, $F00F,
                    $E007, $C003, $8001, $0000, $0000, $0000, $0000, $FFFF);
      CursorMask : ($0000, $7FFE, $6006, $300C, $1818, $0C30, $0660, $03C0,
                    $0660, $0C30, $1998, $33CC, $67E6, $7FFE, $0000, $0000);
      Xhot       : 7;
      Yhot       : 7);

   Mitko : CursorShape =
     (ScreenMask : ($0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
                    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000);
      CursorMask : ($0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000,
                    $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000);
      Xhot       : 1;
      Yhot       : 1);

   LowerRight : CursorShape =
     (ScreenMask : ($FFF0, $FFF0, $FFF0, $FFF0, $FFF0, $FFF0, $FFF0, $FFF0,
                    $FFF0, $FFF0, $FFF0, $FFF0, $0000, $0000, $0000, $0000);
      CursorMask : ($0000, $0006, $0006, $0006, $0006, $0006, $0006, $0006,
                    $0006, $0006, $0006, $0006, $0006, $7FFE, $7FFE, $0000);
      Xhot       : 14;
      Yhot       : 14);

      TestCursor: CursorShape = (
     ScreenMask: ($3FFF,$1FFF,$0FFF,$07FF,$03FF,$01FF,$00FF,$007F,
		$003F,$001F,$000F,$07FF,$0248,$76DD,$F6ED,$F64D);
     CursorMask: ($0000,$4000,$6000,$7000,$7800,$7C00,$7E00,$7F00,
		$7F80,$7FC0,$7000,$4000,$1DB7,$0922,$0912,$09B2);
     Xhot: 0;
     Yhot: 0
  );

     Wait   : CursorShape = (
     ScreenMask: ($01FF,$01FF,$39FF,$01FF,$83FF,$83FF,$C7FF,$93FF,
		$93FF,$29FF,$01FF,$01FF,$01FF,$FFFF,$FFFF,$FFFF);
     CursorMask: ($0000,$7C00,$4400,$4400,$2800,$2800,$1000,$2800,
		$2800,$4400,$4400,$7C00,$0000,$0000,$0000,$0000);
     Xhot: 4;
     Yhot: 4
  );

     Mark    : CursorShape = (
     ScreenMask: ($EFFF,$EFFF,$EFFF,$11FF,$EFFF,$EFFF,$EFFF,$FFFF,
		$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF,$FFFF);
     CursorMask: ($1000,$1000,$0000,$C600,$0000,$1000,$1000,$0000,
		$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000);
     Xhot: 4;
     Yhot: 4
  );

     Big   : CursorShape = (
     ScreenMask: ($FFFF,$BFFF,$9FFF,$8FFF,$87FF,$83FF,$81FF,$80FF,
		$807F,$803F,$81FF,$B9FF,$F9FF,$F8FF,$FCFF,$FFFF);
     CursorMask: ($C000,$E000,$F000,$F800,$FC00,$FE00,$FF00,$FF80,
		$FFC0,$FFE0,$FFF0,$FF00,$EF00,$8380,$0780,$0380);
     Xhot: 0;
     Yhot: 0
  );


procedure SetMouse( Cursor : CursorShape ); assembler;
asm
   LES DI,     Cursor
   MOV AX,     9
   MOV BX,     ES:[DI].CursorShape.Xhot
   MOV CX,     ES:[DI].CursorShape.Yhot
   MOV DX,     DI
   INT 33H
end;



begin
InitGraph;
SetMouse(hand);
ShowMouse;
WaitKey;
CloseGraph;
end.