      <:=--=:><:=--=:><:=--=:><:=--=:>\|/<:=--=:><:=--=:><:=--=:><:=--=:>
      <:=--=:>                                                   <:=--=:>
      <:=--=:>    >>>>>=-*  Users Guide to VAX/VMS  *-=<<<<<     <:=--=:>
      <:=--=:>                                                   <:=--=:>
      <:=--=:>                   Part II of III                  <:=--=:>
      <:=--=:>                                                   <:=--=:>
      <:=--=:>            Part C: Using the Utilities            <:=--=:>
      <:=--=:>         Part D: Advanced Guide to VAX/VMS         <:=--=:>
      <:=--=:>                                                   <:=--=:>
      <:=--=:>                    By Black Kat                   <:=--=:>
      <:=--=:>                                                   <:=--=:>
      <:=--=:><:=--=:><:=--=:><:=--=:>/|\<:=--=:><:=--=:><:=--=:><:=--=:>

 Index
 ~~~~~
Part C contains information on the following topics:

   o  Help Utility       o  Phone Utility
   o  Backup Utility     o  Library Utility
   o  Mail Utility       o  Sort Utility

Part D contains information on the following topics:

   o  Subprocesses               o  DECnet
   o  Attaching to a Process     o  Proxy Access
   o  Interrupting a Process     o  Task-to-Task Communication
   o  Batch Processing           o  Remote Printing
   o  Controlling Batch Jobs     o  VAXclusters

                     <:=- Part C : Using the Utilities -=:>

 Help Utility
 ~~~~~~~~~~~~
The VAX/VMS Help Utility is almost like having a DCL dictionary online.  It
includes an explanation of each DCL command and can optionally explain valid
command parameters.  Help also provides information about other VAX/VMS
utilities and system services.

There are two modes available for the help utility.  If you know the DCL
command, utility or system service you want more information about, use direct
mode.  If you don't know the command, use query mode.  Query mode can also be
used to see which other commands and other subjects are referenced by the help
utility.

To use query mode, just type HELP <enter> at the DCL command level.  Help will
display an alphabetical listing of all DCL commands and other topics for which
information is available and you will be prompted with:  "Topic?"

You can exit Help by pressing <enter> or <Ctrl-C> or <Ctrl-Z> or get
information by typing in the command or subject name followed by <enter>.  When
you request information on a command, Help will display details including how
the command is invoked, what it does and the default values.  Most topics will
have subtopics available which will be listed alphabetically followed by the
prompt:  "COMMAND-NAME Subtopic?"

You can select subtopic help or press <enter> to return to the "Topic?" prompt.
If you want to see all the information available on a command, type in "HELP
command_name ..." or "HELP command_name *".

To use direct mode, enter HELP topic_name <enter>.  This will bypass the
listing of available topic.  Additionally, you can enter a valid DCL command
with or without qualifiers in this mode.  For example, to get information on
the DCL SET command /TERMINAL qualifier, you could enter $ HELP SET TERMINAL.
The help utility will provide information on the SET/TERMINAL command and
prompt you for another subtopic since information on other qualifiers is
available.

For more information and details on the help utility, you can use:
   $ HELP HINTS   or   $ HELP HELP/INSTRUCTIONS.


 Backup Utility
 ~~~~~~~~~~~~~~
The backup utility is usually used by system managers to back up system disks,
insuring a recent copy of data should the system disks become unreliable.
Generally, the system disks are backed up to magnetic tape or removable disk
packs, which are then removed and stored in a save location offline.  Users may
use the backup utility on files in their own accounts to make copies for safe
keeping, transferring to another system, or for offline storage.

To use the backup utility, you have to decide what you want to back up, and how
you want it done.  You have the following options:

Selective   :  Files are backed up according to a specified criteria.
               Qualifiers (e.g. /DATE) and file specifications (e.g. *.TXT)
               are used for specifying these criteria.
File by File:  Individual files or entire file directories are backed up.
               Directories are created when copying, unlike the copy command.
Incremental :  Saves file created since the most recent backup.  Usually
               performed by system operators.
Physical    :  An exact duplicate of a volume is saved.  All file structures
               are ignored and the copy is a bit-by-bit duplicate.
Image       :  A functionally equivalent copy of the original volume is
               created.  Typically done on bootable volumes and system disks.


To back up files to a subdirectory:  $ BACKUP F1.TXT,F2.TXT,*.DAT [BY.JUNK]

To copy a directory tree:  $ BACKUP [dir...]file_spec [dir...]file_spec

To copy disk volumes:  $ MOUNT/FOREIGN DJA1:
                       $ BACKUP/IMAGE DUA2: DUA1:

To copy to tape:       $ INITIALIXE MUA0: TAPE  (the first time its used)
                       $ MOUNT/FOREIGH MUA0:
                          MOUNT-I-MOUNTED, TAPE mounted on __MUA0:
                       $ BACKUP [.DRV]MV_DYDRV.MAR MUA0:[]MV_DYDRV.MAR

A save set is a single file containing multiple files that have been backed up.
To make a save set:

                       $ MOUNT/FOREIGN MUA0:
                          MOUNT-I-MOUNTED, TAPE mounted on __MUA0:
                       $ BACKUP DUB1:[BY.JUNK]*.*;* MUA0:08JUN.BAK/SAVE_SET

A single file can be retrieved from a save set by using the /SELECT qualifier.
For example, to restore the file LOGIN.COM from the previously backed up save
set:

                  $ MOUNT/FOREIGH MUA0:
                     MOUNT-I-MOUNTED, TAPE mounted on __MUA0:
                  $ BACKUP
                 __From: MUA0:08:JUN.BAK/SAVE_SET/SELECT=[BY.JUNK]LOGIN.COM
                 __To: *.*

Listing a save set:  $ MOUNT/FOREIGN MUA0:
                        MOUNT-I-MOUNTED, TAPE mounted on __MUA0:
                     $ BACKUP/LIST MUA0:08JUN.BAK/SAVE_SET

Selective backups:   $ BACKUP *.*/SINCE=12-APR-1988 MUA0:08JUN.BAK/SAVE_SET
                     $ BACKUP
                     __From: *.*/SINCE=12-APR-1988/EXCLUDE=[*.TMP,*.LOG]
                     __To: MUA0:08JUN.BAK/SAVE_SET


The following is a list of some other qualifiers you'll find useful.

 Qualifier  Function
 ~~~~~~~~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/LOG        Writes log message to terminal as each backup file is written.
/VERIFY     Verifies the copy or save set with the original after copy.
/CONFIRM    Display each filename and ask for confirmation before copy.
/DELETE     Deletes source file after destination file written.


 Mail Utility
 ~~~~~~~~~~~~
When you receive new mail, a message will be sent to your terminal unless the
/NOBROATCAST qualifier has been specified with the SET TERMINAL command.  Mail
is an interactive utility that understands many commands in a format identical
to DCL commands.  The utility is invoked by typing "$ MAIL" at the DCL command
level.  Mail has a built in help feature which works the same way as the
VAX/VMS Help Utility.  Mail may be sent interactively or directly.

Interactive implies the use of the mail utility in conversational mode by
invoking mail at the DCL command level.  After invoking the mail utility, use
the SEND command, and mail will prompt you for the name of the user(s) you want
to send the mail to, your name, the subject, and the message text which you
will terminate with <Ctrl-Z>.  When you press <Ctrl-Z> the message is sent and
you are returned to the mail prompt where you can type EXIT to quit.

To send mail in direct mode from the DCL command line, use the following
format:  $ MAIL file_spec user /SUBJECT="character string" where "file_spec"
is a valid VAX/VMS file specification containing the body of your mail message
and "user" is the name of a user on your local system or remote node.  The
/SUBJECT qualifier is optional.

To send mail to multiple users (like a mailing list) create a file with a list
of the account names of every user you want to receive the message.  Then enter
@FILENAME at the "To:" prompt and each user listed in the distribution list
will receive a copy of your mail.  A distribution list may also contain another
distribution list by preceeding the second name with an at sign (@).  Comments
are included by using an exclamation point (!).  The following is a sample
distribution list:

  ! VAX.DIS
  !
  ! Staff
  JONES
  OPER
  BYNON
  !
  ! Accounting personnel
  @ACTLIST

To read your mail, just type MAIL <enter> and you will be told how many
messages you have waiting.  Read is the default command, so you can just
press <enter> to start reading them.  To reply to a message, use the REPLY or
ANSWER commands and the mail utility will fill out the header information
automatically.  You can store your mail in folders for later reference.  The
system has three default folders (MAIL, NEWMAIL, and WASTEBASKET).

MAIL is the default mail folder and always exists.  It is used to store mail
messages after you've read them unless you file these messages in other folders
you've created.

The NEWMAIL folder stores mail messages before you read them, like a mailbox.
They're automatically moved to the MAIL folder after you've read them unless
you specify a different destination folder with the MOVE command.

The WASTEBASKET folder is a temporary folder used to store messages that have
been deleted.  These messages remain in the WASTEBASKET folder until you exit
the mail utility, at which time they're thrown out permanently.

To create new folders, select a message and enter the MOVE command.  If you
attempt to move a message to a nonexistent folder, you'll be asked if you want
to create a new folder.  For example:

   MAIL> 11
   MAIL> MOVE MEMOS
   Folder MEMOS does not exist. Create it (Y/N, default is N)? Y
   MAIL-NEWFOLDER, folder MEMOS created MAIL>

The SELECT command allows you to move from one folder to another.  For example,
if you type SELECT JUNK at the "MAIL>" prompt, you will be moved to the JUNK
folder, and mail will respond with the number of messages contained in the new
folder.

The DELETE command accepts a message number as a parameter or deletes the
current message if a message number is not supplied.  To delete a folder, just
delete all the messages in that folder with the DELETE qualifier /ALL.

To log a mail message to a file, use the EXTRACT qualifier.  If the /NOHEADER
qualifier is used, the header information will not be included.  For example:
EXTRACT/NOHEADER MEMO.TXT will save the currently selected message to a file
named MEMO.TXT.

For more information on the mail utility, use mail's HELP command.


 Phone Utility
 ~~~~~~~~~~~~~
The VAX/VMS Phone Utility allows you to talk to other users on your system.  It
simulates a real telephone with such features as call holding, conference calls
and telephone directories.  The Phone utility only works with VT100, VT200 or
compatible terminals.

To call someone with the phone utility, enter "$ PHONE username" where username
is the person you want to talk to.  Your screen will split horizontally in half
and indicate that the phone utility is ringing the other person.  Your half of
the conversation will be displayed on the top of the screen and the other
person's will appear on the lower half.

The phone utility may also be used interactively by entering "$ PHONE", and you
will now be given the phone prompt (%).  You can enter commands directly now
(e.g. "% DIRECTORY").  The phone utility has an online help facility just like
the mail utility.


 Library Utility
 ~~~~~~~~~~~~~~~
Sometimes its easier to maintain a single file instead of a group of related
files.  The VAX/VMS Library Utility lets you create and maintain a specially
formatted file called a library in which you can store groups of single files
called modules.  Predefined libraries include text, help, object, sharable
image and macro.  Many VAX/VMS utilities such as HELP and LINK are capable of
processing library files.  Unless you're a programmer or system manager,
you'll probably only use text and help libraries.

To create a library use the LIBRARY command's /type qualifier and the /CREATE
qualifier.  The /type qualifiers are:  /TEXT, /SHARE, /HELP, /OBJECT, /MACRO.
For example to create a text library named BOOK.TLB:

   $ LIBRARY/TEXT/CREATE BOOK.

You may optionally specify a list of files to be included in a library when it
is created.  For example:

   $ LIBRARY/TEXT/CREATE BOOK TOC,C1,C2,INDEX

To list the names of modules in a library, use the /LIST qualifier:

   $ LIBRARY/TEXT/LIST BOOK
   Directory of TEXT library BOOK.TLB;1 on 12-JUN-1989 14:12:07
   TOC
   C1
   C2
   INDEX

You can also display a history of updates made to the library by using the
/HISTORY qualifier with the /LIST qualifier.

To add modules to an existing library, use the /INSERT qualifier:

   $ LIBRARY/TEXT/INSERT BOOK CH3

To update a module in a library, do the following:

   o  Extract the module to be updated with the /EXTRACT qualifier.
   o  Make the necessary changes.
   o  Write over the old module with the /REPLACE qualifier.

For example:  $ LIBRARY/TEXT/EXTRACT BOOK CH2
              $ EDIT CHAP2.TXT
                .
                .    (edit the file)
                .
              $ LIBRARY/TEXT/REPLACE BOOK CH2


 Sort Utility
 ~~~~~~~~~~~~
The VAX/VMS Sort Utility will reorganize records within a file.  The simplest
form of the sort command will organize records in ascending alphabetical order.
For example, to sort BOOK.TXT, you could issue the command:

   $ SORT BOOK.TXT SORTED.TXT

The Sort utility sorts on the first character of the field in each record in
the input file.  If there is more than one field or column in a record, the
entire record is ordered, not just the first field.

Here's an example of sorting in descending order numerically with multiple
fields.  The sample data file JUNK.TXT contains two fields of data. The first
field contains a name, and the second field, starting in column 9 contains the
two-digit number we're sorting by:

   PAT     47
   PAT     47
   JIM     09
   TOM     23
   RICH    43
   GARY    02
   KURT    13
   KEVIN   27

Sort the file:  $ SORT/KEY=(POSITION=9,SIZE=2,DESCENDING) JUNK.TXT SORTED.TXT

The sorted file (SORTED.TXT) will now look like this:

   PAT     47
   RICH    43
   KEVIN   27
   TOM     23
   KURT    13
   JIM     09
   GARY    02


                  <:=- Part D : Advanced Guide to VAX/VMS -=:>

 Subprocesses
 ~~~~~~~~~~~~
A major benefit of the VAX/VMS operating system is its support of multi-
processing.  This is not restricted to multiple users logged into different
terminals however.  VAX/VMS users may create multiple processes known as
subprocesses from within their main processes.

The DCL SPAWN command is used to create a subprocess.  The SPAWN command will
create a subprocess with the attributes (default directory, privileges, memory,
etc.) of its parent process unless otherwise specified.  For example:

   $ SPAWN
   % DCL-S-SPAWNED, process BYNON_1 spawned
   % DCL-S-ATTACHED, terminal now attached to process BYNON_1

In this case, the parent process is put into hibernation, the subprocess is
given control of the keyboard, and we are left at the DCL prompt.  You can now
enter any DCL commands, utilities, or other programs.  To return to the parent
process, just $ LOGOUT of the subprocess:

   $ LOGOUT
     Process BYNON_1 logged out at 12-JUL-1981 13:04:17.10
   $ DCL-S-RETURNED, control returned to process BYNON

The SPAWN qualifier /NOLOG can be used to suppress the informational messages
generated when a subprocess is created or logged out.  DCL Commands, procedures
and VAX/VMS images (utilities and programs) may be executed directly with SPAWN
by entering the correct syntax for the command or procedure after the SPAWN
command.  For example:  $ SPAWN/NOLOG MAIL

If you have a task that can execute without user intervention (e.g. a program
compiler), you can spawn a task to run as a background process to your current
process.  For example: $ SPAWN/NOWAIT FORTRAN VAXBBS

The SPAWN qualifier /NOWAIT spawns the task to run concurrently (parallel) to
the parent process.  Both processes will share the terminal and any messages
>from the background task will be displayed at the terminal.  To avoid possible
conflicts, use the /OUTPUT qualifier:

   $ SPAWN/NOWAIT/OUTPUT=COMPILE.LOG FORTRAN.VAXBBS

When the job in the subprocess is complete it will terminate and be removed
>from the system.


 ATTACHing to a Process
 ~~~~~~~~~~~~~~~~~~~~~~
You can use the DCL ATTACH command to connect your keyboard to any process or
subprocess you've created.  To exit from BYNON_1 back to BYNON with the ATTACH
command, enter "$ ATTACH BYNON" and the subprocess hibernates while you are
returned to the parent process.


 Interrupting a Process
 ~~~~~~~~~~~~~~~~~~~~~~
You can interrupt a process at anytime to create a subprocess by pressing
<Ctrl-Y> and then using the SPAWN command.  When you're done working with the
subprocess and have returned to the interrupted process, type CONTINUE to start
processing again where you left off.  Some VAX/VMS utilities, such as MAIL,
support SPAWN intrinsically, so you can spawn a process within these utilities
by entering the SPAWN command without pressing <Ctrl-Y> first.


 Batch Processing
 ~~~~~~~~~~~~~~~~
The SUBMIT command was briefly discussed in Part II: Programming the VAX.  A
batch job is one or more DCL command procedures that execute from a detached
process with your privileges and quotas.  The controller of the process is the
batch queue which accepts jobs via the SUBMIT command.  Batch jobs execute
without user interaction, permitting you to use your terminal for interactive
work while the system executes the batch job (command procedure).  Batch jobs
are used to execute tasks that take a long time to run, use many system
resources, or need to be scheduled to execute at a specific time.

The SUBMIT command will enter a command procedure to the default batch queue
(SYS$BATCH) if a specific queue is not provided.  A command procedure submitted
for batch execution is given a job name which defaults to the command procedure
name unless otherwise specified.  The entry number given to the job is used to
control it (delete, rename, etc.)


 Controlling Batch Jobs
 ~~~~~~~~~~~~~~~~~~~~~~
You can specify a name for a batch job with the /NAME qualifier:

   $ SUBMIT BACKUP /NAME=DAILY_BACK

You may also execute more than one command procedure by separating the
procedure names with a comma:

   $ SUMBIT SORT_DATA,REPORT /NAME=WEEKLY_REPORT

To schedule a batch job to execute after a specific time:

   $ SUMBIT CLEANUP /AFTER=11:40
   Job CLEANUP (queue SYS$BATCH, entry 39) holding until 1-JUN-1989 11:40

To hold a job in the queue to be released later:

   $ SUMBIT REMINDER /HOLD
   Job REMINDER (queue SYS$BATCH, entry 12) holding
   $
   $ SET QUEUE/ENTRY=32/RELEASE SYS$BATCH

To submit a job to a different queue:  $ SUBMIT TESTJOB /QUEUE=SLOW

To lower the priority (e.g. if it's CPU intensive):

   $ SUBMIT CRUNCH /PRIORITY=2

To pass parameters:  $ SUBMIT COMPILE / PARAMETERS=(WINDOWS,MISC,DISP_IO)

To disable the automatic printing of the batch job's log (file instead):

   $ SUBMIT GOJOB /NOPRINT /LOG_FILE=DUA2:[BYNON]

This will create a file DUA2:[BYNON]GOJOB.LOG.  If the /NOPRINT qualifier is
not specified, the log file will be printed and deleted.  To print and keep the
log file, use the /KEEP qualifier with the /LOG_FILE qualifier.

After you submit a procedure to a batch queue, you can monitor its status and
job characteristics by using the SHOW QUEUE command.  This will display the
name, entry number and status of all the jobs you have in queue.  The /ALL
qualifier will display all jobs you have enough privilege to see, and the /FULL
qualifier provides more information about jobs, such as operating
characteristics and submission time.

You can use the SET QUEUE/ENTRY command to modify a job's priority
(/PRIORITY), name (/NAME), or status (/RELEASE or /AFTER).  For example:

   $ SET QUEUE /ENTRY=217 /PRIORITY=2 SYS$BATCH

Use the DELETE /ENTRY command to delete jobs:  $ DELETE /ENTRY=18 SYS$BATCH


 Using DECnet
 ~~~~~~~~~~~~
DECnet uses the standard VAX/VMS file specifications for remote file access.
In addition to a node specification, you may also include access control
information (username and password) in quotes.  For example:

    BURG"JONES MYPW"::DUA2:JUNK.TXT
     |     |    |       |     |
     |     |    |       |     +---- Filename.Extension
     |     |    |       |
     |     |    |       +---------- Device name
     |     |    |
     |     |    +------------------ Password
     |     |
     |     +----------------------- Username
     |
     +----------------------------- Node name

Unless a specific DECnet account exists on the host node, or proxy exists, you
must supply access control information to execute a command on a remote system.
(e.g. $ TYPE BURG""JONES MYPW"::DUA2:JUNK.TXT)


 Proxy Access
 ~~~~~~~~~~~~
Because including access control information in a command string is a security
risk, Digital provides proxy access, which works by keeping a database of users
and hosts who may gain access to the system via DECnet.  The format of the
database is: SYSTEM::REMOTE_USERNAME LOCAL_USERNAME.


 Task-to-Task Communication
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
This is a feature of DECnet which allows programs on one system to communicate
with programs on another (e.g. the DCL TYPE command)  To execute a procedure on
a remote system, use the TYPE command with the TASK=xxx parameter.  For
example:

   $ TYPE VAX1::"TASK=SHOW_USERS"

To show the users on a remote system you would write a command procedure
something like this:

   $! Show_Users.Com
   $!
   $      IF FMODE() .EQS. "NETWORK" THEN GOTO NETWORK
   $      SHOW USERS
   $      EXIT
   $  NETWORK:
   $      DEFINE/USER_MODE SYS$OUTPUT SYS$NET
   $      SHOW USERS
   $      EXIT

Since SYS$OUTPUT is redirected to SYS$NET, the output is redirected to your
terminal over DECnet.  Task-to-Task communication can be simple (like
Show_Users) or complicated (like programs passing data back and forth).


 Remote Printing
 ~~~~~~~~~~~~~~~
If your DECnet network contains a LAN such as Ethernet, you'll probably have to
share printers with other nodes on the network.  The easiest way to print a
file is to copy it directly to the print device.  This works fine as long as
the device is spooled and set up with world write privileges.  For example:  $
COPY JUNK.TXT BURG::LCA0:  will copy the file JUNK.TXT to the device LCA0: on
node BURG.

Another way to print is to use the DCL PRINT/REMOTE command.  However, the file
must be located on the remote system to use this, which is inconvenient if the
file you're printing is on the local system.  You can still do it though:

   $ COPY JUNK.TXT BURG::[BYNON]
   $ PRINT /REMOTE BURG::[BYNON]JUNK.TXT
      Job JUNK (queue SYS$PRINT, entry 512) started on LCA0
   $ DELETE BURG::[BYNON]JUNK.TXT

 VAXclusters
 ~~~~~~~~~~~
The main purpose of a VAXcluster is high processor ability, shared resources,
and a single security and management area.  There are two basic type of
VAXclusters, heterogeneous and homogeneous, but a mix of the two is possible.
The main difference between these types is how they share resources,
specifically the VAX/VMS OS environment.

The VAX/VMS OS environment is identical on each cluster in a homogeneous
VAXcluster.  This is done by using a common system disk for all the nodes.
User accounts, system files, queues and storage devices are shared, and all of
the computers behave the same way.

In a heterogeneous VAXcluster, the environment on each system is different.
Each VAX has its own system disk, user accounts and system files.  Queues and
storage devices may or may not be shared.  Users can work in different
operating environments, depending on the system they're using.

Usually a VAXcluster is accessed by an Ethernet-based terminal server.  Using
a terminal server, a user can establish a session with any VAXcluster member,
and the connection is identical to that of a directly connected terminal.
However, terminal sessions can support multiple simultaneous sessions to
different nodes.  In the unlikely event that a VAXcluster is set up with
directly connected terminals and you need to access a different system, you
can DECnet via the SET HOST facility.  All VAXcluster systems support DECnet
within the cluster.

VAXcluster members (nodes) often share processing resources through the use
of print and batch queues known as cluster-wide queues, which are used the
same as a normal queue.  The only extra information you need is the queue
name.  A list of all the queues in a cluster can be called up with the DCL
SHOW QUEUE command.  If you submit a job to a cluster-wide queue, you must
insure that the node on which it resides has access to the file you want to
print or the command procedure you want processed.

