home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 04 / praxis / zoom.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-04-11  |  3.3 KB  |  146 lines

  1. (********************************************************)
  2. (*                      ZOOM.PAS                        *)
  3. (*       Unit zur Ansteuerung des Hardwarezoom          *)
  4. (*           entsprechener VGA-Grafikkarten.            *)
  5. (*            (C) 1990 M.Schlöter & toolbox             *)
  6.  
  7. UNIT Zoom;
  8.  
  9. INTERFACE
  10.  
  11.   USES Dos;
  12.  
  13.   (* Datentyp für Beschreibung der               *)
  14.   (* Eigenschaften des Zoom-Fensters:            *)
  15.   (*    Lage der beiden Fenster-Eckpunkte,       *)
  16.   (*    Vergrößerungsfaktor,                     *)
  17.   (*    Linke obere Ecke des                     *)
  18.   (*    zu vergrößernden Bereichs                *)
  19.   TYPE ZoomWindow = RECORD
  20.                       x1, y1,
  21.                       x2, y2,
  22.                       Faktor,
  23.                       xoffs, yoffs : INTEGER;
  24.                     END;
  25.  
  26.   (* Der Interface-Interrupt des Zoom-Treibers *)
  27.   VAR ZoomInt : INTEGER;
  28.  
  29.   (* Zoomfaktor wählen *)
  30.   PROCEDURE Zoomen(faktor : INTEGER);
  31.  
  32.   (* Fenster so positionieren, daß der Punkt x,y so *)
  33.   (* gut wie möglich in der Bildschirmmitte liegt.  *)
  34.   PROCEDURE Zentrieren(x,y : INTEGER);
  35.  
  36.   (* Zoomen  beenden *)
  37.   PROCEDURE ZoomenEnde;
  38.  
  39.   (* Aktuelle Vergrößerung erfragen *)
  40.  
  41.   FUNCTION ZoomFaktor : INTEGER;
  42.  
  43.   (* Interaktiven Modus des Zoomtreibers aktivieren *)
  44.   PROCEDURE ZoomInteraktiv;
  45.  
  46.   (* Werte des Zoom-Fensters erfragen *)
  47.   PROCEDURE HoleZoomWindow(VAR Window : ZoomWindow);
  48.  
  49.   (* Werte des Zoom-Fensters setzen *)
  50.   PROCEDURE SetzeZoomWindow(Window : ZoomWindow);
  51.  
  52.   (* Ist die Applikationstaste grdrückt ? *)
  53.   FUNCTION AppTasteStatus : BOOLEAN;
  54.  
  55.   (* Koordinaten des Punktes, der links oben im *)
  56.   (* Zoomfenster auftauchen soll.               *)
  57.   PROCEDURE ZoomOffset(xoffs, yoffs : INTEGER);
  58.  
  59. IMPLEMENTATION
  60.  
  61.   VAR Regs : Registers;
  62.  
  63.   PROCEDURE Zoomen(Faktor : INTEGER);
  64.   BEGIN
  65.     Regs.AX := 0;
  66.     Regs.BX := WORD(Faktor);
  67.     Intr(ZoomInt,Regs);
  68.   END;
  69.  
  70.  
  71.   PROCEDURE Zentrieren(x,y : INTEGER);
  72.   BEGIN
  73.     Regs.AX := 1;
  74.     Regs.BX := WORD(x);
  75.     Regs.CX := WORD(y);
  76.     Intr(ZoomInt,Regs);
  77.   END;
  78.  
  79.  
  80.   PROCEDURE ZoomenEnde;
  81.   BEGIN
  82.     Regs.AX := 2;
  83.     Intr(ZoomInt,Regs);
  84.   END;
  85.  
  86.  
  87.   FUNCTION ZoomFaktor : INTEGER;
  88.   BEGIN
  89.     Regs.AX := 3;
  90.     Intr(ZoomInt,Regs);
  91.     ZoomFaktor := INTEGER(Regs.AX);
  92.   END;
  93.  
  94.  
  95.   PROCEDURE ZoomInteraktiv;
  96.   BEGIN
  97.     Regs.AX := 4;
  98.     Intr(ZoomInt,Regs);
  99.   END;
  100.  
  101.  
  102.   PROCEDURE HoleZoomWindow(VAR Window : ZoomWindow);
  103.   BEGIN
  104.     Regs.AX := 5;
  105.     Regs.BX := Seg(Window);
  106.     Regs.CX := Ofs(Window);
  107.     Intr(ZoomInt,Regs);
  108.   END;
  109.  
  110.  
  111.   PROCEDURE SetzeZoomWindow(Window : ZoomWindow);
  112.   BEGIN
  113.     Regs.AX := 6;
  114.     Regs.BX := Seg(Window);
  115.     Regs.CX := Ofs(Window);
  116.     Intr(ZoomInt,Regs);
  117.   END;
  118.  
  119.  
  120.   FUNCTION AppTasteStatus : BOOLEAN;
  121.   BEGIN
  122.     Regs.AX := 7;
  123.     Intr(ZoomInt,Regs);
  124.     AppTasteStatus := INTEGER(Regs.AX) = 1;
  125.   END;
  126.  
  127.  
  128.   PROCEDURE ZoomOffset(xoffs, yoffs : INTEGER);
  129.   BEGIN
  130.     Regs.AX := 8;
  131.     Regs.BX := WORD(xoffs);
  132.     Regs.CX := WORD(yoffs);
  133.     Intr(ZoomInt,Regs);
  134.   END;
  135.  
  136.  
  137. BEGIN
  138.   (* Interface-Vektor des residenten *)
  139.   (* Zoom-Tools erfragen.            *)
  140.   Regs.AH := $FF;
  141.   Intr($16,Regs);
  142.   ZoomInt := INTEGER(Regs.AL)+1;
  143. END.
  144. (*******************************************************)
  145. (*                  Ende ZOOM.PAS                      *)
  146.