home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / das_buch / dos / mouse.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-05-29  |  6.9 KB  |  291 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-}
  2. (*===================================================================*)
  3. (*                             MOUSE.PAS                             *)
  4. (*            Copyright (C) 1993 te-wi Verlag, München               *)
  5. (*    Unit mit den wichtigsten Interface-Routinen zum Maustreiber    *)
  6. (*===================================================================*)
  7. UNIT Mouse;
  8.  
  9. INTERFACE
  10.  
  11. TYPE
  12.   tButton = (None, Left, Right, Middle);        (* Namen der Buttons *)
  13.  
  14. PROCEDURE InitMouse;            (* Initialisierung der Maus          *)
  15. FUNCTION  ButtonNum: BYTE;      (* Liefert die Anzahl der Mausknöpfe *)
  16. PROCEDURE DisplayCursor;        (* Schaltet den Mauscursor ein       *)
  17. PROCEDURE HideCursor;           (* Schaltet den Mauscursor ab        *)
  18. FUNCTION  WhereX: INTEGER;      (* Liefert die aktuelle X-Koordinate *)
  19. FUNCTION  WhereY: INTEGER;      (* Liefert die aktuelle Y-Koordinate *)
  20. PROCEDURE SetPos(x, y: INTEGER); (* Setzt den Mauscursor nach X/Y    *)
  21. PROCEDURE SetMickeys(x, y: INTEGER); (* Setzen der Mausgeschwindigk. *)
  22. PROCEDURE GetMickeys(VAR x, y: INTEGER); (* Lesen der M.-Geschwind.  *)
  23. FUNCTION  Pressed: tButton;     (* Liefert beliebigen Tastendruck    *)
  24. PROCEDURE LeftXY(VAR x, y: INTEGER); (* Position bei Druck der li-Ta *)
  25. PROCEDURE RightXY(VAR x, y: INTEGER);(* Position bei Druck der re-Ta *)
  26. PROCEDURE MiddleXY(VAR x, y: INTEGER);(*Position bei Druck beider Ta *)
  27. FUNCTION  ButtonUsed(Button: tButton): WORD; (* liefert die Zahl der *)
  28.                 (* Tastendrücke seit dem letzten Aufruf der Funktion *)
  29. FUNCTION  ButtonReleased(Button: tButton): WORD; (* wie oft wurde    *)
  30.        (* seit dem letzten Aufruf der Funktion die Taste losgelassen *)
  31.  
  32. PROCEDURE GraphCursor(DivX, DivY: WORD; VAR BitMap); (* Softcursor   *)
  33.                                        (* für den Grafikmodus setzen *)
  34. PROCEDURE GetMouseInfo(VAR MouseType, IRQ: BYTE; VAR Version: WORD);
  35.                                 (* liefert, welche Maus wo aktiv ist *)
  36. PROCEDURE SetMouseWindow(x1, y1, x2, y2: INTEGER);
  37.      (* setzt die Koordinaten für ein Mausfenster auf dem Bildschirm *)
  38. PROCEDURE GetMouseWindow(VAR x1, y1, x2, y2: INTEGER);
  39.          (* liefert die Daten des akt. Mausfensters auf dem B-schirm *)
  40.  
  41. TYPE
  42.   tCursorShape = ARRAY[0..1] OF ARRAY [1..4] OF ARRAY[1..4] OF WORD;
  43.  
  44. CONST
  45.    DotCursor: tCursorShape =
  46. {AND}    ((($FFFF, $FFFF, $FFFF, $FFFF),               (* So sieht eine *)
  47.            ($FFFF, $FFFF, $FFFF, $FFFF),               (* Cursorbitmap  *)
  48.            ($FFFF, $FFFF, $FFFF, $FFFF),               (* aus. Diese    *)
  49.            ($FFFF, $FFFF, $FFFF, $FFFF)),              (* hier zeigt    *)
  50. {XOR}     (($8000, $0000, $0000, $0000),               (* einen Punkt   *)
  51.            ($0000, $0000, $0000, $0000),               (* auf dem BS an *)
  52.            ($0000, $0000, $0000, $0000),
  53.            ($0000, $0000, $0000, $0000)));
  54.  
  55. ArrowCursor: tCursorShape =
  56. {AND}    ((($FFFF, $FFFF, $FFFF, $FFFF),               (* ... und diese *)
  57.            ($FFFF, $FFFF, $FFFF, $FFFF),               (* implementiert *)
  58.            ($FFFF, $FFFF, $FFFF, $FFFF),               (* softwaremäßig *)
  59.            ($FFFF, $FFFF, $FFFF, $FFFF)),              (* einen Pfeil   *)
  60. {XOR}     (($8000, $E000, $F800, $FE00),
  61.            ($D800, $0C00, $0600, $0300),
  62.            ($0000, $0000, $0000, $0000),
  63.            ($0000, $0000, $0000, $0000)));
  64.  
  65.  
  66. IMPLEMENTATION
  67.  
  68. CONST
  69.   Buttons: WORD = 0;
  70.  
  71. PROCEDURE DisplayCursor; ASSEMBLER;
  72. ASM
  73.   MOV AX, 0001h
  74.   INT 33h
  75. END;
  76.  
  77. PROCEDURE HideCursor; ASSEMBLER;
  78. ASM 
  79.   MOV AX, 0002h
  80.   INT 33h
  81. END;
  82.  
  83. PROCEDURE InitMouse; ASSEMBLER;
  84. ASM
  85.   XOR  AX, AX                                               { AX := 0 }
  86.   INT  33h                                                  { AX = 0? }
  87.   OR   AX, AX
  88.   JZ   @out
  89.   MOV Buttons, BX
  90.  @out:
  91. END;
  92.  
  93. FUNCTION ButtonNum: BYTE;
  94. BEGIN
  95.   ButtonNum := Lo(Buttons);
  96. END;
  97.  
  98. FUNCTION WhereX: INTEGER; ASSEMBLER;
  99. ASM
  100.   MOV AX, 0003h
  101.   INT 33h
  102.   MOV AX, CX
  103. END;
  104.  
  105. FUNCTION WhereY: INTEGER; ASSEMBLER;
  106. ASM
  107.   MOV AX, 0003h
  108.   INT 33h
  109.   MOV AX, DX;
  110. END;
  111.  
  112. PROCEDURE SetPos(x, y: INTEGER); ASSEMBLER;
  113. ASM
  114.   MOV  AX, 0004h
  115.   MOV  CX, x
  116.   MOV  DX, y
  117.   INT  33h
  118. END;
  119.  
  120. FUNCTION Pressed: tButton; ASSEMBLER;
  121. ASM
  122.   MOV AX, 0003h
  123.   INT 33h
  124.   MOV AX, BX
  125. END;
  126.  
  127. PROCEDURE LeftXY(VAR x, y: INTEGER);
  128. VAR
  129.   xt, yt: INTEGER;
  130. BEGIN
  131.   ASM
  132.     MOV AX, 0005h
  133.     XOR BX, BX
  134.     INT 33h
  135.     MOV xt, CX
  136.     MOV yt, DX
  137.   END;
  138.   x := xt;
  139.   y := yt;
  140. END;
  141.  
  142. PROCEDURE RightXY(VAR x, y: INTEGER);
  143. VAR
  144.   xt, yt: INTEGER;
  145. BEGIN
  146.   ASM
  147.     MOV AX, 0005h
  148.     MOV BX, 0001h
  149.     INT 33h
  150.     MOV xt, CX
  151.     MOV yt, DX
  152.   END;
  153.   x := xt;
  154.   y := yt;
  155. END;
  156.  
  157. PROCEDURE MiddleXY(VAR x, y: INTEGER);
  158. VAR
  159.   xt, yt: INTEGER;
  160. BEGIN
  161.   ASM
  162.     MOV AX, 0005h
  163.     MOV BX, 0002h
  164.     INT 33h
  165.     MOV xt, CX
  166.     MOV yt, DX
  167.   END;
  168.   x := xt;
  169.   y := yt;
  170. END;
  171.  
  172. FUNCTION ButtonUsed(Button: tButton): WORD; ASSEMBLER;
  173. ASM
  174.   MOV AX, 0005h
  175.   XOR BH, BH
  176.   MOV BL, Button
  177.   ADD BL, 0001h
  178.   INT 33h
  179.   MOV AX, BX
  180. END;
  181.  
  182. FUNCTION ButtonReleased(Button: tButton): WORD; ASSEMBLER;
  183. ASM
  184.   MOV AX, 0006h
  185.   XOR BH, BH
  186.   MOV BL, Button
  187.   ADD BL, 0001h
  188.   INT 33h
  189.   MOV AX, BX
  190. END;
  191.  
  192. PROCEDURE MoveTo(x, y: WORD); ASSEMBLER;
  193. ASM
  194.   MOV  AX, 0004h
  195.   MOV  CX, x
  196.   MOV  DX, y
  197.   INT  33h
  198. END;
  199.  
  200. PROCEDURE GetMickeys(VAR x, y: INTEGER);
  201. VAR
  202.   xt, yt: INTEGER;
  203. BEGIN
  204.   ASM
  205.     MOV AX, 001Bh
  206.     INT 33h
  207.     MOV xt, CX
  208.     MOV yt, DX
  209.   END;
  210.   x := xt;
  211.   y := yt;
  212. END;
  213.  
  214. PROCEDURE SetMickeys(x, y: INTEGER); ASSEMBLER;
  215. ASM
  216.   MOV  AX, 000Fh
  217.   MOV  CX, x
  218.   MOV  DX, y
  219.   INT  33h
  220. END;
  221.  
  222. PROCEDURE GraphCursor(DivX, DivY: WORD; VAR BitMap);
  223. VAR
  224.   o, s: WORD;
  225. BEGIN
  226.   o := Ofs(BitMap);
  227.   s := Seg(BitMap);
  228.   ASM
  229.     MOV AX, 0009h
  230.     MOV BX, s
  231.     MOV ES, BX
  232.     MOV BX, DivX
  233.     MOV CX, DivY
  234.     MOV DX, o
  235.     INT 33h
  236.   END;
  237. END;
  238.  
  239. PROCEDURE GetMouseInfo(VAR MouseType, IRQ: BYTE;
  240.                        VAR Version:        WORD);
  241. VAR
  242.  m, i: BYTE;
  243.  v   : WORD;
  244. BEGIN
  245.   ASM
  246.     MOV AX, 0024h
  247.     INT 33h
  248.     MOV v, BX
  249.     mov m, CH                     { 1 = Bus, 2 = seriell, 3 = InPort, }
  250.                                   { 4 = PS/2, 5 = HP-Maus             }
  251.     MOV i, CL;                    { 0 = PS/2, 2..7 = Nummer des IRQ   }
  252.   END;
  253.   MouseType := m;
  254.   IRQ       := i;
  255.   Version   := v;
  256. END;
  257.  
  258. PROCEDURE SetMouseWindow(x1, y1, x2, y2: INTEGER); ASSEMBLER;
  259. ASM
  260.   MOV  AX, 0007h
  261.   MOV  CX, x1 
  262.   MOV  DX, x2 
  263.   INT  33h
  264.   MOV  AX, 0008h
  265.   MOV  CX, y1 
  266.   MOV  DX, y2 
  267.   INT  33h
  268. END;
  269.  
  270. PROCEDURE GetMouseWindow(VAR x1, y1, x2, y2: INTEGER);
  271. VAR
  272.   x1t, x2t, y1t, y2t: INTEGER;
  273. BEGIN
  274.   ASM
  275.     MOV  AX,  31h
  276.     INT  33h
  277.     MOV  x1t, AX
  278.     MOV  x2t, CX
  279.     MOV  y1t, BX
  280.     MOV  y2t, DX
  281.   END;
  282.   x1 := x1t; x2 := x2t;
  283.   y1 := y1t; y2 := y2t;
  284. END;
  285.  
  286. BEGIN
  287.   InitMouse;
  288. END.
  289.  
  290. (*===================================================================*)
  291.