- Community Home
- >
- Servers and Operating Systems
- >
- Operating Systems
- >
- Operating System - OpenVMS
- >
- Re: Passing shell arguments to OpenVMS Fortran 90 ...
Categories
Company
Local Language
Forums
Discussions
Forums
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
Discussions
Discussions
Discussions
Discussions
Forums
Forums
Discussions
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Community
Resources
Forums
Blogs
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 02:33 AM
тАО07-12-2011 02:33 AM
Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
Dear HP Fortran for OpenVMS programmers,
Although HP Fortran for OpenVMS is stuck to 95 standard, it is somehow still possible to translate Fortran 2003 source code to HP Fortran 90/95 standard thanks to the HP Fortran community. The OpenVMS solution at http://vouters.dyndns.org/tima/OpenVMS-Fortran_90-getopt_long-Passing_shells_arguments_to_programs-The_Linux_way.html is a translation of the Linux Fortan 2003 solution at http://vouters.dyndns.org/tima/Linux-Fortran_2008-getopt_long-Passing_shells_arguments_to_programs-The_Linux_way.html
In the hope this method can give you ideas on defining a VMS foreign command for your Fortran programs and pass them arguments the C way. from DCL.
Yours truly,
Philippe
- Tags:
- Fortran
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 03:32 AM
тАО07-12-2011 03:32 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
I must state that unlike for the C equivalent, the DCL arguments passed to the Fortran program using this method are case sensitive. For example:
$ fortran/source=free getopt_long.f90
$ link getopt_long,f2kcli,getopt
$ getopt_long :== $PHV:[PHV]getopt_long.EXE
$ getopt_long -Wf
You activated this program with --first_arg
$ cc getopt_long
$ link getopt_long,getopt
$ getopt_long -Wf
$1$DGA102:[PHV]getopt_long.EXE;73: unknown option -- w
?? getopt returned character code 077 ??
You activated this program with -f
$ getopt_long "-Wf"
You activated this program with --first_arg
$
Perhaps, the HP OpenVMS CRTL engineering could get inspiration from [.source.vms.f90]f2kcli.f90 so that uppercased DCL arguments passed to C programs no longer need to be quoted enclosed ! This would impact as well Java for OpenVMS which is based upon the CRTL. For HP engineering information, f2kcli.fs based upon lib$get_foreign for the DCL passed arguments. This would make porting Unix shell scripts activating Java or C programs much easier.
Philippe Vouters
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 03:59 AM
тАО07-12-2011 03:59 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
@Ph Vouters wrote:I must state that unlike for the C equivalent, the DCL arguments passed to the Fortran program using this method are case sensitive. For example:
$ fortran/source=free getopt_long.f90
$ link getopt_long,f2kcli,getopt
$ getopt_long :== $PHV:[PHV]getopt_long.EXE
$ getopt_long -Wf
You activated this program with --first_arg
$ cc getopt_long
$ link getopt_long,getopt
$ getopt_long -Wf
$1$DGA102:[PHV]getopt_long.EXE;73: unknown option -- w
?? getopt returned character code 077 ??
You activated this program with -f
$ getopt_long "-Wf"
You activated this program with --first_arg
$
Perhaps, the HP OpenVMS CRTL engineering could get inspiration from [.source.vms.f90]f2kcli.f90 so that uppercased DCL arguments passed to C programs no longer need to be quoted enclosed ! This would impact as well Java for OpenVMS which is based upon the CRTL. For HP engineering information, f2kcli.fs based upon lib$get_foreign for the DCL passed arguments. This would make porting Unix shell scripts activating Java or C programs much easier.
Philippe Vouters
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 04:51 AM
тАО07-12-2011 04:51 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
Seems you cannot use CSWB on OpenVMS to post to these forums. All text I added in my previous post was dropped
What I wanted to say:
Case sensitivity of the arguments in C-programs depends on the settings of the parse style. To make it case sensitive do one of the following
$ set proc/parse=extend
or
$ define DECC$ARGV_PARSE_STYLE enable
the way your fortran program is coded seemns not influenced by these parameters.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 06:38 AM
тАО07-12-2011 06:38 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
Re Jansen_8
Why is there such an inflation of DECC$* logicals when some or many of them could be avoided ? This causes VMS users using VMS C programs to become CRTL experts. This includes as well VMS Java users.
My lietmotto is always : "Simple is beautiful" and this DECC$* logicals inflation make VMS uselessly complicated and very end-user unfriendly.
All the contrary of the spirit of the DEC's founder who initiated VAX/VMS and the Digital Command Language (DCL) which was later imposed to all DEC's operating systems including RT11/RSX11-M/RSTS.
Philippe Vouters (ex-DEC)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 07:07 AM
тАО07-12-2011 07:07 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
RE: Jansen_8
Your reply is not fully correct. I need both for a C program :
$ set process/parse=extended
AND
$ define DECC$ARGV_PARSE_STYLE enable
Here is my proof:
$ cc getopt_long
$ link getopt_long,getopt
$ getopt_long :== $PHV:[PHV]getopt_long.EXE
$ set process/parse=traditional
$ define DECC$ARGV_PARSE_STYLE enable
$ getopt_long -Wf
$1$DGA102:[PHV]getopt_long.EXE;74: unknown option -- w
?? getopt returned character code 077 ??
You activated this program with -f
$ set process/parse=extended
$ getopt_long -Wf
You activated this program with --first_arg
$ deassign DECC$ARGV_PARSE_STYLE
$ getopt_long -Wf
$1$DGA102:[PHV]getopt_long.EXE;74: unknown option -- w
?? getopt returned character code 077 ??
You activated this program with -f
For the Fortran 90 equivalent:
$ sho logical DECC$*
(LNM$PROCESS_TABLE)
"DECC$EFS_CASE_PRESERVE" = "ENABLE"
"DECC$FD_LOCKING" = "TRUE"
(LNM$JOB_890F66C0)
(LNM$GROUP_022000)
(LNM$SYSTEM_TABLE)
"DECC$CRTLMAP" = "SYS$SHARE:DECC$SHR"
"DECC$SHR_AV" = "DECC$SHR"
(LNM$SYSCLUSTER_TABLE)
(DECW$LOGICAL_NAMES)
$ deassign DECC$EFS_CASE_PRESERVE
$ deassign DECC$FD_LOCKING
$ fortran/source=free getopt_long.f90
$ link getopt_long,f2kcli,getopt
$ set process/parse=traditional
$ getopt_long -Wf
$1$DGA102:[PHV]getopt_long.EXE;75: unknown option -- F
?? getopt returned character code : octal( 77 )
$ set process/parse=extended
$ getopt_long -Wf
You activated this program with --first_arg
$ set process/parse=traditional
$ getopt_long "-Wf"
You activated this program with --first_arg
$
So your DECC$ARGV_PARSE_STYLE logical makes things uselessly complicated and very end-user unfriendly..
Yours sincerely,
Philippe
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 07:07 AM
тАО07-12-2011 07:07 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
>>>
$ set proc/parse=extend
or
$ define DECC$ARGV_PARSE_STYLE enable
<<<
You have to have both, the DCL and the C RTL "feature".
>>>Why is there such an inflation of DECC$* logicals ...<<<
There IS an inflation of C RTL features to let the RTL behave more like on Unix/Posix systems. One way to enable such a feature is to use a logical. However, real programmers would enable the feature "with" the image. The way to do this is to enable it at image initialization time. Once this is done, no VMS user needs to define DECC$ logicals. But the user still has to enable the extended parsing. Then arguments to foreign commands (as well as file specifications) are case preserved. I wonder whether extended parsing was enabled for the FORTRAN example or not.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-12-2011 07:51 AM
тАО07-12-2011 07:51 AM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
Why not a simple DECC$UNIX_COMPATIBILITY enable instead of this inflation of DECC$ logicals ?
By the way, I know of two cases where DECC$SELECT_IGNORES_INVALID_FD enable proved useful :
With getdtablesize() C call as highlighted by http://vouters.dyndns.org/tima/OpenVMS-TCPIP-C-fd_set_getdtablesize_select_file_descriptors_limit.html and with select() or poll() C calls when sockets are in a FIN_WAIT_2 state
For getdtablesize() this logical can be avoided provided this CRTL routine takes the minimum of SYSGEN CHANNELCNT and the FILLM process quota.
For select() or poll() with sockets in FIN_WAIT_2 states, this logical can be avoided provided TCP/IP for OpenVMS enables to automatically close FIN_WAIT_2 state sockets with a zero FIN_WAIT_2 timeout like on any Unix/Linux operating systems, including HP-UX. For full information on the minimum FIN_WAIT_2 timeout on OpenVMS systems, refer to http://vouters.dyndns.org/tima/OpenVMS-TCPIP-FIN_WAIT_2_state_sockets.html
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-13-2011 02:15 PM
тАО07-13-2011 02:15 PM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
The DECC stuff is nasty, but hardly avoidable to have Unix-based stuff (and JAVA in particular) run on OpenVMS - because it's background. The big flaw is the fact that Unix - and hence Linux, JAVA and other Unix-base software - is case sensitive. Up to date I've never heard a valid argument for it's reason....
Most VMS programs don't care since VMS adheres to uppercase only - by default. That's the way VMS is built. Mixing case breaks things. Especially if it's done 'under the hood' - where you wouldn't expect it. It happens: When any program in the chain finds out it runs, or expects itself to run in an ODS-5 environment, and changes PARSE_STYLE (which is a process environment setting!) where other programs cannot handle mixed case, you run into trouble.
I ran into a similar issue years ago, where a program using 3rd party libraries, was run by a webserver from it's CGI-procedure, since SET PARSE_STYLE to EXTENDED influences the way that the commandline is passed to the program.
PARSE_STYLE=TRADITIONAL didn't just turned all filenames, diretories et al to uppercase. Data passed to a program was uppercased as wel. PARSE_STYLE = EXTENDED kept it all as it was typed - INCLUDING the parameters passed to the program. Things get funny if you compare passed parameters to VMS way: UPPERCASE only. When the CGI procedure was set to do SET PARSE_STYLE to EXTENDED, the program didn't work properly, because the passed (and compared) parameters were no longer converetd to uppercase\, and "IF param="A"" (TRUE) became "IF param = "a"" (FALSE).
How ugly these DECC logicals may be, they offer a greater deal of fine-tuning, a requirement where co-existance, and co-operation between programs is key issue - that is: in most cases. Best solution: Avoid case sensitivity. :smileyhappy:
OpenVMS Developer & System Manager
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
тАО07-15-2011 03:08 PM
тАО07-15-2011 03:08 PM
Re: Passing shell arguments to OpenVMS Fortran 90 programs the Linux way
Dear Willem,
Thank you for your response. VMS is so traditionnally uppercased that under the VMS debugger you can't
DBG> set image DECC$SHR
then back
DBG> set image <mixed or lower case>
I came across this issue while debugging the Java to C translated program available at:http://vouters.dyndns.org/tima/OpenVMS-CRTL-Java-C-Illegal_seek-lucene-Problem_with_running_any_lucene_based_Java_code.html.
This tradionally uppercased VMS makes it port of Opensource code terribly complicated without the fact that the C RTL partly implemetns the set of C Unix calls.
Philippe