


		section "Recognizer",code

	incdir "includes:"
	include	"asm:datamaster.library/datamaster.i"
	include	"asm:datamaster.library/datamaster_lib.i"

;EXEC
	incdir "includes:"
	include "exec/exec_lib.i"
	include	"exec/exec.i"

		RECOHEADER reco
reco:	dc.l	DMR_DMVersion,2
	dc.l	DMR_Version,1<<16+2
	dc.l	DMR_SubTypesTable,CheckTable
	dc.l	DMR_Name,exename
	dc.l	DMR_Descr,exeDescr
	dc.l	DMR_Flags,RECOF_CheckData+RECOF_CheckPatt
	dc.l	DMR_Class,DMCLASSF_SYSTEM
	dc.l	DMR_Pri,PRI_FREQUENT
	dc.l	TAG_END


prog_c:
lib_c:
dev_c:
	move.l	(a0),d1
	cmp.l	#$3f3,d1
	beq.s	.ok
	moveq	#0,d0
	rts
.ok:	move.l	a0,a1
	cmp.l	#512,d0
	blo.s	.ok2
	move.l	#512,d0		;d0= min(d0,512)
.ok2:	lsr.l	#1,d0		;/2
.loop:	move.w	(a0)+,d1
	cmp.w	#RTC_MATCHWORD,d1
	beq.s	.found
	dbra	d0,.loop
	bra.s	.end0
	
;I don't check for the validity of the "magic" APTR after RTC_MATCHWORD
;but it's Ok anyway.

.found:
	lea	-2(a0),a0
	move.b	RT_TYPE(a0),d0

	lea	lib_n(pc),a1
	cmp.b	#NT_LIBRARY,d0
	beq.s	.end

	lea	dev_n(pc),a1
	cmp.b	#NT_DEVICE,d0
	beq.s	.end

.end0:	lea	exename(pc),a1

.end:	move.l	a1,d0
	rts

exeDescr:
	dc.b	"Progs,libs,handlers etc...!",0
exename:
	dc.b	"Executable",0

dev_p:	dc.b	"*."
dev_n:	dc.b	"Device",0,$ff

lib_p:	dc.b	"*."
lib_n:	dc.b	"Library",0,$ff


	even


CheckTable:
	dc.l	prog_c,-1,exename
	dc.l	lib_c,lib_p,lib_n
	dc.l	dev_c,dev_p,dev_n
	dc.l	0,0,0

