[mod.computers.vax] My List of Desired Changes to VMS

forrest@cgl.ucsf.edu@blia.UUCP (03/04/87)

The following is a list of the things I'd like to see changed
in VMS. These are items I've accumulated over the years as both
a system manager and as a systems programmer.
I'm submitting this so that all you hotshots can make
sure that I haven't made any mistakes or requested anything that is
either already done, or is completely out of line. Once this list
is corrected I plan on submitting all these items as SPR's and
to the Pageswapper. 

Jon Forrest
ucbvax!mtxinu!blia

-------------------------------------------------------------
AUTHORIZE
	1. Allow parameter lists in AUTHORIZE commands. For example,
	the REMOVE command accepts wild cards but doesn't accept
	more than one username on a command line.

	2. The ADD/ID command should accept wild cards. It should
	be possible to do an ADD/ID for all users.
BACKUP
	1. When saving or restoring using a multivolume save set,
	the last file on each volume should be given as part
	of the BACKUP-I-RESUME message.

	2. When restoring, it should be possible to use the /JOURNAL
	option to have the BACKUP tell you which volume to mount
	in a multivolume saveset to find files given in the input
	specification. BACKUP would search the journal file to
	find all these files and then tell you to mount only those
	volumes containing files matching the input specification.
	The inefficiency inherent in searching the journal would
	be offset by the fact that tapes containing files not
	matching the input specification would not have to be searched.
	Note that this request is in addition to what is already
	provided by the BACKUP/LIST/JOURNAL/SELECT option.
DEBUG
	1. DEBUG should accept SET VERIFY as equivalent to SET OUTPUT
	VERIFY to be consistent with other programs.

	2. There should be some way to rerun the program being debugged
	from within DEBUG. Perhaps REINIT would be a good command for
	this.

	3. It would be nice if, when using VAX C, it were possible
	for DEBUG to know about C pre-processor symbols. Perhaps
	a special symbol table could be created when CC is run with
	/DEBUG. Then, to examine a pre-processor symbol, a command
	like EXAMINE/PP X could be given. Or, perhaps these symbols
	could be made into Debugger symbols.

	4. When a module is dynamically set, the current language
	should be set to the source language of the module.

DCL
	1. Don't renumber DCL commands. Instead, have each new command
	be assigned a new command number. This is how the C shell works
	on Unix. For the sake of compatability, this may have to
	be something that is set by a SET TERM command. This is
	an important request

	2. Add some sort of command line variables so that components
	of previously given commands can be substituted into a command
	line. This is an important request.

	3. There should be an UNDEFINE command to be complementary with
	DEFINE. After all, there are ASSIGN and DEASSIGN commands.

	4. The meaning of DEFINE/USER is not intuitive. There should
	be a DEFINE/TEMP command that does the same thing.

	5. It would be nice if the restrictions on command line
	editing on wrapped lines were removed. It seems that this
	might be possible since the delete key does work properly
	on wrapped lines. (These restrictions are documented on page
	8-3 of the I/O User's Guide: Part 1).

	6. The use of rooted-device concealed logical name is impared
	by the fact that, as documented on page 6-17 of the Guide
	to VAX/VMS File Applications, ROOT:[0,0] is not equivalent
	to ROOT:[000000] when ROOT has been defined as a rooted
	concealed logical name. This restriction is hard to explain to
	users as well as being hard to understand the reasons for.

FORTRAN
	1. Currently the INCLUDE statement does not use any logical
	names to locate include files. Only files in the default
	directory can be used, unless the filename itself contains
	a logical name. A logical name, such as FORT$INCLUDE, should
	be used to contain a directory in which files not found
	in the default directory should be searched. This is analagous
	to the use of the logical names VAXC$INCLUDE and C$INCLUDE
	by VAX-C.

	2. A directive equivelent to the VAX C "#line X" statement
	should be added to FORTRAN. This tells the compiler to
	think that the current line number is "X" for purposes
	of diagnostic output. This is important so that diagnostics
	produced by precompilers can be made to refer back to the
	original file instead of the precompiler output.

INSTALL
	1. On the bottom line of the output produced by the /GLOBAL
	command, the number of global sections used is shown. The
	number of global sections free should also be shown. This
	is similiar to the information about global pages shown
	on the same line.

LIBRARIAN ROUTINES
	1. The semantics of the LBR$C_ options passed to LBR$INI_CONTROL
	should be described. For example, does LBR$C_CREATE allow
	writing only? Does LBR$C_UPDATE allow reading and writing
	or just writing?
LINK
	1. Add a /LOG qualifier to LINK so that the LINKER outputs
	a message saying something like "%LINK-I-SUCCESS XXX.EXE
	CREATED" when it successfully completes a link. Doing
	SET VERIFY causes the contents of linker option files
	being printed. This is unsatisfactory because the only
	output desired is a one line message summarizing the
	result of the LINK command.

	2. On page LINK-27, Section 3.1.1, the second sentence
	should be modified to be "When a shareable image is linked
	with one or more object module and/or other shareable
	images to create an executable image, ...". The original
	text says that an shareable image is linked with an executable
	image, which is impossible.
MAIL
	1. If you receive 5 messages and then delete #1 and #2,
	typing 1 gives you mail item #2 instead of some kind
	of error message saying the item has been deleted.
	The DIRECTORY command correctly show that item #1 has
	been deleted.

MMS
	1. There should be a macro like the existing MMS$CHANGED_LIST
	but that does NOT include the file types in the list. If this
	macro were to exist then it would be possible to compile many
	source files with one command, and then to insert the newly
	created object files into a library with one command. For
	example, assume the macro I'm asking for is called
	MMS$CHANGED_NEW. Then the following would result in one
	CC command and one LIBRARIAN command.

	a.olb : x.obj, y.obj, z.obj ! this could be ANY number of files
		cc MMS$CHANGED_NEW
		librarian/replace MMS$TARGET_NAME MMS$CHANGED_NEW

	Currently it is necessary to invoke the compiler once for
	each file to be compiled. This is a waste of resources since
	the compiler need be started only once. In a situation where
	a hundred source files are to be compiled this extra overhead
	could be considerable. This is a very important request.

	2. It should be possible to have a library module depend
	on a source file and not on the object file. Of course,
	the object file would be required but the modification date
	of the source file would be used to determine what has to be
	rebuild, not that of the object file. This would allow object
	files to be deleted without distirbing the dependency information.
	For example, the following expresses what I have in mind.

	a.olb : a(x=x.c)

	This means that the module named "x" is rebuild when the
	modification date of "x.c" is newer than the date "x"
	was inserted in "a.olb". This assumes that the date "x.obj"
	was inserted in "a.olb" was when "x.obj" was last modified.
	This is especially important when a large number of object
	files are kept in a library. Currently, all the object files
	must be kept both in the library and as normal files. This is
	wasteful.

	3. There is an incompatability between MMS and Unix "make"
	that isn't mentioned in the manual. "Make" allows description
	files such as:

	a : a.exe
	a.exe : a.c

	MMS gives the fatal GWKNOACTS message for the first line
	since there are no builtin rules to satisify this
	dependency. "Make" gives no error messages. I understand
	why MMS might want to print a message in a situation like
	this but this situation should not generate a fatal error.

	4. A program being run from a MAKEFILE. finds that its
	SYS$ERROR is a mailbox, and not the terminal from which
	MMS is being run. This causes problems if the program being
	run uses the terminal type of SYS$ERROR. At least, this
	should be documented.

SET DEFAULT
	1. It's nice that the SHOW DEFAULT command prints a warning when
	the default directory doesn't exist. However, this message
	should be printed when the default is set, not when the
	default is shown.

TT DRIVER
	1. The QIO modifier added in VMS 4.4 to generate a break
	is nice. However, a run-time library routine should be
	added that includes the additional code required to actually
	turn the break signal on and off. In other words, a routine
	should be added that has the same effect as a user typing the
	break key on their terminal.

VAX C
	1. When using the Standard C library on a fixed length
	record file it should be possible to do the same kind
	of seeking permited on stream files. In other words, it
	should be possible to read part of a record using FREAD,
	and then use other calls to FREAD to read other parts
	of the same record.

	2. On page 12-11 of Programming in VAX-C, the example of SPAWN
	is unclear because the prose says that an EXIT was typed before
	the ATTACH command was given, resulting in the MAIL subprocess
	being deleted. However, running the example shown results in
	the subprocess running MAIL not being deleted because
	EXIT wasn't typed. In fact, the MAIL sub-process remains
	in hibernation until the user logs off.

	3. The presence of the /DEBUG qualifier should imply /NOOPT.
	There is a precedence for /DEBUG resulting in implied
	qualifiers in other commands, e.g. /DEBUG on a LINK
	command implies /TRACEBACK.

	4. The explaination on page 12-23, section 12.3.7, second
	paragraph, of Programming in VAX C would be made clearer
	if it were also mentioned that another reason why watchpoints
	can't be set on automatic variables is that many automatic
	variables may use the same memory location since automatic
	variables are dynamically allocated on the stack. Setting
	a watchpoint on a memory location on the stack would result
	is spurious information because the watchpoint would be
	triggered whenever that locatation were changed, no matter
	what variable is currently allocated that location.

	5. When an "extern" declaration is used to declare a variable
	that is defined to be "readonly" when it is defined, the
	"extern" declaration must also contain the "readonly"
	keyword. While I understand that global variables are
	implemented using overlayed p-sects, and that the "readonly"
	modifier generates a different kind of p-sect than the
	definition, this behavior is still undesirable.