	PAGE 60
	ENTRY WINDWG
	EXT XMING,YMING,XMAXG,YMAXG,IARGT
	.Z80
	.COMMENT #

WINDWG(IX0,IY0,IX1,IY1)

setzt das Grauwert-Fenster mit der linken oberen (!!) Ecke (IX0,IY0) und der 
rechten unteren (!!) Ecke (IX1,IY1).

		Die Koordinaten beginnen mit 1,1 (links oben!).
ACHTUNG!!	Die Pixel sind zwar mit x,y-Koordinaten anzugeben,
		aber y=1 ist oben und waechst nach unten.

Die Punktkoordinaten (2-Byte-Integer) sind absolute Schirmkoordinaten
und werden nach den Regeln von Microsoft-F80 uebergeben. Demnach enthaelt
- HL die Adresse von IX0
- DE die Adresse von IY0
- BC die Adresse der 4 Bytes mit den Pointern auf IX1 und IY1.

Die Routine benutzt die Integer-Argument Transfer-Routine IARGT und setzt 
die externen Variablen XMING,YMING und XMAXG,YMAXG im Modul PUTG mit den
zugehoerigen Werten -1 (!!).

Dabei wird ggf. auf die absoluten Schirmgrenzen XMIN0,YMIN0 und XMAX0,YMAX0 
beschnitten. Das maximale Grauwert-Fenster ist 80x48 Pixel gross (Status-
Zeile bleibt ausgenommen).

Der Wertebereich von IX0,IY0,IX1,IY1 ist demnach 1..80 bzw. 1..48,
der Wertebereich von XMIN,YMIN,XMAX,YMAX ist 0..79 bzw. 0..47.

A.Herrmann	23.02.85
#
XMIN0	EQU 0
XMAX0	EQU 79
YMIN0	EQU 0
YMAX0	EQU 47
;
WINDWG:	PUSH DE
	LD E,(HL)
	INC HL
	LD D,(HL)
	DEC DE		; DE = x0-1
	CALL MIMAX	; Teste x-Grenzen
	LD (XMING),DE
	POP HL
	LD E,(HL)
	INC HL
	LD D,(HL)
	DEC DE		; DE = y0-1
	CALL MIMAY	; Teste y-Grenzen
	LD (YMING),DE
;
	LD A,2		; 2 Argumente
	LD DE,X1	; nach X1,Y1
	CALL IARGT
;
	LD DE,(X1)
	DEC DE		; DE = x1-1
	CALL MIMAX	; Teste x-Grenzen
	LD (XMAXG),DE
	LD DE,(Y1)
	DEC DE		; DE = y1-1
	CALL MIMAY	; Teste y-Grenzen
	LD (YMAXG),DE
;
	LD HL,(YMING)	; Min und Max ggf. vertauschen
	EX DE,HL
	SCF
	CCF
	SBC HL,DE
	JP NC,WINDW1
	LD HL,(YMAXG)
	LD (YMAXG),DE
	LD (YMING),HL
WINDW1:	LD HL,(XMAXG)
	LD DE,(XMING)
	SCF
	CCF
	SBC HL,DE
	JP NC,WINDW2
	LD HL,(XMAXG)
	LD (XMAXG),DE
	LD (XMING),HL
WINDW2:	RET
;
X1:	DW 0		; 3. und
Y1:	DW 0		; 4. Parameter
;
;	MIMAX
; testet die x-Koord. in DE gegen die absoluten Schirmgrenzen.
;
MIMAX:	LD HL,XMIN0
	SCF
	SBC HL,DE
	JP P,MIMAXN	; x < XMING ?
	LD HL,XMAX0
	SCF
	CCF
	SBC HL,DE
	JP C,MIMAXX	; x > XMAXG ?
	RET
MIMAXN:	LD DE,XMIN0
	RET
MIMAXX:	LD DE,XMAX0
	RET
;
;	MIMAY
; testet die y-Koord. in DE gegen die absoluten Schirmgrenzen.
;
MIMAY:	LD HL,YMIN0
	SCF
	SBC HL,DE
	JP P,MIMAYN	; y < YMING ?
	LD HL,YMAX0
	SCF
	CCF
	SBC HL,DE
	JP C,MIMAYX	; y > YMAXG ?
	RET
MIMAYN:	LD DE,YMIN0
	RET
MIMAYX:	LD DE,YMAX0
	RET
;
	END
