From:	CRDGW2::CRDGW2::MRGATE::"SMTP::CUNYVM.CUNY.EDU::VMSSERV%FHCRCVAX.BITNET"  9-OCT-1989 17:22
To:	MRGATE::"ARISIA::EVERHART"
Subj:	VMSSERV_ROOT:[FILES]VERB.1_OF_2;1

Message-Id:  <8910091718.AA18481@crdgw1.ge.com>
Received: from UWAVM.ACS.WASHINGTON.EDU by UWAVM.ACS.WASHINGTON.EDU (IBM VM SMTP R1.2) with BSMTP id 1407; Mon, 09 Oct 89 10:13:34 PDT
Received: from FHCRCVAX.BITNET (VMSSERV) by UWAVM.ACS.WASHINGTON.EDU (Mailer
 R2.03B) with BSMTP id 4571; Mon, 09 Oct 89 10:13:23 PDT
Date: Fri, 6 Oct 89 11:08 PST
From: VMSSERV%FHCRCVAX.BITNET@UWAVM.ACS.WASHINGTON.EDU
Subject: VMSSERV_ROOT:[FILES]VERB.1_OF_2;1
To: everhart@arisia.decnet
X-Vms-To: IN%"everhart%arisia.decnet@crdgw1.ge.com"

$! ................... Cut between dotted lines and save. ...................
$!...........................................................................
$! VAX/VMS archive file created by VMS_SHARE V06.10 7-FEB-1989.
$!
$! VMS_SHARE was written by James Gray (Gray:OSBUSouth@Xerox.COM) from
$! VMS_SHAR by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au).
$!
$! To unpack, simply save, concatinate all parts into one file and
$! execute (@) that file.
$!
$! This archive was created by user JOE
$! on  8-APR-1989 08:57:45.11.
$!
$! ATTENTION: To keep each article below 100 blocks (51200 bytes), this
$!            program has been transmitted in 2 parts.  You should
$!            concatenate ALL parts to ONE file and execute (@) that file.
$!
$! It contains the following 22 files:
$!        AAAREADME.TXT
$!        BUFFER.MAR
$!        CLEXLIB.MAR
$!        CLITABLE.TXT
$!        COMMAND.MAR
$!        COMPILE.COM
$!        DISALLOWS.MAR
$!        ENTITY.MAR
$!        EVALENTITY.MAR
$!        FIND.MAR
$!        FINDENTITY.MAR
$!        GET_TERM.MAR
$!        INIT.MAR
$!        LIST.MAR
$!        MAKEFILE.
$!        TEST.BAS
$!        TEST.COM
$!        TEST.OPT
$!        TYPE.MAR
$!        VERB.CLD
$!        VERB.FOR
$!        VERB.RNH
$!
$!============================================================================
$ SET SYMBOL/SCOPE=( NOLOCAL, NOGLOBAL )
$ VERSION = F$GETSYI( "VERSION" )
$ IF VERSION .GES "V4.4" THEN GOTO VERSION_OK
$ WRITE SYS$OUTPUT "You are running VMS ''VERSION'; ", -
    "VMS_SHARE V06.10 7-FEB-1989 requires VMS V4.4 or higher."
$ EXIT 44 ! SS$_ABORT
$VERSION_OK:
$ GOTO START
$!
$UNPACK_FILE:
$ WRITE SYS$OUTPUT "Creating ''FILE_IS'"
$ DEFINE/USER_MODE SYS$OUTPUT NL:
$ EDIT/TPU/COMMAND=SYS$INPUT/NODISPLAY/OUTPUT='FILE_IS'/NOSECTION -
    VMS_SHARE_DUMMY.DUMMY
b_part := CREATE_BUFFER( "{Part}", GET_INFO( COMMAND_LINE, "file_name" ) )
; s_file_spec := GET_INFO( COMMAND_LINE, "output_file" ); SET( OUTPUT_FILE
, b_part, s_file_spec ); b_errors := CREATE_BUFFER( "{Errors}" ); i_errors
:= 0; pat_beg_1 := ANCHOR & "-+-+-+ Beginning"; pat_beg_2 := LINE_BEGIN
& "+-+-+-+ Beginning"; pat_end := ANCHOR & "+-+-+-+-+ End"; POSITION
( BEGINNING_OF( b_part ) ); LOOP EXITIF SEARCH( SPAN( ' ' )@r_trail
& LINE_END, FORWARD) = 0; POSITION( r_trail ); ERASE( r_trail ); ENDLOOP
; POSITION( BEGINNING_OF( b_part ) ); i_append_line := 0; LOOP EXITIF MARK
( NONE ) = END_OF( b_part ); s_x := ERASE_CHARACTER( 1 )
; IF s_x = '+' THEN r_skip := SEARCH( pat_beg_1, FORWARD, EXACT ); IF r_skip
<> 0 THEN s_x := ''; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ERASE_LINE; ENDIF
; ENDIF; IF s_x = '-' THEN r_skip := SEARCH( pat_end, FORWARD, EXACT )
; IF r_skip <> 0 THEN s_x := ''; MOVE_HORIZONTAL( -CURRENT_OFFSET ); m_skip
:= MARK( NONE ); r_skip := SEARCH( pat_beg_2, FORWARD, EXACT ); IF r_skip
<> 0 THEN POSITION( END_OF( r_skip ) ); MOVE_HORIZONTAL( -CURRENT_OFFSET )
; MOVE_VERTICAL( 1 ); MOVE_HORIZONTAL( -1 ); ELSE POSITION( END_OF( b_part )
); ENDIF; ERASE( CREATE_RANGE( m_skip, MARK( NONE ), NONE ) ); ENDIF; ENDIF
; IF s_x = 'V' THEN s_x := ''; IF i_append_line <> 0 THEN APPEND_LINE
; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF; i_append_line := 1
; MOVE_VERTICAL( 1 ); ENDIF; IF s_x = 'X' THEN s_x := ''; IF i_append_line
<> 0 THEN APPEND_LINE; MOVE_HORIZONTAL( -CURRENT_OFFSET ); ENDIF
; i_append_line := 0; MOVE_VERTICAL( 1 ); ENDIF; IF s_x <> '' THEN i_errors
:= i_errors + 1; s_text := CURRENT_LINE; POSITION( b_errors ); COPY_TEXT
( "The following line could not be unpacked properly:" ); SPLIT_LINE
; COPY_TEXT( s_x ); COPY_TEXT( s_text ); POSITION( b_part ); MOVE_VERTICAL
( 1 ); ENDIF; ENDLOOP; POSITION( BEGINNING_OF( b_part ) ); LOOP r_x := SEARCH
( "`", FORWARD, EXACT ); EXITIF r_x = 0; POSITION( r_x ); ERASE_CHARACTER( 1
); COPY_TEXT( ASCII( INT( ERASE_CHARACTER( 3 ) ) ) ); ENDLOOP
; IF i_errors = 0 THEN SET( NO_WRITE, b_errors, ON ); ELSE POSITION
( BEGINNING_OF( b_errors ) ); COPY_TEXT( FAO
( "The following !UL errors were detected while unpacking !AS", i_errors
, s_file_spec ) ); SPLIT_LINE; SET( OUTPUT_FILE, b_errors, "SYS$COMMAND" )
; ENDIF; EXIT;
$ DELETE VMS_SHARE_DUMMY.DUMMY;*
$ CHECKSUM 'FILE_IS
$ WRITE SYS$OUTPUT " CHECKSUM ", -
  F$ELEMENT( CHECKSUM_IS .EQ. CHECKSUM$CHECKSUM, ",", "failed!!,passed." )
$ RETURN
$!
$START:
$ FILE_IS = "AAAREADME.TXT"
$ CHECKSUM_IS = 606227783
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009VERB is a program to extract verb definitions from either
Xyour process space or a command table file (such as SYS$SHARE:DCLTABLES.EXE).
XThese verb definitions can then be changed and recompiled via the command
Xdefinition utility, SET COMMAND. This program is similar to the 3.n program
XCLEX, except that it works with version 4.n command tables. This program
Xis a must if you need to change verb definitions, or if you just hate the
XDEC defaults (getting tired of HELP/PAGE, or LINK creating maps when
Xexecuted from a batch job?).
X
X`009VERB allows you to do wildcard searches for verbs (commands)
Xand lists of verbs, such as VERB A*,B*,%%% (which would return all the verb
Vdefinitions for commands that start with A, B, and all three letter commands)
X.
X
V`009You can specify a table to search for the verb, or even to search your`03
X2
Vprocess space. The command defaults to searching your process space, but if y
Xou
Xenter VERB/TABLE it will default to using the system command table
XSYS$SHARE:DCLTABLES, you can of course specify a table other than that, as in
XVERB/TABLE=MY_OWN_TABLE, note that it uses SYS$SHARE:DCLTABLES.EXE as the
Xdefault file name in an RMS $OPEN call.
X
X`009VERB allows you to put the output in a file, as in
XVERB/OUTPUT=filename, VERB also can list available verbs (commands), w/o
Xthe verb definition, as in VERB/LIST/ALL, and note the /ALL qualifier.
X
X
Xrestrictions:
X`009Well, it hasn't been tested with MCR tables.I wouldn't be surprised if
Xit didn't like them.
X`009When extracting several verbs at a time the verbs may reference common
VTYPE defnitions, in these cases only one is output, this only becomes a probl
Xem
Xif you cut up the output file into several smaller files.
X`009When extracting several verbs (such as BASIC,MACRO,FORTRAN) they
Xmay each reference a TYPE defnition that is different for each verb, but has
Vthe same name. Since the TYPE definitions are actually different each one wil
Xl
Xbe included in the file, but the CDU will not appreciate having similarly
Xnamed TYPE definitions. In such cases simply extact the verbs into seperate
Xfiles.
X
XTo use:
X`009Either edit VERB.CLD so that the IMAGE clause points to where
Xyou are storing the image, or define a logical name EXE$DIR to point to
Xwhere you are storing the image. Then do SET COMMAND VERB. You will then
Xbe able to use the VERB command.
X
X
XFiles in this directory:
X`009CLITABLE.TXT - description of the cli table format
X
X`009VERB.FOR
X`009BUFFER.MAR
X`009CLEXLIB.MAR
X`009COMMAND.MAR
X`009DISALLOWS.MAR
X`009ENTITY.MAR
X`009EVALENTITY.MAR - Source code for VERB
X`009FIND.MAR
X`009FINDENTITY.MAR
X`009GET_TERM.MAR
X`009INIT.MAR
X`009LIST.MAR
X`009TYPE.MAR
X
X`009MAKEFILE. - Makefile for VERB
X
X`009TEST.BAS
X`009TEST.COM - example of using /IMAGE
X`009TEST.OBJ
X`009TEST.OPT
X
X`009VERB.CLD - command definition for VERB
X`009VERB.EXE - executable for VERB
X`009VERB.HLP - Help fiel for VERB
X`009VERB.OBJ - object file for VERB.FOR (compiled /DEBUG/NOOPTIMIZE)
$ GOSUB UNPACK_FILE

$ FILE_IS = "BUFFER.MAR"
$ CHECKSUM_IS = 1615859512
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title`009buffer routines
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
X_clex_desc::
X_clex_pos::
X`009.long
X`009.long`009_clex_buffer
X_clex_buffer:
X`009.blkb`009512
X
X`009.psect`009_clex_code`009rd,nowrt,exe
X
X`009.entry`009put_output,0
X
X`009tstl`009_clex_pos`009; is there really anything to output?
X`009beql`0095$`009`009; don't bother to output empty line
X
X`009pushaq`009_clex_desc
X`009calls`009#1,@clex_output`009; output the buffer
X`009blbc`009r0,10$
X`009clrl`009_clex_pos`009; clear the buffer, if successfully output
X5$:`009movl`009#1,r0
X10$:`009ret
X
X`009.entry`009add_to_buffer,`094m<r2,r3,r4,r5>
X`009; 4(ap) = pointer to ascic
X`009movl`0094(ap),r4
X`009movzbl`009(r4),r5
X`009incl`009r4
X`009brb`009_add_buffer
X
X`009.entry`009add_to_buffer_trunc,`094m<r2,r3,r4,r5>
X`009; 4(ap) = pointer to ascic
X`009; 8(ap) = length to truncate to
X`009movl`0094(ap),r4
X`009movzbl`009(r4),r5
X`009incl`009r4
X`009cmpl`009r5,8(ap)
X`009blss`009_add_buffer
X`009movl`0098(ap),r5
X
X_add_buffer:
X`009subl3`009_clex_pos,clex_width,r2
X`009cmpl`009r5,r2
X`009bleq`00920$
V`009calls`009#0,put_output`009; output string if it whats to be added wont fi
Xt
X`009blbc`009r0,30$
X`009brb`009_add_buffer
X20$:`009movl`009_clex_pos,r3
X`009addl`009r5,_clex_pos
X`009movc3`009r5,(r4),_clex_buffer(r3)
X`009movl`009#1,r0
X30$:`009ret
X
X`009.end
$ GOSUB UNPACK_FILE

$ FILE_IS = "CLEXLIB.MAR"
$ CHECKSUM_IS = 372992394
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title`009macro routines
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.macro`009add_ascic,thing
X`009pushl`009thing
X`009calls`009#1,g`094add_to_buffer
X`009.endm`009add_ascic
X`009.macro`009add_ascic_trunc,thing,leng,?l1,?l2
X`009pushl`009leng
X`009pushl`009thing
X`009calls`009#2,g`094add_to_buffer_trunc
X`009.endm`009add_ascic_trunc
X`009.macro`009add_string,thing
X`009push_string`009<thing>
X`009calls`009#1,g`094add_to_buffer
X`009.endm`009add_string
X
X`009.macro`009case,src,displist,type=w,limit=#0,nmode=s`094#,?base,?max
X`009case'type`009src,limit,nmode'<<max-base>/2-1>
Xbase:
X`009.irp`009ep,<displist>
X`009.word`009ep-base
X`009.endr
Xmax:
X`009.endm`009case
X
X`009.macro`009push_string`009text,?l1,?l2
X`009.save
X`009.psect`009_clex$strings,exe,nowrt,pic
Xl1:`009.ascic`009text
X`009.restore
X`009pushal`009l1
X`009.endm`009push_string
X
X`009.macro`009string`009text,?l1,?l2
X`009.save
X`009.psect`009_clex$strings,exe,nowrt,pic
Xl1:`009.ascic`009text
X`009.restore
X`009.long`009l1
X`009.endm`009string
$ GOSUB UNPACK_FILE

$ FILE_IS = "CLITABLE.TXT"
$ CHECKSUM_IS = 1392559510
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X!`009CLI Table Blocks
X!`009Each block begins with a standard header, as follows
X!`009`009+------------------------------+
X!`009`009`124 subtype `124 type `124    length   `124
X!`009`009+------------------------------+
X!`009`009`124 TRO Count      `124    Flags    `124
X!`009`009+------------------------------+
X!`009all references to other blocks are made via Table relative offsets (TRO)
X!`009the TRO count specifies how many such references there are, and the
X!`009reference longwords always follow the header immediately. The rest of
X!`009each block contains other information necessary for the definition
X!`009of the item.Following the fixed portion of the block is a variable
X!`009portion, which contains any variable length strings. Each of these
X!`009strings is referenced from the fixed portion of the block by a
X!`009word Block relative offset (BRO)
X!`009These are the valid block types starting at 1.
X!`009`009vector`009`009Vector (root) block
X!`009`009command`009`009Command block
X!`009`009type`009`009Type block
X!`009`009entity`009`009Entity block
X!`009`009expression`009Expression block
X!`009`009cdu_visited`009for CDU internal use
X!vector block
X!`009the primary vector block appears at the beginning of a CLI table,
X!`009and contains references to all other blocks and block lists.
X!
X! standard header, valid subtypes starting at 1
X!`009DCL
X!`009MCR
X!`009Verb
X!`009command
X! flags - broken into two bytes, low byte contains structure level
X!Two TRO's,
X! verbtbl`009TRO of verb name table
X! comdptr`009TRO of command block pointer table
X!the  verb name table is composed of the standard header, followed by one
X! longword for each verb or synonym, the longword contains the first
X! four characters of the verb name padded with nulls as necessary
X!the command block pointer table is composed of the standard header,
X! followed by one longword for each entry in the verb table. This
X! longword contains the TRO of the corresponding command block.
X!
X!command block
X!
X! a command block is used to define a verb or a syntax change brought about
X! by a parameter or qualifier. There is one command block for each verb
X! (but not its synonyms), and one for each syntax change within a verb
X!
X! standard header, valid subtypes starting at 1
X!`009verb
X!`009syntax
X! flags --bits, starting at zero I guess
X!`009abbrev
X!`009nostat
X!`009foreign
X!`009immed
X!`009mcrparse
X!`009parms
X!`009quals
X!`009disallows
X!TRO's --
X! parms`009`009TRO of first parameter, Entity block
X!   max parms=8
X! quals`009`009TRO of first qualifier
X! disallows`009TRO of top-level disallow boolean Expression block
X!HANDLER (byte) How does CLI handle verb (starting at 0)
X! none`009It doesn't
X! cli`009Calls a cli routine
X! user`009calls a user routine
X! image`009imvokes an image
X! same`009same handling as verb
X!PARMCNT Two nibbles (1 byte)
X! MINPARM`009first four bits
X! MAXPARM`009second four bits
X!VERBTYP (byte) Verb type code for use with old CLI interface
X!PAD (byte)
X!NAME (word) BRO of verb or syntax name
X!IMAGE (word) BRO of routine or image reference
X!OUTPUTS (word) BRO of outputs list
X!PREFIX (word) BRO of prefix string
X!  -- end of fixed portion --
X! variable section --
X! Max sizes --
X! max_name = 1+31
X! max_image= 64
X! max_outputs=1+7
X! max_prefix=1+31
X!--folowing the fixed portion, the verb names are stored as a sequence
X! of ascic strings within an overall ascic string, or the syntax name is
X! stored as a single ascic string.
X! the routine or image reference is stored as follows
X!`009CLI routine`009Routine name as ascic string
X!`009user routine`009longword routine address, then ascic string
X!`009image`009`009ascic string
X! outputs list consists of a counted sequence of bytes. each byte contains
X! either the negation of the parameter number or the qualifier number
X! the prefix string is stored as an ascic string
X!
X!TYPE block
X!
X!`009a type block is used as a header of a chain of entity blocks
X!`009that describe TYPE keywords there is one TYPE block for each
X!`009user specified type definition
X!
X! standard header, valid subtypes starting at 1
X!`009type
X!no  flags
X!TRO ..
X! keywrds`009TRO of first keyword entity block
X!NAME (word)`009BRO of type name
X!Prefix (word)`009BRO of prefix string
X!-- end of fixed --
X!-- following the fixed portion the type name is stored as ascic string,
X! so is the prefix string
X!
X!Entity block
X!
X!`009an entity block is used to define each parameter, qualifier, and data
X!`009type keyword. These blocks are liked off the command block for the
X!`009verb, in the case of parameters and qualifiers, or off of the type
X!`009block, in the case of type keywords.
X!
X! standard header, valid subtypes starting at 1
X!`009parameter
X!`009qualifier
X!`009keyword
X!flags, bits starting at 0 ..
X!`009val`009`009can take a value
X!`009neg`009`009can be replaced with no
X!`009deftrue`009`009present by default
X!`009batdef`009`009present by default if batch
X!`009valreq`009`009a value is required
X!`009list`009`009can be a list of values
X!`009concat`009`009can be a concatenated list
X!`009impcat`009`009implicit concatenated list
X!`009verb`009`009global placement
X!`009parm`009`009local placement (both means positional)
X!`009mcroptdelim`009MCR SET UIC kluge
X!`009mcrignore`009MCR ignores this entity
X!
X!TROs
X! NEXT`009`009TRO of next entity block
X! SYNTAX`009TRO of syntax change command block
X! USER_TYPE`009TRO of user defined type
X!NUMBER (byte) Entity number. Cli should only use for parameters
X!VALTYP (byte) Value type, starting at zero,
X!`009user_defined`009defined by user
X!`009infile`009`009input file spec
X!`009outfile`009`009output file spec
X!`009number`009`009decimal integer
X!`009privilege`009priv keyword
X!`009datetime`009date/time
X!`009protection`009protection spec
X!`009process`009`009process name
X!`009inlog`009`009input logical name
X!`009outlog`009`009output logical name
X!`009insym`009`009input symbol name
X!`009outsym`009`009output symbol name
X!`009node`009`009DECnet node spec
X!`009device`009`009node/device spec
X!`009dir`009`009node/dev/dir spec
X!`009uic`009`009UIC spec
X!`009restofline`009rest of command line
X!`009parenvalue`009parenthesized value
X!`009file`009`009any file spec
X!`009expression`009general DCL expression
X!`009test1`009`009Three hooks for testing
X!`009test2
X!`009test3
X!`009acl`009`009ACL spec
X!NAME (word)`009BRO of entity name
X!LABEL (word)`009BRO of label used to retrieve entity
X!PROMPT (word)`009BRO of parameter prompt
X!DEFVAL (word)`009BRO of parameter default value(s)
X! --max sizes --
X! Name=1+31
X! label=1+31
X! prompt=1+31
X! defval=1+95
X!-- end of fixed portion--
V!-- following the fixed portion are the Name, Label, Prompt and default value
Xs,
V! stored as ascic strings. The default values are stored as a sequence of asc
Xic
X! strings, within the overall ascic string.
X!
X!expression block
X!
X!`009an expression block is used to represent, within a boolean expression,
X!`009one operator and its operands. The operands are themselves expression
X!`009blocks, either subexpressions or paths. Paths represent the hierarchical
X!`009path to an entity whose presence is to be determined.
X!
X! standard header, valid subtypes starting at 1
X!`009path`009entity path
X!`009not`009boolean NOT
X!`009any2`009"`009ANY2
X!`009and`009"`009AND
X!`009or`009"`009OR
X!`009xor`009"`009XOR
X!`009neg`009"`009NEG
X! no flags defined
X!TR0 Count
X! operand_list character length 0 tag l
X!(max 8 entities)
$ GOSUB UNPACK_FILE

$ FILE_IS = "COMMAND.MAR"
$ CHECKSUM_IS = 1584339123
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title print command 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_command,`094m<r2,r3,r4,r5,r6,r7>
X`009; 4(ap) = address of command block
X
X`009movl`0094(ap),r6
X
X5$:`009bitw`009#cmd_m_parms,cmd_w_flags(r6)
X`009beql`00910$
X`009tstl`009cmd_l_parms(r6)
X`009beql`00910$
X`009addl3`009clex_table,cmd_l_parms(r6),-(sp)
X`009calls`009#1,clex_evaluate_entity
X
X10$:`009bitw`009#cmd_m_quals,cmd_w_flags(r6)
X`009beql`00920$
X`009tstl`009cmd_l_quals(r6)
X`009beql`00920$
X`009addl3`009clex_table,cmd_l_quals(r6),-(sp)
X`009calls`009#1,clex_evaluate_entity
X
X20$:`009movzwl`009cmd_w_name(r6),r7
X`009addl`009r6,r7
X`009case`009cmd_b_subtype(r6),type=b,limit=#1,<-
X`009`009_verb,-
X`009`009_syntax>
X
X`009movl`009#0,r0`009; invalid
X`009ret
X
X_verb:`009add_string`009<'define verb '>`009
X`009movzbl`009(r7),r2`009; save size of entire thing
X`009movzbl`0091(r7),r3`009; save size of verb name
X_verb1:`009incl`009r7`009; point to first ascic
X`009add_ascic_trunc`009r7,r3
X`009decl`009r2`009; subtract off extra byte for count byte
X
X`009movzbl`009(r7),r4`009; assume verb bigger than synonym
X`009cmpb`009(r7),r3`009; is synonym bigger than verb?
X`009bleq`009_verb2
X`009movzbl`009r3,r4`009; if so it got truncated by CDU
X`009add_string`009<'   !! warning, synonym truncated'>
X_verb2:`009calls`009#0,g`094put_output
X`009subb`009r4,r2`009; subtract off printed portion.
X`009beql`009_verb3
X
X`009addl`009r4,r7
X`009tstb`0091(r7)
X`009beql`009_verb1`009; if zero length string , skip to next.
X`009add_string`009<'   synonym '>
X`009brb`009_verb1
X_verb3:`009brb`009_continue
X
X_syntax:
X`009add_string`009<'define syntax '>
X`009add_ascic`009r7
X
X_continue:
X`009calls`009#0,put_output
X
X`009movzwl`009cmd_w_image(r6),r7
X`009addl`009r6,r7
X`009clrl`009_clex_handler_flag
X
X`009case`009cmd_b_handler(r6),type=b,limit=#0,<-
X`009`009_print_prefix,-`009; no handler
X`009`009_handler_cli,-
X`009`009_handler_user,-
X`009`009_handler_image,-
X`009`009_handler_same>
X`009movl`009#0,r0`009; invalid handler
X`009ret
X
X_handler_cli:
X`009add_string`009<'   cliroutine '>
X`009add_ascic`009r7
X`009brw`009_print_cliflags
X
X_handler_user:
X`009add_string`009<'   routine '>
X`009add_ascic`009r7
X`009brw`009_print_cliflags
X
X_handler_image:
X`009add_string`009<'   image '>
X`009add_ascic`009r7
X`009brw`009_print_cliflags
X
X_handler_same:
X`009movl`009#1,_clex_handler_flag
X`009brw`009_print_cliflags
X
X_print_cliflags:
X`009bitw`009#`094x1F,cmd_w_flags(r6)`009; any cliflags?
X`009bneq`009_cliflags_cli1
X`009calls`009#0,g`094put_output
X`009brw`009_print_prefix
X
X_cliflags_cli1:
X`009clrq`009r4
X`009add_string`009<' , cliflags ('>
X`009moval`009table_cli_flags,r3
X_cliflags_cli2:
X`009bbc`009r4,cmd_w_flags(r6),_cliflags_cli4
X`009tstl`009r5
X`009beql`009_cliflags_cli3
X`009add_string`009<','>
X_cliflags_cli3:
X`009incl`009r5
X`009add_ascic`009(r3)[r4]
X_cliflags_cli4:
X`009aobleq`009#4,r4,_cliflags_cli2
X`009add_string`009<')'>
X`009calls`009#0,g`094put_output
X
X_print_prefix:
X`009movzwl`009cmd_w_prefix(r6),r7
X`009beql`009_print_parms
X`009addl`009r6,r7
X`009add_string`009<'   prefix '>
X`009add_ascic`009r7
X`009calls`009#0,g`094put_output
X
X_print_parms:
X`009bitw`009#cmd_m_parms,cmd_w_flags(r6)
X`009beql`009_print_quals
X`009tstl`009cmd_l_parms(r6)
X`009bneq`009_print_parms_1
X`009add_string`009<'   noparameters'>
X`009calls`009#0,g`094put_output
X`009brb`009_print_quals
X_print_parms_1:
X`009addl3`009clex_table,cmd_l_parms(r6),-(sp)
X`009calls`009#1,clex_print_entity
X_print_quals:`009
X`009bitw`009#cmd_m_quals,cmd_w_flags(r6)
X`009beql`009_print_disallows
X`009tstl`009cmd_l_quals(r6)
X`009bneq`009_print_quals_1
X`009add_string`009<'   noqualifiers'>
X`009calls`009#0,g`094put_output
X`009brb`009_print_disallows
X_print_quals_1:
X`009addl3`009clex_table,cmd_l_quals(r6),-(sp)
X`009calls`009#1,clex_print_entity
X_print_disallows:`009
X`009bitw`009#cmd_m_disallows,cmd_w_flags(r6)
X`009beql`009_print_outputs
X`009tstl`009cmd_l_disallow(r6)
X`009beql`009_print_outputs
X
X`009addl3`009clex_table,cmd_l_disallow(r6),r5
X`009movzwl`009exp_w_tro_count(r5),r3
X`009moval`009exp_l_operand_list(r5),r2
X
X`009clrl`009r4
X_print_disallows1:
X`009add_string`009<'   disallow '>
X
X`009pushl`009r6
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009calls`009#0,g`094put_output
X`009aoblss`009r3,r4,_print_disallows1
X
X`009brb`009_print_outputs
X
X_print_outputs:
X`009clrl`009r5
X`009movzwl`009cmd_w_outputs(r6),r3`009; BRO outputs list
X`009beql`009_end_of_command
X`009addl`009r6,r3`009`009`009; point to ascic of outputs
X`009movzbl`009(r3),r4`009; number of outputs
X`009beql`009_end_of_command`009; see if there is indeed any outputs
X`009incl`009r3
X`009add_string`009<'   outputs('>
X`009brb`009_print_continue
X_print_out_loop:
X`009add_string`009<','>
X_print_continue:
X`009movb`009(r3)[r5],r2
X`009blss`009_print_out_parm
X`009addl3`009clex_table,cmd_l_quals(r6),r7`009; r7 is address of first entity
X`009brb`009_get_entity_loop
X_print_out_parm:
X`009mnegb`009r2,r2
X`009addl3`009clex_table,cmd_l_parms(r6),r7
X_get_entity_loop:
X`009decb`009r2
X`009beql`009_print_this_output
X`009addl3`009clex_table,ent_l_next(r7),r7
X`009brb`009_get_entity_loop
X_print_this_output:
X`009movzwl`009ent_w_label(r7),r2
X`009addl`009r7,r2
X`009add_ascic`009r2
X`009aoblss`009r4,r5,_print_out_loop
X`009add_string`009<')'>`009
X`009calls`009#0,g`094put_output
X
X_end_of_command:
X`009ret
X
X`009.psect`009string_table`009rd,nowrt,noexe
Xtable_cli_flags:
X`009string`009<'abbreviate'>
X`009string`009<'nostatus'>
X`009string`009<'foreign'>
X`009string`009<'immediate'>
X`009string`009<'mcrparse'>
X
X`009.end
$ GOSUB UNPACK_FILE

$ FILE_IS = "COMPILE.COM"
$ CHECKSUM_IS = 1683832720
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X$! Creating verb.hlp
X$
X$ runoff verb.rnh
X$
X$! Creating verb.exe
X$
X$ fortran/debug/nooptimize verb
X$ Library/macro/create clexlib clexlib
X$ macro/debug Buffer
X$ macro/debug Evalentity
X$ macro/debug Find
X$ macro/debug Get_term
X$ macro/debug Command
X$ macro/debug Disallows
X$ macro/debug Entity
X$ macro/debug Findentity
X$ macro/debug Init
X$ macro/debug List
X$ macro/debug Type
X$ link/notrace verb.obj, Buffer.obj, Evalentity.obj, Find.obj, -
X`009`009Get_term.obj, Command.obj, Disallows.obj, Entity.obj, -
X`009`009Findentity.obj, Init.obj, List.obj, Type.obj, -
X`009`009Sys$system:sys.stb/sel,Sys$system:dcldef.stb/sel
$ GOSUB UNPACK_FILE

$ FILE_IS = "DISALLOWS.MAR"
$ CHECKSUM_IS = 1057553910
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title print disallows 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_clex_l_bracket:`009string`009'<'
X_clex_r_bracket:`009string`009'>'
X
X`009.psect`009_clex_code`009rd,nowrt,exe
X
X`009.entry`009clex_print_disallows,`094m<r2,r3,r4,r5,r6,r7>
X`009; 4(ap) = address of disallows block
X
X`009movl`0094(ap),r6
X
X`009movzwl`009exp_w_tro_count(r6),r3
X`009moval`009exp_l_operand_list(r6),r2
X
X`009case`009cmd_b_subtype(r6),type=b,limit=#1,<-
X`009`009_path,-
X`009`009_not,-
X`009`009_any2,-
X`009`009_and,-
X`009`009_or,-
X`009`009_xor,-
X`009`009_neg>
X
X_path:
X`009clrl`009r4
X`009tstl`009_clex_handler_flag
X`009beql`009_path2
X
X`009addl3`009clex_table,(r2)[r4],-(sp)`009; this entity
X`009calls`009#1,g`094clex_find_entity
X`009cmpl`009r0,8(ap)
X`009beql`009_path2
X
X`009movl`009r0,r7
X`009beql`009_path2`009; hmm... How strange, it couldn't find it..
X
X`009movl`009r7,r1
X`009cmpb`009#block_k_command,cmd_b_type(r1)
X`009bneq`00910$
X`009movzwl`009cmd_w_name(r1),r7
X`009cmpb`009#cmd_k_verb,cmd_b_subtype(r1)
X`009bneq`00920$
X`009incl`009r7
X`009brb`00920$
X
X10$:`009cmpb`009#block_k_type,type_b_type(r1)`009; let's assume this is true
X`009bneq`009_path2
X`009movzwl`009type_w_name(r1),r7
X
X20$:`009addl`009r1,r7
X`009add_ascic`009_clex_l_bracket
X`009add_ascic`009r7
X`009add_ascic`009_clex_r_bracket
X`009brb`009_path2
X
X_path1:`009add_string`009<'.'>
X_path2:`009addl3`009clex_table,(r2)[r4],r5
X`009movzwl`009ent_w_label(r5),r1
X`009addl`009r5,r1
X`009add_ascic`009r1
X`009aoblss`009r3,r4,_path1
X`009brw`009_dis_end
X
X_and:
X`009clrl`009r4
X`009add_string`009<'('>
X`009brb`009_and2
X_and1:`009add_string`009<' and '>
X_and2:`009pushl`0098(ap)
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009aoblss`009r3,r4,_and1
X`009add_string`009<')'>
X`009brw`009_dis_end
X
X_or:
X`009clrl`009r4
X`009cmpl`009r3,#1
X`009beql`009_or2
X`009add_string`009<'('>
X`009brb`009_or2
X_or1:`009add_string`009<' or '>
X_or2:`009pushl`0098(ap)
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009aoblss`009r3,r4,_or1
X`009cmpl`009r3,#1
X`009beql`009_or3
X`009add_string`009<')'>
X_or3:`009brw`009_dis_end
X
X_xor:
X`009clrl`009r4
X`009add_string`009<'('>
X`009brb`009_xor2
X_xor1:`009add_string`009<' xor '>
X_xor2:`009pushl`0098(ap)
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009aoblss`009r3,r4,_xor1
X`009add_string`009<')'>
X`009brw`009_dis_end
X
X_not:
X`009clrl`009r4
X`009add_string`009<'not'>
X_not1:`009add_string`009<' '>
X`009pushl`0098(ap)
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009aoblss`009r3,r4,_not1
X;`009add_string`009<')'>
X`009brw`009_dis_end
X
X_neg:
X`009clrl`009r4
X`009add_string`009<'(neg'>
X_neg1:`009add_string`009<' '>
X_neg2:`009pushl`0098(ap)
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009aoblss`009r3,r4,_neg1
X`009add_string`009<')'>
X`009brw`009_dis_end
X
X_any2:
X`009clrl`009r4
X`009add_string`009<'any2('>
X`009brb`009_any22
X_any21:`009add_string`009<','>
X_any22:`009pushl`0098(ap)
X`009addl3`009clex_table,(r2)[r4],-(sp)
X`009calls`009#2,clex_print_disallows
X`009aoblss`009r3,r4,_any21
X`009add_string`009<')'>
X`009brw`009_dis_end
X
X
X_dis_end:
X`009ret
X
X`009.end
$ GOSUB UNPACK_FILE

$ FILE_IS = "ENTITY.MAR"
$ CHECKSUM_IS = 1535098164
$ COPY SYS$INPUT VMS_SHARE_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,`094m<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),#`094a' ',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),#`094a' ',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`094put_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`094put_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`094put_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`094put_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`094put_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`094put_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`094put_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`094put_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 UNPACK_FILE

$ FILE_IS = "EVALENTITY.MAR"
$ CHECKSUM_IS = 92099924
$ COPY SYS$INPUT VMS_SHARE_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,`094m<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 UNPACK_FILE

$ FILE_IS = "FIND.MAR"
$ CHECKSUM_IS = 391466442
$ COPY SYS$INPUT VMS_SHARE_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,`094m<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`094str$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 UNPACK_FILE

$ FILE_IS = "FINDENTITY.MAR"
$ CHECKSUM_IS = 1367133722
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title`009find_entity
X
X`009.library`009'clexlib'
X
X`009.entry`009clex_find_entity,`094m<r2,r3,r4,r5>
X`009; 4(ap) = entity block
X`009; this routine searches down the entity block to see`032
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,`094m<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 UNPACK_FILE

$ FILE_IS = "GET_TERM.MAR"
$ CHECKSUM_IS = 319492446
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title`009get terminal characteristics
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
X; calling sequence
X;`009ret-stat = get_terminal_characteristics( terminal, characteristics )
X; ret-stat is a longword return status from any of the following
X; `009system services : ASSIGN,DASSGN,GETDVI,QIOW
X; terminal is the address of a descriptor containing the name of the
X;`009device to get information on
X; characteristics is the address of the quadword to return
X;`009the characteristics in.
X
X$devdef`009`009; device characteristics
X$ttdef`009`009; terminal characteristics
X$dvidef`009`009; device information
X$dcdef`009`009; device class
X
Xdvi_list:
X`009.word`0094,dvi$_devclass`009; buffer length, item code
X`009.long`009dev_class`009; buffer address
X`009.long`0090`009`009; return length (0 = don't bother)
X
Xdev_class:`009.long
Xdev_chan:`009.word`009; channel
Xdev_buff:`009.quad`009; device characteristics buffer
X
X`009.entry`009get_terminal_characteristics,0
X
X`009; call getdvi to determine if SYS$INPUT is a terminal
X`009$getdviw_s -
X`009`009devnam=@4(ap),itmlst=dvi_list
X`009blbs`009r0,5$
X`009ret`009; punt if error
X
X`009; is it a terminal?
X5$:`009cmpl`009#dc$_term,dev_class
X`009beql`00910$`009; branch to 10$ if it is a terminal
X
X`009movl`009#0,r0
X`009brb`00930$`009; no sense in asking if isn't a terminal
X
X10$:`009$assign_s -
X`009`009devnam=@4(ap),chan=dev_chan
X`009blbc`009r0,30$
X
X`009$qiow_s`009chan=dev_chan,func=#io$_sensemode,p1=@8(ap),p2=#8
X`009blbc`009r0,20$
X
X20$:`009$dassgn_s -
X`009`009chan=dev_chan
X30$:`009ret
X
X`009.end
$ GOSUB UNPACK_FILE

$ FILE_IS = "INIT.MAR"
$ CHECKSUM_IS = 1598896129
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title`009initialization routines
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`009'clexlib'
X
X`009.psect`009_clex_common`009rd,wrt,noexe
Xclex_table::`009.long`009; table address
Xclex_verbs::`009.long`009; verb list
Xclex_commands::`009.long`009; command list
Xclex_cmd_cnt::`009.long`009; number of verbs
Xclex_output::`009.long`009; output routine address
Xclex_width::`009.long`009; width of output buffer
X_clex_handler_flag::
X`009.long
X_clex_cmd_block::
X`009.long
X
X`009.sbttl`009initialize table address
X
X`009.psect`009_clex_code`009rd,nowrt,exe
X
X`009.entry`009clex_use_process_table,0
X`009; ret-status = clex_use_process_table()
X`009movl`009ctl$ag_clitable,clex_table
X`009jsb`009_clex_initialize
X`009ret
X
X`009.entry clex_use_image,0
X`009; ret-status = clex_use_image (tableaddress)
X`009movl`009@4(ap),clex_table
X`009jsb`009_clex_initialize
X`009ret
X
X`009.psect`009_clex_local`009rd,wrt,noexe
Xfab:`009$fab`009dnm=<SYS$SHARE:DCLTABLES.EXE>,fac=get,fop=ufo
Xinadr:`009.long`009`094x200,`094x200
Xretadr:`009.quad
X$secdef
X
X`009.psect`009_clex_code`009rd,nowrt,exe
X
X`009.entry`009clex_use_command_table,0
X`009; ret-status = clex_use_command_table( table )
X`009movl`0094(ap),r0
X`009movb`009(r0),fab+fab$b_fns
X`009movl`0094(r0),fab+fab$l_fna
X`009$open`009fab=fab
X`009blbc`009r0,10$
X`009$crmpsc_s -
X`009`009inadr=inadr,retadr=retadr,flags=#<sec$m_expreg>,-
X`009`009chan=fab+fab$l_stv,vbn=#2
X`009blbc`009r0,10$
X`009movl`009retadr,clex_table`009
X`009jsb`009_clex_initialize
X10$:`009ret
X
X_clex_initialize:
X`009movl`009clex_table,r0
X`009addl3`009r0,vec_l_verbtbl(r0),clex_verbs
X`009addl3`009r0,vec_l_comdptr(r0),r1
X`009movzwl`009vec_w_tro_count(r1),clex_cmd_cnt
X`009addl`009#8,clex_verbs
X`009addl3`009#8,r1,clex_commands
X`009movl`009#1,r0
X`009rsb
X
X`009.entry`009clex_init_output,0
X`009movl`0094(ap),clex_output
X`009movl`009@8(ap),clex_width
X`009ret
X
X`009.end
$ GOSUB UNPACK_FILE

$ FILE_IS = "LIST.MAR"
$ CHECKSUM_IS = 1125143275
$ COPY SYS$INPUT VMS_SHARE_DUMMY.DUMMY
X`009.title print verb name
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_verb,`094m<r2,r3,r4,r5,r6,r7>
X`009; 4(ap) = address of command block
X
X`009movl`0094(ap),r6
X`009movzwl`009cmd_w_name(r6),r7
X`009addl`009r6,r7
X`009case`009cmd_b_subtype(r6),type=b,limit=#1,<-
X`009`009_verb,-
X`009`009_syntax>
X
X`009movl`009#0,r0`009; invalid
X`009ret
X
-+-+-+-+-+ End of part 1 +-+-+-+-+-
