! THIS TECO MACRO will search thru RSX-11M-PLUS V2 system HELP files ! ! and will list the qualifiers available at ALL levels. ! ! Usage: MUN HELPLEV,MCR [topic1 topic2 ... topic9] ! ! or MUN HELPLEV,DCL [topic1 .... ] ! ! The first parameter after the word "HELP" is the name of the root ! ! .HLP file at which HELPLEV.TEC begins its search, e.g. MCR.HLP. ! ! If a topic is given, HELPLEV.TEC lists subtopics under that topic. ! ! ! ! Q-REGISTER USE: ! ! Q0 -- Root help file name. ! ! Q1-Q9 -- HELP qualifier words ! ! QL -- numeric, level of help we are looking for. ! ! QL -- text, line of output ! ! QC -- loop counter. ! ! QF -- Macro to read indirect files. ! ! QF -- number, level of indirect files ! ! QA -- text, stack of indirect file names. ! ! ! ! Process command line and store qualifiers ! @^A/Help file qualifiers for: / ! Output commands to TI: ! Z"E@I/MCR/'ZJ10I13I ! MUNG puts command line in buffer, insert CR/LF ! 0JHT 0UL ! Set level to 0 ! ! Initialize qualifiers ! @^U0%[1,2]% @^U1%1 % @^U2%2 % @^U3%3 % @^U4%4 % @^U5%5 % @^U6%6 % @^U7%7 % @^U8%8 % @^U9%9 % ! Now strip off qualifiers if given and set up for searches ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X0 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X1 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X2 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X3 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X4 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X5 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X6 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X7 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X8 +C|0;'> ! Append valid chars to register, or exit ! %L ' @:S/ /"FOFILE' ! If no blank go process file ! @:S/C/"FOFILE ! If no valid characters left process file ! | ! else ! -C <0A"C.,.+1:X9 +C|0;'> ! Append valid chars to register, or exit ! %L ' !FILE! HK ! Clear buffer ! QL"=%L ! If no qualifiers given, force one ! ER[1,2]MCR.HLPY ! and use MCR.HLP by default ! | ! else ! ! use first qualifier as root file name and open it ! @I/:ER/G0 @I/.HLP"NY|@^A%No such file as %:G0 HKEKEX'/ HXF HK ! command into QF ! MF ! read the file ! ' 1UC ! set count to one ! QL< ! repeat this mess "level" times ! (QL-QC)"G ! not lowest level yet ! ! Search for appropriate level qualifier; only 1 of 9 executes ! !POS!(1-QC)"E@:_/Q1/US' (2-QC)"E@:_/Q2/US' (3-QC)"E@:_/Q3/US' (4-QC)"E@:_/Q4/US' (5-QC)"E@:_/Q5/US' (6-QC)"E@:_/Q6/US' (7-QC)"E@:_/Q7/US' (8-QC)"E@:_/Q8/US' (9-QC)"E@:_/Q9/US' QS"F:G_ @^A/ not found/ OEND' L <(0A-32)"ED|0;'> ! next line, strip leading blanks ! (0A-35)"E C ! is it a synonym? if so must look for its synonym ! .UA L-2C QA,.X0 ! put syn. into Q0 (not needed no more) ! ! now reset the appropriate search register and go back ! ! first reset cursor ! 0L @^UF%[0 ]% (QC+48):^UF @^UF%% @^UF%% MF OPOS ' (0A-64)"E C ! if @, must open indirect file ! @^UF%:ER[1,2]% ! Put UIC into QF ! .UA @S/ / -2C QA,.:XF ! append file name ! :@^UF%.HLP"NY|@^A/No such file as /:G*HKEKEX'% @:^UF%% ! and extension, and open commands ! @:^UF%% ! Terminate macro ! HK MF ! clear buffer and output file name, open file ! ' ! end of opening indirect file ! %C ! increment count ! | ! else we ARE at lowest level ! < ! loop to output HELP qualifiers at next lowest level ! ! search for a qualifier line, any digit ! !SCAN! @:_/ D / "F! end of file, See if we are indirected ! QF"G ! we are, return back up a level ! -1%F]A]XHK @^UF%:ER% GAH:XF @:^UF%"LY |@^A/No such file as /:G*HKEKEX'% @:^UF%%@:^UF%% MF QXJ OSCAN |OEND' ! failed, no more, quit ! ' -2C ! is it equal or greater level ! (0A-48-QL)"LOEND' ! NO, we quit ! .UX ! save position ! 0,0XL ! clear QL ! (0A-48)<@:^UL% %> ! indent for level ! L-2CQX,.:XL ! and add text ! L.UX<(0A-32)"ED|0;'> ! next line, strip leading blanks ! (0A-35)"E C ! is it a synonym? if so must look for its synonym ! @:^UL% (See % .UA L-2C QA,.:XL QXJ ! put syn. into line ! @:^UL%)% ' 13:^UL10:^UL:GL ! Append CR/LF and output it all ! (0A-64)"E C ! if @, must open indirect file ! [X ! push cursor position onto stack ! %F ! increment indirect level count ! @^UF%:ER[1,2]% ! Put UIC into QF ! .UA @S/ / -2C QA,.:XF ! append file name ! HKG*HXA[AHK ! push old file name onto stack ! :@^UF%.HLP"NY|@^A/No such file as /:G*HKEKEX'% @:^UF%% ! and extension, and open commands ! @:^UF%% ! Terminate macro ! MF ! clear buffer and output file name, open file ! ' ! end of opening indirect file ! > ! end of output loop ! ' ! end of else we are ! > ! end of search down levels ! !END! HK EX