GRANROTH%IOWASP.SPAN@STAR.STANFORD.EDU (Larry Granroth (04/06/88)
I'm sure many CD commands have been written for VMS, but since
seeley@dalcsug.UUCP posted a recent query about setting the DCL
prompt to show the current directory, I thought I'd volunteer my
own CD command procedure which also sets the prompt. It's not
exactly what he asked for, but hey, it's free.
GRANROTH%IOWASP.SPAN@STAR.STANFORD.EDU
$ !----------------------------------------------------------------------
$ !
$ ! CD_VMS utility written by L. Granroth 02-03-87
$ ! to translate an MS-DOS CD command to a VMS SET DEFAULT.
$ ! Define the following foreign command in your LOGIN.COM:
$ ! $ CD :== @DISK$DAG:[GRANROTH]CD_VMS
$ ! (substitute your own device and directory name above)
$ !
$ !----------------------------------------------------------------------
$ if (p1 .eqs. "" ) then goto setprompt
$ branch = "*"
$ path = f$trnlnm (p1)
$ if (path .nes. "") then goto verify
$ path = p1
$ if (p1 .eqs. "..") then path = "[-]"
$ if (p1 .eqs. "\" ) then path = f$trnlnm ("sys$login")
$ length = f$length (path)
$ if (f$locate ("[", path) .nes. length) then goto verify
$ if (f$locate ("<", path) .nes. length) then goto verify
$ if (f$extract (0, 2, path) .eqs. "..") then -
path = "-" + f$extract (2, length-2, path)
$ length = f$length (path)
$ device = ""
$ if (f$locate (":", path) .eqs. length) then goto xlate
$ index = f$locate ("\", path)
$ device = f$extract (0, index, path)
$ length = length-index
$ path = f$extract (index, length, path)
$ xlate:
$ n = 0
$ if (path .eqs. "") then goto gotvms
$ vms_path = "[."
$ if (f$extract (0, 1, path) .nes. "\") then goto subst
$ vms_path = "["
$ length = length-1
$ path = f$extract (1, length, path)
$ subst:
$ part = f$element (n, "\", path)
$ if (part .eqs. "\") then goto gotvms
$ if (n .eq. 0) then vms_path = vms_path+part
$ if (n .ne. 0) then vms_path = vms_path+"."+part
$ branch = part
$ n = n+1
$ goto subst
$ gotvms:
$ if (n .eq. 0) then path = device
$ if (n .ne. 0) then path = device+vms_path+"]"
$ verify:
$ if (p1 .eqs. "..") then goto setdef
$ index = f$locate ("]", path)
$ if (index .eq. f$length (path)) then goto setdef
$ dirfile = f$extract (0, index, path) + ".-]''branch'.dir"
$ if (f$search (dirfile) .eqs. "") then goto badpath
$ setdef:
$ set def 'path'
$ setprompt:
$ path = f$directory ()
$ prompt = f$extract (1, f$length (path)-2, path) + ">"
$ set prompt = "''prompt'"
$ exit
$ badpath:
$ write sys$error "Bad path: ''p1'"
$ exit