=:The OpenVMS Frequently Asked Questions(FAQ)C

The OpenVMS Frequently Asked Questions(FAQ)



 r \ ^  
PreviousContentsIndex

d

9.7.3 Creating Bootable OpenVMS I64 CD or DVD Media? SYS$SETBOOT?



DIf you are creating a bootable CD or DVD media for use with OpenVMS FI64, you will want to specify the SYS$SETBOOT block size of 2048, and Hyou will also want a disk cluster factor that is a multiple of four via DINITIALIZE/CLUSTER=4 (or 8, or...), or you will want to ensure that #SYS$EFI.SYS and SYS$DIAGNOSTICS.SYSHare aligned to a multiple of four blocks; to a 2048 byte boundary. This Halignment and this blocking is only necessary for OpenVMS I64, and only 7when creating optical media OpenVMS I64 for bootstraps.

FThe default 512-byte block setting used by SYS$SETBOOT is the correct Band expected value for traditional disk bootstraps on OpenVMS I64 systems.

COnce the boot files are loaded, OpenVMS I64 operates with 512-byte >blocks; as is the case with ATAPI disks on OpenVMS Alpha, all Capplication code will only see 512-byte blocks on optical media on OpenVMS I64.

=OpenVMS I64 V8.2 and later are expected to have a version of GSYS$SETBOOT that will flag a misaligned SYS$EFI.SYS and (if present) a $misaligned SYS$DIAGNOSTICS.SYS file.

EFor information on SYS$SETBOOT and the SET BOOTBLOCK command, please psee Section 14.3.9 and see the OpenVMS documentation. The purpose and Eintent of the SYS$SETBOOT.EXE image and the SET BOOTBLOCK command is Aanalogous to the WRITEBOOT.EXE image on existing OpenVMS VAX and OpenVMS Alpha systems.

FFor information on CD and DVD optical media drives on OpenVMS, please 9see Section 14.30.j

9.8 What I/O transfer size limits exist in OpenVMS?



HThe maximum transfer size is an attribute of the particular I/O device, Fcontroller and driver combination; there is no inherent limit imposed Fby OpenVMS (other than the fact that, today, byte counts and LBNs are generally limited to 32 bits).

DThe maximum size of a device I/O request is limited by the value in BUCB$L_MAXBCNT, which is set by the device driver based on various Dfactors. (Also check the setting of the MAXBUF system parameter for 6buffered I/O transfers, and check the process quotas.)

ECurrently, SCSI drivers limit I/O transfers to FE00(16) bytes, 65024 Cbytes (decimal). The reasons for this transfer size limitation are Dlargely historical. Similarly, DSSI devices are limited to the same Dvalue, this for hardware-specific reasons. Transfers to HSC and HSJ Edevice controllers via the CI are limited to 1,048,576 bytes. Client EMSCP-served devices are limited to 65535 bytes---to help ensure that Fthe I/O fragmentation processing happens on the client and not on the server system.

DParts of the OpenVMS I/O subsystem are optimized for data transfers <less than 64KB, because (obviously) most I/O operations are H(substantially) less than that. OpenVMS can handle larger transfers, if (the driver and the device can handle it.

jAlso see Section 9.4, Section 9.5.o

9.9 Can I use ODBC to connect to OpenVMS database files?



DYes, you can use various available third-party packages that permit ?remote ODBC clients to access RMS files and various commercial databases via the network.

?For RMS, consider acquiring one of the packages available from EEasySoft, Attunity Connect (formerly known as ISG Navigator), Oracle D(DB Integrator), SolutionsIQ, OpenLink Software (OpenLink Universal Data Access), and Synergex.

The unixODBC9 package available at http://www.unixodbc.org 8has variously been found to operate on OpenVMS, as well.

GFor specific commercial databases (other than RMS, of course), contact ,the database vendor directly for assistance.w

9.10 If my disks are shown as VIOC Compatible, am I using XFC?



Yes, you are using XFC caching.

DDisks that are using XFC caching use communication and coordination :protocols that are compatible with the older VIOC caching Gimplementation. With the initial implementation of XFC on OpenVMS, you Gcan use the command SHOW MEMORY/CACHE to see no disks reported in full XFC mode;Call disks shown will be listed in "VIOC Compatable Mode".

DIf you have the OpenVMS system parameter VCC_FLAGS set to 2 and are Eusing OpenVMS Alpha V7.3-1 or later, or are using OpenVMS Alpha V7.3 Fwith the VMS73_XFC V2.0 ECO kit or later or with the UPDATE kits, you are using XFC.

FAnother confusion: the XFC product version is and remains V1.0 in all Hreleased configurations, please do not confuse the internal XFC product @version (displayed by various commands) with the version number Aassociated with the various ECO kit(s). XFC V1.0 does not permit Evolumes to enter full XFC caching, as displayed by the "Vols in Full XFC mode"5 portion of the DCL command SHOW MEMORY/CACHE output.o

9.11 RMS Sequential Files and Platform Portability?



DWhen working with mixed platforms, you will want to become familiar Hwith the various RMS sequential record formats, including Variable with CFixed Control (VFC), stream, stream LF, and stream CR, among other record formats.

FSwitching formats uses CONVERT/FDL or SET FILE/ATTRIBUTES. The former Cconverts files, the latter resets attributes. Text editors tend to Cselect attributes when creating new files that may or may not meet Hrequirements. If the default attributes do not match your requirements, Fcreate a stub file, SET FILE/ATTR, then edit the existing file. (Most 6editors will preserve attributes on an existing file.)

AWhen working with Windows, stream is usually the best choice for Fsequential file operations. Stream LF is most commonly used with UNIX Eand C applications. Windows and UNIX tend not to be able to directly 9read files of "unexpected" sequential RMS record formats.

DVFC is a common OpenVMS format, encoding the record length into the Frecord. It is this extra data that can cause corruption-like problems Bwhen viewed without RMS; either directly via $qio or via the file Fsystem API on other operating system platforms. You will want to look Bat the low-level record formats, and at the RMS and the Files and 2Applications documentation in the OpenVMS manuals.

HIf transfering through other platforms, use of a current version of Zip H(with the "-Vv" or "-Vv9" option) and unzip, or use of a BACKUP saveset Cwill contain and maintain the RMS file and record attributes. (For FBACKUP and its own attributes requirements, see the restoration tool.)


M

Chapter 10
OpenVMS Programming Information


x

10.1 Modular Programming, Facility Prefixes and Symbol Naming?



DPlease first review the OpenVMS Programming Concepts Manual and the DGuide to Modular Programming manuals. Both are available within the EOpenVMS documentation set, and provide details of the expected norms for OpenVMS programs.



BOpenVMS provides a registry for facility prefixes and for MESSAGE Hmessage compiler codes. To request a prefix and a message facility code Cfor a product you distributinng to other customer sites, send your 'request in a mail message addressed to Dproduct[-at-sign-]hylndr.sqp.zko.dec.com, requesting the submission -form and details of the registration process.



/  
Note

HPlease do not request facility prefixes for products that local to your Cbusiness, your site, or your system. Facility prefixes and message Gcodes and the facility registration process are intended solely for HP Hproducts and Partner Products (and yes, even OpenVMS Freeware packages) Hthat will be distributed across multiple OpenVMS customer sites.


CFor a list of common coding bugs, please see the remainder of this ksection of the FAQ and specifically Section 10.22, please also see the AAsk The Wizard topic (1661), and for information on debugging an -OpenVMS application, please see topic (7552).



HFor additional information on the OpenVMS Ask The Wizard (ATW) area and Bfor a pointer to the available ATW Wizard.zip archive, please see 0Section 3.9.k

10.2 Can I have a source code example of calling...?



HPlease use the available SEARCH command on OpenVMS, and please remember Gto search the available resources, including the support databases and Ethe newsgroup archives. Please also realize that most OpenVMS system Cservices use similar calling sequences, meaning that an example of @calling sys$getjpi can be used as an example for sys$getsyi and >sys$getdvi. Students: please do not expect folks to write your*homework for you. As for search resources:



BOpenVMS programming documentation, including the numerous example Aprograms found in recent versions of the OpenVMS Programming #Concepts manual, is available:



EAs for details of argument passing, most OpenVMS system services and BRTL routines pass string arguments by descriptor. Languages which Csupport native string data types create descriptors automatically; Ethose which do not (eg., C) require that you set them up explicitly. DFor further details on using descriptors and particularly for using Rdescriptors from C, please see Section 10.13.

GThere is extensive information available on how to call OpenVMS system Fservices and OpenVMS Run-Time Library routines, including examples in <numerous languages. Among the best available references are:



DIn addition, if you are a subscriber to the HP Software Information CNetwork (available to those with a software support contract), the Hsupport database contains hundreds of worked examples of calling system Cservices and RTL routines, including the one that seems to trip up !almost everyone, SMG$CREATE_MENU.

DArne Vajhøj has put together a collection of OpenVMS example programs. It can be found at:



BAdditional information and examples for OpenVMS are available via:



HFor additional information on the OpenVMS Ask The Wizard (ATW) area and Bfor a pointer to the available ATW Wizard.zip archive, please see 0Section 3.9.and via:

m

10.3 How do I get the arguments from the command line?



HIf you're writing a program and want to accept arguments from a foreign Gcommand, you can use LIB$GET_FOREIGN to get the command line and parse Eit yourself, or if you're programming in C, use the normal argc/argv method.

2To write an application which uses the normal DCL Gverb/qualifier/parameter syntax for invocation, see the description of Ethe CLI$ routines in the OpenVMS Callable Utility Routines Reference Manual.

GIt is possible to write an application which can be used both ways; if Fa DCL verb isn't used to invoke the image, the application parses the Gcommand line itself. One way to do this is to call CLI$GET_VALUE for a required<parameter. If it is not present (or you get an error), call @LIB$GET_FOREIGN to get the command line and do the manual parse.

8See also Section 8.1.q

10.4 How do I get a formatted error message in a variable?



EUse the SYS$PUTMSG system service with an action routine that stores Gthe message line(s) in the variable of your choice. Be sure the action Aroutine returns a "false" (low bit clear) function value so that SYS$PUTMSGEdoesn't then try to display the message (unless you want it to.) See Gthe description of $PUTMSG in the System Services Reference Manual for &an example of using an action routine.x

10.5 How do I link against SYS$SYSTEM:SYS.STB on an Alpha system?



GLINK/SYSEXE is the OpenVMS Alpha equivalent of linking against SYS.STB.5This links against the base image: SYS$BASE_IMAGE.EXE

iAlso see Section 10.11, particularly for pointers to the details on .shareable images and shareable image creation.l

10.6 How do I do a SET DEFAULT from inside a program?



EThe problem is that SYS$SETDDIR only changes the default directory - DNOT the default disk. The default disk is determined by the logical HSYS$DISK. If you want to change the default disk within a program, then Fcall LIB$SET_LOGICAL to change the logical SYS$DISK. You will need to Fcall both LIB$SET_LOGICAL and SYS$SETDDIR to change both default disk and the default directory!|

10.7 How do I turn my Fortran COMMON into a shareable image on Alpha?



BYou need to add SYMBOL_VECTOR=(<common-name>=PSECT) to your Goptions file. On OpenVMS VAX all OVR/REL/GBL psects were automatically Dexported into the shareable image's Global Symbol Table. On OpenVMS FAlpha you have to tell the linker that you want this done by means of >the PSECT keyword in the SYMBOL_VECTOR options file statement.

GThis has several advantages over OpenVMS VAX. First, you don't have to Cworry about the address of the psect when you try to create a new, Dupwardly compatible version of the shareable image. Second, you can Econtrol which psects, if any, are made visible outside the shareable image.

FBy default, COMMON PSECTs in HP Fortran for OpenVMS Alpha (as well as Gmost other OpenVMS Alpha compilers) are NOSHR. On VAX, the default was FSHR which required you to change the attribute to NOSHR if you wanted Cyour COMMON to be in a shareable image but not write-shared by all ;processes on the system. If you do want write-sharing, use:

 

"
CDEC$ PSECT common-name=SHR 




Fin the Fortran source code (the CDEC$ must be begin in column 1) or a Alinker options file PSECT_ATTR statement to set the COMMON PSECT attribute to SHR.

/For further information, see the Linker manual.p

10.8 How do I convert between IEEE and VAX floating data?



GIn OpenVMS V6.1 and later, the routine CVT$CONVERT_FLOAT is documented Hin the LIB$ Run-Time Library Reference Manual, and can perform floating Gpoint conversions between any two of the following floating datatypes: EVAX (F,D,G,H), little-endian IEEE (single, double, quad), big-endian :IEEE (single, double, quad), CRAY and IBM System\370, etc.

DHP Fortran (all OpenVMS platforms) has a feature which will perform Eautomatic conversion of unformatted data during input or output. See Dthe HP Fortran documentation for information on "non-native data in -I/O" and the CONVERT= OPEN statement keyword.

GThere are floating-point conversion source code packages available for various platforms.

4For further floating-point related information, see:

q

10.9 How do I get the argument count in a Fortran routine?



FOn VAX, many programmers would use a MACRO routine which accessed the AP registerDof the caller to get the address of the argument list and hence the Dargument count. This was not guaranteed to work on VAX, but usually Fdid. However, it doesn't work at all on OpenVMS Alpha, as there is no BAP register. On Alpha systems, you must use a language's built-in Dfunction to retrieve the argument count, if any. In Fortran this is AIARGCOUNT, which is also available in DEC Fortran on OpenVMS VAX.

HNote that omitting arguments to Fortran routines is non-standard and is Gunsupported. It will work in many cases - read the DEC Fortran release !notes for additional information.u

10.10 How do I get a unique system ID for licensing purposes?



?Many software developers desire to use a unique hardware ID to E"lock" a given copy of their product to a specific system. =Most VAX and Alpha systems do not have a unique hardware-set D"system ID" that can be used for this purpose. HP OpenVMS Cproducts do not use hardware IDs in the licensing methods, as many @users consider a hardware-based licensing scheme to be negative .attribute when considering software purchases.

FHP OpenVMS uses a software-based system called the License Management GFacility (LMF). This provides for software keys (Product Authorization FKeys or PAKS) which support capacity and user-based license checking. eHP offers an LMF PAK Generator to CSA members---see Section 2.13.

[For information on licensing, please see Section 12.5.

HHowever, if a hardware-based method is required, the most common method Eis based on an Ethernet adaptor hardware address. Sample source code &for implementing this is available at:



HFor additional information on the OpenVMS Ask The Wizard (ATW) area and Bfor a pointer to the available ATW Wizard.zip archive, please see 0Section 3.9.u

10.11 What is an executable, shareable, system or UWSS image?



GExecutable code in OpenVMS typically resides in an image---an image is Ca file---the file extension is typically .EXE---that contains this Bcode. Common types of images include executable images, shareable 3images, system images, and protected (UWSS) images.

DExecutable images are programs that can be directly executed. These 5images can grant enhanced privileges, with an INSTALLJ of the image with /PRIVILEGE, or can grant enhanced access with the M specification of a subsystem identifier on the ACL associated with the image.

DShareable images contain code executed indirectly, these images are Freferenced from executable images and/or from other shareable images. EThese images can not grant enhanced privileges, even with the use of INSTALL with /PRIVILEGEL or a subsystem identifier. These shareable images can be dynamically : activated (a LINK that occurs at run-time) via the < LIB$FIND_IMAGE_SYMBOL run-time library (RTL) routine.H (See `protected images' for information on `privileged shareable  images'.)

?System images are intended to run directly on the VAX or Alpha Fhardware---these are normally used for the kernel code that comprises an operating system.

CProtected images---also refered to as User-Written System Services F(UWSS), or as privileged shareable images---are similiar in some ways Cto a standard shareable images, but these images include a `change Dmode' handler, and execute in an `inner' processor mode (privileged Bmode; executive or kernel), and code executing in inner modes has Fimplicit SETPRV privilege. Must be INSTALLed with /PROTECT. Note that Binner-mode code has restrictions around calling library routines, Haround calling various system services, and around calling code located 'in other protected or shareable images.

FLoadable images and device drivers are images that can be used to add Gcode into the OpenVMS kernel. Pseudo-device drivers are a particularly Fconvenient way to add executable code, with associated driver-defined Hdata structures, into the kernel. The pseudo-device driver includes the UCB and DDB data structures,@ and a calling interface with support for both privileged and ? unprivileged access to the driver code via sys$qio[w] calls.

FA cookbook approach to creating OpenVMS shareable images is available at the URL:



HFor additional information on the OpenVMS Ask The Wizard (ATW) area and Bfor a pointer to the available ATW Wizard.zip archive, please see 0Section 3.9.




 r Y \ ^  
PreviousNextContentsIndex