From: HENRY::IN%"blia.UUCP!forrest%cgl.ucsf.edu%sri-kl.ARPA%relay.cs.net@rca.com" 4-MAR-1987 08:22 To: info-vax@sri-kl.arpa Subj: My List of Desired Changes to VMS 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.