MASRAD@UBVMS.BITNET (Rad) (01/26/88)
There have been some recent requests concerning prompts
in VMS that will show the current directory or other options.
About a year go now I created a program that does this function
quite well. The program has since gained a fairly strong
following here with few bug reports.
Here's the source:
----------------------------<cut here>---------------------------
$ save_verify = f$verify()
$ set noverify
$! Customize prompt program. Gives current directory or time.
$! by Geoff Cashman masrad@ubvms
$! Improvements to this program are welcome, and I sure wouldn't
$! mind hearing about them. I only ask you leave my name up there.
$! It's my only claim to fame :-)
$!
$! note: any customized commands used on your system for
$! changing directories must be implemented here similar to the lines
$! marked with the flag !@@@
$!
$! This program has controlling commands to change what is
$! displayed in the prompt. Issueing these commands as regular
$! vms commands will be interpreted by the program before
$! being sent to VMS as a command. They are:
$!
$! PTIME - Changes the prompt to display the current time.
$! time is updated after every carriage return.
$!
$! PDIR - (DEFAULT) Changes the prompt to display the current directory.
$! directory is updated after every command issued to change
$! directories. Note: see note above: commands to change
$! directories are recognized by this program through
$! hard-coding.
$!
$! Implementation: the program can be executed directly from your
$! LOGIN.COM. Simply add the following line as the last
$! executed line of your LOGIN.COM
$!
$! @<directory_specification>PROMPT.COM
$!
$! Bugs/possible difficulties: The program has it's own stream
$! identifier: ie, recall/all will not work. However,
$! using up and down arrows to recall commands does.
$! Data lines from other DCL programs are ignored when
$! run from this program as well, again because of stream
$! identifiers.
$!
$ n = 1
$ flagger = "dir"
$ ws :== "write sys$output"
$ ws "Type EXIT to leave this prompt"
$ goto prompter
$promptfirst: ! set node and directory for prompt
$ flagger = command
$prompt:
$ if flagger .eqs. "PTIME" then goto timer
$ if flagger .eqs. "PDIR" then goto Prompter
$prompter:
$ node = f$logical("sys$node")
$ nlen = f$locate("::",node) - 1
$ ntemp = f$extract(1,nlen,node)
$ node = f$extract(5,1,ntemp)
$ xdir = f$directory()
$ xdir = xdir + "."
$ xdir = xdir - "["
$ ddir = xdir
$shorten: ! shorten the path list
$ adir = f$locate("]",ddir) + 2
$ bdir = f$locate(".",ddir) + 1
$ if adir .le. bdir then goto askcom
$ cdir = adir - bdir
$ ddir = f$extract(bdir,cdir,ddir)
$ goto shorten
$timer:
$ temp = f$time()
$ xtime = f$extract(12,5,temp)
$ option = xtime
$ goto askcom1
$askcom: ! ask for DCL command to execute
$ xdir = ddir - "]."
$ option = xdir
$ goto askcom1
$askcom1:
$ flag = 0
$ set nocontrol=(y)
$ inquire/nopun command 'node'"{"'option'"}"'n'">"
$ if COMMAND .eqs. "" then goto askcom1
$ set control=(y)
$ cdcheck = f$extract(0,2,command)
$ setdefcheck = f$extract(0,7,command)
$ if CDCHECK .eqs. "SD" then flag = 1 !@@@
$ if CDCHECK .eqs. "CD" then flag = 1 !@@@
$ if SETDEFCHECK .eqs. "SET DEF" then flag = 1 !@@@
$ if COMMAND .eqs. "PTIME" then goto promptfirst
$ if COMMAND .eqs. "PDIR" then goto promptfirst
$ define/nolog/user_mode sys$input sys$command
$ on severe_error then goto increment
$ on error then goto increment
$ on warning then goto increment
$ set on
$ if save_verify then set verify
$ 'command'
$ save_verify = f$verify()
$ set noverify
$increment: !and loop
$ n = n + 1
$ if FLAG .eq. 1 then goto prompt
$ if FLAGGER .eqs. "PTIME" then goto timer
$ goto askcom1
----------------------------<cut here>---------------------------
There 'tis...Comments welcome and greatly appreciated.
Improvements too! Enjoy!
- Rad (Geoffrey A. Cashman)
AT&T : (716) 836-9694
Snail : 361 LaSalle street Buffalo, NY 14215
BITnet: MASRAD@UBVMS (or ubvms(a,b,c, or d))
MASDEV1@UBVM
-------