Kbase 19454: parameters in startup.pf ignored on VMS
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  1/27/2000 |
|
On VMS, any parameters you may specify in the startup.pf file are ignored. The reason is as follows:
When PROGRESS starts up, it does indeed open and read the
DLC:STARTUP.PF; file. It even properly applies every command line
argument that it finds there. The problem is what happens next.
PROGRESS then parses the VMS command line. Because of the way VMS
DCL (the command interpreter) works, the command line that PROGRESS
sees bears little resemblance to the one you typed in.
When you type:
$ PROGRESS SPORTS
the command line that is actually passed to PROGRESS for parsing
really looks like this:
$ PROGRESS -
/VERSION7=0 -
/ACCESS=NORMAL -
/BATCH=SYS$BATCH -
/COMPILED_FILE_DIRECTORY=36 -
/COMTIMEOUT=10 -
/DATE_FORMAT=MDY -
/DBRSTRCT=APPLDIR:RESTRICT.P -
/EDIT_BUFFER=32 -
/INDEX_CURSORS=50 -
/INTERACTIVE -
/DISCONNECT=0 -
/LOCAL_BUFFER_SIZE=20 -
/LOCK_TABLE=500 -
/MAXCLIENTS=5 -
/MAXDATABASES=4 -
/MAXPROTOCOL=0 -
/MAXSERVERS=4 -
/MEMORY_MAX=512 -
/MERGE_NUM=5 -
/MESSAGE_BUFFER_SIZE=1024 -
/NETWORK_VERSION=40 -
/NESTED_BLOCKS=50 -
/MINCLIENTS=1 -
/MKDUMP=APPLDIR:MKDMPLD.P -
/MULTI_USER=LOGIN -
/NUMBER_OF_USERS=20 -
/NUMERIC_FORMAT=AMERICAN -
/ORACLE_VERSION=7 -
/PRINTER=SYS$PRINT -
/PRIVATE_BUFFERS=1 -
/RECORD_BUFFER_SIZE=1024 -
/RECOVERY -
/ROLL_FORWARD_INTERVAL=5 -
/RPTINT=0 -
/STACK=40 -
/STARTUP="" -
/TBLOCKS=4 -
/TEMPORARY_FILES="" -
/TOTAL_PRIVATE_BUFFERS=0 -
/TRANSACTION_DELAY=0
/USRCOUNT=0 -
/YEAR_OFFSET=1950 -
SPORTS
[The hyphen is the command-line continuation character on OpenVMS.]
Each of these qualifiers is defined as "DEFAULT" in the file
DLC:PROGRESS.CLD, which defines the entire syntax of the PROGRESS
command verb and all its qualifiers and arguments on OpenVMS.
So, what happens is that, after reading DLC:STARTUP.PF;, PROGRESS is
fed this very long command line, which overrides any conflicting
switches that were set previously.
DCL doesn't tell PROGRESS whether or not a given qualifier was set by
the user or took the default. In addition, PROGRESS' own command
argument data structures don't have any way to record how a given
argument switch was passed: startup.pf, command line, or local startup parameter file.
In essence, this makes the DLC:STARTUP.PF file useless for setting
PROGRESS switches that are also defined with default values in
DLC:PROGRESS.CLD.
Workaround:
The workaround for this problem is to edit the DLC:PROGRESS.CLD file
to change the defaults used by the various PROGRESS commands. Use a
VMS native editor, such as EVE or EDT, rather than the PROGRESS
editor to make these changes.
So, for example, if you wish to change the setting of -d
(/DATE_FORMAT) on VMS so it's always DMY, you'd edit DLC:PROGRESS.CLD, changing
Qualifier DATE_FORMAT, Nonnegatable, Default,
Value(Default=MDY, Type=DATE_OPTION)
to read
Qualifier DATE_FORMAT, Nonnegatable, Default,
Value(Default=DMY, Type=DATE_OPTION)
Similarly, you'd edit -yy (/YEAR_OFFSET) by changing
Qualifier YEAR_OFFSET, Nonnegatable, Default,
Value(Default=1950, Type=$NUMBER)
to
Qualifier YEAR_OFFSET, Nonnegatable, Default,
Value(Default=1920, Type=$NUMBER)
And again, editing -h (/MAXDATABASES) by changing:
Qualifier MAXDATABASES, Nonnegatable, Default,
Value(Default=4, Type=$NUMBER)
to
Qualifier MAXDATABASES, Nonnegatable, Default,
Value(Default=10, Type=$NUMBER)
or to whatever value you wish to specify, or for whichever parameter you want to standardize on for all your users.
Once that's done, you can verify that the edited command table works
as you expect:
$ SET COMMAND DLC:PROGRESS.CLD
If you've introduced a syntax error in the command definition file,
it will show up here.
Assuming all is well, you can then run a local interactive self-service PROGRESS session and verify that the argument values are
modified as you wish. (The "Information" option under the Tools menu
in the Data Dictionary will let you see the -yy and -dd settings.)
Don't start a server to do this, since the server will run in a
separate process and inherit the old command table (with the old
default values).
Once you've verified that all is well, you can make the changes
available system or cluster-wide. The system manager will need to do
the following commands from a suitably-privileged account. (Note
that all commands are presented here with fully-spelt-out qualifiers
and across multiple lines, for clarity):
1. Get the modified PROGRESS verb into the system-wide command table:
$ SET COMMAND -
/TABLE=SYS$LIBRARY:DCLTABLES
/REPLACE -
/OUTPUT=SYS$LIBRARY:DCLTABLES -
DLC:PROGRESS.CLD
NB. If you have multiple copies of dlctables.exe, the above command will update the copy in the specific root if you have a copy there (sys$specific:[syslib]) - therefore in a Clustered environment, only the node that you are running the command from will pick up the updated table, and you will have to repeat this for each node of the cluster.
2. Install the new version of DCLTABLES as a Known File so that it will be available to all users:
$ INSTALL/REPLACE SYS$LIBRARY:DCLTABLES.EXE
NB. Ensure you have sufficient global pages prior to doing this. Alternatively, a system reboot will have the same effect.
Now, for users to see the changed PROGRESS verb, every user will have
to do one of the following:
Method A:
1. Exit from PROGRESS
2. Type the DCL command
$ SET COMMAND/TABLE=SYS$LIBRARY:DCLTABLES
3. Re-enter PROGRESS
Method B:
1. Exit from PROGRESS
2. Log out of VMS
3. Log back into VMS
4. Re-enter PROGRESS
nbi
27/01/00