home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / mouse / mousetp / turbo3 / mousebox.inc
Encoding:
Text File  |  1993-07-29  |  16.8 KB  |  589 lines

  1. {──────────────────────────────}
  2. {                              }
  3. {    Mousebox,  Version 1.1    }
  4. {  Copyright (c) 1988, 89, 90  }
  5. {             by               }
  6. {                              }
  7. {         Ralf Krause          }
  8. {                              }
  9. {    Leuchtenberger Str. 7a    }
  10. {   D-8480 Weiden i. d. Opf.   }
  11. {──────────────────────────────}
  12.  
  13.  
  14.  
  15. TYPE
  16.   WORD = INTEGER;       { ermöglichte es die Mousebox für Turbo Pascal ab }
  17.                         { Version 4.0 ohne große Änderungen für Turbo     }
  18.                         { Pascal 3.0 zu übernehme                         }
  19.  
  20.   Registers = RECORD CASE WORD OF
  21.                 1 : (ax,bx,cx,dx,bp,si,di,ds,es,flags : WORD);
  22.                 2 : (al,ah,bl,bh,cl,ch,dl,dh          : BYTE);
  23.               END;
  24.  
  25.   MouseCursor    = RECORD
  26.                      ScreenMask,
  27.                      CursorMask  : ARRAY[0..15] OF WORD;
  28.                      XHotSpot,
  29.                      YHotSpot    : WORD;
  30.                    END;
  31.  
  32.   TextCursorType = RECORD
  33.                      HardWareCursor : BOOLEAN;
  34.                      ScreenMask,
  35.                      CursorMask     : WORD;
  36.                    END;
  37.  
  38. CONST
  39.   MouseIntr = $33;      { Mouse-Interrupt }
  40.  
  41.   Clock : MouseCursor = (ScreenMask : ($0000,$0000,$0000,$0000,
  42.                                        $8001,$C003,$E007,$F00F,
  43.                                        $E007,$C003,$8001,$0000,
  44.                                        $0000,$0000,$0000,$FFFF);
  45.                          CursorMask : ($0000,$7FFE,$6006,$300C,
  46.                                        $1818,$0C30,$0660,$1FF0,
  47.                                        $0660,$0C30,$1818,$300C,
  48.                                        $6006,$7FFE,$0000,$0000);
  49.                          XHotSpot   :  7;
  50.                          YHotSpot   :  7);
  51.  
  52.   Arrow : MouseCursor = (ScreenMask : ($3FFF,$1FFF,$0FFF,$07FF,
  53.                                        $03FF,$01FF,$00FF,$007F,
  54.                                        $003F,$001F,$00FF,$10FF,
  55.                                        $30FF,$F87F,$F87F,$FC3F);
  56.                          CursorMask : ($0000,$4000,$6000,$7000,
  57.                                        $7800,$7C00,$7E00,$7F00,
  58.                                        $7F80,$7FC0,$7C00,$4600,
  59.                                        $0600,$0300,$0300,$0180);
  60.                          XHotSpot   :  7;
  61.                          YHotSpot   :  7);
  62.  
  63.   Hand : MouseCursor = (ScreenMask : ($F3FF,$E1FF,$E1FF,$E1FF,
  64.                                       $E1FF,$E001,$E000,$E000,
  65.                                       $0000,$0000,$0000,$0000,
  66.                                       $0000,$0000,$0000,$0000);
  67.                         CursorMask : ($0C00,$1200,$1200,$1200,
  68.                                       $1200,$13B6,$1249,$1249,
  69.                                       $7249,$9249,$9249,$9249,
  70.                                       $8001,$8001,$8001,$FFFF);
  71.                         XHotSpot   :  7;
  72.                         YHotSpot   :  7);
  73.  
  74.   Plus : MouseCursor = (ScreenMask : ($FC3F,$FC3F,$FC3F,$0000,
  75.                                       $0000,$0000,$FC3F,$FC3F,
  76.                                       $FC3F,$FFFF,$FFFF,$FFFF,
  77.                                       $FFFF,$FFFF,$FFFF,$FFFF);
  78.                         CursorMask : ($0000,$0180,$0180,$0180,
  79.                                       $7FFE,$0180,$0180,$0180,
  80.                                       $0000,$0000,$0000,$0000,
  81.                                       $0000,$0000,$0000,$0000);
  82.                         XHotSpot   :  7;
  83.                         YHotSpot   :  7);
  84.  
  85.   UpArrow : MouseCursor = (ScreenMask : ($F9FF,$F0FF,$E07F,$E07F,
  86.                                          $C03F,$C03F,$801F,$801F,
  87.                                          $000F,$000F,$F0FF,$F0FF,
  88.                                          $F0FF,$F0FF,$F0FF,$F0FF);
  89.                            CursorMask : ($0000,$0600,$0F00,$0F00,
  90.                                          $1F80,$1F80,$3FC0,$3FC0,
  91.                                          $7FE0,$0600,$0600,$0600,
  92.                                          $0600,$0600,$0600,$0000);
  93.                            XHotSpot   :  7;
  94.                            YHotSpot   :  7);
  95.  
  96.   SmallArrow : MouseCursor = (ScreenMask : ($FFFF,$FFFF,$FFFF,$FFFF,
  97.                                             $FFFF,$FFFF,$FFFF,$FFFF,
  98.                                             $FFFF,$FFFF,$FFFF,$FFFF,
  99.                                             $FFFF,$FFFF,$FFFF,$FFFF);
  100.                               CursorMask : ($4000,$7000,$7C00,$7F00,
  101.                                             $6C00,$0600,$0300,$0180,
  102.                                             $0000,$0000,$0000,$0000,
  103.                                             $0000,$0000,$0000,$0000);
  104.                               XHotSpot   :  7;
  105.                               YHotSpot   :  7);
  106.  
  107.  
  108.   FUNCTION InitMouse : BOOLEAN;
  109.   PROCEDURE ResetMouse;
  110.   PROCEDURE ShowCursor;
  111.   PROCEDURE HideCursor;
  112.   FUNCTION GetXPosition : WORD;
  113.   FUNCTION GetYPosition : WORD;
  114.   FUNCTION GetXTextPosition : WORD;
  115.   FUNCTION GetYTextPosition : WORD;
  116.   FUNCTION LeftButton : BOOLEAN;
  117.   FUNCTION RightButton : BOOLEAN;
  118.   FUNCTION MiddleButton : BOOLEAN;
  119.   FUNCTION MouseMoved : BOOLEAN;
  120.   FUNCTION MouseLeftMoved : BOOLEAN;
  121.   FUNCTION MouseRightMoved : BOOLEAN;
  122.   FUNCTION MouseUpMoved : BOOLEAN;
  123.   FUNCTION MouseDownMoved : BOOLEAN;
  124.   FUNCTION LeftButtonPressed : WORD;
  125.   FUNCTION RightButtonPressed : WORD;
  126.   FUNCTION MiddleButtonPressed : WORD;
  127.   FUNCTION LeftButtonReleased : WORD;
  128.   FUNCTION RightButtonReleased : WORD;
  129.   FUNCTION MiddleButtonReleased : WORD;
  130.   PROCEDURE SetXYMouse(VAR x, y : WORD);
  131.   PROCEDURE SetXRange(VAR XMin, XMax : WORD);
  132.   PROCEDURE SetYRange(VAR YMin, YMax : WORD);
  133.   PROCEDURE SetGraphicCursor(VAR GraphicCursor : MouseCursor);
  134.   PROCEDURE SetTextCursor(VAR TextCursor : TextCursorType);
  135.   FUNCTION GetXMickey : WORD;
  136.   FUNCTION GetYMickey : WORD;
  137.   PROCEDURE SetXYMickey(VAR XMickey, YMickey : WORD);
  138.   PROCEDURE SetMouseSpeed(VAR MouseSpeed : WORD);
  139.  
  140.  
  141. FUNCTION InitMouse : BOOLEAN;          { Mouse-Treiber initialisieren     }
  142.  
  143. VAR
  144.   MouseRegister : Registers;
  145.  
  146. BEGIN
  147.   MouseRegister.AX := 0;
  148.   Intr(MouseIntr, MouseRegister);
  149.   InitMouse := ODD(MouseRegister.AX);
  150. END;
  151.  
  152.  
  153. PROCEDURE ResetMouse;                  { Mouse-Treiber zurücksetzen       }
  154.  
  155. VAR
  156.   MouseRegister : Registers;
  157.  
  158. BEGIN
  159.   MouseRegister.AX := 0;
  160.   Intr(MouseIntr, MouseRegister);
  161. END;
  162.  
  163.  
  164. PROCEDURE ShowCursor;                  { Mousecursor einschalten          }
  165.  
  166. VAR
  167.   MouseRegister : Registers;
  168.  
  169. BEGIN
  170.   MouseRegister.AX := 1;
  171.   Intr(MouseIntr, MouseRegister);
  172. END;
  173.  
  174.  
  175. PROCEDURE HideCursor;                  { Mousecursor abschalten           }
  176.  
  177. VAR
  178.   MouseRegister : Registers;
  179.  
  180. BEGIN
  181.   MouseRegister.AX := 2;
  182.   Intr(MouseIntr, MouseRegister);
  183. END;
  184.  
  185.  
  186. FUNCTION GetXPosition : WORD;          { Horizontale Mouse-Position er-   }
  187.                                        { mitteln                          }
  188.  
  189. VAR
  190.   MouseRegister : Registers;
  191.  
  192. BEGIN
  193.   MouseRegister.AX := 3;
  194.   Intr(MouseIntr, MouseRegister);
  195.   GetXPosition := MouseRegister.CX;
  196. END;
  197.  
  198.  
  199. FUNCTION GetYPosition : WORD;          { Vertikale Mouse-Position er-     }
  200.                                        { mitteln                          }
  201.  
  202. VAR
  203.   MouseRegister : Registers;
  204.  
  205. BEGIN
  206.   MouseRegister.AX := 3;
  207.   Intr(MouseIntr, MouseRegister);
  208.   GetYPosition := MouseRegister.DX;
  209. END;
  210.  
  211.  
  212. FUNCTION GetXTextPosition : WORD;      { Horizontale Mouse-Position in    }
  213.                                        { Textkoordinaten ermitteln        }
  214.  
  215. VAR
  216.   MouseRegister : Registers;
  217.  
  218. BEGIN
  219.   MouseRegister.AX := 3;
  220.   Intr(MouseIntr, MouseRegister);
  221.   GetXTextPosition := (MouseRegister.CX + 8) DIV 8
  222. END;
  223.  
  224. FUNCTION GetYTextPosition : WORD;      { Vertikale Mouse-Position in      }
  225.                                        { Textkoordinaten ermitteln        }
  226.  
  227.  
  228. VAR
  229.   MouseRegister : Registers;
  230.  
  231. BEGIN
  232.   MouseRegister.AX := 3;
  233.   Intr(MouseIntr, MouseRegister);
  234.   GetYTextPosition := (MouseRegister.DX + 8) DIV 8
  235. END;
  236.  
  237.  
  238. FUNCTION LeftButton : BOOLEAN;         { Linke Mouse-Taste gedrückt ?     }
  239.  
  240. VAR
  241.   MouseRegister : Registers;
  242.  
  243. BEGIN
  244.   MouseRegister.AX := 5;
  245.   MouseRegister.BX := 0;
  246.   Intr(MouseIntr, MouseRegister);
  247.   LeftButton := ODD(MouseRegister.AX);
  248. END;
  249.  
  250.  
  251. FUNCTION RightButton : BOOLEAN;        { Rechte Mouse-Taste gedrückt ?    }
  252.  
  253. VAR
  254.   MouseRegister : Registers;
  255.  
  256. BEGIN
  257.   MouseRegister.AX := 5;
  258.   MouseRegister.BX := 1;
  259.   Intr(MouseIntr, MouseRegister);
  260.   RightButton := ODD(MouseRegister.AX SHR 1);
  261. END;
  262.  
  263.  
  264. FUNCTION MiddleButton : BOOLEAN;      { Mittlere Mouse-Taste gedrückt ?  }
  265.  
  266. VAR
  267.   MouseRegister : Registers;
  268.  
  269. BEGIN
  270.   MouseRegister.AX := 5;
  271.   MouseRegister.BX := 2;
  272.   Intr(MouseIntr, MouseRegister);
  273.   MiddleButton := ODD(MouseRegister.AX SHR 2);
  274. END;
  275.  
  276.  
  277. FUNCTION MouseMoved : BOOLEAN;         { Testet ob die Mouse bewegt wurde }
  278.                                        { wenn ja ist das Ergebnis TRUE    }
  279.  
  280. VAR
  281.   MouseRegister : Registers;
  282.  
  283. BEGIN
  284.   MouseRegister.AX := 11;
  285.   Intr(MouseIntr, MouseRegister);
  286.   IF (MouseRegister.CX <> 0) AND (MouseRegister.DX <> 0) THEN
  287.     MouseMoved := TRUE
  288.   ELSE
  289.     MouseMoved := FALSE;
  290. END;
  291.  
  292.  
  293. FUNCTION MouseLeftMoved : BOOLEAN;     { Testet ob die Mouse nach links   }
  294.                                        { bewegt wurde, wenn ja ist das    }
  295.                                        { Ergebnis TRUE                    }
  296.  
  297. VAR
  298.   MouseRegister : Registers;
  299.   Word2Int      : INTEGER;
  300.  
  301. BEGIN
  302.   MouseRegister.AX := 11;
  303.   Intr(MouseIntr, MouseRegister);
  304.   Word2Int := MouseRegister.CX;
  305.   IF (Word2Int < 0) THEN
  306.     MouseLeftMoved := TRUE
  307.   ELSE
  308.     MouseLeftMoved := FALSE;
  309. END;
  310.  
  311.  
  312. FUNCTION MouseRightMoved : BOOLEAN;    { Testet ob die Mouse nach rechts  }
  313.                                        { bewegt wurde, wenn ja ist das    }
  314.                                        { Ergebnis TRUE                    }
  315.  
  316. VAR
  317.   MouseRegister : Registers;
  318.   Word2Int      : INTEGER;
  319.  
  320. BEGIN
  321.   MouseRegister.AX := 11;
  322.   Intr(MouseIntr, MouseRegister);
  323.   Word2Int := MouseRegister.CX;
  324.   IF (Word2Int > 0) THEN
  325.     MouseRightMoved := TRUE
  326.   ELSE
  327.     MouseRightMoved := FALSE;
  328. END;
  329.  
  330.  
  331. FUNCTION MouseUpMoved : BOOLEAN;       { Testet ob die Mouse nach oben    }
  332.                                        { bewegt wurde, wenn ja ist das    }
  333.                                        { Ergebnis TRUE                    }
  334.  
  335. VAR
  336.   MouseRegister : Registers;
  337.   Word2Int      : INTEGER;
  338.  
  339. BEGIN
  340.   MouseRegister.AX := 11;
  341.   Intr(MouseIntr, MouseRegister);
  342.   Word2Int := MouseRegister.DX;
  343.   IF (Word2Int < 0) THEN
  344.     MouseUpMoved := TRUE
  345.   ELSE
  346.     MouseUpMoved := FALSE;
  347. END;
  348.  
  349.  
  350. FUNCTION MouseDownMoved : BOOLEAN;     { Testet ob die Mouse nach unten   }
  351.                                        { bewegt wurde, wenn ja ist das    }
  352.                                        { Ergebnis TRUE                    }
  353.  
  354. VAR
  355.   MouseRegister : Registers;
  356.   Word2Int      : INTEGER;
  357.  
  358. BEGIN
  359.   MouseRegister.AX := 11;
  360.   Intr(MouseIntr, MouseRegister);
  361.   Word2Int := MouseRegister.DX;
  362.   IF (Word2Int > 0) THEN
  363.     MouseDownMoved := TRUE
  364.   ELSE
  365.     MouseDownMoved := FALSE;
  366. END;
  367.  
  368.  
  369. FUNCTION LeftButtonPressed : WORD;     { wie oft wurde die linke Mouse-   }
  370.                                        { Taste seit der letzten Abfrage   }
  371.                                        { gedrückt ?                       }
  372.  
  373. VAR
  374.   MouseRegister : Registers;
  375.  
  376. BEGIN
  377.   MouseRegister.AX := 5;
  378.   MouseRegister.BX := 0;
  379.   Intr(MouseIntr, MouseRegister);
  380.   LeftButtonPressed := MouseRegister.BX;
  381. END;
  382.  
  383.  
  384. FUNCTION RightButtonPressed : WORD;    { wie oft wurde die rechte Mouse-  }
  385.                                        { Taste seit der letzten Abfrage   }
  386.                                        { gedrückt ?                       }
  387.  
  388. VAR
  389.   MouseRegister : Registers;
  390.  
  391. BEGIN
  392.   MouseRegister.AX := 5;
  393.   MouseRegister.BX := 1;
  394.   Intr(MouseIntr, MouseRegister);
  395.   RightButtonPressed := MouseRegister.BX;
  396. END;
  397.  
  398.  
  399. FUNCTION MiddleButtonPressed : WORD;   { wie oft wurde die mittlere       }
  400.                                        { Mouse-Taste seit der letzten     }
  401.                                        { Abfrage gedrückt ?               }
  402.  
  403.  
  404. VAR
  405.   MouseRegister : Registers;
  406.  
  407. BEGIN
  408.   MouseRegister.AX := 5;
  409.   MouseRegister.BX := 2;
  410.   Intr(MouseIntr, MouseRegister);
  411.   MiddleButtonPressed := MouseRegister.BX;
  412. END;
  413.  
  414.  
  415. FUNCTION LeftButtonReleased : WORD;    { wie oft wurde die linke Mouse-   }
  416.                                        { Taste seit der letzten Abfrage   }
  417.                                        { losgelassen ?                    }
  418.  
  419. VAR
  420.   MouseRegister : Registers;
  421.  
  422. BEGIN
  423.   MouseRegister.AX := 6;
  424.   MouseRegister.BX := 0;
  425.   Intr(MouseIntr, MouseRegister);
  426.   LeftButtonReleased := MouseRegister.BX;
  427. END;
  428.  
  429.  
  430. FUNCTION RightButtonReleased : WORD;   { wie oft wurde die rechte Mouse-  }
  431.                                        { Taste seit der letzten Abfrage   }
  432.                                        { losgelassen ?                    }
  433.  
  434. VAR
  435.   MouseRegister : Registers;
  436.  
  437. BEGIN
  438.   MouseRegister.AX := 6;
  439.   MouseRegister.BX := 1;
  440.   Intr(MouseIntr, MouseRegister);
  441.   RightButtonReleased := MouseRegister.BX;
  442. END;
  443.  
  444.  
  445. FUNCTION MiddleButtonReleased : WORD;  { wie oft wurde die mittlere       }
  446.                                        { Mouse-Taste seit der letzten     }
  447.                                        { Abfrage losgelassen ?            }
  448.  
  449. VAR
  450.   MouseRegister : Registers;
  451.  
  452. BEGIN
  453.   MouseRegister.AX := 6;
  454.   MouseRegister.BX := 2;
  455.   Intr(MouseIntr, MouseRegister);
  456.   MiddleButtonReleased := MouseRegister.BX;
  457. END;
  458.  
  459.  
  460. PROCEDURE SetXYMouse(VAR x,y : WORD);  { Mouse-Cursor positionieren       }
  461.  
  462. VAR
  463.   MouseRegister : Registers;
  464.  
  465. BEGIN
  466.   MouseRegister.AX := 4;
  467.   MouseRegister.CX := x;
  468.   MouseRegister.DX := y;
  469.   Intr(MouseIntr, MouseRegister);
  470. END;
  471.  
  472.  
  473. PROCEDURE SetXRange(VAR XMin,XMax : WORD); { minimale und maximale hori-  }
  474.                                            { zontale Position setzen      }
  475.  
  476. VAR
  477.   MouseRegister : Registers;
  478.  
  479. BEGIN
  480.   MouseRegister.AX := 7;
  481.   MouseRegister.CX := XMin;
  482.   MouseRegister.DX := XMax;
  483.   Intr(MouseIntr, MouseRegister);
  484. END;
  485.  
  486.  
  487. PROCEDURE SetYRange(VAR YMin,YMax : WORD); { minimale und maximale verti- }
  488.                                            { kale Position setzen         }
  489.  
  490.  
  491. VAR
  492.   MouseRegister : Registers;
  493.  
  494. BEGIN
  495.   MouseRegister.AX := 8;
  496.   MouseRegister.CX := YMin;
  497.   MouseRegister.DX := YMax;
  498.   Intr(MouseIntr, MouseRegister);
  499. END;
  500.  
  501.  
  502. PROCEDURE SetGraphicCursor                   { Mouse-Cursor für Grafik-    }
  503.           (VAR GraphicCursor : MouseCursor); { modus definieren            }
  504.  
  505. VAR
  506.   MouseRegister : Registers;
  507.  
  508. BEGIN
  509.   MouseRegister.AX := 9;
  510.   MouseRegister.BX := GraphicCursor.XHotSpot;
  511.   MouseRegister.CX := GraphicCursor.YHotSpot;
  512.   MouseRegister.DX := OFS(GraphicCursor);
  513.   MouseRegister.ES := SEG(GraphicCursor);
  514.   Intr(MouseIntr, MouseRegister);
  515. END;
  516.  
  517.  
  518.   PROCEDURE SetTextCursor                       { Mouse-Cursor für Text- }
  519.             (VAR TextCursor : TextCursorType);  { modus definieren       }
  520.  
  521. VAR
  522.   MouseRegister : Registers;
  523.  
  524. BEGIN
  525.   MouseRegister.AX := 10;
  526.   IF TextCursor.HardWareCursor = TRUE THEN
  527.     MouseRegister.BX := 1
  528.   ELSE
  529.     MouseRegister.BX := 0;
  530.  
  531.   MouseRegister.CX := TextCursor.ScreenMask;
  532.   MouseRegister.DX := TextCursor.CursorMask;
  533.   Intr(MouseIntr, MouseRegister);
  534. END;
  535.  
  536.  
  537. FUNCTION GetXMickey : WORD;            { horizontalen Mausbewegungs-      }
  538.                                        { (Mickey-)Zähler lesen            }
  539.  
  540. VAR
  541.   MouseRegister : Registers;
  542.  
  543. BEGIN
  544.   MouseRegister.AX := 11;
  545.   Intr(MouseIntr, MouseRegister);
  546.   GetXMickey := MouseRegister.CX;
  547. END;
  548.  
  549.  
  550. FUNCTION GetYMickey : WORD;            { vertikalen Mausbewegungs-        }
  551.                                        { (Mickey-)Zähler lesen            }
  552.  
  553. VAR
  554.   MouseRegister : Registers;
  555.  
  556. BEGIN
  557.   MouseRegister.AX := 11;
  558.   Intr(MouseIntr, MouseRegister);
  559.   GetYMickey := MouseRegister.DX;
  560. END;
  561.  
  562.  
  563. PROCEDURE SetXYMickey                    { horizontale und vertikale      }
  564.           (VAR XMickey, YMickey : WORD); { Mickey-Einheit setzen          }
  565.  
  566. VAR
  567.   MouseRegister : Registers;
  568.  
  569. BEGIN
  570.   MouseRegister.AX := 15;
  571.   MouseRegister.CX := XMickey;
  572.   MouseRegister.DX := YMickey;
  573.   Intr(MouseIntr, MouseRegister);
  574. END;
  575.  
  576.  
  577. PROCEDURE SetMouseSpeed(VAR MouseSpeed : WORD);  { Schwellenwert für die  }
  578.                                                  { doppelte Cursor-Ge-    }
  579.                                                  { schwindigkeit in       }
  580.                                                  { Mickey/Sekunde         }
  581. VAR
  582.   MouseRegister : Registers;
  583.  
  584. BEGIN
  585.   MouseRegister.AX := 19;
  586.   MouseRegister.DX := MouseSpeed;
  587.   Intr(MouseIntr, MouseRegister);
  588. END;
  589.