[comp.os.vms] VERB - decompiles DCLTABLES part 3/4

hydrovax@nmtsun.nmt.edu (M. Warner Losh) (02/02/88)

$Part3:
$ File_is="ENTITY.MAR"
$ Check_Sum_is=1535098164
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X`009.title print entity block
X
X; VERB Version 1.0 June 1st, 1985
X; Written  by Joe Meadows Jr.,  with thanks  to the
X; Fred Hutchinson Cancer Research Center for kindly
X; allowing  me to  use  their  computing  resources.
X;
X; If  you  have any  questions, comments, ideas, or
X; whatever, feel free to contact me via US Mail :
X;`009Joe Meadows Jr.
X;`0094841 268th Ave. N.E.
X;`009Redmond Wa. 98052
X; or via phone : (206) 827-7296
X
X`009.library 'clexlib'
X
X`009.entry`009clex_print_entity,^m<r2,r3,r4,r5,r6,r7,r8>
X`009; 4(ap) = address of entity block
X
X`009movl`0094(ap),r6
X
X`009moval`009table_types,r4
X`009movzbl`009ent_b_subtype(r6),r5
X`009decl`009r5
X`009blss`00910$
X`009cmpl`009r5,#3
X`009blss`00920$
X
X10$:`009clrl`009r0
X`009ret
X
X20$:`009add_string`009<'   '>
X`009add_ascic`009(r4)[r5]
X`009add_string`009<' '>
X`009movzwl`009ent_w_name(r6),r7
X`009addl`009r6,r7
X`009add_ascic`009r7
X`009movl`009r7,r8
X
X`009movl`009ent_l_syntax(r6),r7
X`009beql`009_label
X`009add_string`009<' , syntax='>
X`009addl`009clex_table,r7
X`009movzwl`009cmd_w_name(r7),r5
X`009addl`009r7,r5
X`009add_ascic`009r5
X
X_label:
X`009movzwl`009ent_w_label(r6),r7
X`009beql`009_prompt
X`009addl`009r6,r7
X`009movzbl`009(r8),r0
X`009movzbl`009(r7),r1
X`009cmpc5`009r0,1(r8),#^a' ',r1,1(r7)`009; see if other that default
X`009beql`009_prompt
X`009add_string`009<' , label='>
X`009add_ascic`009r7
X`009movl`009r7,r8`009; prompt defaults to label right?
X_prompt:
X`009movzwl`009ent_w_prompt(r6),r7
X`009beql`009_ent_neg
X`009addl`009r6,r7
X`009movzbl`009(r8),r0
X`009movzbl`009(r7),r1
X`009cmpc5`009r0,1(r8),#^a' ',r1,1(r7)`009; see if other than default
X`009beql`009_ent_neg
X`009add_string`009<' , prompt="'>
X`009add_ascic`009r7
X`009add_string`009<'"'>
X_ent_neg:
X`009calls`009#0,g^put_output
X`009movzbl`009ent_b_subtype(r6),r5
X`009cmpl`009r5,#2
X`009beql`009_ent_neg1`009; default for qualifiers is negatable
X`009bbc`009#ent_v_neg,ent_w_flags(r6),_ent_def
X`009add_string`009<'      negatable'>
X`009calls`009#0,g^put_output
X`009brb`009_ent_def
X_ent_neg1:
X`009bbs`009#ent_v_neg,ent_w_flags(r6),_ent_def
X`009add_string`009<'      nonnegatable'>
X`009calls`009#0,g^put_output
X_ent_def:
X`009bbc`009#ent_v_deftrue,ent_w_flags(r6),_ent_bat
X`009add_string`009<'      default'>
X`009calls`009#0,g^put_output
X_ent_bat:
X`009bbc`009#ent_v_batdef,ent_w_flags(r6),_ent_val
X`009add_string`009<'      batch'>
X`009calls`009#0,g^put_output
X_ent_val:
X`009bbs`009#ent_v_val,ent_w_flags(r6),_ent_val1
X`009brw`009_ent_cliflags
X_ent_val1:
X`009add_string`009<'      value'>
X`009clrl`009r7
X`009bbc`009#ent_v_valreq,ent_w_flags(r6),_ent_impcat
X`009add_string`009<' (required'>
X`009incl`009r7
X_ent_impcat:
X`009bbc`009#ent_v_impcat,ent_w_flags(r6),_ent_list
X`009tstl`009r7
X`009bneq`009_ent_impcat1
X`009add_string`009<' ('>
X`009incl`009r7
X`009brb`009_ent_impcat2
X_ent_impcat1:
X`009add_ascic`009comma
X_ent_impcat2:
X`009add_string`009<'impcat'>
X_ent_list:
X`009bbc`009#ent_v_list,ent_w_flags(r6),_ent_concat
X`009tstl`009r7
X`009bneq`009_ent_list1
X`009add_string`009<' ('>
X`009incl`009r7
X`009brb`009_ent_list2
X_ent_list1:
X`009add_ascic`009comma
X_ent_list2:
X`009add_string`009<'list'>
X`009bbs`009#ent_v_concat,ent_w_flags(r6),_ent_defval
X`009add_string`009<',noconcatenate'>
X
X_ent_concat:
X`009bbc`009#ent_v_concat,ent_w_flags(r6),_ent_defval
X`009tstl`009r7
X`009bneq`009_ent_concat1
X`009add_string`009<' ('>
X`009incl`009r7
X`009brb`009_ent_concat2
X_ent_concat1:
X`009add_ascic`009comma
X_ent_concat2:
X`009add_string`009<'concatenate'>
X
X_ent_defval:
X`009movzwl`009ent_w_defval(r6),r5
X`009beql`009_ent_type
X`009addl`009r6,r5
X`009tstl`009r7
X`009bneq`009_ent_defval1
X`009add_string`009<' ('>
X`009incl`009r7
X`009brb`009_ent_defval2
X_ent_defval1:
X`009add_ascic`009comma
X_ent_defval2:
X`009add_string`009<'default="'>
X`009clrl`009r3
X`009movzbl`009(r5),r2`009; save size of entire thing
X_ent_defval3:
X`009incl`009r5`009; point to first ascic
X`009decl`009r2`009; subtract off extra byte for count byte
X`009movzbl`009(r5),r4
X`009tstl`009r3
X`009beql`009_ent_defval4
X`009add_ascic`009comma
X_ent_defval4:
X`009add_ascic`009r5
X`009incl`009r3
X`009subb`009r4,r2`009; subtract off printed portion.
X`009beql`009_ent_defval5
X`009addl`009r4,r5
X`009brb`009_ent_defval3
X_ent_defval5:
X`009add_string`009<'"'>
X
X_ent_type:
X`009tstb`009ent_b_valtype(r6)
X`009bneq`009_ent_type1
X`009movl`009ent_l_user_type(r6),r5
X`009bneq`009_ent_type00
X`009brw`009_ent_end_val
X_ent_type00:
X`009addl`009clex_table,r5
X`009movzwl`009type_w_name(r5),r4
X`009addl`009r5,r4
X`009tstl`009r7
X`009bneq`009_ent_type0
X`009incl`009r7
X`009add_string`009<' ('>
X`009brb`009_ent_type01
X_ent_type0:
X`009add_ascic`009comma
X_ent_type01:
X`009add_string`009<'type='>
X`009add_ascic`009r4
X`009brb`009_ent_end_val
X_ent_type1:
X`009tstl`009r7
X`009bneq`009_ent_type2
X`009incl`009r7
X`009add_string`009<' ('>
X`009brb`009_ent_type3
X_ent_type2:
X`009add_ascic`009comma
X_ent_type3:
X`009add_string`009<'type='>
X`009moval`009table_value_types,r1
X`009movzbl`009ent_b_valtype(r6),r2
X`009decl`009r2
X`009add_ascic`009(r1)[r2]
X
X_ent_end_val:
X`009tstl`009r7
X`009beql`009_ent_end_val1
X`009add_string`009<')'>
X_ent_end_val1:
X`009calls`009#0,g^put_output
X
X_ent_cliflags:
X`009bitw`009#ent_m_mcroptdelim!ent_m_mcrignore,ent_w_flags(r6)
X`009beql`009_ent_position
X`009clrl`009r7
X`009add_string`009<'      cliflags ('>
X`009bbc`009#ent_v_mcroptdelim,ent_w_flags(r6),_ent_cliflags1
X`009add_string`009<'mcroptdelim'>
X`009incl`009r7
X_ent_cliflags1:
X`009bbc`009#ent_v_mcrignore,ent_w_flags(r6),_ent_cliflags3
X`009tstl`009r7
X`009beql`009_ent_cliflags2
X`009add_ascic`009comma
X_ent_cliflags2:
X`009add_string`009<'mcrignore'>
X_ent_cliflags3:
X`009add_string`009<')'>
X`009calls`009#0,g^put_output
X
X_ent_position:
X`009bbc`009#ent_v_parm,ent_w_flags(r6),_ent_pos2
X`009add_string`009<'      placement='>
X`009bbc`009#ent_v_verb,ent_w_flags(r6),_ent_pos1
X`009add_string`009<'positional'>
X`009brb`009_ent_pos2
X_ent_pos1:
X`009add_string`009<'local'>
X_ent_pos2:
X`009calls`009#0,g^put_output
X
X`009movl`009ent_l_next(r6),r0
X`009beql`00910$
X`009addl3`009clex_table,r0,-(sp)
X`009calls`009#1,clex_print_entity
X10$:`009ret
X
X`009.psect`009string_table`009rd,nowrt,noexe
Xcomma:`009string`009<','>
Xtable_types:
X`009string`009<'parameter'>
X`009string`009<'qualifier'>
X`009string`009<'keyword'>
X
Xtable_value_types:
X`009string`009<'$infile'>
X`009string`009<'$outfile'>
X`009string`009<'$number'>
X`009string`009<'$privilege'>
X`009string`009<'$datetime'>
X`009string`009<'$protection'>
X`009string`009<'$process'>
X`009string`009<'$inlog'>
X`009string`009<'$outlog'>
X`009string`009<'$insym'>
X`009string`009<'$outsym'>
X`009string`009<'$node'>
X`009string`009<'$device'>
X`009string`009<'$directory'>
X`009string`009<'$uic'>
X`009string`009<'$rest_of_line'>
X`009string`009<'$parenthesized_value'>
X`009string`009<'$deltatime'>
X`009string`009<'$quoted_string'>
X`009string`009<'$file'>
X`009string`009<'$expression'>
X`009string`009<'$$test1'>
X`009string`009<'$$test2'>
X`009string`009<'$$test3'>
X`009string`009<'$acl'>
X
X
X`009.end
$ GoSub Convert_File
$ File_is="EVALENTITY.MAR"
$ Check_Sum_is=92099924
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X`009.title evaluate entity, to print out TYPEs and SYNTAX's
X
X; VERB Version 1.0 June 1st, 1985
X; Written  by Joe Meadows Jr.,  with thanks  to the
X; Fred Hutchinson Cancer Research Center for kindly
X; allowing  me to  use  their  computing  resources.
X;
X; If  you  have any  questions, comments, ideas, or
X; whatever, feel free to contact me via US Mail :
X;`009Joe Meadows Jr.
X;`0094841 268th Ave. N.E.
X;`009Redmond Wa. 98052
X; or via phone : (206) 827-7296
X
X`009.psect`009_clex_local`009rd,wrt,noexe
X_clex_eval_count::
X`009.long
X_clex_evals::
X`009.blkl`0094096
X_clex_ents_count::
X`009.long
X_clex_ents::
X`009.blkl`0094096
X
X`009.psect`009_clex_code`009rd,nowrt,exe
X
X`009.entry`009clex_evaluate_entity,^m<r2,r3,r4,r5>
X
X`009movl`0094(ap),r2
X`009moval`009_clex_evals,r3
X
X_evaluate:
X`009tstl`009ent_l_user_type(r2)
X`009beql`00910$
X`009addl3`009clex_table,ent_l_user_type(r2),r4
X`009addl3`009type_l_keywords(r4),clex_table,r4
X
X`009clrl`009r1
X`009tstl`009_clex_eval_count
X`009beql`0095$
X3$:`009cmpl`009r4,(r3)[r1]
X`009beql`00910$
X`009aoblss`009_clex_eval_count,r1,3$
X
X5$:`009movl`009r4,(r3)[r1]
X`009incl`009_clex_eval_count
X
X`009pushl`009r4
X`009calls`009#1,clex_evaluate_entity
X
X`009addl3`009clex_table,ent_l_user_type(r2),-(sp)
X`009calls`009#1,clex_print_type
X
X10$:`009tstl`009ent_l_syntax(r2)
X`009beql`00920$
X`009addl3`009clex_table,ent_l_syntax(r2),r4
X
X`009clrl`009r1
X`009tstl`009_clex_eval_count
X`009beql`00915$
X13$:`009cmpl`009r4,(r3)[r1]
X`009beql`00920$
X`009aoblss`009_clex_eval_count,r1,13$
X
X15$:`009movl`009r4,(r3)[r1]
X`009incl`009_clex_eval_count
X`009pushl`009r4
X`009calls`009#1,clex_print_command
X
X20$:`009tstl`009ent_l_next(r2)
X`009beql`00930$
X`009addl3`009clex_table,ent_l_next(r2),-(sp)
X`009calls`009#1,clex_evaluate_entity
X
X30$:`009ret
X`009.end
$ GoSub Convert_File
$ File_is="FIND.MAR"
$ Check_Sum_is=391466442
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X`009.title`009find verb routine
X
X; VERB Version 1.0 June 1st, 1985
X; Written  by Joe Meadows Jr.,  with thanks  to the
X; Fred Hutchinson Cancer Research Center for kindly
X; allowing  me to  use  their  computing  resources.
X;
X; If  you  have any  questions, comments, ideas, or
X; whatever, feel free to contact me via US Mail :
X;`009Joe Meadows Jr.
X;`0094841 268th Ave. N.E.
X;`009Redmond Wa. 98052
X; or via phone : (206) 827-7296
X
X`009.psect`009_clex_local`009rd,wrt,noexe
X
Xverb_buff_desc:`009.blkl`0092
X
X`009.psect`009_clex_code`009rd,nowrt,exe
X
X`009.entry`009clex_find_verb,^m<r2,r3,r4,r5>
X;
X;`0094(ap)=verb descriptor
X;`0098(ap)=verb number
X;`00912(ap)=command block address
X;`009`009start at verb number and go to last verb
X;`009`009looking for baby that matches
X;
X`009movl`009clex_commands,r3
X
X`009movl`009@8(ap),r4`009; verb number
X`009cmpl`009r4,clex_cmd_cnt
X`009bgeq`00940$
X
X10$:`009movl`009(r3)[r4],r5`009`009; comand_block TRO
X`009addl`009clex_table,r5
X`009movzwl`009cmd_w_name(r5),r0`009; name BRO
X`009addl`009r0,r5`009`009`009; ascic all names
X`009movzbl`009(r5),r2
X
X20$:`009incl`009r5`009`009`009; ascic verb name
X`009movzbl`009(r5),verb_buff_desc
X`009moval`0091(r5),verb_buff_desc+4
X
X`009pushl`0094(ap)
X`009pushaq`009verb_buff_desc
X`009calls`009#2,g^str$match_wild
X`009blbs`009r0,50$
X
X`009decl`009r2
X`009subb`009(r5),r2
X`009bleq`00930$
X
X`009addl`009verb_buff_desc,r5
X`009brb`00920$
X
X30$:`009aoblss`009clex_cmd_cnt,r4,10$
X
X40$:`009clrl`009@8(ap)
X`009clrl`009r0
X`009brb`00960$
X
X50$:`009movl`009(r3)[r4],r5`009; get command TRO to compare with all previous
X`009clrl`009r1`009`009; ones to see if we've already printed this one
X`009tstl`009r4
X`009beql`00956$
X55$:`009cmpl`009(r3)[r1],r5
X`009beql`00930$`009`009; if this one's been done before continue search
X`009aoblss`009r4,r1,55$`009; continue checking
X
X56$:`009movl`009r4,@8(ap)
X`009movl`009(r3)[r4],@12(ap)
X`009addl`009clex_table,@12(ap)
X`009movl`009@12(ap),_clex_cmd_block
X`009movl`009#1,r0
X
X60$:`009ret
X`009.end
$ GoSub Convert_File
$ File_is="FINDENTITY.MAR"
$ Check_Sum_is=1367133722
$ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY
X`009.title`009find_entity
X
X`009.library`009'clexlib'
X
X`009.entry`009clex_find_entity,^m<r2,r3,r4,r5>
X`009; 4(ap) = entity block
X`009; this routine searches down the entity block to see 
X`009; which command/syntax/keyword it belongs to.
X
X`009clrl`009r0
X`009clrl`009_clex_ents_count
X`009pushl`0094(ap)
X`009pushl`009_clex_cmd_block
X`009calls`009#2,clex_check_entity
X`009ret
X
X`009.entry`009clex_check_entity,^m<r2,r3,r4,r5>
X
X`009cmpl`0094(ap),8(ap)
X`009bneq`00910$
X`009movl`009#1,r0
X`009ret
X
X`009; loop through and see if we've done this already
X10$:`009movl`0094(ap),r4
X`009moval`009_clex_ents,r2
X`009clrl`009r1
X`009tstl`009_clex_ents_count
X`009beql`00935$
X20$:`009cmpl`009(r2)[r1],r4
X`009bneq`00930$
X`009ret
X30$:`009aoblss`009_clex_ents_count,r1,20$
X35$:`009incl`009_clex_ents_count
X`009movl`009r4,(r2)[r1]`009; remember having done this..
X
X`009cmpb`009#block_k_entity,ent_b_type(r4)
X`009bneq`00960$
X`009movl`009ent_l_next(r4),r5
X`009beql`00940$
X`009jsb`009_clex_call_check
X`009beql`00940$
X`009brw`00990$
X
X40$:`009movl`009ent_l_syntax(r4),r5
X`009beql`00950$
X`009jsb`009_clex_call_check
X`009beql`00950$
X`009brw`00990$
X
X50$:`009cmpb`009#ent_k_user_defined,ent_b_valtype(r4)
X`009bneq`00960$
X`009movl`009ent_l_user_type(r4),r5
X`009jsb`009_clex_call_check
X`009beql`00960$
X`009cmpl`009r0,#1
X`009bneq`00990$
X`009movl`009r5,r0
X`009brw`00990$
X
X60$:`009cmpb`009#block_k_type,type_b_type(r4)
X`009bneq`00970$
X`009movl`009type_l_keywords(r4),r5
X`009jsb`009_clex_call_check
X`009beql`00970$
X`009cmpl`009r0,#1
X`009bneq`00990$
X`009movl`009r4,r0
X`009brw`00990$
X
X70$:`009cmpb`009#block_k_command,cmd_b_type(r4)
X`009bneq`00990$
X`009bitw`009#cmd_m_parms,cmd_w_flags(r4)
X`009beql`00980$
X`009movl`009cmd_l_parms(r4),r5
X`009beql`00980$
X`009jsb`009_clex_call_check
X`009beql`00980$
X`009cmpl`009r0,#1
X`009bneq`00990$
X`009movl`009r4,r0
X`009brw`00990$
X
X80$:`009bitw`009#cmd_m_quals,cmd_w_flags(r4)
X`009beql`00990$
X`009movl`009cmd_l_quals(r4),r5
X`009beql`00990$
X`009jsb`009_clex_call_check
X`009beql`00990$`009
X`009cmpl`009r0,#1
X`009bneq`00990$
X`009movl`009r4,r0
X`009brw`00990$
X
X90$:`009ret
X
X_clex_call_check:
X`009addl`009clex_table,r5
X`009pushl`0098(ap)
X`009pushl`009r5
X`009calls`009#2,clex_check_entity
X`009tstl`009r0
X`009rsb
X
X`009.end
$ GoSub Convert_File
$ Goto Part4

-- 
bitnet:	losh@nmt.csnet			M. Warner Losh
	warner@hydrovax.nmt.csnet    ! Don't know if this works, let me know.
csnet:	warner@hydrovax.nmt.edu
uucp:	...{cmcl2, ihnp4}!lanl!unmvax!nmtsun!warner%hydrovax