
* Maxon C++ Library:
* Modul "extstream"
* Jens Gelhar 29.04.92, 08.04.94

	xdef	_0dt__fstreambase__T
	xdef	_0dt__ifstream__T,_0dt__ofstream__T,_0dt__fstream__T
	xdef	_0ct__ifstream__T,_0ct__ofstream__T,_0ct__fstream__T
	xdef	_0ct__ifstream__TPCci,_0ct__ofstream__TPCci,_0ct__fstream__TPCci
	xdef	close__fstreambase__T
	xdef	open__fstreambase__TPCci

	xref	fclose__P06stream,fopen__PCcPCc

_0dt__fstream__T:
	addq.l #6,4(a7)		; nur Basisklasse destruieren
_0dt__ifstream__T:
_0dt__ofstream__T:
	addq.l #6,4(a7)		; Basisklasse "fstreambase"
_0dt__fstreambase__T:
close__fstreambase__T:
	move.l	4(a7),a0
	move.l	(a0),a0		; virtuelle Basisklasse "ios"
	tst.l	(a0)
	beq.b	.clo0
	move.l	(a0),-(a7)
	clr.l	(a0)
	jsr	fclose__P06stream
	addq.l	#4,a7
.clo0	rts

_0ct__ofstream__T:
_0ct__ifstream__T:
	movem.l	a0/d0,-(a7)
	move.l	8+4(a7),a0
	clr.b	5(a0)		; Fehlerflag/Basis löschen
	move.b	4(a0),d0
	or.b	6+4(a0),d0	; Lizenz zum Töten? (soll heißen: darf virtuelle Basisklasse "ios" hier konstruiert werden?)
	and.w	#1,d0
	beq.b	ctnix
	bra.b	ctIn

_0ct__fstream__T:
	movem.l	a0/d0,-(a7)
	move.l	8+4(a7),a0
	clr.b	5(a0)		; Fehlerflag/Basis löschen
	clr.b	5+6(a0)		; Fehlerflag/Basis löschen
	move.b	4(a0),d0
	or.b	6+4(a0),d0	; Lizenz zum Töten?
	or.b	12+4(a0),d0
	and.w	#1,d0
	beq.b	ctnix
ctIn	move.l	(a0),a0
	clr.l	(a0)		; Filehandle löschen
	movem.l	(a7)+,a0/d0
	rts

_0ct__ofstream__TPCci:
_0ct__ifstream__TPCci:
	movem.l	a0/d0,-(a7)
	move.l	8+4(a7),a0	; "this"
	move.b	4(a0),d0
	or.b	6+4(a0),d0	; Lizenz zum Töten?
	and.w	#1,d0
	bne.b	ctOpen
ctnix	movem.l (a7)+,d0/a0
	rts

_0ct__fstream__TPCci:
	movem.l	a0/d0,-(a7)
	move.l	8+4(a7),a0	; "this"
	move.b	4(a0),d0
	or.b	6+4(a0),d0	; Lizenz zum Töten?
	or.b	12+4(a0),d0
	and.w	#1,d0
	beq.s	ctnix
	clr.b	6+5(a0)		; Fehlerflag/Basis
ctOpen	; Datei öffnen:
	clr.b	5(a0)		; Fehlerflag/Basis
	move.l	8+4+8(a7),-(a7)
	move.l	8+4+8(a7),-(a7)
	move.l	a0,-(a7)
	jsr	open__fstreambase__TPCci(pc)
	lea	12(a7),a7
	bra.b	ctnix

open__fstreambase__TPCci:
	; Stack-Argumente:
	; 0 L "this", 4 L Name, 8 i Mode
	move.l	a0,-(a7)
	moveq	#7,d0
	and.w	4+4+8+2(a7),d0		; Modus:
	asl.l	#1,d0
	move.w	str(pc,d0),d0
	clr.l	-(a7)
	move.w	d0,(a7)
	move.l	a7,-(a7)		; Modusstring
	move.l	8+4+4+4(a7),-(a7)	; Name
	jsr	fopen__PCcPCc
	lea	12(a7),a7
	move.l	4+4(a7),a0		; _extstreamclass
	move.l	(a0),a0			; _filebufclass
	move.l	d0,(a0)
	move.l	(a7)+,a0
	rts

str:	dc.b 'r',0	; -
	dc.b 'r',0	; in
	dc.b 'w',0	;    out
	dc.b 'r+'	; in|out
	dc.b 'a',0	;        app
	dc.b 'a+'	; in|    app
	dc.b 'a',0	;    out|app
	dc.b 'w+'	; in|out|app

	end

