; Grab broadcast messages .title grab_broadcast_messages devnam: .ascid 'SYS$INPUT' mbxchn: .word devchn: .word iosb: .quad chbuf: .blkb 12 buffsize=256 bufdesc:.long buffsize .long buffer+22 buffer: .blkb buffsize .entry grab_broadcast_messages,0 pushaw w^mbxchn pushaw w^devchn pushl #0 pushal w^bufdesc ; max. msg size stored in descriptor pushaq w^devnam calls #5,g^lib$asn_wth_mbx blbs r0,5$ brw 10$ 5$: $qiow_s func=#io$_sensemode, - ; get the current characteristics chan=w^devchn, - iosb=w^iosb, - p1=w^chbuf, - p2=#12 jsb w^check_io bisl #tt2$m_brdcstmbx,w^chbuf+8 $qiow_s func=#io$_setmode, - ; set the characteristics chan=w^devchn, - iosb=w^iosb, - p1=w^chbuf, - p2=#12 jsb w^check_io $qiow_s func=#io$_setmode!io$m_wrtattn, - chan=w^mbxchn, - iosb=w^iosb, - p1=w^get_msg jsb w^check_io $hiber_s 10$: ret check_io: blbc r0,10$ movzwl iosb,r0 blbc r0,10$ rsb 10$: ret .entry get_msg,0 ; get the message $qiow_s func=#io$_readvblk, - chan=mbxchn, - iosb=iosb, - p1=buffer,- p2=#buffsize cmpw #msg$_trmbrdcst,buffer ; see if it's a broadcast message bneq 10$ movzwl buffer+20,bufdesc ; store the length of the message beql 10$ ; ignore zero length messages pushaq bufdesc calls #1,g^lib$put_output ; requeue the ast 10$: $qiow_s func=#io$_setmode!io$m_wrtattn, - chan=mbxchn, - iosb=iosb, - p1=get_msg ret .end grab_broadcast_messages