d$! DO SUB{/OUTPUT=filename} {SWITCH} {[DIR]}{filespec} $! Gets directories and sub-directories listings. ,$! $! COMMAND PROCEEDURE TO GET A DIRECTORY LISTING OF THE $! PRESENT DIRECTORY AND ALL LOWER LEVEL SUB-DIRECTORIES. X$! $! <...> DENOTES OPTIONAL PARAMETERS $! WHERE: filename = OUTPUT FILE. DEFAULT: SYS$OUTPUT $! SWITCH = FULL - FOR FULL DIRECTORY LIST $! BRIEF - FOR BRIEF LISTING L$! DIR = DEVICE:[DIRECTORY] TO START SEARCH FROM $! filespec = FILE.TYPE;VERSION $! F$! Thanks to Gary Lee 03/14/80 x$! -end.of.info- $ $ NP = 1 @$ INPDIR:="" !DEFAULT NULL INPUT DIR $ INPSW:="" !" " LIST SWITCH $ INPFSP:="" !" " FILE SPEC l$ INPDEV:="" !" " DEVICE NAME $GETINP: 4$ IF (P'NP' .EQS. "") THEN GOTO XTRACT !NO MORE INPUT PARAMS $ ASSIGN &P'NP' PNP $ PNP:= 'F$LOGICAL("PNP")' ` $ CHAR2:= 'F$EXTRACT(0,2,PNP) !GET FIRST 2 CHARS $ CHAR1:= 'F$EXTRACT(0,1,PNP) !GET FIRST CHARACTER ( $ IF (CHAR1.NES."[") THEN GOTO AA !NOT A DIRECTORY $ INPDIR:='PNP' $ GOTO C T $ $AA: !CHECK TO SEE IF THIS STILL MIGHT BE A DIRECTORY  $ LOC = 'F$LOCATE("[",PNP) $ LENPNP='F$LENGTH(PNP)' $ IF(LOC.EQ.LENPNP) THEN GOTO A !DEFINITLY NOT A DIRECTORY H $ INPDIR:='PNP' !ASSUME FORM WAS "DEV:[" $ GOTO C $A: t$ IF (CHAR2.NES."BR".AND.CHAR2.NES."FU") THEN GOTO B $ INPSW:=/'PNP' <$ GOTO C $B: $ INPFSP:='PNP' h$C: $ NP = NP + 1 0$ DEASSIGN PNP $ GOTO GETINP $ \$XTRACT: $ $$ IF (INPDIR .EQS. "") THEN GOTO PROCESS $ RBRKT = 'F$LOCATE("]",INPDIR) $ LENDIR = 'F$LENGTH(INPDIR)' P$ R1=RBRKT +1 $ LENFSP=LENDIR-RBRKT-1 $ IF (R1 .EQ. LENDIR) THEN GOTO PROCESS |$ IF (RBRKT .EQ. LENDIR) THEN GOTO ERR !MISSING "]" $ INPFSP:='F$EXTRACT(R1,LENFSP,INPDIR) D$ INPDIR:='F$EXTRACT(0,R1,INPDIR) $ $PROCESS: p$ $ LEVEL = 0 8$ IF(INPDIR.EQS."") THEN GOTO DEFLT !USE DEFAULT IF NO INPDIR $ NAME:= 'INPDIR' $ GOTO GETDIR d$ $ERR: ,$ $ WRITE SYS$OUTPUT "/",INPDIR,"/ -- ILLEGAL DIRECTORY NAME" $ GOTO END X$ $ DEFLT: $ NAME:= 'F$DIRECTORY()' !GET DEFAULT DIR NAME $ $ GETDIR: L$ LBRKT='F$LOCATE("[",INPDIR) $ L1=LBRKT + 1 $ INPDEV:='F$EXTRACT(0,LBRKT,INPDIR) x$ LEN = 'F$LOCATE("]",NAME) -L1 !LENGTH W/O BRACKETS $ NAME:= 'F$EXTRACT(L1,LEN,NAME) !GET DIR W/O BRACKETS @$ DIR'INPSW' 'INPDEV'['NAME']'INPFSP' !DIR LIST TO SYS$OUTPUT $ ASSIGN/USER NL: SYS$OUTPUT !SUPPRESS ERRORS FOR NEXT STEP  $ ASSIGN/USER NL: SYS$ERROR ! DITTO l $ DIRECTORY 'INPDEV'['NAME']*.DIR/OUTPUT=ALL'LEVEL'.SCI $ 4!$ ON CONTROL THEN GOTO FINI !$ ON ERROR THEN GOTO FINI !$ `"$NXDIR: "$ OPEN/READ/ERR=NODIR ALL'LEVEL' ALL'LEVEL'.SCI (#$ #$NXITEM: #$ READ/ERR=NODIR ALL'LEVEL' LINE T$$ LINE := 'F$EXTRACT(2,100,LINE) !SKIP PAGE MARKS $$ LLINE = 'F$LENGTH(LINE) !GET LINE LENGTH %$ IPOS = 'F$LOCATE(".DIR",LINE) !LOOK FOR ".DIR" %$ IF( IPOS.EQ.LLINE ) THEN GOTO NOTDIR !BRANCH IF NOT A SUB-DIR %$ IF( LEVEL.EQ.0 .AND. LINE.LES."9") THEN GOTO NXITEM !SYSTEM FILES H&$ LINE := 'F$EXTRACT( 0,IPOS,LINE) !GET NAME PRECEEDING ".DIR" &$ NAME := 'NAME'.'LINE' !APPEND SUB NAME TO PREVIOUS '$ LEVEL = LEVEL+1 !INCREMENT LEVEL COUNTER t'$ ASSIGN/USER NL: SYS$ERROR '$ ASSIGN/USER NL: SYS$OUTPUT !FOR NEXT STEP,SUPRESS ERRORS <($ DIR 'INPDEV'['NAME']*.DIR/OUTPUT=ALL'LEVEL'.SCI !GET DIR LIST OF SUB-DIR ($ DIR'INPSW' 'INPDEV'['NAME']'INPFSP' !GET FULL DIR FOR SYS$ OUTPUT )$ GOTO NXDIR h)$ )$NOTDIR: 0*$ !ITEM WAS NOT A DIRECTORY *$ IF( IPOS.EQ.LLINE ) THEN GOTO NXITEM !GO TRY AGAIN *$ \+$NODIR: !NO MORE DIRECTORIES +$ CLOSE ALL'LEVEL' $,$ DELETE ALL'LEVEL'.SCI;* !CLOSE LOGICALS, DELETE FILES ,$ LEVEL = LEVEL - 1 ,$ P-$INSUB: -$ IPOS = 'F$LOCATE(".",NAME) .$ NAME := 'F$EXTRACT(0,IPOS,NAME) |.$ IF(LEVEL.GE.0) THEN GOTO NXITEM .$ D/$FINI: /$ IF( LEVEL.LT.0) THEN GOTO END 0$ CLOSE ALL'LEVEL' p0$ DELETE ALL'LEVEL'.SCI;* 0$ LEVEL = LEVEL - 1 81$ IF( LEVEL.GE.0 ) THEN GOTO FINI !CYCLE THROUGH ALL LEVELS 1$ 2$ END: d2$ EXIT