
 GET	OS:Hdr.Filter
 AREA	|ObjAsm$$code|, CODE, READONLY
 IMPORT	|__RelocCode|

 EXPORT	rm_init
 EXPORT	rm_final
 IMPORT	match

 GBLA	no_messages
no_messages SETA 0
 MACRO
 add_message $msg
no_messages SETA no_messages+1
message$no_messages = "$msg", 0
 ALIGN
 MEND

 GET	hdr.masklist

rm_title
 = "MaskThrowback", 0
 ALIGN

event_mask * -1 :AND: (:NOT: (1<<17 :OR: 1<<18 :OR: 1<<19))

rm_init
 stmfd	sp!, {lr}
 bl	|__RelocCode|
 adr	r0, rm_title
 adr	r1, filter
 mov	r2, #0
 mov	r3, #0
 mov	r4, #event_mask
 swi	XFilter_RegisterPostFilter
 mov	r0, #0
 ldmfd	sp!, {pc}

rm_final
 stmfd	sp!, {lr}
 adr	r0, rm_title
 adr	r1, filter
 mov	r2, #0
 mov	r3, #0
 mov	r4, #event_mask
 swi	XFilter_DeRegisterPostFilter
 mov	r0, #0
 ldmfd	sp!, {pc}


message
 DCD	&42583

filter
 ; is this a wimp message?
 cmp	r0, #17
 cmpne	r0, #18
 cmpne	r0, #19
 movnes	pc, lr
 stmfd	sp!, {r3-r4, lr}

 ; is this a throwback message?
 ldr	r3, [r1, #16]
 ldr	r4, message
 cmp	r3, r4
 ldmnefds sp!, {r3-r4, pc}

 ; check if the description matches
 WHILE no_messages>0
 stmfd	sp!, {r0-r3}
 adr	r0, message$no_messages
 add	r1, r1, #28
 bl	match
 cmp	r0, #0
 ldmfd	sp!, {r0-r3}
 movne	r0, #-1
no_messages SETA no_messages-1
 WEND

 ; ...and return
 ldmfds	sp!, {r3-r4, pc}

 END
