unit Layers;

INTERFACE
uses Exec, Graphics;


var
	LayersBase: pLibrary;


procedure InitLayers (li: pLayer_Info);
function CreateUpfrontLayer
		(li: pLayer_Info;
		bm: pBitMap;
		x0: longint;
		y0: longint;
		x1: longint;
		y1: longint;
		flags: longint;
		bm2: pBitMap): pLayer;

function CreateBehindLayer
		(li: pLayer_Info;
		bm: pBitMap;
		x0: longint;
		y0: longint;
		x1: longint;
		y1: longint;
		flags: longint;
		bm2: pBitMap): pLayer;

function UpfrontLayer
		(li: longint;
		layer: pLayer): longint;

function BehindLayer
		(li: longint;
		layer: pLayer): longint;

function MoveLayer
		(li: longint;
		layer: pLayer;
		dx: longint;
		dy: longint): longint;

function SizeLayer
		(li: longint;
		layer: pLayer;
		dx: longint;
		dy: longint): longint;

procedure ScrollLayer
		(li: longint;
		layer: pLayer;
		dx: longint;
		dy: longint);

function BeginUpdate (layer: pLayer): boolean;
procedure EndUpdate
		(layer: pLayer;
		flag: word);

function DeleteLayer
		(li: longint;
		layer: pLayer): longint;

procedure LockLayer
		(li: longint;
		layer: pLayer);

procedure UnlockLayer (layer: pLayer);
procedure LockLayers (li: pLayer_Info);
procedure UnlockLayers (li: pLayer_Info);
procedure LockLayerInfo (li: pLayer_Info);
procedure SwapBitsRastPortClipRect
		(rp: pRastPort;
		cr: pClipRect);

function WhichLayer
		(li: pLayer_Info;
		x: integer;
		y: integer): pLayer;

procedure UnlockLayerInfo (li: pLayer_Info);
function NewLayerInfo: pLayer_Info;
procedure DisposeLayerInfo (li: pLayer_Info);
function FattenLayerInfo (li: pLayer_Info): longint;
procedure ThinLayerInfo (li: pLayer_Info);
function MoveLayerInFrontOf
		(layer_to_move: pLayer;
		layer_to_be_infront_of: pLayer): longint;

function InstallClipRegion
		(layer: pLayer;
		region: pRegion): pRegion;



IMPLEMENTATION
procedure InitLayers; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$1E(a6)
	move.l	(sp)+,a6
end;

function CreateUpfrontLayer; xassembler;
asm
	movem.l	d3-d4/a2/a6,-(sp)
	lea		$14(sp),a6
	move.l	(a6)+,a2
	move.l	(a6)+,d4
	move.l	(a6)+,d3
	move.l	(a6)+,d2
	move.l	(a6)+,d1
	move.l	(a6)+,d0
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$24(a6)
	move.l	d0,$34(sp)
	movem.l	(sp)+,d3-d4/a2/a6
end;

function CreateBehindLayer; xassembler;
asm
	movem.l	d3-d4/a2/a6,-(sp)
	lea		$14(sp),a6
	move.l	(a6)+,a2
	move.l	(a6)+,d4
	move.l	(a6)+,d3
	move.l	(a6)+,d2
	move.l	(a6)+,d1
	move.l	(a6)+,d0
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$2A(a6)
	move.l	d0,$34(sp)
	movem.l	(sp)+,d3-d4/a2/a6
end;

function UpfrontLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$30(a6)
	move.l	d0,$10(sp)
	move.l	(sp)+,a6
end;

function BehindLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$36(a6)
	move.l	d0,$10(sp)
	move.l	(sp)+,a6
end;

function MoveLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,d1
	move.l	(a6)+,d0
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$3C(a6)
	move.l	d0,$18(sp)
	move.l	(sp)+,a6
end;

function SizeLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,d1
	move.l	(a6)+,d0
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$42(a6)
	move.l	d0,$18(sp)
	move.l	(sp)+,a6
end;

procedure ScrollLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,d1
	move.l	(a6)+,d0
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$48(a6)
	move.l	(sp)+,a6
end;

function BeginUpdate; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$4E(a6)
	tst.l	d0
	sne		d0
	neg.b	d0
	move.b	d0,$C(sp)
	move.l	(sp)+,a6
end;

procedure EndUpdate; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.w	(a6)+,d0
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$54(a6)
	move.l	(sp)+,a6
end;

function DeleteLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$5A(a6)
	move.l	d0,$10(sp)
	move.l	(sp)+,a6
end;

procedure LockLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$60(a6)
	move.l	(sp)+,a6
end;

procedure UnlockLayer; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$66(a6)
	move.l	(sp)+,a6
end;

procedure LockLayers; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$6C(a6)
	move.l	(sp)+,a6
end;

procedure UnlockLayers; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$72(a6)
	move.l	(sp)+,a6
end;

procedure LockLayerInfo; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$78(a6)
	move.l	(sp)+,a6
end;

procedure SwapBitsRastPortClipRect; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$7E(a6)
	move.l	(sp)+,a6
end;

function WhichLayer; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.w	(a6)+,d1
	move.w	(a6)+,d0
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$84(a6)
	move.l	d0,$10(sp)
	move.l	(sp)+,a6
end;

procedure UnlockLayerInfo; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$8A(a6)
	move.l	(sp)+,a6
end;

function NewLayerInfo; xassembler;
asm
	move.l	a6,-(sp)
	move.l	LayersBase,a6
	jsr		-$90(a6)
	move.l	d0,8(sp)
	move.l	(sp)+,a6
end;

procedure DisposeLayerInfo; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$96(a6)
	move.l	(sp)+,a6
end;

function FattenLayerInfo; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$9C(a6)
	move.l	d0,$C(sp)
	move.l	(sp)+,a6
end;

procedure ThinLayerInfo; xassembler;
asm
	move.l	a6,-(sp)
	move.l	8(sp),a0
	move.l	LayersBase,a6
	jsr		-$A2(a6)
	move.l	(sp)+,a6
end;

function MoveLayerInFrontOf; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$A8(a6)
	move.l	d0,$10(sp)
	move.l	(sp)+,a6
end;

function InstallClipRegion; xassembler;
asm
	move.l	a6,-(sp)
	lea		8(sp),a6
	move.l	(a6)+,a1
	move.l	(a6)+,a0
	move.l	LayersBase,a6
	jsr		-$AE(a6)
	move.l	d0,$10(sp)
	move.l	(sp)+,a6
end;

end.
