 IFND ERROR_I
ERROR_I=1
;*---------------------------------------------------------------------------
;  :Author.	Bert Jahn
;  :Contens.	macros for error handling
;  :EMail.	wepl@kagi.com
;  :Address.	Franz-Liszt-Straße 16, Rudolstadt, 07404, Germany
;  :Version.	$Id: error.i 1.3 1999/01/17 14:21:50 jah Exp jah $
;  :History.	30.12.95 separated from WRip.asm
;		18.01.96 IFD Label replaced by IFD Symbol
;			 because Barfly optimize problems
;		17.01.99 _PrintError* optimized
;  :Requires.	-
;  :Copyright.	© 1995,1996,1997,1998 Bert Jahn, All Rights Reserved
;  :Language.	68000 Assembler
;  :Translator.	Barfly V1.130
;---------------------------------------------------------------------------*
*##
*##	error.i
*##
*##	_PrintError	subsystem(d0) error(a0) operation(a1)
*##	_PrintErrorDOS	operation(a0)
*##	_PrintErrorTD	error(d0.b) operation(a0)

	dc.b	"$Id: error.i 1.3 1999/01/17 14:21:50 jah Exp jah $"
	EVEN

		IFND	DOSIO_I
			INCLUDE	dosio.i
		ENDC
		IFND	STRINGS_I
			INCLUDE	strings.i
		ENDC
		IFND	DEVICES_I
			INCLUDE	devices.i
		ENDC

;----------------------------------------
; Ausgabe eines Fehlers
; Übergabe :	D0 = CPTR Subsystem | NIL
;		A0 = CPTR Art des Fehlers | NIL
;		A1 = CPTR bei Operation | NIL
; Rückgabe :	-

PrintError	MACRO
	IFND	PRINTERROR
PRINTERROR = 1
		IFND	PRINTARGS
			PrintArgs
		ENDC

_PrintError	movem.l	d0/a1,-(a7)
		move.l	a0,-(a7)
		lea	(.txt),a0
		move.l	a7,a1
		bsr	_PrintArgs
		add.w	#12,a7
		rts
		
.txt		dc.b	155,"1m%s",155,"22m (%s/%s)",10,0
		EVEN
	ENDC
		ENDM

;----------------------------------------
; Ausgabe eines DOS-Fehlers
; Übergabe :	A0 = CPTR Operation die zu Fehler führte | NIL
; Rückgabe :	-

PrintErrorDOS	MACRO
	IFND	PRINTERRORDOS
PRINTERRORDOS = 1
		IFND	PRINTERROR
			PrintError
		ENDC

_PrintErrorDOS	movem.l	d2-d4/a0/a6,-(a7)
		move.l	(gl_dosbase,GL),a6
		jsr	(_LVOIoErr,a6)
		move.l	d0,d1			;code
		moveq	#0,d2			;header
		moveq	#64,d4			;buffer length
		sub.l	d4,a7
		move.l	a7,d3			;buffer
		jsr	(_LVOFault,a6)
		lea	(_dosname),a0
		move.l	a0,d0			;subsystem
		move.l	a7,a0			;error
		move.l	(12,a7,d4.l),a1		;operation
		bsr	_PrintError
		add.l	d4,a7
		movem.l	(a7)+,d2-d4/a0/a6
		rts
	ENDC
		ENDM

;----------------------------------------
; Ausgabe eines Trackdisk Errors
; Übergabe :	D0 = BYTE errcode
;		A0 = CPTR Operation | NIL
; Rückgabe :	-

PrintErrorTD	MACRO
	IFND	PRINTERRORTD
PRINTERRORTD=1
		IFND	DOSTRING
			DoString
		ENDC
		IFND	PRINTERROR
			PrintError
		ENDC

_PrintErrorTD	move.l	a0,-(a7)
		ext.w	d0
		lea	(_trackdiskerrors),a0
		bsr	_DoString
		move.l	d0,a0			;error
		lea	(.devaccess),a1
		move.l	a1,d0			;subsystem
		move.l	(a7)+,a1		;operation
		bra	_PrintError

.devaccess	dc.b	'device access',0
		EVEN
		IFND	TRACKDISKERRORS
			trackdiskerrors
		ENDC
	ENDC
		ENDM
 ENDC
