.title find_entity .library 'clexlib' .entry clex_find_entity,^m ; 4(ap) = entity block ; this routine searches down the entity block to see ; which command/syntax/keyword it belongs to. clrl r0 clrl _clex_ents_count pushl 4(ap) pushl _clex_cmd_block calls #2,clex_check_entity ret .entry clex_check_entity,^m cmpl 4(ap),8(ap) bneq 10$ movl #1,r0 ret ; loop through and see if we've done this already 10$: movl 4(ap),r4 moval _clex_ents,r2 clrl r1 tstl _clex_ents_count beql 35$ 20$: cmpl (r2)[r1],r4 bneq 30$ ret 30$: aoblss _clex_ents_count,r1,20$ 35$: incl _clex_ents_count movl r4,(r2)[r1] ; remember having done this.. cmpb #block_k_entity,ent_b_type(r4) bneq 60$ movl ent_l_next(r4),r5 beql 40$ jsb _clex_call_check beql 40$ brw 90$ 40$: movl ent_l_syntax(r4),r5 beql 50$ jsb _clex_call_check beql 50$ brw 90$ 50$: cmpb #ent_k_user_defined,ent_b_valtype(r4) bneq 60$ movl ent_l_user_type(r4),r5 jsb _clex_call_check beql 60$ cmpl r0,#1 bneq 90$ movl r5,r0 brw 90$ 60$: cmpb #block_k_type,type_b_type(r4) bneq 70$ movl type_l_keywords(r4),r5 jsb _clex_call_check beql 70$ cmpl r0,#1 bneq 90$ movl r4,r0 brw 90$ 70$: cmpb #block_k_command,cmd_b_type(r4) bneq 90$ bitw #cmd_m_parms,cmd_w_flags(r4) beql 80$ movl cmd_l_parms(r4),r5 beql 80$ jsb _clex_call_check beql 80$ cmpl r0,#1 bneq 90$ movl r4,r0 brw 90$ 80$: bitw #cmd_m_quals,cmd_w_flags(r4) beql 90$ movl cmd_l_quals(r4),r5 beql 90$ jsb _clex_call_check beql 90$ cmpl r0,#1 bneq 90$ movl r4,r0 brw 90$ 90$: ret _clex_call_check: addl clex_table,r5 pushl 8(ap) pushl r5 calls #2,clex_check_entity tstl r0 rsb .end