![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: Hello I want to use FTP from a program, so I built a Fortran program that calls a C-subroutine that uses SYSTEM-call to run a .com file that does the job. This does not work, but if I make a program of the C-subroutine and run i, all is well. Why? The Answer is : "Does not work" is a classic though rather inexact description of a program, the particular problem(s), and/or the error message(s) that might have resulted... The OpenVMS Wizard will thus (have to) guess... In this case, the OpenVMS Wizard would suggest using lib$spawn directly from Fortran, not a call to a C routine. C has a run-time environment initialization step required when C subroutines are used when a C main is not present -- if you choose to continue the current approach, remember to call VAXC$CRTL_INIT to initialize the C run-time library at the appropriate point... C also has differing string expectations than Fortran, and this problem could simply be case of an argument-passing error -- compatible passing is available and mixed-language calling is supported, but the string argument passing defaults do differ between these two languages... As for the command used, COPY/FTP is also a typical approach for the desired operation. This (V6.2 and later) syntax permits the use of a single command for the FTP operation... Also be aware that system and lib$spawn do not operate when there is no CLI environment present -- the oft-discussed SS$_NOCLI error will arise when a CLI (such as DCL) is not available and a CLI callback (such as lib$spawn or system) is made... (See the SS$_NOCLI details in the FAQ for a related discussion.)
|