HP OpenVMS Systemsask the wizard |
The Question is: We are trying to migrate from a serial connect to TCPIP under HP Basic. We are on OpenVMS 7.31, TCPIP 5.3, HP Basic 1.4 all running on an Alpha Server DS25. We believe we are successfully converting "C" code examples found on the Web to Basic, but hit a problem converting a String IP Address to the QIO 'p3' format. Examples have shown that a call to the C function INET_ADDR should work. However we have problems in linking to the TCPIP library. My source code is as follows (program YYYY.BAS): 10 OPTION TYPE = EXPLICIT external string function inet_addrstring by ref) declare string w$ w$=inet_addr("192.234.98.146") end When linked using the following: $ LINK YYYY/OPT YYYY.OPT contains: sys$share:TCPIP$IPC_SHR.EXE/shareable We receive the following error: %LINK-W-USRTFR, image SYSDSK:[USERS.TPRICE]YYYY.EXE;30 has no user transfer address I'm sure it is a silly on my part, but nevertheless am stumped. The Answer is : When calling from BASIC, please use the $qio[w] interface and not the C socket library. The C socket library is not intended to be called from other languages. While $qio[w] might initially appear more intimidating, it is far better suited for mixed-language programming. If you wish to learn about string descriptors and about C null-terminated ASCII strings (ASCIZ strings), please see the OpenVMS FAQ, the calling standard documentation, and the C manuals. In particular, ASCIZ strings must have a null termination byte, and strings (typically using string descriptors) managed by BASIC, Fortran or other languages do not necessarily nor reliably provide the trailing null byte. The LINKER USRTFR error indicates that there is no starting module for the image. You will want to provide an object module (directly, or extracted from an object library as part of the LINKER command) as a starting point for the execution of the code. If you do persist in calling the C RTL from a program that does not have a C main program, please see and use the C RTL initialization call. (This call is intended for non-C programs that call C routines, not non-C calls into the C RTL -- again, this is unsupported. Initialization of the C RTL is necessary here, however.) There should be examples of calling various services from BASIC in the AskQ library, and a pointer to AskQ is present in the OpenVMS FAQ in the section discussing finding source code examples.
|