/*
 * _mediach(): force the media 'changed' state on a removable drive.
 *
 * Usage: errcode = _mediach( devno )	- returns 1 if an error occurs
 *
 * Inputs: devno - (0 = 'A:', 1 = 'B:', etc...)
 *
 */

			.globl	_mediach

_mediach:
			move.w	4(sp),d0
			move.w	d0,mydev
			add.b	#'A',d0
			move.b	d0,fspec	; Set drive spec for search
loop:
			clr.l	-(sp)		; Get supervisor mode, leave old SSP
			move.w	#$20,-(sp)	; and 'Super' function code on stack.
			trap	#1
			addq.l	#6,sp
			move.l	d0,-(sp)
			move.w	#$20,-(sp)

			move.l	$472,oldgetbpb
			move.l	$47e,oldmediach
			move.l	$476,oldrwabs

			move.l	#newgetbpb,$472
			move.l	#newmediach,$47e
			move.l	#newrwabs,$476

			; Fopen a file on that drive
			move.w	#0,-(sp)
			move.l	#fspec,-(sp)
			move.w	#$3d,-(sp)
			trap	#1
			addq.l	#8,sp

			; Fclose the handle
			tst.l	d0
			bmi.s	noclose

			move.w	d0,-(sp)
			move.w	#$3e,-(sp)
			trap	#1
			addq.l	#4,sp

noclose:
			moveq	#0,d7
			cmp.l	#newgetbpb,$472		; still installed?
			bne.s	done

			move.l	oldgetbpb,$472		; Error, restore vectors.
			move.l	oldmediach,$47e
			move.l	oldrwabs,$476

			trap	#1 				; go back to user mode
			addq.l	#6,sp				; restore sp
			
			moveq	#1,d0				; 1 = Error
			rts
done:
			trap	#1   				; go back to user mode
			addq.l	#6,sp				; from stack left above

			clr.l	d0   				; No Error

			rts

/*
 * New Getbpb()...if it’s the target device, uninstall vectors.
 * In any case, call normal Getbpb().
 */

newgetbpb:
			move.w	mydev,d0
			cmp.w	4(sp),d0
			bne.s	dooldg

			move.l	oldgetbpb,$472	; Got target device so uninstall.
			move.l	oldmediach,$47e
			move.l	oldrwabs,$476
			
dooldg:			move.l	oldgetbpb,a0		; Go to real Getbpb()
			jmp	(a0)

/*
 * New Mediach()...if it’s the target device, return 2. Else call old.
 */

newmediach:
			move.w	mydev,d0
			cmp.w	4(sp),d0
			bne.s	dooldm
			moveq  #2,d0			; Target device, return 2

			rts

dooldm:
			move.l	oldmediach,a0		; Call old
			jmp	(a0)

/*
 * New Rwabs()...if it’s the target device, return E_CHG (-14)
 */

newrwabs:
			move.w	mydev,d0
			cmp.w	4(sp),d0
			bne.s	dooldr
			moveq	#-14,d0
			rts

dooldr:
			move.l	oldrwabs,a0
			jmp  	(a0)

		.data

fspec:		.dc.b		'X:\\X',0
mydev:		.ds.w		1
oldgetbpb:	.ds.l		1
oldmediach:	.ds.l		1
oldrwabs:	.ds.l		1
			
		.end
