(*-------------------------------------------------------------------------*)
(*                                                                         *)
(*  Amiga Oberon Interface Module:                    Date: 02-Nov-92      *)
(*                                                                         *)
(*   © 1992 by Fridtjof Siebert                                            *)
(*   updated for V39 by hartmut Goebel                                     *)
(*                                                                         *)
(*-------------------------------------------------------------------------*)

MODULE Layers;

IMPORT e * := Exec,
       g * := Graphics,
       u * := Utility;

TYPE
  LONGBOOL * = e.LONGBOOL;

CONST
  layersName * = "layers.library";
  LTRUE * = e.LTRUE;
  LFALSE * = e.LFALSE;

VAR
  base * : e.LibraryPtr;

PROCEDURE InitLayers        *{base,- 30}(li{8}         : g.LayerInfoPtr);
PROCEDURE CreateUpfrontLayer*{base,- 36}(li{8}         : g.LayerInfoPtr;
                                         bm{9}         : g.BitMapPtr;
                                         x0{0}         : LONGINT;
                                         y0{1}         : LONGINT;
                                         x1{2}         : LONGINT;
                                         y1{3}         : LONGINT;
                                         flags{4}      : SET;
                                         bm2{10}       : g.BitMapPtr): g.LayerPtr;
PROCEDURE CreateBehindLayer *{base,- 42}(li{8}         : g.LayerInfoPtr;
                                         bm{9}         : g.BitMapPtr;
                                         x0{0}         : LONGINT;
                                         y0{1}         : LONGINT;
                                         x1{2}         : LONGINT;
                                         y1{3}         : LONGINT;
                                         flags{4}      : SET;
                                         bm2{10}       : g.BitMapPtr): g.LayerPtr;
PROCEDURE UpfrontLayer      *{base,- 48}(layer{9}      : g.LayerPtr): BOOLEAN;
PROCEDURE BehindLayer       *{base,- 54}(layer{9}      : g.LayerPtr): BOOLEAN;
PROCEDURE MoveLayer         *{base,- 60}(layer{9}      : g.LayerPtr;
                                         dx{0}         : LONGINT;
                                         dy{1}         : LONGINT): BOOLEAN;
PROCEDURE SizeLayer         *{base,- 66}(layer{9}      : g.LayerPtr;
                                         dx{0}         : LONGINT;
                                         dy{1}         : LONGINT): BOOLEAN;
PROCEDURE ScrollLayer       *{base,- 72}(layer{9}      : g.LayerPtr;
                                         dx{0}         : LONGINT;
                                         dy{1}         : LONGINT);
PROCEDURE BeginUpdate       *{base,- 78}(l{8}          : g.LayerPtr): BOOLEAN;
PROCEDURE EndUpdate         *{base,- 84}(layer{8}      : g.LayerPtr;
                                         flag{0}       : LONGBOOL);
PROCEDURE DeleteLayer       *{base,- 90}(layer{9}      : g.LayerPtr): BOOLEAN;
PROCEDURE LockLayer         *{base,- 96}(layer{9}      : g.LayerPtr);
PROCEDURE UnlockLayer       *{base,-102}(layer{8}      : g.LayerPtr);
PROCEDURE LockLayers        *{base,-108}(li{8}         : g.LayerInfoPtr);
PROCEDURE UnlockLayers      *{base,-114}(li{8}         : g.LayerInfoPtr);
PROCEDURE LockLayerInfo     *{base,-120}(li{8}         : g.LayerInfoPtr);
PROCEDURE SwapBitsRastPortClipRect*{base,-126}(rp{8}   : g.RastPortPtr;
                                         VAR cr{9}     : g.ClipRect);
PROCEDURE WhichLayer        *{base,-132}(li{8}         : g.LayerInfoPtr;
                                         x{0}          : LONGINT;
                                         y{1}          : LONGINT): g.LayerPtr;
PROCEDURE UnlockLayerInfo   *{base,-138}(VAR li{8}     : g.LayerInfo);
PROCEDURE NewLayerInfo      *{base,-144}(): g.LayerInfoPtr;
PROCEDURE DisposeLayerInfo  *{base,-150}(li{8}         : g.LayerInfoPtr);
PROCEDURE FattenLayerInfo   *{base,-156}(li{8}         : g.LayerInfoPtr);
PROCEDURE ThinLayerInfo     *{base,-162}(li{8}         : g.LayerInfoPtr);
PROCEDURE MoveLayerInFrontOf*{base,-168}(layertomove{8}: g.LayerPtr;
                                         otherlayer{9} : g.LayerPtr): BOOLEAN;
PROCEDURE InstallClipRegion *{base,-174}(layer{8}      : g.LayerPtr;
                                         region{9}     : g.RegionPtr): g.RegionPtr;
(* ---   functions in V36 or higher  (distributed as Release 2.0)   --- *)
(* --- REMEMBER: You are to check the version BEFORE you use this ! --- *)
PROCEDURE MoveSizeLayer     *{base,-180}(layer{8}      : g.LayerPtr;
                                         dx{0}         : LONGINT;
                                         dy{1}         : LONGINT;
                                         dw{2}         : LONGINT;
                                         dh{3}         : LONGINT): BOOLEAN;
PROCEDURE CreateUpfrontHookLayer*{base,-186}(li{8}     : g.LayerInfoPtr;
                                         bm{9}         : g.BitMapPtr;
                                         x0{0}         : LONGINT;
                                         y0{1}         : LONGINT;
                                         x1{2}         : LONGINT;
                                         y1{3}         : LONGINT;
                                         flags{4}      : SET;
                                         hook{11}      : u.HookPtr;
                                         bm2{10}       : g.BitMapPtr): g.LayerPtr;
PROCEDURE CreateBehindHookLayer*{base,-192}(li{8}      : g.LayerInfoPtr;
                                         bm{9}         : g.BitMapPtr;
                                         x0{0}         : LONGINT;
                                         y0{1}         : LONGINT;
                                         x1{2}         : LONGINT;
                                         y1{3}         : LONGINT;
                                         flags{4}      : SET;
                                         hook{11}      : u.HookPtr;
                                         bm2{10}       : g.BitMapPtr): g.LayerPtr;
PROCEDURE InstallLayerHook  *{base,-198}(layer{8}      : g.LayerPtr;
                                         hook{9}       : u.HookPtr): u.HookPtr;

(*--- functions in V39 or higher (beta release for developers only) ---*)

PROCEDURE InstallLayerInfoHook*{base,-0CCH}(li{8}      : g.LayerInfoPtr;
                                            hook{9}    : u.HookPtr): u.HookPtr;
PROCEDURE SortLayerCR       *{base,-0D2H}(layer{8}     : g.LayerPtr;
                                          dx{0}        : LONGINT;
                                          dy{1}        : LONGINT);
PROCEDURE DoHookClipRects   *{base,-0D8H}(hook{8}      : u.HookPtr;
                                          rport{9}     : g.RastPortPtr;
                                          rect{10}     : g.Rectangle);


(* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)

BEGIN

 base := e.OpenLibrary(layersName,33);
 IF base=NIL THEN HALT(0) END;

CLOSE

 IF base#NIL THEN e.CloseLibrary(base) END;

END Layers.

