# $Header$ .globl .trp .trp: pushl r0 movl 8(sp),r0 movl 4(sp),8(sp) movl (sp)+,(sp) cmpl r0,$16 bgequ L1 # a trapnumber >= 16 cannot be ignored bbc r0,.trpim,L1 movl (sp)+,r0 rsb L1: pushr $017776 # save registers pushl r0 # trapnumber on stack movl .trppc,r0 beql L2 # is there a user defined traphandler? clrl .trppc calls $1,(r0) # if so, call it popr $017776 # restore registers movl (sp)+,r0 rsb .set write,4 L2: # Put the (octal) trapnumber in the zeroes in Lemes[]. movl $Lemesend-1,r1 # Addres after last '0'. movl $5,r2 # Max number of digits. movl (sp),r0 # Trap number in r0. L3: bicw3 $0177770,r0,r3 # Lower 3 bits form lower octal digit. bisb2 r3,-(r1) # Put them in the '0'. ashl $-3,r0,r0 # Shift the 3 bits off. sobgtr r2,L3 movl ap,r2 movl $Lwr,ap chmk $write movl r2,ap bpt .data Lemes: .byte 'E,'r,'r,' ,'0,'0,'0,'0,'0,0xa Lemesend: .align 2 Lwr: .long 3 # 3 arguments. .long 2 # File descriptor 2. .long Lemes # Address of character buffer. .long Lemesend - Lemes # Number of characters to write.