home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 18 REXX
/
18-REXX.zip
/
QCD.ZIP
/
QCD.CMD
Wrap
OS/2 REXX Batch file
|
1991-03-30
|
3KB
|
120 lines
/*********************************************************************\
** Quick Change Directory - Procedure
** (C) Copyright Marc J. Greenberg 1991
\*********************************************************************/
ARG CMDLINE
SAY "Quick Change Directory - (C) Copyright Marc J. Greenberg 1991"
IF LENGTH(CMDLINE)=0 THEN SIGNAL HELP
/* Assure all subcommands are issued to the CMD environment */
ADDRESS CMD
PARSE VALUE CMDLINE WITH CMDLINE"-"OPTION
IF LENGTH(OPTION)=0 THEN PARSE VALUE CMDLINE WITH CMDLINE"/"OPTION
/* chech for help request */
IF POS("?",OPTION) THEN SIGNAL HELP
/* Change to requested drive if specified */
"@"FILESPEC("DRIVE",CMDLINE)
/* Get the name of the requested directory destination */
DEST=FILESPEC("NAME",CMDLINE)
IF LENGTH(DEST)=0 THEN DEST=FILESPEC("PATH",CMDLINE)
/* If the destination is the root then change to it immediatly and exit */
IF DEST='\' THEN DO;'@CD \';EXIT;END
/* Set up Disk Map file variables */
DRIVE=FILESPEC("DRIVE",DIRECTORY())
DIREC=SUBSTR(DIRECTORY(),LENGTH(DRIVE)+1)
MFILE=DRIVE||"\DISK.MAP"
/* Check that the DISK.MAP file exists, if not create it */
IF (STREAM(MFILE,C,'QUERY EXISTS')="" )|(POS("S",OPTION)>0) THEN CALL SCANDRIVE
/* Initialize variables, read the diskmap file and close it*/
LLEFT=""
DTREE=LINEIN(MFILE)
CTREE=DTREE
CALL STREAM MFILE,C,'CLOSE'
IF POS("G",OPTION)>0 THEN DO; CALL GRAPHTREE; EXIT; END
IF LENGTH(DEST)=0 THEN EXIT
/* Start Search from the current directory */
IF DIREC\='\' THEN DO WHILE LENGTH(CTREE)>0
PARSE VALUE CTREE WITH A"#"CTREE
LLEFT=LLEFT||A||"#"
IF A=DIREC THEN LEAVE;
END
/* Find a proper match */
CALL DSEARCH CTREE
/* If not found start from beginning and search to the current directory*/
CALL DSEARCH LLEFT
/* If it is still not found the it cannot be found */
SAY "Directory Not Found"
EXIT
DSEARCH:
ARG T;
DO WHILE LENGTH(T)>0
PARSE VALUE T WITH A"#"T
IF POS(DEST,A)>0 & SUBSTR(A,LASTPOS('\',A)+1,LENGTH(DEST))=DEST THEN DO
'@CD 'A
EXIT
END
END
RETURN;
SCANDRIVE:
SAY "Scanning Drive "DRIVE
IF OPTION="S" THEN '@DEL 'MFILE
DMAP=""
'@TREE | RXQUEUE'
DO WHILE QUEUED()>0
PARSE PULL A B .
IF A\="Path:" THEN ITERATE;
DMAP=DMAP||B||"#"
CALL CHAROUT 'CON:','.'
END
SAY "Done"
/* Write the map as a single line to reduce File I/O */
CALL LINEOUT MFILE,DMAP
CALL STREAM MFILE,C,'CLOSE'
RETURN
GRAPHTREE:
LP=1;ND=0;SAY "<ROOT of Drive "DRIVE">"
DO WHILE LENGTH(DTREE)>0
PARSE VALUE DTREE WITH A"#"DTREE
LP=OCCURSIN(A,'\')
OL=COPIES('│ ',LP)||'├──'||FILESPEC("NAME",A)
SAY " "||SUBSTR(OL,2)
ND=ND+1
END
SAY "<Drive "DRIVE" contains "ND" Directories>"
RETURN
OCCURSIN:
ARG STR, CH; N=0
DO WHILE LENGTH(STR)>0
P=POS(CH,STR);
IF P>0 THEN N=N+1; ELSE RETURN N;
STR=SUBSTR(STR,P+1);
END;
RETURN N;
HELP:
SAY "Usage: QCD [destdir] [-?sg]"
SAY
SAY "destdir [d:][path or partial path]"
SAY
SAY "options:"
SAY " -s scan drive and create new [d:]\DISK.MAP file"
SAY " -g display disk tree graphic"
EXIT