FindMenu
From Pickwiki
Back to BasicSource, InfoLease
*SPLC********************************************************************** * * * Program Title : FIND.MENU * * Author : Ian [[McGowan]] * * Date Started : January 11, 1991 * * Last Modified : 14:22:26 17 MAY 1991 By Ian * * Description : Given a string will go and look in menu file and * * : show menu tree of how to get to that string * * : * * Comments : Most of the work is done in recursive subroutine * * : SPLC-BP,SUBS SPLC.SEARCH.MENU * * Usage : FIND.MENU <search string> * * * *************************************************************************** OPEN "DB.MENUS" TO MENU.F ELSE STOP 201,"DB.MENUS" STR=FIELD(@SENTENCE,' ',2) IF STR='' THEN PRINT "Enter menu or program to search for : ": ; INPUT STR IF STR="" OR STR="/" THEN STOP END PATH = '' ; MENU = 1 ; STR = OCONV(STR,"MCU") CALL SPLC.SEARCH.MENU(MENU,STR,MENU.F,PATH)
--cut--
SUBROUTINE SPLC.SEARCH.MENU(MENU,STR,MENU.F,PATH) *SPLC********************************************************************** * * * Program Title : SPLC.SEARCH.MENU * * Author : Ian [[McGowan]] * * Date Started : January 11, 1991 * * Last Modified : 15:07:10 14 MAY 1991 By Matt * * Description : Subroutine to recursively descend menu tree, * * : looking for a specified program, or menu title. * * : * * Comments : Called from UTILS FIND.MENU * * : * * Usage : * * * *************************************************************************** **** Modified by JIM at 11:00:49 14 JAN 1991 * -- Added code to build a path description - how to get to * -- the menu found. VM = CHAR(253) READ R FROM MENU.F, MENU THEN TITLES = OCONVS(R<2>,"MCU") ; PROGS = OCONVS(R<3>,"MCU") ; FLAGS = R<4> I = DCOUNT(PROGS,VM) FOR F = 1 TO I IF FLAGS<1,F> # 'M' THEN IF INDEX(PROGS<1,F>,STR,1) # 0 OR INDEX(TITLES<1,F>,STR,1) # 0 THEN PRINT TITLES<1,F>"L#30":" ":PROGS<1,F>"L#30":" ": K = DCOUNT(PATH,VM) ; FOR J = 2 TO K ; PRINT PATH<1,J>:',': ; NEXT J ; PRINT F END END ELSE MENU = PROGS<1,F> PATH = PATH:VM:F CALL SPLC.SEARCH.MENU(MENU,STR,MENU.F,PATH) K = DCOUNT(PATH,VM) ; PATH=DELETE(PATH,1,K) END NEXT F END RETURN