From: Steve.Lionel@digital.com (Steve Lionel) Newsgroups: comp.os.vms,comp.sys.dec,vmsnet.alpha,vmsnet.misc,comp.answers,news.answers Subject: OpenVMS Frequently Asked Questions (FAQ), Part 2/3 Supersedes: <5rnnhh$i7c@usenet.pa.dec.com> Followup-To: poster Date: 23 Dec 1997 16:50:14 GMT Organization: Digital Equipment Corporation, Nashua NH Lines: 1229 Sender: lionel@quark (Steve Lionel) Approved: news-answers-request@mit.edu Distribution: world Expires: 31 March 1998 00:00:00 GMT Message-ID: <67oq46$sr2@usenet.pa.dec.com> NNTP-Posting-Host: quark.zko.dec.com Summary: This posting contains answers to frequently asked questions about the OpenVMS operating system from Digital Equipment Corporation, and the computer systems on which it runs. X-Newsreader: mxrn 6.18-32 Path: news.mitre.org!blanket.mitre.org!philabs!newsjunkie.ans.net!news.kc.mmd.com!hay.news.ans.net!news-w.ans.net!newsfeeds.ans.net!newsm.ibm.net!ibm.net!uunet!in2.uu.net!news1.digital.com!pa.dec.com!mail.dec.com!lionel Xref: news.mitre.org comp.os.vms:185904 comp.sys.dec:60581 vmsnet.alpha:6865 vmsnet.misc:5203 comp.answers:28872 news.answers:117239 Archive-name: dec-faq/vms/part2 Posting-Frequency: bi-monthly Last-modified: December 22, 1997 Overview ======== This is part 2/3 of the Frequently Asked Questions (FAQ) posting for the comp.os.vms and vmsnet.misc newsgroups. (comp.os.vms is bidirectionally-gatewayed to the INFO-VAX mailing list - see INTRO3 in part 1 for further details.) It contains answers to frequently asked questions about Digital's OpenVMS operating system and the computer systems on which it runs. This FAQ is archived in the following locations: comp.answers and news.answers newsgroups ftp://ftp.digital.com/pub/Digital/dec-faq/vms ftp://rtfm.mit.edu/pub/usenet/news.answers/dec-faq/vms CompuServe VAXFORUM, Library 0, VMSFAQ.TXT To make suggestions for changes or additions to this Frequently Asked Questions list, send mail to the editor at Steve.Lionel@digital.com. Answers are especially appreciated. Table of Contents - Part 2/3 ____________________________ System Management ======================================== MGMT1. What is an installed image? MGMT2. Are there any known viruses for OpenVMS? MGMT3. How do I mount an ISO-9660 CD on OpenVMS? MGMT4. How do I extract the contents of a PCSI kit? MGMT5. I've forgotten the SYSTEM password - what can I do? MGMT6. How do I connect a PostScript printer via TCP/IP? MGMT7. Why can't I do a SET TIME command? MGMT8. What are the various OpenVMS upgrade paths? MGMT9. How do I change the node name of an OpenVMS System? MGMT10. What is the correct value for EXPECTED_VOTES in a VMScluster? MGMT11. Why doesn't OpenVMS see the new memory I just added? MAIL ======================================== MAIL1. How do I send Internet mail? MAIL2. How do I get IN% or MX% added automatically to Internet addresses? MAIL3. How do I automatically append a signature file to my mail messages? MAIL4. Do I have to use VMS MAIL? I like my Unix mailer better. MAIL5. How can I forward my mail? Can I forward it to an Internet address? MAIL6. How can I forward my mail to a list of addresses? MAIL7. MAIL keeps saying I have new messages, but I don't. What do I do? MAIL8. How do I extract all of my mail messages to a file? MAIL9. How do I send or read attachments in VMS MAIL? Other Utilities ======================================== UTIL1. How do I play an audio CD on my workstation? UTIL2. How do I access a MS-DOS floppy disk from OpenVMS? UTIL3. How do I play sound files on an AlphaStation? DECsound doesn't work DCL and command usage ======================================== DCL1. How do I run a program with arguments? DCL2. How can I redefine control keys in DCL? DCL3. How can I clear the screen in DCL? DCL4. How do I do a REPLY/LOG in a batch stream? DCL5. How do I generate a random number in DCL? DCL6. What does the MCR command do? File System and RMS ======================================== FILE1. How can I undelete a file? FILE2. Why does SHOW QUOTA give a different answer than DIR/SIZE? FILE3. How do I make sure that my data is safely written to disk? FILE4. What are the limits on file specifications and directories? FILE5. What is the largest disk volume size OpenVMS can access? FILE6. What is the maximum file size, and the RMS record size limit? FILE7. How do I write recordable CDs on OpenVMS? Programming ======================================== PROG1. How do I call from ? PROG2. How do I get the arguments from the command line? PROG3. How do I get a formatted error message in a variable? PROG4. How do I link against SYS$SYSTEM:SYS.STB on an Alpha system? PROG5. How do I do a SET DEFAULT from inside a program? PROG6. How do I create a shareable image transfer vector on an Alpha system? PROG7. How do I turn my Fortran COMMON into a shareable image on Alpha? PROG8. How do I convert between IEEE and VAX floating data? PROG9. How do I get the argument count in a Fortran routine? PROG10. How do I get a unique system ID for licensing purposes? PROG11. What is an executable, shareable, system or UWSS image? ------------------------------------------------------------ MGMT1. What is an installed image? The term "install" has two distinct meanings in OpenVMS. The first relates to "installing a product", which is done with either the SYS$UPDATE:VMSINSTAL.COM command procedure or the POLYCENTER Software Installation (PCSI) utility (PRODUCT command). The second meaning relates to the use of the INSTALL utility, which is what concerns us here. The INSTALL utility is used to identify to OpenVMS a specific copy of an image, either executable or shareable, which is to be given some set of enhanced properties. For example, when you issue the SET PASSWORD command, the image SYS$SYSTEM:SETP0.EXE is run. That image needs to have elevated privileges to perform its function. The other important attribute is /SHARED. This means that shareable parts of the image (typically read-only code and data) are loaded into memory only once and are shared among all users on a system. Executable images can be installed /SHARED as well as shareable library images. (The term "shareable" has dual meanings here, too. See the OpenVMS Programming Concepts Manual for further details.) It's important to note that there is no such thing as "installing a shareable image with privileges". The INSTALL utility will let you do it, but the privileges you specify will be ignored. To have a callable routine run with enhanced privileges that are not available to its caller, you must construct your routines as "user-written system services" and install the shareable image with the /PROTECT qualifier. See the OpenVMS Programming Concepts Manual for more information on user-written system services. Note also that in many cases the need to grant privileges to an image can be replaced with the use of the "Protected Subsystems" feature that grants a rights identifier to an image. See the OpenVMS Guide to System Security for information on Protected Subsystems. ------------------------------------------------------------ MGMT2. Are there any known viruses for OpenVMS? Viruses are very common on PCs because the PC operating systems such as MS-DOS and MacOS do not implement any sort of scheme to protect the operating system or the file system against hostile action by programs. On these operating systems, any running program can subvert the operating system and take over the hardware, at which point it can do anything it wishes, including hiding copies of itself in other programs or in the file system. This is unlikely on VMS, Unix, MVS, and Windows NT, for two reasons. First, the operating system runs in a privileged mode in memory that is protected against modification by normal user programs. Any old program cannot take over the hardware as it can on PC operating systems. Secondly, VMS, Unix, MVS, and NT have file systems that can be set up so that non-privileged programs cannot modify system programs and files on disk. Both of these protection schemes mean that traditional PC virus schemes don't work on these OSes. It is possible for VMS, etc., to be infected by viruses, but to do so, the program containing the virus must be run from a user account that has amplified privileges. As long as the system administrator is careful that only trusted applications are run from such accounts (and this is generally the case), there is no danger from viruses. [winalski@gemgrp.enet.dec.com] To protect against viruses and other attempts at system interference or misuse, follow the recommendations in the "OpenVMS Guide to System Security". You may also want to consider optional software products which can monitor your system for intrusion or infection attempts. Digital offers the following products in this area: DECinspect Intrusion Detector POLYCENTER Security Reporting Facility POLYCENTER Security Compliance Manager Rocksoft offers the Veracity data integrity tool (for info, send mail to demo@rocksoft.com). [Contributions to this list welcomed] ------------------------------------------------------------ MGMT3. How do I mount an ISO-9660 CD on OpenVMS? ISO-9660 support was added in the following releases: OpenVMS VAX V6.0 OpenVMS AXP V1.5 OpenVMS VAX V5.5, use F11CD kit from InfoServer CD, or Consolidated Distribution CD under InfoServer, or Digital Customer Support - CSCPAT #1071012 Here's how to do it: $ MOUNT/MEDIA_FORMAT=CDROM device-name[:] [volume-label] Please refer to the OpenVMS MOUNT Utility Manual, especially the section regarding the MOUNT qualifier /UNDEFINED_FAT. From the OpenVMS release notes: Because ISO-9660 media can be mastered from platforms that do not support semantics of files containing predefined record formats, you may encounter ISO-9660 CD-ROMs with files that contain records for which no record format was specified. An example which works for most CD-ROMs is: $ MOUNT/MEDIA_FORMAT=CDROM/UNDEFINED_FAT=STREAM:2048 DUA0: FREEWARE This /UNDEFINED_FAT qualifier states, "For any file whose file attributes are 'undefined', return file attributes of 'stream', maximum record length 2048". [dunham@star.enet.dec.com] ------------------------------------------------------------ MGMT4. How do I extract the contents of a PCSI kit? A growing number of OpenVMS products are being provided in PCSI (POLYCENTER Software Installation) kits which are installed using the PRODUCT INSTALL command. These are alternatives to or replacement for VMSINSTAL kits which were BACKUP savesets. PCSI kits are not BACKUP savesets and are structured differently from VMSINSTAL kits. If you want to extract product files from a PCSI kit, create a directory into which the kit should be expanded and use the following command: $ PRODUCT COPY prodname /SOURCE=[where-the-kit-is] - /DEST=[destination-directory] /FORMAT=REFERENCE A PCSI kit file has a file specification of the following form: DEC-VAXVMS-FORTRAN-V0603-141-1.PCSI In this example, "FORTRAN" is the "prodname". PCSI will expand the kit files into the directory you specify and subdirectories beneath such as [SYSEXE], [SYSLIB], etc., reflecting the eventual destination of files found there. Most of the actual product files (images, etc.) will be in the subdirectories. In the top-level directory will be a file with the file type PCSI$DESCRIPTION that specifies where various files should go. For more details, see the POLYCENTER Software Installation Developer's Guide for OpenVMS, which can be found in the OpenVMS documentation on the Consolidated Online Documentation CD-ROM. ------------------------------------------------------------ MGMT5. I've forgotten the SYSTEM password - what can I do? If you need to "break in" to an OpenVMS system because you've forgotten the SYSTEM password, you need to have physical access to the system console and must be able to reboot the system. Here are the steps. 1. Halt the system (press halt button or ^P on console of some models) 2. Boot into the SYSBOOT prompt - the syntax for this varies by system - it typically involves a flag of 1, for example: B/1 B/R5:1 b -flags 0,1 (Recent Alpha systems) If your system has a hardware password (some VAXstations have this), you will need to know the password and enter it using the LOGIN command at the console. If you get an "Inv cmd" error trying to boot with a flag of 1, and can't LOGIN using the hardware password, you're stuck - call for hardware service to reset the hardware password. 3. At the SYSBOOT> prompt type: SET/STARTUP OPA0: SET WRITESYSPARAMS 0 C 4. Wait for the $ prompt. The system will now be accepting startup commands form the console. Type: SPAWN @SYS$SYSTEM:STARTUP This causes the system to complete the startup, but leaves you logged in. The SPAWN is necessary as without it you'll be logged out when the startup finishes. 5. Type: SET DEFAULT SYS$SYSTEM: ! or wherever SYSUAF.DAT resides RUN SYS$SYSTEM:AUTHORIZE MODIFY SYSTEM /PASSWORD=newpassword EXIT This changes the SYSTEM password to a new value. 6. Type: @SYS$SYSTEM:SHUTDOWN The system will now shut down. Reboot the system normally - the SYSTEM password should now be set as you specified in step 5. Some people will suggest a method using the UAFALTERNATE SYSGEN parameter. I don't recommend this as it is not reliable. [Steve Lionel] Improvements by: [thomasgd@boat.bt.com] [newman@bklite.enet.dec.com] ------------------------------------------------------------ MGMT6. How do I connect a PostScript printer via TCP/IP? Recently a number of people (myself included) have asked about postscript printers and how to connect them to VMS systems via TCP/IP. This, we were informed, is not yet possible but is hoped to be under the next release of DCPS (out about the turn of the year or first quarter '97). [SRR3@le.ac.uk] ------------------------------------------------------------ MGMT7. Why can't I do a SET TIME command? Q: Trying to set the time with SET TIME on my system returns one of these messages: %SET-E-NOTSET, error modifying time -SYSTEM-F-IVSSRQ, invalid system service request %SET-E-NOTSET, error modifying time -SYSTEM-E-TIMENOTSET, time service enabled; enter a time service command to update the time A: This occurs if the time on the local system is controlled by a time service software, for example the distributed time service software (DTSS) provided as part of the DECnet/OSI installation. The DTSS software communicates with one or more time servers to obtain the current time. It entirely controls the local system time (for DECnet/OSI, there is a process named DTSS$CLERK for this); therefore, the usage of the SET TIME command (and the underlying $SETTIM system service) is disabled. The first message is displayed on systems running DECnet/OSI V6.1 and earlier. On systems with newer DECnet/OSI (DECnet-Plus) software, the second (and more informative) message is given. You shouldn't have to change the time manually - you should be doing this through the time server - but if you insist... you'll have to shutdown DTSS: $ MCR NCL NCL> DISABLE DTSS NCL> DELETE DTSS This will shutdown DTSS$CLERK. You may then change the system time as usual. To restart the DTSS software, type @SYS$STARTUP:DTSS$STARTUP You'll need a lot of privs : (CMKRNL,SYSPRV,OPER,SYSNAM,PRMMBX,NETMBX,LOG_IO, ALTPRI) and must be granted the NET$MANAGE identifer to shutdown and restart DTSS. [bol@adv.magwien.gv.at] ------------------------------------------------------------ MGMT8. What are the various OpenVMS upgrade paths? OpenVMS Alpha release upgrade paths: From V1.0, one can upgrade to V1.5. From V1.5, or V1.5-1H1, one can upgrade to V6.1. From V6.1, one can upgrade to V6.2. From V6.2, one can upgrade to V6.2-1H1, V6.2-1H2, or V6.2-1H3. From V6.1, or V6.2, one can upgrade to V7.0. From V6.1, V6.2, V6.2-1H(1,2,3), or V7.0, one can upgrade to V7.1. Some typical OpenVMS Alpha upgrade paths are: V1.0 -> V1.5 -> V6.1 -> (V6.2, V7.0, or V7.1) V6.2 -> V6.2-1H3 V1.5-1H1 -> V6.1 -> (V6.2, V7.0, or V7.1) V6.2-1H(1,2,3) -> V7.1 Note that OpenVMS Alpha V7.0 does not include support for hardware and/or configurations first supported in OpenVMS Alpha V6.2-1H1, V6.2-1H2, or V6.2-1H3, one must upgrade to OpenVMS VAX V7.1. OpenVMS VAX release upgrade paths: From V5.0 through V5.4-3 inclusive, one can upgrade to V5.5. From V5.5, V5.5-1, or V5.5-2HW, one can upgrade to V5.5-2. From V5.5, V5.5-1, or V5.5-2, one can upgrade to V6.0. From V5.5-2, V5.5-2H4, or V6.0, one can upgrade to V6.1. From V6.0, or V6.1, one can upgrade to V6.2. From V6.1, or V6.2, one can upgrade to V7.0. From V6.1, V6.2, or V7.0, one can upgrade to V7.1. Some typical OpenVMS VAX upgrade paths are: V5.x -> V5.5 -> V6.0 -> V6.2 -> (V7.0, or V7.1) V5.5-2, or V5.5-2H4 -> V6.1 -> (V6.2, V7.0, or V7.1) Note that OpenVMS VAX V6.0 does not include support for hardware and/or configurations first added in OpenVMS VAX V5.5-2H4, one must upgrade to OpenVMS VAX V6.1. VMScluster rolling upgrades for both OpenVMS VAX and OpenVMS Alpha may/will have different, or additional upgrade requirements, and have requirements around which versions of OpenVMS can coexist in a VMScluster. See the _OpenVMS Version Upgrade and Installation Manual_, and the OpenVMS Software Product Descriptions (http://www.openvms.digital.com/openvms/spd/list.html) for further details on the upgrade, and for support information. And OpenVMS VAX users should also see the upgrade and installation supplement manual(s) for their particular VAX platform(s). [Steve Hoffman] ------------------------------------------------------------ MGMT9. How do I change the node name of an OpenVMS System? The first step is to get a BACKUP of the system disk before making any changes -- use the system disk backup procedures as documented in the OpenVMS System Management Manual, making sure to use the procedures and commands appropriate for the system disk. Changing the node name involves a number of steps -- the node name tends to be imbedded in a number of different data files around the system. Update the SCSNODE in MODPARAMS.DAT, and then run AUTOGEN as far as the SETPARAMS phase. (Do not reboot yet.) Modify the DECnet node name. (NETCONFIG is the DECnet Phase IV tool, and NET$CONFIGURE is the DECnet-Plus tool.) Modify the IP node name. (The UCX tool is UCX$CONFIG.) Modify the host node name on the various queues in the queue database. (each queue has a host name, and it defaults to the SCS node name of the queue's host system. See the command INIT/QUEUE/ON=node for information.) Modify the node name saved in any application databases, or any local node-conditional operations present in the site-specific system startup, etc. (SEARCH for the node name, specifying all types of files.) Rename the SYS$NODE_oldnodename rightslist identifier to match the new name. (Do not change the binary value of this identifier.) Reset any license PAKs that are restricted to the old node name to the new node name. Reboot the node or -- if in a VMScluster -- reboot the whole VMScluster. (This tends to catch any errors immediately.) There are likely a few other areas where the nodename will be stored. If the system is configured in a VMScluster and you change *either* the SCSNODE or the SCSSYSTEMID -- but *not* both values -- then you will have to reboot the entire VMScluster. (The VMScluster remembers the mapping between these two values, and will assume that a configuration problem has occured if a mismatched pair appears, and will refuse to let a node with a mismatched pair join the VMScluster.) I expect I may have missed one or two configuration tools (or more!) that are needed at your site -- the node name tends to get stored all over the place, in layered products, and in local software... [Steve Hoffman] ------------------------------------------------------------ MGMT10. What is the correct value for EXPECTED_VOTES in a VMScluster? The VMScluster connection manager uses the concept of votes and quorum to prevent disk and memory data corruptions -- when sufficient votes are present for quorum, then access to resources is permitted. When sufficient votes are not present, user activity will be blocked. The act of blocking user activity is called a "quorum hang", and is better thought of as a "user data integrity interlock". This mechanism is designed to prevent a partitioned VMScluster, and the resultant massive disk data corruptions. On each OpenVMS node in a VMScluster, one sets two values in SYSGEN: VOTES, and EXPECTED_VOTES. The former is how many votes the node contributes to the VMScluster. The latter is the total number of votes expected when the full VMScluster is bootstrapped. Some sites erroneously attempt to set EXPECTED_VOTES too low, believing this will allow when only a subset of voting nodes are present in a VMScluster. It does not. Further, an erroneous setting in EXPECTED_VOTES is automatically corrected once VMScluster connections to other nodes are established, meaning user data is at risk of severe corruption only during the initial system bootstrap. One can operate a VMScluster with one, two, or many voting nodes. With any but the two-node configuration, keeping a subset of the nodes active when some nodes fail can be easily configured. With the two-node configuration, one must use a primary-secondary configuration (where the primary has all the votes), a peer configuration (where when either node is down, the other hangs), or (preferable) a shared quorum disk. Use of a quorum disk does slow down VMScluster transitions somewhat -- the addition of a third voting node that contributes the vote(s) that would be assigned to the quorum disk makes for faster transitions -- but the use of a quorum disk does mean that either node in a two-node VMScluster configuration can operate when the other node is down. In a two-node VMScluster with a shared storage interconnect, typically each node has one vote, and the quorum disk also has one vote. EXPECTED_VOTES is set to three. Using a quorum disk on a non-shared interconnect is unnecessary -- the use of a quorum disk does not provide any value, and the votes assigned to the quorum disk should be assigned to the OpenVMS host serving access to the disk. For information on quorum hangs, see the OpenVMS documentation. For information on changing the EXPECTED_VOTES value on a running system, see the SET CLUSTER/EXPECTED_VOTES command, and see the OpenVMS system console documentation for the processor-specific console commands used to trigger the IPC (Interrrupt Priority Level %x0C; IPL C) handler. The IPC handler can be used to clear a quorum hang, and to clear disk mount verification hangs. [Steve Hoffman] ------------------------------------------------------------ MGMT11. Why doesn't OpenVMS see the new memory I just added? When adding memory to an OpenVMS system, one should check for an existing definition of the PHYSICALPAGES (OpenVMS VAX) or PHYSICAL_MEMORY (OpenVMS Alpha) parameter in the SYS$SYSTEM:MODPARAMS.DAT parameter database, use a text editor to reset the value in the file to the new correct value as required, and then perform the following command: $ @SYS$UPDATE:AUTOGEN GETDATA REBOOT FEEDBACK This AUTOGEN command will reset various system parameters based on recent system usage (FEEDBACK), and it will reset the value for the PHYSICALPAGES parameter to the new value. It will also reboot the OpenVMS system. PHYSICALPAGES and PHYSICAL_MEMORY can also be used to deliberately lower the amount of memory available for use by OpenVMS. This ability can be useful in a few specific circumstances, such as testing the behaviour of an application in a system environment with a particular (lower) amount of system memory available. PHYSICALPAGES and PHYSICAL_MEMORY can be set to -1, to indicate that all available memory should be used. [Steve Hoffman] ------------------------------------------------------------ MAIL1. How do I send Internet mail? There is no one answer to this question. Internet mail is built upon the TCP/IP protocols, which are not directly supported by VMS. A number of implementations of TCP/IP for VMS are available, from Digital, from a number of other vendors, and even in a free "support it yourself" form. The MAIL program that comes with VMS does not directly support the mail format used on the Internet, but various programs have been written that use MAIL's "foreign protocol" facility to provide such support. To send mail through a foreign protocol by using an address syntax like IN%"fred@fred-host.xxx.com". You *must* include the quotation marks Between them is the address in the format used by mail programs that support the Internet directly. The IN% - short for INternet - names the foreign protocol. On some systems, you use MX% or SMTP% instead. (MX is a widely used, free, mail handler; see question SOFT1. SMTP% is used by Digital's UCX TCP/IP product) Other systems may use some other name. If none of these prefixes work, ask your system manager for assistance. [leichter@lrw.com] See also MAIL2. ------------------------------------------------------------ MAIL2. How do I get IN% or MX% added automatically to Internet addresses? Get the MAILSHR_PATCH package (there's one each for VAX and Alpha) from the WKU FILESERV server (see question SOFT1.) As of OpenVMS V6.2, this is not necessary - if the address has an @ in it (not in a quoted string), MAIL will look to see if the logical name MAIL$INTERNET_TRANSPORT is defined. If it is, it will use the translation as the transport protocol, otherwise it will use SMTP (as is used by UCX). For example, if you wanted IN% added, you'd define MAIL$INTERNET_TRANSPORT as "IN". ------------------------------------------------------------ MAIL3. How do I automatically append a signature file to my mail messages? OpenVMS 7.0 adds the ability to automatically append signature files - in MAIL, use the SET SIGNATURE command to specify a signature file name. For earlier versions, see the following paragraphs. The basic MAIL utility which is shipped with VMS does not have an intrinsic mechanism for adding signature files. If you're using an enhanced mail handling package (e.g PMDF), however, it may have provisions for adding signature files to all messages it handles - check the documentation for details. In addition, it's common practice to use an editor to handle addition of `quotation marks' (e.g. >) and signature files to mail messages and news postings. There are several implementations of this for different editors available on the net; for one example, see the MAIL_EDIT package available at ftp://narnia.memst.edu/mail_edit_v1-4.zip [bailey@genetics.upenn.edu] Define the logical MAIL$EDIT to a COM-file, which looks something like the following: $ IF P1 .NES. "" $ THEN $ COPY 'P1', 'P2' $ ELSE $ COPY 'P2' $ ENDIF $ DEFINE/NOLOG SYS$INPUT SYS$COMMAND $ 'P2' $ EXIT Where is the name of the signature-file (including directory and disk) and is EDIT/EDT or EDIT/TPU (or your favorite editor). [ARNE@ko.hhs.dk] ------------------------------------------------------------ MAIL4. Do I have to use VMS MAIL? I like my Unix mailer better. Several Unix mailers have been ported to VMS, some by the vendors of specific TCP/IP packages, some by users who have made them freely available. See the documentation for your TCP/IP package, and refer to question SOFT1 for information about the availability of the free ports. [leichter@lrw.com] ------------------------------------------------------------ MAIL5. How can I forward my mail? Can I forward it to an Internet address? You can use the SET FORWARD command within MAIL to specify where you want all your mail forwarded to. Use SHOW FORWARD to see your current forwarding. To cancel all forwarding, type SET NOFORWARD. You can forward your mail to an Internet address, but you have to be careful because of the way MAIL handles special characters, such as quotation marks. First, determine the address you would use to send mail to the place you want to forward to - say, IN%"fred@fred-host.xxx.com". Take that string and *double all the quotation marks*, producing IN%""fred@fred-host.xxx.com"". Finally, wrap quotation marks around the outside and use the the result with SET FORWARD: MAIL>SET FORWARD "IN%""fred@fred-host.xxx.com""" If you do SHOW FORWARD, you should now see: Your mail is being forwarded to IN%"fred@fred-host.xxx.com". [leichter@lrw.com] Note that the MAIL$INTERNET_TRANSPORT feature doesn't yet work with SET FORWARD in that you'll still have to use the syntax above with the quotation marks. ------------------------------------------------------------ MAIL6. How can I forward my mail to a list of addresses? VMS MAIL does not support forwarding a message to more than one address. (Older versions of MAIL allowed you to specify such forwarding, but it never worked correctly.) Many of the TCP/IP mail packages support forwarding to mailing lists, as does the free MX mail handling system and the DELIVER mail "extender". See the documentation of your TCP/IP package and question SOFT1. [leichter@lrw.com] ------------------------------------------------------------ MAIL7. MAIL keeps saying I have new messages, but I don't. What do I do? The count of new mail messages is kept separately from your mail folder in SYS$SYSTEM:VMSMAIL_PROFILE.DATA. It sometimes happens that this count differs from what's in your mail folder. If this happens, go into MAIL and repeat the READ/NEW command until you see no new mail messages. Then enter the command one more time. This will resynchronize the counters. ------------------------------------------------------------ MAIL8. How do I move all of my mail messages to another system? If you are moving to another OpenVMS system, perhaps the best way is to select each folder and do (in MAIL) a: EXTRACT/APPEND/ALL/MAIL mymail.mai Move MYMAIL.MAI to the other system, then do this (in MAIL): SET FILE mymail.mai COPY/ALL foldername MAIL.MAI This will place a copy of all of your messages in the given folder. If you wanted to maintain the separate folders, do separate EXTRACT commands (above) specifying different .mai files, then repeat the SET FILE, COPY for each one. If you are moving to a non-OpenVMS system, the EXTRACT command above can be used to create a file which you can then copy - how you import it into your mailer is an exercise left to the reader. ------------------------------------------------------------ MAIL9. How do I send or read attachments in VMS MAIL? Is there any way to send or read mail with files as attachments from VMS? Not directly with the OpenVMS MAIL facility, but there are several other options: 1. Install PINE, available commercially from Innosoft (www.innosoft.com) or free from Andy Harper (ftp://ftp2.kcl.ac.uk/zip). With PINE you can both send and read,if you have the appropriate viewers, MIME mail. 2. If you're working from an X11 server use the OpenVMS version of Netscape Navigator. This option is ok for sending mail, but is not optimal for reading it, since Netscape will use POP and remove messages entirely the OpenVMS MAIL system, which is not generally what you want. 3. MPACK/MUNPACK. To send a MIME mail, construct the message with attachments manually using MPACK. You cannot send the resulting file directly through MAIL because an extra blank header line will be inserted between your message and the OpenVMS MAIL headers, which will cause the message to appear as plain text in most mail programs. Some TCP/IP stacks provide a work around for this problem, and if that doesn't work, you should generally be able to force the message directly into the SMTP port of your mail machine. Examples of both methods are in: http://seqaxp.bio.caltech.edu/pub/SOFTWARE/mmail.com To read a MIME mail message, open it in MAIL, extract it to a file, then use MUNPACK to break out and decode the attachments. [David Mathog] ------------------------------------------------------------ UTIL1. How do I play an audio CD on my workstation? If you've installed the DECwindows examples, you'll find DECW$CDPLAYER.C, .DAT, .EXE, .UIL, and .UID. Copy the .UID and .DAT files to DECW$USER_DEFAULTS: (typically SYS$LOGIN:), define the logical name DECW$CD_PLAYER to be the device name of your CD-ROM drive (eg. DKA400:), give yourself PHY_IO and DIAGNOSE privileges, and run the .EXE. You can also install the image with these privileges. See the source for additional details - note that the comments regarding the need for SYSGEN CONNECT are no longer applicable (at least as of VMS V5.5-2). There's also SYS$EXAMPLES:CDROM_AUDIO.C and .EXE, a non-Motif program. ------------------------------------------------------------ UTIL2. How do I access a MS-DOS floppy disk from OpenVMS? The Digital Pathworks for OpenVMS product includes a utility called PCDISK that can read and write MS-DOS format diskette. A license for Pathworks is as little as US$99 (QM-2CLAA-AA, File and Print Access license). ProGIS in Germany sells a product called VMove which supports DOS files on many different device types. For more information, send mail to info@progis.rmi.de. Engineering Software has a product called VAKSAT which will read/write/erase files on DOS diskettes. Available for both VAX and Alpha. Contact ed@cityscape.co.uk for more information. MadGoat PC Exchange (PCX) is a utility for copying files to and from MS-DOS format diskettes under VMS, using an RX23 (3.5"), RX26 (3.5"), or RX33 (5.25") diskette drive. For 3.5" diskettes, high-density disks can be read or written; double-density disks are read-only. Only high-density disks are supported on the RX33. http://www.wku.edu/www/madgoat/madgoat.html ------------------------------------------------------------ UTIL3. How do I play sound files on an AlphaStation? DECsound doesn't work The new AlphaStation systems use a different sound board (Microsoft Sound System) than the earlier DEC 3000 AXP systems, and DECsound, as supplied by DECwindows Motif, doesn't support this board. Digital offers an optional product, Multimedia Services for OpenVMS (SPD 64.24.00), which provides a replacement DECsound for this card as well as many other features (an AVI and MPEG player, video capture support, etc.) ------------------------------------------------------------ DCL1. How do I run a program with arguments? The RUN command does not accept arguments. To pass arguments to a program, you must use what is called a "foreign command". For example: $ uudecode :== $disk:[dir]uudecode.exe $ uudecode filespec The leading $ in the symbol definition is what makes it a foreign command. If the device and directory is omitted, SYS$SYSTEM: is assumed. Under OpenVMS V6.2 and later, DCL supports automatic foreign command definition via the logical name DCL$PATH:. An example of a definition of this logical name is: $ DEFINE DCL$PATH SYS$DISK:[],ddcu:[mytooldir],SYS$SYSTEM: DCL will first look for a command in the DCL command table, and if no match is found and if DCL$PATH is defined, it will then look for command procedures and executable images with filenames matching the command specified, in the directories specified via DCL$PATH. The first match found is invoked, and under OpenVMS, the DCL$PATH support will cause a command procedure to be activated in preference to an executable image. For more information on foreign commands or on automatic foreign command support, see the OpenVMS User's Manual. See also question PROG2. If you want to create a detached process that takes arguments from a command line, it must be run under the control of a command line interpreter (CLI) (typically DCL). This is done by placing the command line in a file, specifying SYS$SYSTEM:LOGINOUT.EXE as the image to run and the command file as the input. For example: $ OPEN/WRITE CMD TEMP_INPUT.COM $ WRITE CMD "$ MYCOMMAND arguments" $ CLOSE CMD $ RUN/DETACHED SYS$SYSTEM:LOGINOUT /INPUT=TEMP_INPUT.COM Various OpenVMS library calls (such as lib$spawn(), cli$dcl_parse(), and the C library system() call) require access to a command line interpreter such as DCL to perform requested actions, and will not operate if a CLI is not available. When a CLI is not available, these calls typically return the error status SS$_NOCLI. And as mentioned above, invoke the image LOGINOUT to cause a CLI (such as DCL) to be mapped into and made available in the context of the target process. [Steve Hoffman] ------------------------------------------------------------ DCL2. How can I redefine control keys in DCL? The DCL DEFINE/KEY command allows you to define function and keypad keys, but not control keys. Also, keys you define with DEFINE/KEY are not recognized inside applications. Many applications which use the SMG$ routines for input have a similar DEFINE/KEY feature. The terminal driver line-editing control keys, including the use of DEL for delete, are not modifiable. ------------------------------------------------------------ DCL3. How can I clear the screen in DCL? The simplest way is TYPE/PAGE NL: ------------------------------------------------------------ DCL4. How do I do a REPLY/LOG in a batch stream? Your terminal must be enabled as an operator terminal before doing the REPLY/LOG, but a batch stream doesn't have a terminal. To make this work, use the following sequence to enable the console as the operator terminal; then the REPLY/LOG will be accepted: $ DEFINE SYS$COMMAND _OPA0: $ REPLY/ENABLE $ REPLY/LOG [ARNE@KO.HHS.DK] ------------------------------------------------------------ DCL5. How do I generate a random number in DCL? Here's my random number generator for inclusion into the OVMS FAQ; just do a GOSUB RAND and the global symbol RANDOM will contain a randomly generated number. The user/programmer can feed the generator a ceiling value (__CEIL) or a new seed (__SEED). $! RAND - returns a positive random number ("RANDOM") between 0 and $! __CEIL - 1. $ RAND: $ $ IF F$TYPE(__SEED) .EQS. "" $ THEN $ ! seed the random number generator, ... $ __NOW = F$CVTIME() $ __HOUR = 'F$EXTRACT(11,2,__NOW)' $ __MINUTE = 'F$EXTRACT(14,2,__NOW)' $ __SECOND = 'F$EXTRACT(17,2,__NOW)' $ __TICK = 'F$EXTRACT(20,2,__NOW)' $ $ __SEED == __TICK + (100 * __SECOND) + (6000 * __MINUTE) + - (360000 * __HOUR) $ ! the generator tends to do better with a large, odd seed, ... $ __SEED == (__SEED .OR. 1) $ ! clean up, ... $ DELETEX/SYMBOL __NOW $ DELETEX/SYMBOL __HOUR $ DELETEX/SYMBOL __MINUTE $ DELETEX/SYMBOL __SECOND $ DELETEX/SYMBOL __TICK $ ENDIF $ $ IF F$TYPE(__CEIL) .EQS. "" THEN __CEIL = %X3FFFFFFF $ $ __SEED == __SEED * 69069 + 1 $ $ RANDOM == (__SEED.AND.%X3FFFFFFF)/(%X40000000/__CEIL) $ $ RETURN [sharris@sdsdmvax.fb3.noaa.gov] ------------------------------------------------------------ DCL6. What does the MCR command do? The MCR command runs the specified image, with a default filespec of SYS$SYSTEM:.EXE, and passes any (optional) command line arguments in the same manner as a foreign command. In other words: $ MCR FOO BAR is equivalent to: $ FOO :== $FOO $ FOO BAR It derives from the RSX operating system from which VMS evolved and is still often used as a shortcut for activating images. The MCR command is different from the MCR command line interpreter, which is provided as part of the optional VAX-11 RSX product that provides RSX emulation under VMS. ------------------------------------------------------------ FILE1. How can I undelete a file? OpenVMS doesn't have an "undelete" function. However, if you are quick to write-protect the disk (or if you can guarantee that no new files get created or existing files extended), your data is still on the disk and it may be possible to retrieve it. The FLORIAN tool available from the WKU Fileserver claims to be able to do this (see question SOFT1.) ------------------------------------------------------------ FILE2. Why does SHOW QUOTA give a different answer than DIR/SIZE? DIR/SIZE doesn't take into account the size of file headers which are charged to your quota. Also, unless you use DIR/SIZE:ALL, you'll see only the "used" size of the file, not the allocated size which is what gets charged against your quota. Also, you may have files in other directories. [Steve Lionel] $ DIR/SIZ=ALL/GRAND [username...] Grand total of D1 directories, F1 files, B1/B2 blocks. $ DIR/SIZ=ALL/GRAND [-]username.DIR Grand total of 1 directory, 1 file, B3/B4 blocks. $ SHOW QUOTA User [username] has B5 blocks used, B6 available, of B7 authorized and permitted overdraft of B8 blocks on disk If the user has no files in other directories and all file-headers are only 1 block, then the following should apply: B5=B2+B4+F1+1 If the diskquota is out of synch, then the system-manager can make a rebuild. [ARNE@ko.hhs.dk] ------------------------------------------------------------ FILE3. How do I make sure that my data is safely written to disk? If your application must absolutely guarantee that data is available, no matter what, there's really no substitute for RMS Journalling. However, you can achieve a good degree of data integrity by issuing a SYS$FLUSH RMS call at appropriate times (if you're using RMS, that is.) If you're using a high-level language's I/O system, check that language's documentation to see if you can access the RMS control blocks for the open file. In C you can use fflush followed by fsync. Note that fsync, which was undocumented for VAX C but is documented for DEC C, takes a file descriptor as an argument, not a *FILE. ------------------------------------------------------------ FILE4. What are the limits on file specifications and directories? A file specification has an aggregate maximum size of 255 characters at present. The node and device specification may be up to 255 characters each - file name and file types may be up to 39 characters each. File versions are from 1 through 32767, though 0 (latest version), -0 (oldest version) and -n (n'th previous version) can be used in most contexts. A file specification may not have more than 8 directories and subdirectories - while it is possible to create subdirectories of greater depth, accessing them is problematic in most cases and this should be avoided. Application developers should use OpenVMS-supplied routines for parsing file specifications - this ensures that changes in what is allowable will not tend to break your application. Consider that various parts of the file specification may contain quoted strings with embedded spaces and other punctuation! Some routines of interest are SYS$FILESCAN, SYS$PARSE and LIB$TRIM_FILESPEC. For further information, see the OpenVMS Guide to File Applications. ------------------------------------------------------------ FILE5. What is the largest disk volume size OpenVMS can access? One Terabyte (2**31 blocks of 2**9 bytes). Prior to the release of V6.0, the OpenVMS file system was limited to disk volumes of 8.5 GB (2**24 blocks) or less. On some systems, there are restrictions in the console program that limit the size of the OpenVMS system disk. Note that data disks are not affected by console program limits. For example, all members of the VAXstation 3100 series are limited to a system disk to 1.073 GB or less due to the console, though larger data disks are possible. [Steve Hoffman] ------------------------------------------------------------ FILE6. What is the maximum file size, and the RMS record size limit? RMS can store individual files of a size up to the maximum supported volume size. Under OpenVMS V6.0 and later, the volume size and the RMS maximum file size limit is 2**31 * 512 bytes -- one terabyte (1 TB). The RMS formats -- sequential, relative, and indexed -- are limited by the one terabyte maximum volume size. RMS relative files are further limited to a number of records that will fit in 32 bits -- 4 billion records. Sequential and indexed formats do not have a record limit. [Steve Hoffman] ------------------------------------------------------------ FILE7. How do I write recordable CDs on OpenVMS? Creation of CD-ROMs using recordable CD media (CD-R) under OpenVMS typically involves one of two approaches: the use of the optional CD-R (`Scribe') capabilities available for the InfoServer or other "offline" hardware packages, or the use of a host-based package such as the CDWRITE13_VMS utility, an OpenVMS port of a Linux tool. OpenVMS has no integrated support for recording CD-R media. OpenVMS can read both ODS2 and ISO9960 format CD-ROMs. InfoServer hardware configurations are no longer availble from DIGITAL, but may potentially be acquired through other means. The CDWRITE13_VMS package is one example of a host-based package that can be used to create CD-R media. The contact for CDWRITE13_VMS is Dr. Eberhard Heuser-Hofmann. One website that discusses this package is located at: http://www.geocities.com/SiliconValley/Lakes/9999/vmscdwri.html Also see the newest linux-cdwrite package, XCDROAST. [Steve Hoffman] ------------------------------------------------------------ PROG1. How do I call from ? Most OpenVMS system services and RTL routines pass string arguments by descriptor. Languages which support native string data types create descriptors automatically; those which do not (eg., C) require that you set them up explicitly. [eric@tardis.HQ.ileaf.com] There is a lot of information available on how to call system services and Run-Time Library routines, including examples in numerous languages. The best references are: Your language's User Manual OpenVMS Programming Environment Manual OpenVMS Programming Concepts Manual OpenVMS Programming Interfaces: Calling a System Routine OpenVMS Calling Standard In addition, if you are a subscriber to the Digital Software Information Network (available to those with a software support contract), the DSIN database contains hundreds of worked examples of calling system services and RTL routines, including the one that seems to trip up almost everyone, SMG$CREATE_MENU. [Steve Lionel] Arne Vajhøj has put together a collection of OpenVMS example programs. It can be found at: ftp://ftp.hhs.dk/ http://www.hhs.dk/vms/vms_sw_arne.html [arne@ko.hhs.dk] ------------------------------------------------------------ PROG2. How do I get the arguments from the command line? If you're writing a program and want to accept arguments from a foreign command, you can use LIB$GET_FOREIGN to get the command line and parse it yourself, or if you're programming in C, use the normal argc/argv method. To write an application which uses the normal DCL verb/qualifier/parameter syntax for invocation, see the description of the CLI$ routines in the OpenVMS Callable Utility Routines Reference Manual. It is possible to write an application which can be used both ways; if a DCL verb isn't used to invoke the image, the application parses the command 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. See also question DCL1. ------------------------------------------------------------ PROG3. How do I get a formatted error message in a variable? Use the SYS$PUTMSG system service with an action routine that stores the message line(s) in the variable of your choice. Be sure the action routine returns a "false" (low bit clear) function value so that SYS$PUTMSG doesn't then try to display the message (unless you want it to.) See the description of $PUTMSG in the System Services Reference Manual for an example of using an action routine. ------------------------------------------------------------ PROG4. How do I link against SYS$SYSTEM:SYS.STB on an Alpha system? LINK/SYSEXE is the OpenVMS Alpha equivalent of linking against SYS.STB. ------------------------------------------------------------ PROG5. How do I do a SET DEFAULT from inside a program? The problem is that SYS$SETDDIR only changes the default directory - NOT the default disk. The default disk is determined by the logical SYS$DISK. If you want to change the default disk within a program, then call LIB$SET_LOGICAL to change the logical SYS$DISK. You will need to call both LIB$SET_LOGICAL and SYS$SETDDIR to change both default disk and the default directory! [ARNE@ko.hhs.dk] ------------------------------------------------------------ PROG6. How do I create a shareable image transfer vector on an Alpha system? This is something that was greatly simplified for OpenVMS Alpha. You don't need to create a separate transfer vector module; just use the SYMBOL_VECTOR statement in a linker options file. For example, if your shareable image has two routines named FOO and BAR, the linker options file should contain the following line: SYMBOL_VECTOR=(FOO=PROCEDURE, BAR=PROCEDURE) The Linker manual has more details on this. ------------------------------------------------------------ PROG7. How do I turn my Fortran COMMON into a shareable image on Alpha? You need to add SYMBOL_VECTOR=(=PSECT) to your options file. On OpenVMS VAX all OVR/REL/GBL psects were automatically exported into the shareable image's Global Symbol Table. On OpenVMS Alpha you have to tell the linker that you want this done by means of the PSECT keyword in the SYMBOL_VECTOR options file statement. This has several advantages over OpenVMS VAX. First, you don't have to worry about the address of the psect when you try to create a new, upwardly compatible version of the shareable image. Second, you can control which psects, if any, are made visible outside the shareable image. By default, COMMON PSECTs in DEC Fortran for OpenVMS Alpha (as well as most other OpenVMS Alpha compilers) are NOSHR. On VAX, the default was SHR which required you to change the attribute to NOSHR if you wanted your 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 in the Fortran source code (the CDEC$ must be begin in column 1) or a linker options file PSECT_ATTR statement to set the COMMON PSECT attribute to SHR. For further information, see the Linker manual. ------------------------------------------------------------ PROG8. How do I convert between IEEE and VAX floating data? In OpenVMS V6.1 there is a routine CVT$CONVERT_FLOAT, documented in the LIB$ Run-Time Library Reference Manual, which can perform conversions between any two of the following floating datatypes: VAX (F,D,G,H), little-endian IEEE (single, double, quad), big-endian IEEE (single, double, quad), CRAY and IBM System\370. DEC Fortran (all platforms) has a feature which will perform automatic conversion of unformatted data during input or output. See the DEC Fortran documentation for information on "non-native data in I/O" and the CONVERT= OPEN statement keyword. ------------------------------------------------------------ PROG9. How do I get the argument count in a Fortran routine? On VAX, many programmers would use a MACRO routine which accessed the AP register of the caller to get the address of the argument list and hence the argument count. This was not guaranteed to work on VAX, but usually did. However, it doesn't work at all on OpenVMS Alpha, as there is no AP register. On Alpha systems, you must use a language's built-in function to retrieve the argument count, if any. In Fortran this is IARGCOUNT, which is also available in DEC Fortran on OpenVMS VAX. Note that omitting arguments to Fortran routines is non-standard and is unsupported. It will work in many cases - read the DEC Fortran release notes for additional information. ------------------------------------------------------------ PROG10. How do I get a unique system ID for licensing purposes? Many software developers desire to use a unique hardware ID to "lock" a given copy of their product to a specific system. Most Digital VAX and Alpha systems do not have a unique hardware-set "system ID" that can be used for this purpose. Digital does not use hardware IDs in its licensing methods and many users consider a hardware-based licensing scheme to be a negative attribute when considering software purchases. Digital uses a software-based system called the License Management Facility or LMF. This provides for software keys (Product Authorization Keys or PAKS) which support capacity and user-based license checking. Digital sells the DEC LMF PAK Generator for OpenVMS (SPD 31.68.03) for use by software vendors. However, if a hardware-based method is required, the most common method is based on an Ethernet adaptor hardware address. Sample source code for implementing this is available at: http://www.partner.digital.com/www-swdev/files/OPENVMS/examples/ether/ether.c ------------------------------------------------------------ PROG11. What is an executable, shareable, system or UWSS image? Executable code in OpenVMS typically resides in an image -- an image is a file -- the file extension is typically .EXE -- that contains this code. Common types of images include executable images, shareable images, system images, and protected (UWSS) images. Executable images are programs that can be directly executed. These images can grant enhanced privileges, with an INSTALL of the image with /PRIVILEGE, or can grant enhanced access with the specification of a subsystem identifier on the ACL associated with the image. Shareable images contain code executed indirectly, these images are referenced from executable images and/or from other shareable images. These images can not grant enhanced privileges, even with the use of INSTALL with /PRIVILEGE 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. (See `protected images' for information on `privileged shareable images'.) System images are intended to run directly on the VAX or Alpha hardware -- these are normally used for the kernel code that comprises an operating system. Protected images -- also refered to as User-Written System Services (UWSS), or as privileged shareable images -- are similiar in some ways to a standard shareable images, but these images include a `change mode' handler, and execute in an `inner' processor mode (privileged mode; executive or kernel), and code executing in inner modes has implicit SETPRV privilege. Must be INSTALLed with /PROTECT. Note that inner-mode code has restrictions around calling library routines, around calling various system services, and around calling code located in other protected or shareable images. Loadable images and device drivers are images that can be used to add code into the OpenVMS kernel. Pseudo-device drivers are a particularly convenient way to add executable code, with associated driver-defined data 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. A cookbook approach to creating OpenVMS shareable images is available at the (admittedly overly long) URL: http://www.partner.digital.com/www-swdev/pages/Home /TECH/faqs/ovms/ovms-shexe-cook.html [Steve Hoffman] [End of Part 2/3]