	PAGE 60
	ENTRY WINDOW
	EXT XMIN,YMIN,XMAX,YMAX,XBEAM,YBEAM,IARGT
	.Z80
	.COMMENT #

WINDOW(IX0,IY0,IX1,IY1)

setzt das Plott-Fenster mit der linken unteren Ecke (IX0,IY0) und der 
rechten oberen Ecke (IX1,IY1). Gleichzeitig wird die momentane
Plott-Position XBEAM,YBEAM auf (0,0), d.h. die linke untere Ecke gesetzt.


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 XMIN,YMIN und XMAX,YMAX im Modul PUTP. 
Dabei wird ggf. auf die absoluten Schirmgrenzen XMIN0,YMIN0 und XMAX0,YMAX0 
beschnitten.

A.Herrmann	21.12.83
#
XMIN0	EQU 0
XMAX0	EQU 159
YMIN0	EQU 0
YMAX0	EQU 95
;
WINDOW:	PUSH DE
	LD E,(HL)	; Hole x0
	INC HL
	LD D,(HL)
	CALL MIMAX	; Teste x-Grenzen
	LD (XMIN),DE
	POP HL
	LD E,(HL)	; Hole y0
	INC HL
	LD D,(HL)
	CALL MIMAY	; Teste y-Grenzen
	LD (YMIN),DE
;
	LD A,2		; 2 Argumente
	LD DE,X1	; nach X1,Y1
	CALL IARGT
;
	LD DE,(X1)
	CALL MIMAX	; Teste x-Grenzen
	LD (XMAX),DE
	LD DE,(Y1)
	CALL MIMAY	; Teste y-Grenzen
	LD (YMAX),DE
;
	LD HL,(YMIN)	; Min und Max ggf. vertauschen
	EX DE,HL
	SCF
	CCF
	SBC HL,DE
	JP NC,WINDO1
	LD HL,(YMAX)
	LD (YMAX),DE
	LD (YMIN),HL
WINDO1:	LD HL,(XMAX)
	LD DE,(XMIN)
	SCF
	CCF
	SBC HL,DE
	JP NC,WINDO2
	LD HL,(XMAX)
	LD (XMAX),DE
	LD (XMIN),HL
WINDO2:	LD HL,0		; und Plott-Position setzen.
	LD (XBEAM),HL
	LD (YBEAM),HL
	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 < XMIN ?
	LD HL,XMAX0
	SCF
	CCF
	SBC HL,DE
	JP C,MIMAXX	; x > XMAX ?
	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 < YMIN ?
	LD HL,YMAX0
	SCF
	CCF
	SBC HL,DE
	JP C,MIMAYX	; y > YMAX ?
	RET
MIMAYN:	LD DE,YMIN0
	RET
MIMAYX:	LD DE,YMAX0
	RET
;
	END
