home *** CD-ROM | disk | FTP | other *** search
/ Virtual Reality Homebrewer's Handbook / vr.iso / vroom / msmouse.pas < prev    next >
Pascal/Delphi Source File  |  1996-03-19  |  9KB  |  360 lines

  1. Unit MSMOUSE;
  2.  
  3. interface
  4.  
  5. uses dos;
  6.  
  7. const MouseInterrupt = 51;
  8.  
  9. type
  10.   GraphicsPointerDeclaration = ARRAY[1..34] OF WORD;
  11.   (*     RECORD
  12.          screen_mask: ARRAY[1..16] OF WORD;
  13.          cursor_mask: ARRAY[1..16] OF WORD;
  14.          horizontal_hotspot_offset: INTEGER;
  15.          vertical_hotspot_offset: INTEGER
  16.        END;  *)
  17.  
  18. const
  19.     Standard_Arrow_Cursor : GraphicsPointerDeclaration = (
  20.     (* AND screen mask *)
  21.     $03FFF,  (* 0011111111111111 *)
  22.     $01FFF,  (* 0001111111111111 *)
  23.     $00FFF,  (* 0000111111111111 *)
  24.     $007FF,  (* 0000011111111111 *)
  25.     $003FF,  (* 0000001111111111 *)
  26.     $001FF,  (* 0000000111111111 *)
  27.     $000FF,  (* 0000000011111111 *)
  28.     $0007F,  (* 0000000001111111 *)
  29.     $0003F,  (* 0000000000111111 *)
  30.     $0003F,  (* 0000000000111111 *)
  31.     $001FF,  (* 0000000111111111 *)
  32.     $010FF,  (* 0001000011111111 *)
  33.     $030FF,  (* 0011000011111111 *)
  34.     $0F87F,  (* 1111100001111111 *)
  35.     $0F87F,  (* 1111100001111111 *)
  36.     $0FC7F,  (* 1111110001111111 *)
  37.  
  38.     (* XOR cursor mask *)
  39.     $00000,  (* 0000000000000000 *)
  40.     $04000,  (* 0100000000000000 *)
  41.     $06000,  (* 0110000000000000 *)
  42.     $07000,  (* 0111000000000000 *)
  43.     $07800,  (* 0111100000000000 *)
  44.     $07C00,  (* 0111110000000000 *)
  45.     $07E00,  (* 0111111000000000 *)
  46.     $07F00,  (* 0111111100000000 *)
  47.     $07F80,  (* 0111111110000000 *)
  48.     $07E00,  (* 0111111011000000 *)
  49.     $06C00,  (* 0110110000000000 *)
  50.     $04600,  (* 0100011000000000 *)
  51.     $00600,  (* 0000011000000000 *)
  52.     $00300,  (* 0000001100000000 *)
  53.     $00300,  (* 0000001100000000 *)
  54.     $00000,  (* 0000000000000000 *)
  55.  
  56.     (* horizontal hotspot offset *)
  57.     0,
  58.     (* vertical hotspot offset *)
  59.     0);
  60.  
  61.     Inverted_Arrow_Cursor : GraphicsPointerDeclaration=(
  62.     $0FC7F,  (* 1111110001111111 *)
  63.     $0F87F,  (* 1111100001111111 *)
  64.     $0F87F,  (* 1111100001111111 *)
  65.     $030FF,  (* 0011000011111111 *)
  66.     $010FF,  (* 0001000011111111 *)
  67.     $001FF,  (* 0000000111111111 *)
  68.     $0003F,  (* 0000000000111111 *)
  69.     $0003F,  (* 0000000000111111 *)
  70.     $0007F,  (* 0000000001111111 *)
  71.     $000FF,  (* 0000000011111111 *)
  72.     $001FF,  (* 0000000111111111 *)
  73.     $003FF,  (* 0000001111111111 *)
  74.     $007FF,  (* 0000011111111111 *)
  75.     $00FFF,  (* 0000111111111111 *)
  76.     $01FFF,  (* 0001111111111111 *)
  77.     $03FFF,  (* 0011111111111111 *)
  78.  
  79.     $00000,  (* 0000000000000000 *)
  80.     $00300,  (* 0000001100000000 *)
  81.     $00300,  (* 0000001100000000 *)
  82.     $00600,  (* 0000011000000000 *)
  83.     $04600,  (* 0100011000000000 *)
  84.     $06C00,  (* 0110110000000000 *)
  85.     $07E00,  (* 0111111011000000 *)
  86.     $07F80,  (* 0111111110000000 *)
  87.     $07F00,  (* 0111111100000000 *)
  88.     $07E00,  (* 0111111000000000 *)
  89.     $07C00,  (* 0111110000000000 *)
  90.     $07800,  (* 0111100000000000 *)
  91.     $07000,  (* 0111000000000000 *)
  92.     $06000,  (* 0110000000000000 *)
  93.     $04000,  (* 0100000000000000 *)
  94.     $00000,  (* 0000000000000000 *)
  95.     1, 16);
  96.  
  97.     Hand_Cursor : GraphicsPointerDeclaration=(
  98.     $0E1FF,  (* 1110000111111111 *)
  99.     $0E1FF,  (* 1110000111111111 *)
  100.     $0E1FF,  (* 1110000111111111 *)
  101.     $0E1FF,  (* 1110000111111111 *)
  102.     $0E1FF,  (* 1110000111111111 *)
  103.     $0E000,  (* 1110000000000000 *)
  104.     $0E000,  (* 1110000000000000 *)
  105.     $0E000,  (* 1110000000000000 *)
  106.     $00000,  (* 0000000000000000 *)
  107.     $00000,  (* 0000000000000000 *)
  108.     $00000,  (* 0000000000000000 *)
  109.     $00000,  (* 0000000000000000 *)
  110.     $00000,  (* 0000000000000000 *)
  111.     $00000,  (* 0000000000000000 *)
  112.     $00000,  (* 0000000000000000 *)
  113.     $00000,  (* 0000000000000000 *)
  114.  
  115.     $01E00,  (* 0001111000000000 *)
  116.     $01200,  (* 0001001000000000 *)
  117.     $01200,  (* 0001001000000000 *)
  118.     $01200,  (* 0001001000000000 *)
  119.     $01200,  (* 0001001000000000 *)
  120.     $013FF,  (* 0001001111111111 *)
  121.     $01249,  (* 0001001001001001 *)
  122.     $01249,  (* 0001001001001001 *)
  123.     $0F249,  (* 1111001001001001 *)
  124.     $09001,  (* 1001000000000001 *)
  125.     $09001,  (* 1001000000000001 *)
  126.     $09001,  (* 1001000000000001 *)
  127.     $08001,  (* 1000000000000001 *)
  128.     $08001,  (* 1000000000000001 *)
  129.     $08001,  (* 1000000000000001 *)
  130.     $0FFFF,  (* 1111111111111111 *)
  131.     5, 0);
  132.  
  133.     Hourglass_Cursor : GraphicsPointerDeclaration=(
  134.     $00000,  (* 0000000000000000 *)
  135.     $00000,  (* 0000000000000000 *)
  136.     $00000,  (* 0000000000000000 *)
  137.     $00000,  (* 0000000000000000 *)
  138.     $08001,  (* 1000000000000001 *)
  139.     $0C003,  (* 1100000000000011 *)
  140.     $0E007,  (* 1110000000000111 *)
  141.     $0F00F,  (* 1111000000001111 *)
  142.     $0E007,  (* 1110000000000111 *)
  143.     $0C003,  (* 1100000000000011 *)
  144.     $08001,  (* 1000000000000001 *)
  145.     $00000,  (* 0000000000000000 *)
  146.     $00000,  (* 0000000000000000 *)
  147.     $00000,  (* 0000000000000000 *)
  148.     $00000,  (* 0000000000000000 *)
  149.     $0FFFF,  (* 1111111111111111 *)
  150.  
  151.     $00000,  (* 0000000000000000 *)
  152.     $07FFE,  (* 0111111111111110 *)
  153.     $06006,  (* 0110000000000110 *)
  154.     $0300C,  (* 0011000000001100 *)
  155.     $01818,  (* 0001100000011000 *)
  156.     $00C30,  (* 0000110000110000 *)
  157.     $00660,  (* 0000011001100000 *)
  158.     $003C0,  (* 0000001111000000 *)
  159.     $00660,  (* 0000011001100000 *)
  160.     $00C30,  (* 0000110000110000 *)
  161.     $01998,  (* 0001100110011000 *)
  162.     $033CC,  (* 0011001111001100 *)
  163.     $067E6,  (* 0110011111100110 *)
  164.     $07FFE,  (* 0111111111111110 *)
  165.     $00000,  (* 0000000000000000 *)
  166.     $00000,  (* 0000000000000000 *)
  167.     7, 7 );
  168.  
  169.  
  170. type MouseRegPack = registers;
  171.  
  172. function InitMouse: integer;
  173.  
  174. procedure ShowMouse;
  175.  
  176. procedure HideMouse;
  177.  
  178. function MousePosition(var MouseX, MouseY: integer): integer;
  179.  
  180. procedure SetMousePosition(MouseX, MouseY: integer);
  181.  
  182. function MousePress(Button: integer; var Count, LastX, LastY: integer): integer;
  183.  
  184. function MouseRelease(Button: integer; var Count, LastX, LastY: integer ): integer;
  185.  
  186. procedure SetXRange(MinX, MaxX: integer);
  187.  
  188. procedure SetYRange(MinY, MaxY: integer);
  189.  
  190. procedure SetGraphicsCursor(thiscursor : GraphicsPointerDeclaration);
  191.  
  192. procedure SetTextCursor(HardwareCursor: boolean; ScreenMaskStart, CursorMaskStop: integer);
  193.  
  194. procedure ReadMouseCounter(var CountX, CountY: integer);
  195.  
  196. procedure SetCallMask(CallMask, HandlerSeg, HandlerOfs : integer);
  197.  
  198. procedure LightPenEmulateOn;
  199.  
  200. procedure LightPenEmulateOff;
  201.  
  202.  
  203. implementation
  204.  
  205. function Mouse_Available : boolean;
  206. begin
  207.      if InitMouse=0 then Mouse_Available:=false else Mouse_Available:=true;
  208. end;
  209.  
  210. function InitMouse: integer;
  211. var r: MouseRegPack;
  212. begin
  213.   r.AX := 0;
  214.   Intr(MouseInterrupt,r);
  215.   InitMouse := r.AX
  216. end;
  217.  
  218. procedure ShowMouse;
  219. var r: MouseRegPack;
  220. begin
  221.   r.AX := 1;
  222.   Intr(MouseInterrupt,r);
  223. end;
  224.  
  225. procedure HideMouse;
  226. var r: MouseRegPack;
  227. begin
  228.   r.AX := 2;
  229.   Intr(MouseInterrupt,r)
  230. end;
  231.  
  232. function MousePosition(var MouseX, MouseY: integer): integer;
  233. var r: MouseRegPack;
  234. begin
  235.    r.AX := 3;
  236.    Intr(MouseInterrupt,r);
  237.    MouseX := r.CX;
  238.    MouseY := r.DX;
  239.    MousePosition := r.BX
  240. end;
  241.  
  242. procedure SetMousePosition(MouseX, MouseY: integer);
  243. var r: MouseRegPack;
  244. begin
  245.    r.AX := 4;
  246.    r.CX := MouseX;
  247.    r.DX := MouseY;
  248.    Intr(MouseInterrupt,r)
  249. end;
  250.  
  251. function MousePress(Button: integer; var Count, LastX, LastY: integer): integer;
  252. var r: MouseRegPack;
  253. begin
  254.   r.AX := 5;
  255.   r.BX := Button;
  256.   Intr(MouseInterrupt,r);
  257.   MousePress := r.AX;
  258.   Count := r.BX;
  259.   LastX := r.CX;
  260.   LastY := r.DX
  261. end;
  262.  
  263. function MouseRelease(Button: integer; var Count, LastX, LastY: integer ): integer;
  264. var r: MouseRegPack;
  265. begin
  266.   r.AX := 6;
  267.   r.BX := Button;
  268.   Intr(MouseInterrupt, r);
  269.   MouseRelease := r.AX;
  270.   Count := r.BX;
  271.   LastX := r.CX;
  272.   LastY := r.DX
  273. end;
  274.  
  275. procedure SetXRange(MinX, MaxX: integer);
  276. var r: MouseRegPack;
  277. begin
  278.   r.AX := 7;
  279.   r.CX := MinX;
  280.   r.DX := MaxX;
  281.   Intr(MouseInterrupt,r)
  282. end;
  283.  
  284. procedure SetYRange(MinY, MaxY: integer);
  285. var r: MouseRegPack;
  286. begin
  287.   r.AX := 8;
  288.   r.CX := MinY;
  289.   r.DX := MaxY;
  290.   Intr(MouseInterrupt,r)
  291. end;
  292.  
  293. procedure SetGraphicsCursor(thiscursor : GraphicsPointerDeclaration);
  294. var r: MouseRegPack;
  295. begin
  296.   r.AX := 9;
  297.   r.BX := thiscursor[33];
  298.   r.CX := thiscursor[34];
  299.   r.DX := ofs(thiscursor);
  300.   r.ES := seg(thiscursor);
  301.   Intr(MouseInterrupt,r)
  302. end;
  303.  
  304. procedure SetTextCursor(HardwareCursor: boolean; ScreenMaskStart, CursorMaskStop: integer);
  305. var r: MouseRegPack;
  306. begin
  307.   r.AX := 10;
  308.   r.BX := ord(HardwareCursor);
  309.   r.CX := ScreenMaskStart;
  310.   r.DX := CursorMaskStop;
  311.   Intr(MouseInterrupt,r)
  312. end;
  313.  
  314. procedure ReadMouseCounter(var CountX, CountY: integer);
  315. var r: MouseRegPack;
  316. begin
  317.   r.AX := 11;
  318.   Intr(MouseInterrupt,r);
  319.   CountX := r.CX;
  320.   CountY := r.DX
  321. end;
  322.  
  323. procedure SetCallMask(CallMask, HandlerSeg, HandlerOfs : integer);
  324. var r: MouseRegPack;
  325. begin
  326.   r.AX := 12;
  327.   r.CX := CallMask;
  328.   r.ES := HandlerSeg;
  329.   r.DX := HandlerOfs;
  330.   Intr(MouseInterrupt,r)
  331. end;
  332.  
  333. procedure LightPenEmulateOn;
  334. var r: MouseRegPack;
  335. begin
  336.   r.AX := 13;
  337.   Intr(MouseInterrupt,r)
  338. end;
  339.  
  340. procedure LightPenEmulateOff;
  341. var r: MouseRegPack;
  342. begin
  343.   r.AX := 14;
  344.   Intr(MouseInterrupt,r)
  345. end;
  346.  
  347.  
  348. procedure SetRatio(RatioX, RatioY: integer);
  349. var r: MouseRegPack;
  350. begin
  351.   r.AX := 15;
  352.   r.CX := RatioX;
  353.   r.DX := RatioY;
  354.   Intr(MouseInterrupt,r)
  355. end;
  356.  
  357.  
  358. end.
  359.  
  360.