$!............................................................................. $! VAX/VMS archive file created by VMS_SHAR V-5.04-WJM-AGH 29-SEP-1988 $! which was written by Michael Bednarek (U3369429@ucsvc.dn.mu.oz.au) $! and modified by W.J.Moeller $! To unpack, simply save and execute (@) this file. $! $! This archive was created by JOE $! on Tuesday 28-MAR-1989 16:31:19.33 $! $! It contains the following 1 file: $! VERB.SHAR $!============================================================================= $ Set Symbol/Scope=(NoLocal,NoGlobal) $ Version=F$GetSYI("VERSION") ! See what VMS version we have here: $ If Version.ges."V4.4" then goto Version_OK $ Write SYS$Output "Sorry, you are running VMS ",Version, - ", but this procedure requires V4.4 or higher." $ Exit 44 $Version_OK: CR[0,8]=13 $ Pass_or_Failed="failed!,passed." $ Goto Start $Convert_File: $ Read/Time_Out=0/Error=No_Error1/Prompt="creating ''File_is'" SYS$Command ddd $No_Error1: Define/User_Mode SYS$Output NL: $ Edit/TPU/NoSection/NoDisplay/Command=SYS$Input/Output='File_is' - VMS_SHAR_DUMMY.DUMMY f:=Get_Info(Command_Line,"File_Name");b:=Create_Buffer("",f); o:=Get_Info(Command_Line,"Output_File");Set(Output_File,b,o); Position(Beginning_of(b));a:=0;Loop ExitIf Mark(None)=End_of(b); x:=Erase_Character(1);if x="V" then i:=LENGTH(CURRENT_LINE); if i<>78 then MOVE_HORIZONTAL(i);if i>78 then ERASE_CHARACTER(78-i);endif; if i<78 then COPY_TEXT(FAO("!#* ",78-i));endif; Move_Horizontal(-Current_Offset);endif;endif;if a then Append_Line; Move_Horizontal(-Current_Offset);endif;a:=(x="V");Move_Vertical(1);EndLoop; POSITION(BEGINNING_OF(b));p:=" "&LINE_END;loop x:=SEARCH(p,Forward,Exact); exitif x=0;POSITION(END_OF(x));s:=CURRENT_LINE;EDIT(s,Trim_trailing,Off); ERASE_CHARACTER(LENGTH(s)-CURRENT_OFFSET);endloop;Position(Beginning_of(b)); Loop x:=Search("`",Forward,Exact);ExitIf x=0;Position(x);Erase_Character(1); If Current_Character='`' then Move_Horizontal(1);else Copy_Text(ASCII(INT(Erase_Character(3))));EndIf;EndLoop;Exit; $ Delete VMS_SHAR_DUMMY.DUMMY;* $ Checksum 'File_is $ Success=F$Element(Check_Sum_is.eq.CHECKSUM$CHECKSUM,",",Pass_or_Failed)+CR $ Read/Time_Out=0/Error=No_Error2/Prompt=" CHECKSUM ''Success'" SYS$Command ddd $No_Error2: Return $Start: $ File_is="VERB.SHAR" $ Check_Sum_is=688108829 $ Copy SYS$Input VMS_SHAR_DUMMY.DUMMY X$ create/log AAAREADME.TXT X$DECK 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 Xdefinitions for commands that start with A, B, and all three letter commands). X X`009You can specify a table to search for the verb, or even to search your`032 Vprocess space. The command defaults to searching your process space, but if yo Xu 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 proble Xm 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 Xthe same name. Since the TYPE definitions are actually different each one will 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) X$EOD X$ create/log BUFFER.MAR X$DECK 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 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 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$ X`009calls`009#0,put_output`009; output string if it whats to be added wont fit 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 X$EOD X$ create/log CLEXLIB.MAR X$DECK 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 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'</2-1> Xbase: X`009.irp`009ep, 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 X$EOD X$ create/log CLITABLE.TXT X$DECK 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 values X, V! stored as ascic strings. The default values are stored as a sequence of asci Xc 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) X$EOD X$ create/log COMMAND.MAR X$DECK 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 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 X$EOD X$ create/log COMPILE.COM X$DECK 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 X$EOD X$ create/log DISALLOWS.MAR X$DECK 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 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 X$EOD X$ create/log ENTITY.MAR X$DECK 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 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 X$EOD X$ create/log EVALENTITY.MAR X$DECK 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 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 X$EOD X$ create/log FIND.MAR X$DECK 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 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 X$EOD X$ create/log FINDENTITY.MAR X$DECK X`009.title`009find_entity X X`009.library`009'clexlib' X X`009.entry`009clex_find_entity,`094m 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 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 X$EOD X$ create/log GET_TERM.MAR X$DECK 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 X$EOD X$ create/log INIT.MAR X$DECK 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=,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=#,- 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 X$EOD X$ create/log LIST.MAR X$DECK 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 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 X_verb:`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<' (synonym truncated)'> X_verb2:`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<' , '> X`009brb`009_verb1 X_verb3:`009brb`009_continue X X_syntax: X`009add_string`009<'(syntax) '> X`009add_ascic`009r7 X X_continue: X`009calls`009#0,put_output X X`009ret X X`009.entry`009clex_get_verb_name,`094m 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_get_verb> X`009movl`009#0,r0`009; invalid X`009ret X X_get_verb: X`009movzbl`009(r7),r2`009; save size of entire thing X`009movzbl`0091(r7),r3`009; save size of verb name X`009incl`009r7`009; point to first ascic X`009add_ascic_trunc`009r7,r3 X X`009pushaq`009_clex_desc X`009pushl`0098(ap) X`009calls`009#2,g`094str$copy_dx X`009movl`009_clex_pos,@12(ap) X`009clrl`009_clex_pos X X`009ret X X`009.end X$EOD X$ create/log MAKEFILE. X$DECK XMACROMOD1 = Buffer Evalentity Find Get_term X# these modules have no dependency on clexlib.mlb X XMACROMOD2 = Command Disallows Entity Findentity Init List Type X# these modules depend on clexlib.mlb X Xverb.exe: verb.obj $(MACROMOD1).obj $(MACROMOD2).obj X`009link/notrace $?, Sys\$system:sys.stb/sel,Sys\$system:dcldef.stb/sel X Xdebug: verb.obj $(MACROMOD1).obj $(MACROMOD2).obj X`009link/debug $?, Sys\$system:sys.stb/sel,Sys\$system:dcldef.stb/sel X Xcleanup:`009# clean up for DECUS submission X`009-delete $(MACROMOD1).obj;*, $(MACROMOD2).OBJ;*, clexlib.mlb;* X`009-purge X`009-rename *.* ;1 X Xclexlib.mlb: clexlib.mar X`009Library/macro/create clexlib clexlib X Xverb.obj: $*.for X`009fortran/debug/nooptimize verb X X$(MACROMOD1).obj: $*.mar X`009macro/debug $* X X$(MACROMOD2).obj: $*.mar clexlib.mlb X`009macro/debug $* X$EOD X$ create/log TEST.BAS X$DECK X10`009external long function smg$$ab_defkey_cld X`009end X$EOD X$ create/log TEST.COM X$DECK X$ !basic test X$ link/share test/opt X$ define test$image sys$disk:[]test X$ verb/image=test$image/symbol=smg$$ab_defkey_cld * X$EOD X$ create/log TEST.OPT X$DECK Xtest.obj XUNIVERSAL=SMG$$AB_DEFKEY_CLD X$EOD X$ create/log TYPE.MAR X$DECK X`009.title print type 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_type,`094m X`009; 4(ap) = address of type block X X`009movl`0094(ap),r2 X X`009movzwl`009type_w_name(r2),r3 X`009addl`009r2,r3 X`009add_string`009<'define type '> X`009add_ascic`009r3 X`009calls`009#0,g`094put_output X X`009movzwl`009type_w_prefix(r2),r3 X`009beql`009type_1 X X`009addl`009r2,r3 X`009add_string`009<' prefix '> X`009add_ascic`009r3 X`009calls`009#0,g`094put_output X Xtype_1:`009addl3`009clex_table,type_l_keywords(r2),-(sp) X`009calls`009#1,clex_print_entity X X`009ret X`009.end X$EOD X$ create/log VERB.CLD X$DECK V!*************************************VERB************************************ X** Xdefine verb VERB X image EXE$DIR:VERB X parameter P1 , label=VERB , prompt="Verb" X value (list) X qualifier ALL X nonnegatable X qualifier PROCESS X nonnegatable X qualifier TABLE X nonnegatable X value (default="SYS$SHARE:DCLTABLES",type=$infile) X qualifier OUTPUT X nonnegatable X value (type=$outfile) X qualifier WIDTH X nonnegatable X value (required,type=$number) X qualifier IMAGE X nonnegatable X value (required,type=$infile) X qualifier SYMBOL X nonnegatable X value (required) X qualifier LIST X nonnegatable X disallow TABLE and PROCESS X disallow TABLE and IMAGE X disallow PROCESS and IMAGE X$EOD X$ create/log VERB.FOR X$DECK X`009program verb_extractor X X`009! VERB Version 1.0 June 1st, 1985 X`009! Written by Joe Meadows Jr., with thanks to the X`009! Fred Hutchinson Cancer Research Center for kindly X`009! allowing me to use their computing resources. X`009! X`009! If you have any questions, comments, ideas, or X`009! whatever, feel free to contact me via US Mail : X`009!`009Joe Meadows Jr. X`009!`0094841 268th Ave. N.E. X`009!`009Redmond Wa. 98052 X`009! or via phone : (206) 827-7296 X X`009implicit integer (a-z) X`009character buffer*80,comment*132,verb*32,symbol*80 X`009logical all,out,list, found, anyfound, openfile X`009external lib$put_output,output,lib$find_image_symbol X`009byte term_char(8) X`009integer*2 term_width X`009equivalence (term_char(3),term_width) X X`009integer cli$_entnf/'38934'x/ X X`009comment= X`0091 '!***************************************' X`0091//'****************************************' X`0091//'****************************************' X`0091//'************'`009! I just love a huge comment... X X`009! let user specifywidth of output stream (for the heck of it, okay?) X`009if (cli$present('width')) then X`009 call error(cli$get_value('width',buffer,buff_len)) X`009 call error(ots$cvt_ti_l(buffer(:buff_len),width)) X`009else X`009 i=get_terminal_characteristics('SYS$INPUT',term_char) X`009 if (.not.i) term_width=132 X`009 width=term_width`009! default to screen width for the heck of it X`009end if X X`009! just want a listng of the verbs? X`009list=cli$present('list') X X`009! use file or actual process mapped version? X`009if (cli$present('table')) then X`009 call error(cli$get_value('Table',buffer,buff_len)) X`009 call error(clex_use_command_table(buffer(:buff_len))) X`009elseif (cli$present('image')) then X`009 ! is there an image spec? X`009 call error(cli$get_value('Image',buffer,buff_len)) X`009 call error(cli$get_value('Symbol',symbol,symb_len)) X`009 call error(lib$find_image_symbol(buffer(:buff_len) X`0091`009`009`009`009 ,symbol(:symb_len) X`0092`009`009`009`009 ,tableaddr)) X`009 call clex_use_image(tableaddr) X`009else X`009 call clex_use_process_table X`009end if X X X`009! is output going to a file? X`009if (cli$present('output')) then X`009 call cli$get_value('output',buffer,buff_len) X`009 openfile=.true. ! wait till we've found a verb before opening file X`009 call clex_init_output(output,width) X`009 out=.true. X`009else X`009 call clex_init_output(lib$put_output,width) X`009end if X X`009anyfound=.false. X X`009! they want all the verbs? X`009if (cli$present('all')) then X`009 verb='*' X`009 verb_len=1 X`009 goto 15 X`009end if X X`009! get the next verb down the line X10`009i=cli$get_value('Verb',verb,verb_len)`009 X`009if (.not.i) then X`009 if (anyfound) then X`009 call exit X`009 else X`009 call exit(cli$_entnf) X`009 end if X`009end if X X`009call str$upcase(verb(:verb_len),verb(:verb_len)) X15`009j=0 X X`009! locate the little bugger X`009found = .false. X20`009i=clex_find_verb(verb(:verb_len),j,cmd_block) X`009if (.not.i) then X`009 if (found) then X`009 goto 10 X`009 else X`009 call lib$signal(%val(cli$_entnf-4)) X`009 goto 10 X`009 end if X`009end if X`009anyfound=.true. X`009found=.true. X`009if (openfile) then ! we need to open the output file X`009 if (buff_len.eq.0) X`0091 call clex_get_verb_name(%val(cmd_block),buffer,buff_len) X`009 open(file=buffer(:buff_len),err=30,unit=1,status='new' X`0091`009,defaultfile='.CLD',carriagecontrol='list') X`009 openfile=.false. X`009end if X X`009! get ready to output the verb X`009if (list) then X`009 i=clex_print_verb(%val(cmd_block)) X`009else X`009 call clex_get_verb_name(%val(cmd_block),buffer,buff_len) X`009 i=min(width,132) X`009 k=i/2-buff_len/2 X`009 if (k.lt.1) k=1 X`009 i=max(i-buff_len,0)`009! center verb name in middle of comment X`009 if (out) then X`009 call output X`0091`009(comment(:k)//buffer(:buff_len)//comment(k+1:i)) X`009 else X`009 call lib$put_output X`0091`009(comment(:k)//buffer(:buff_len)//comment(k+1:i)) X`009 end if X X`009 ! okay, here it is X`009 i=clex_print_command(%val(cmd_block)) X`009end if X X`009j=j+1`009! continue search with next verb X`009goto 20 X X30`009end X X`009subroutine error(i) X`009if (.not.i) call exit(i) X`009return X`009end X X`009integer function output (a) X`009character*(*) a X`009output=0 X`009write(1,'(a)',err=10) a X`009output=1 X10`009return X`009end X$EOD X$ create/log VERB.HLP X$DECK X1 VERB X`009VERB Verb[,verb...] X X Extract verb definitions, to create command definition files from command X tables (or from the current process tables). X Optionally just create a listing of the specified verbs. X Wildcarding is allowed. X i.e. X`009VERB C*,D*,*ING X`009VERB/LIST/ALL/OUT=VERBS.LIST X X/ALL X Same as entering "*" as the verb. X/PROCESS X Default if /TABLE isn't specified. Causes verbs to be looked up and X extracted from the current in-memory process tables. X/TABLE X /TABLE[=table-file-spec] X Specifies that verbs are to be looked up and extracted from command table X files. If no file is specified it defaults to SYS$SHARE:DCLTABLES.EXE X/OUTPUT X /OUTPUT=out-file-spec X Send output to 'out-file-spec' X/WIDTH X /WIDTH=width X Specifies width of output lines. Default to current screen width X/LIST X Create a listing of the specified verbs, rather than extracting the verb X definitions. X$EOD X$ create/log VERB.RNH X$DECK X.rm 75 X.lm 0 X1 VERB X.lm 1 XVERB 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.blank X.! Note, you will probably want to edit the following lines to X.! reflect local conditions.... XTo use VERB, type SET COMMAND VERB or add this command to your Xlogin.com file. X.break X.lm 0 X2 Parameters X.lm 1 XVERB allows you to do wildcard searches for verbs (commands) Xand lists of verbs, such as VERB A*,B*,%%% (which would return all the verb Xdefinitions for commands that start with A, B, and all three letter commands). X.break X.lm 0 X2 /ALL X.lm 1 XVERB /ALL will list the entire CLD for every command in your process table. X.break X.lm 0 X2 /LIST X.lm 1 X VERB also can list available verbs (commands), without Xthe verb definition, as in VERB /LIST /ALL, and note the /ALL qualifier. X.break X.lm 0 X2 /OUTPUT X.lm 1 XVERB allows you to put the output in a file, as in XVERB /OUTPUT=filename. X.break X.lm 0 X2 /PROCESS X.lm 1 XVERB /PROCESS 'command' defaults to searching your process space. X.break X.lm 0 X2 /WIDTH X.lm 1 XThis qualifier tell VERB how wide your terminal screen is. /WIDTH=80 is Xthe default. X.break X.lm 0 X2 /TABLE X.lm 1 XYou can specify a table to search for the verb, or even to search your Vprocess space. The command defaults to searching your process space, but if yo Xu 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.break X.lm 0 X2 /IMAGE X.lm 1 XYou can specify an image to load, to search command tables defined Xwithin a shareable image. You must use the /SYMBOL qualifier Xwith this qualifier. The image wil be loaded via LIB$FIND__IMAGE__SYMBOL Xso all restrictions for that routine apply. X.break X.lm 0 X2 /SYMBOL X.lm 1 XYou can specify a symbol name which points to a command table within Xa shareable image. An example using a basic program follows: X.lit X`00910`009external long function smg$$ab_defkey_cld X`009`009! This simply defines the symbol smg$$ab_defkey_cld X`009`009! which is used internally, if you had your own X`009`009! command tables internal to the program, you X`009`009! could use it here.. But then, you probably wouldn't X`009`009! need to. This feature obviously has limited use... X`009`009end X.end lit Xto be compiled like: X.lit X`009$ basic test X`009$ link/share sys$input/opt X`009`009test.obj X`009`009UNIVERSAL=SMG$$AB_DEFKEY_CLD X`009$ define test$image sys$disk:[]test X`009$ verb/image=test$image/symbol=smg$$ab_defkey_cld * X.end lit X.break X.lm 0 X2 restrictions X.lm 1 XWell, it hasn't been tested with MCR tables.I wouldn't be surprised if Xit didn't like them. X.blank XWhen extracting several verbs at a time the verbs may reference common VTYPE defnitions, in these cases only one is output, this only becomes a proble Xm Xif you cut up the output file into several smaller files. X.blank XWhen extracting several verbs (such as BASIC,MACRO,FORTRAN) they Xmay each reference a TYPE defnition that is different for each verb, but has Xthe same name. Since the TYPE definitions are actually different each one will 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.break X.lm 0 X2 author X.lm 1 XIf you have any questions, comments, ideas, or Xwhatever, feel free to contact me. X.blank X.i+5;Joe Meadows Jr. X.i+5;VAX/VMS System Manager / guru in training X.i+5;Fred Hutchinson Cancer Research Center X.i+5;1124 Columbia St. X.i+5;Seattle Wa. 98104 X.i+5;bitnet - JOE@FHCRCVAX X.i+5;arpa - JOE%FHCRCVAX.BITNET@OLY.ACS.WASHINGTON.EDU X.i+5;voice - (206) 467-4970 X.break X$EOD $ GoSub Convert_File $ Exit