
	Section	Test,code
	output	ram:DWfilter
	
	opt	d+
	incdir	"dh0:Data/docs/include_3/"
	include	dos/dos_lib.i
	include	exec/execbase.i
	include	libraries/gadtools.i
	include	libraries/gadtools_lib.i
	include	utility/tagitem.i


	incdir	dh0:include/
	include	system

_LVOLockPubScreen	EQU	-510
_LVOUnlockPubScreen	EQU	-516
_LVOOpenWindowTagList	EQU	-606

ME_Lock		=0
ME_FIB		=4
ME_Temp		=8
ME_OldExamine	=12
ME_OldExNext	=16
ME_DOSBase		=20

CALLGAD	MACRO
	move.l	_GadToolsBase,a6
	jsr	_LVO\1(a6)	
	ENDM
	
Start:	Lea	GFXName,A1
	Moveq	#0,D0
	CALLEXEC	OpenLibrary
	Move.l 	D0,_GfxBase
	Beq	Error

	Lea	DosName,A1
	Moveq	#0,D0
	CALLEXEC	OpenLibrary
	Move.l 	D0,_DOSBase
	Beq	Error

	Lea	IntName,A1
	Moveq	#0,D0
	CALLEXEC	OpenLibrary
	Move.l	D0,_IntuitionBase
	Beq	Error

	Lea	GadToolsName,A1
	Moveq	#0,D0
	CALLEXEC	OpenLibrary
	Move.l	D0,_GadToolsBase
	Beq	Error

	bsr	RemoveOldExam

	bsr	GetLine
	cmp.l	#$80000000,Pat_Dest
	beq	.quit

	bsr	InstallNewExam
		
.quit	Move.l	_GadToolsBase,A1
	CALLEXEC	CloseLibrary

	Move.l	_IntuitionBase,A1
	CALLEXEC	CloseLibrary

	Move.l	_DOSBase,A1
	CALLEXEC	CloseLibrary

	Move.l	_GfxBase,A1
	CALLEXEC	CloseLibrary

Error:	moveq.l	#0,d0
	rts

	*-------------------------------------------------*

RemoveOldExam:

	move.l	_DOSBase,a6
	lea	_LVOExamine(a6),a0
	move.l	2(a0),a1
	sub.l	#My_Examine-MemID,a1
	cmp.l	#"DWPt",(a1)
	bne	.exit
	
	Lea	TempBuf-MemID(a1),a2
	move.l	ME_OldExamine(a2),2(a0)
	lea	_LVOExNext(a6),a0
	move.l	ME_OldExNext(a2),2(a0)

	lea	Pat_Src-MemID(a1),a2
	lea	Gadget00String,a3
.copy	move.b	(a2)+,(a3)+
	tst.b	-1(a2)
	bne	.copy
	
.exit	rts

	*-------------------------------------------------*


InstallNewExam:

	CALLEXEC	Disable

	Lea	MemID,a4
	Lea	TempBuf,a5
	move.l	8(a4),d0
	move.l	#$10001,d1
	CALLEXEC	AllocMem
	move.l	d0,4(a4)
		
	move.l	_DOSBase,a6
	move.l	a6,ME_DOSBase(a5)
	
	move.l	_DOSBase,a6
	lea	_LVOExamine(a6),a0
	move.l	2(a0),ME_OldExamine(a5)
	move.l	4(a4),d0
	add.l	#My_Examine-MemID,d0
	move.l	d0,2(a0)
	
	lea	_LVOExNext(a6),a0
	move.l	2(a0),ME_OldExNext(a5)
	move.l	4(a4),d0
	add.l	#My_ExNext-MemID,d0
	move.l	d0,2(a0)
	
	move.l	a4,a0
	move.l	4(a4),a1
	move.l	8(a4),d0
.copy	move.b	(a0)+,(a1)+
	sub.l	#1,d0
	bne	.copy

	CALLEXEC	Enable
	
	rts
		
	*-------------------------------------------------*

	opt	p+

MemID:	dc.l	"DWPt"
	dc.l	0
	dc.l	MemEnd-MemID
	
My_Examine:	movem.l	a0-a6,-(a7)
	Lea	TempBuf(pc),a1
	move.l	d1,ME_Lock(a1)
	move.l	d2,ME_FIB(a1)
	move.l	#0,ME_Temp(a1)

.file	move.l	ME_OldExamine(a1),a0
	jsr	(a0)
	tst.l	d0
	beq	.err

	Lea	TempBuf(pc),a1
	move.l	ME_FIB(a1),a0
	tst.l	fib_DirEntryType(a0)
	bpl	.err
	bsr	TestFSP
	beq	.err

	move.l	4,a6
	move.l	ThisTask(a6),a0
	move.l	LN_NAME(a0),a0
	cmp.l	#"DW P",(a0)
	bne	.err

	move.l	ME_FIB(a1),a0
	move.l	fib_DiskKey(a0),d2
	
	tst.l	ME_Temp(a1)
	beq	.first

	cmp.l	ME_Temp(a1),d2
	beq	.err
.first	move.l	d2,ME_Temp(a1)
	
	move.l	ME_Lock(a1),d1
	move.l	ME_FIB(a1),d2
	bra	.file
	
.err	movem.l	(a7)+,a0-a6
	rts

	*-------------------------------------------------*

My_ExNext:	movem.l	a0-a6,-(a7)
	Lea	TempBuf(pc),a1
	move.l	d1,ME_Lock(a1)
	move.l	d2,ME_FIB(a1)
	
.file	move.l	ME_Lock(a1),d1
	move.l	ME_FIB(a1),d2
	move.l	ME_OldExNext(a1),a0
	jsr	(a0)
	tst.l	d0
	beq	.err

	move.l	4,a6
	move.l	ThisTask(a6),a0
	move.l	LN_NAME(a0),a0
	cmp.l	#"DW P",(a0)
	bne	.err
	
	Lea	TempBuf(pc),a1
	move.l	ME_FIB(a1),a0
	tst.l	fib_DirEntryType(a0)
	bpl	.err
	bsr	TestFSP
	beq	.file
		
.err	movem.l	(a7)+,a0-a6
	rts
	
	*-------------------------------------------------*

TestFSP:	movem.l	d0/d2-d7/a1-a6,-(a7)
	move.l	ME_FIB(a1),a0
	lea	fib_FileName(a0),a0
	move.l	a0,d2
	lea	Pat_Dest(pc),a2
	move.l	a2,d1
		
	move.l	ME_DOSBase(a1),a6
	jsr	_LVOMatchPatternNoCase(a6)
	move.l	d0,d1
	movem.l	(a7)+,d0/d2-d7/a1-a6		
	tst.l	d1
	rts

TempBuf:	dc.l	0	;ME_Lock
	dc.l	0	;ME_FIB
	dc.l	0	;ME_Temp
	dc.l	0	;ME_OldExamine
	dc.l	0	;ME_OldExNext
	dc.l	0	;ME_DOSBase

Pat_Dest:	ds.b	256
Pat_Src:	ds.b	256
	
MemEnd:	
	opt	p-
		
	*-------------------------------------------------*
	
GetLine:	bsr	SetupScreen
	bsr	OpenProject0Window	
	
	move.l	Project0Wnd,a0
	Move.l	wd_UserPort(a0),_MyWinUserPort

	*-----------------------------------------------*

.WaitLoop	Move.l	_MyWinUserPort,A0
	CALLEXEC	WaitPort
	Move.l	_MyWinUserPort,A0
	CALLGAD	GT_GetIMsg
	Move.l	D0,A1
	Move.l	im_Class(A1),D2	;D2=IDCMP Flags Directly
	Move.w	im_Code(A1),D3	;D3=Data ie key why class=Rawkey
	Move.w	im_Qualifier(A1),D4	;D4=things like CTRL SHIFT
	Move.w	im_MouseX(a1),D5	;D5=MouseX Coordinate
	Move.w	im_MouseY(a1),D6	;D5=MouseY Coordinate
	Move.l	im_IAddress(A1),D7	;D7=Addres of Intuition Obj ie Gadget
	Movem.l	D0-D7/A0-A6,-(A7)
	CALLGAD	GT_ReplyIMsg
	Movem.l	(a7)+,D0-D7/A0-A6

	cmp.l	#GADGETUP,d2
	beq	.exit

	Cmp.l	#CLOSEWINDOW,D2
	bne	.WaitLoop
	
.exit	move.l	Project0Gadgets+(0*4),a0
	move.l	80(a0),a0
	lea	Pat_Src,a1
.loop	move.b	(a0),d0
	cmp.b	#"a",d0
	blt	.upper
	cmp.b	#"z",d0
	bgt	.upper
	and.b	#223,d0	
.upper	move.b	d0,(a1)+
	tst.b	(a0)+
	bne	.loop

	move.l	#Pat_Src,d1
	move.l	#Pat_Dest,d2
	move.l	#256,d3
	CALLDOS	ParsePattern
	
	bsr	CloseProject0Window
	bsr	CloseDownScreen

	Move.l	Scr,A0
	CALLINT	CloseScreen
	rts
		
	*-----------------------------------------------*

	include	dh0:data/pw/data/DWpat.s
	
	*-----------------------------------------------*

_IntuitionBase	dc.l	0
_DOSBase		dc.l	0
_GfxBase		dc.l	0
_GadToolsBase	dc.l	0

_MyWinUserPort	dc.l	0

GFXName		GRAFNAME
IntName		INTNAME
DosName		DOSNAME
GadToolsName	dc.b	"gadtools.library",0
		even

Temp:		dc.l	0

		end