Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.1 6/24/83; site ucbvax.UUCP Path: utzoo!linus!decvax!harpo!floyd!whuxlb!pyuxll!eisx!npoiv!npois!hogpc!houxm!ihnp4!cbosgd!ucbvax!daemon From: daemon@ucbvax.UUCP Newsgroups: fa.info-vax Subject: cd.com Message-ID: <831@ucbvax.UUCP> Date: Thu, 15-Sep-83 06:49:36 EDT Article-I.D.: ucbvax.831 Posted: Thu Sep 15 06:49:36 1983 Date-Received: Sat, 17-Sep-83 02:11:52 EDT Sender: daemon@ucbvax.UUCP Organization: U. C. Berkeley Computer Science Lines: 92 >From GEOFF5@SRI-CSL Thu Sep 15 03:48:39 1983 First, I no longer have the original letters on the subject, and my list of DLs in out of date, so if this is not a good or the best address, someone tell me ! Below is my cd.com . It does not try to deal with device names, and is simply a hack to act like unix 99.9% of the times I type cd, which it does since I rattle around on the same disk... I suppose an obvious addition would be to recognize / as root so that you can say cd /clark/bin instead of the kludgy cd [clark] and cd bin or cd [clark]/bin, but it has not bothered me sufficiently yet. $ if p1 .nes. "" then goto l1 $ p1 := sys$login $ doit: $ set def 'p1' $ done: $ exit $ l1: $ if "''f$extract(0,4,p1)'" .eqs. "SYS$" then goto doit $ if "''f$extract(0,5,p1)'" .eqs. "USER$" then goto doit $ $ ! From here it could be an arbitrary path... $ $ dorest: $ stripslash: $ if "''f$extract(0,1,p1)'" .nes. "/" then goto nostartslash $ p1 := "''f$extract(1,"''f$length(p1)'"-1,p1)'" $ goto stripslash $ nostartslash: $ if "''f$length(p1)'" .eq. 0 then goto done $ if "''f$extract(0,2,p1)'" .eqs. ".." then goto l11 $ slashloc := "''f$locate("/",p1)'" $ dlen := "''f$length(p1)'" $ if slashloc .ne. dlen then - $ goto l1002 $!else $ thisdir := 'p1' $ p1 := "''f$extract(slashloc+1,dlen-(slashloc+1),p1)'" $ goto chdir $ l1002: $ thisdir := "''f$extract(0,slashloc,p1)'" $ p1 := "''f$extract(slashloc+1,dlen-(slashloc+1),p1)'" $ goto chdir $ l11: $ set def [-] $ p1 := "''f$extract(2,"''f$length(p1)'"-2,p1)'" $ goto dorest $ chdir: $ if "''f$extract(0,1,thisdir)'" .eqs. "[" then - $ goto l21 $ if "''f$extract(0,1,thisdir)'" .nes. "." then - $ thisdir := .'thisdir' $ thisdir := ['thisdir' $ l21: $ c = 'f$length(thisdir)' - 1 $ if "''f$extract(c,1,thisdir)'" .nes. "]" then - $ thisdir := 'thisdir'] $ set def 'thisdir' $ goto dorest ! ! Comments at end should not slow us down... ! ! Pathnames starting with user$ or sys$ are not munged with. ! Standard unix paths with / and .. in any order and combination ! work fine, going reletive to the current directory. The only ! way to get to the "root" is if the path starts with [xxxxx] ! So "cd [clark]" works, as does "cd [clark]/bin/src" Execution ! can be sped up as you learn to use dots instead of slashes: ! cd clark.bin.src or cd ../bin.src.sccs instead of cd ../bin/src/sccs ! ! Notes on organization: doit: and done: were put where they are ! with the hope that since it has already seen done: it will know ! where it is and get there faster. ! ! The code below could be put just before the exit at done: ! to make it remember where it is all the time, not just when ! you use bye. Actually, bye was created to make this code ! unnecessary and so cd faster. bye records the current ! directory in sys$login:.wd and login.com reads .wd and cds to ! there. ! ! $ rm sys$login:.wd;* ! $ open/write workingdir sys$login:.wd ! $ write workingdir "''p1'" ! $ close workingdir ! ! Author: Ray Clark ! Xerox Webster, N.Y. ! Clark.wbst@PARC-MAXC ! ! Please send me any improvements or bug fixes !