.title print command block ; VERB Version 1.0 June 1st, 1985 ; Written by Joe Meadows Jr., with thanks to the ; Fred Hutchinson Cancer Research Center for kindly ; allowing me to use their computing resources. ; ; If you have any questions, comments, ideas, or ; whatever, feel free to contact me via US Mail : ; Joe Meadows Jr. ; 4841 268th Ave. N.E. ; Redmond Wa. 98052 ; or via phone : (206) 827-7296 .library 'clexlib' .entry clex_print_command,^m ; 4(ap) = address of command block movl 4(ap),r6 5$: bitw #cmd_m_parms,cmd_w_flags(r6) beql 10$ tstl cmd_l_parms(r6) beql 10$ addl3 clex_table,cmd_l_parms(r6),-(sp) calls #1,clex_evaluate_entity 10$: bitw #cmd_m_quals,cmd_w_flags(r6) beql 20$ tstl cmd_l_quals(r6) beql 20$ addl3 clex_table,cmd_l_quals(r6),-(sp) calls #1,clex_evaluate_entity 20$: movzwl cmd_w_name(r6),r7 addl r6,r7 case cmd_b_subtype(r6),type=b,limit=#1,<- _verb,- _syntax> movl #0,r0 ; invalid ret _verb: add_string <'define verb '> movzbl (r7),r2 ; save size of entire thing movzbl 1(r7),r3 ; save size of verb name _verb1: incl r7 ; point to first ascic add_ascic_trunc r7,r3 decl r2 ; subtract off extra byte for count byte movzbl (r7),r4 ; assume verb bigger than synonym cmpb (r7),r3 ; is synonym bigger than verb? bleq _verb2 movzbl r3,r4 ; if so it got truncated by CDU add_string <' !! warning, synonym truncated'> _verb2: calls #0,g^put_output subb r4,r2 ; subtract off printed portion. beql _verb3 addl r4,r7 tstb 1(r7) beql _verb1 ; if zero length string , skip to next. add_string <' synonym '> brb _verb1 _verb3: brb _continue _syntax: add_string <'define syntax '> add_ascic r7 _continue: calls #0,put_output movzwl cmd_w_image(r6),r7 addl r6,r7 clrl _clex_handler_flag case cmd_b_handler(r6),type=b,limit=#0,<- _print_prefix,- ; no handler _handler_cli,- _handler_user,- _handler_image,- _handler_same> movl #0,r0 ; invalid handler ret _handler_cli: add_string <' cliroutine '> add_ascic r7 brw _print_cliflags _handler_user: add_string <' routine '> add_ascic r7 brw _print_cliflags _handler_image: add_string <' image '> add_ascic r7 brw _print_cliflags _handler_same: movl #1,_clex_handler_flag brw _print_cliflags _print_cliflags: bitw #^x1F,cmd_w_flags(r6) ; any cliflags? bneq _cliflags_cli1 calls #0,g^put_output brw _print_prefix _cliflags_cli1: clrq r4 add_string <' , cliflags ('> moval table_cli_flags,r3 _cliflags_cli2: bbc r4,cmd_w_flags(r6),_cliflags_cli4 tstl r5 beql _cliflags_cli3 add_string <','> _cliflags_cli3: incl r5 add_ascic (r3)[r4] _cliflags_cli4: aobleq #4,r4,_cliflags_cli2 add_string <')'> calls #0,g^put_output _print_prefix: movzwl cmd_w_prefix(r6),r7 beql _print_parms addl r6,r7 add_string <' prefix '> add_ascic r7 calls #0,g^put_output _print_parms: bitw #cmd_m_parms,cmd_w_flags(r6) beql _print_quals tstl cmd_l_parms(r6) bneq _print_parms_1 add_string <' noparameters'> calls #0,g^put_output brb _print_quals _print_parms_1: addl3 clex_table,cmd_l_parms(r6),-(sp) calls #1,clex_print_entity _print_quals: bitw #cmd_m_quals,cmd_w_flags(r6) beql _print_disallows tstl cmd_l_quals(r6) bneq _print_quals_1 add_string <' noqualifiers'> calls #0,g^put_output brb _print_disallows _print_quals_1: addl3 clex_table,cmd_l_quals(r6),-(sp) calls #1,clex_print_entity _print_disallows: bitw #cmd_m_disallows,cmd_w_flags(r6) beql _print_outputs tstl cmd_l_disallow(r6) beql _print_outputs addl3 clex_table,cmd_l_disallow(r6),r5 movzwl exp_w_tro_count(r5),r3 moval exp_l_operand_list(r5),r2 clrl r4 _print_disallows1: add_string <' disallow '> pushl r6 addl3 clex_table,(r2)[r4],-(sp) calls #2,clex_print_disallows calls #0,g^put_output aoblss r3,r4,_print_disallows1 brb _print_outputs _print_outputs: clrl r5 movzwl cmd_w_outputs(r6),r3 ; BRO outputs list beql _end_of_command addl r6,r3 ; point to ascic of outputs movzbl (r3),r4 ; number of outputs beql _end_of_command ; see if there is indeed any outputs incl r3 add_string <' outputs('> brb _print_continue _print_out_loop: add_string <','> _print_continue: movb (r3)[r5],r2 blss _print_out_parm addl3 clex_table,cmd_l_quals(r6),r7 ; r7 is address of first entity brb _get_entity_loop _print_out_parm: mnegb r2,r2 addl3 clex_table,cmd_l_parms(r6),r7 _get_entity_loop: decb r2 beql _print_this_output addl3 clex_table,ent_l_next(r7),r7 brb _get_entity_loop _print_this_output: movzwl ent_w_label(r7),r2 addl r7,r2 add_ascic r2 aoblss r4,r5,_print_out_loop add_string <')'> calls #0,g^put_output _end_of_command: ret .psect string_table rd,nowrt,noexe table_cli_flags: string <'abbreviate'> string <'nostatus'> string <'foreign'> string <'immediate'> string <'mcrparse'> .end