dix_help

DIX

  DIX[/qualifiers] filename [/qualifiers]

  This is a program to dump/display/edit records in all types of files.

  -You can select records by key value and number (indexed files) or
     record number (sequential files or relative files).
  -You can display the record-data in raw format (like OpenVMS DUMP) or
     interpreted format. For the interpreted mode you need a description.
     See the help about [DIX/HELP] record format for descriptions.
  -You can use views to combine multiple records from multiple files
     to one "record" (See the help about "views")
  -You can dump/display/edit the record data in four modes.
   1. Screen oriented (using SMG)        (See help about "modes screen_mode").
   2. Screen oriented (using DECwindows) (See help about "modes DECW_mode").
   3. Dump records to a file             (See help about "modes file_mode").
   4. Interactive mode with a powerful scripting language.
                                    (See help about "modes interactive_mode").
  The program supports INDEXED, RELATIVE, DIRECT ACCESS and SEQUENTIAL files.

  The program can open multiple files and multiple descriptions per file.
  A fieldname in a record can contain a pointer to (a key in) another file,
  and you can follow that link to the other file.

  Files are opened READ-ONLY, unless you specify /MODIFY or /WRITE.
  Files can also be opened bypassing RMS (via the /FAST qualifier).
  You may even open modules in a .TLB or .MLB library

  If the first character of the command line is not a /, DIX checks if the
  first parameter (so the start of the line) is (part of) a valid DIX verb. 
  If so line is executed as a DIX command. If there is no match, DIX 
  assumes it is a filename to be displayed/editted in screen mode
  If you define the symbol DIX_NO_AUTO_COMMAND to Y, DIX will assume the
  parameter is a filename.

DIX PARAMETERS


  The first parameter is filename to be "DIX"ed.
  The filename can contain a list of wildcards. If
  you specify /MULTI_FILE DIX will open all files.
  If you do not specify /MULTI_FILE and more than one files matches
  the filename(s), you will be prompted to select one file.

  Parameter 2..8 are optional and contain the optional
  record-search parameters. See the help about "Record_searches"

  The filename can also be specified as a file-id.
  Format: [device:](n1,n2,n3).

  The default for Device: is SYS$DISK:

  So $ DIX (10,20,0)         Will open the file with fileid (10,20,0) on the
                             disk specified by SYS$DISK
     $ DIX mydisk:(10,20,0)  Will open the file with fileid (10,20,0) on
                             disk "mydisk"

  DIX will translate the disk/fileid to a filename, and that filename is used
  for the determination of the description.

  If you specify the filename as module@[library] or as [library](module),
  DIX will read the module "module" from the (.TLB or .MLB) file "library".
  Both module and library may contain wildcards.
  If no library is specified, DIX will search SYS$LIBRARY:STARLET.MLB
   and SYS$LIBRARY:FORSYSDEF.TLB (if present) by default.

  There are 2 special names for the library name
     DIX_SYS  : The DIX_DES.TLB file
     DIX_USER : The DIX_DES_USER.TLB file (if present)

  Parameter can also be a dix interactive command. 
   If the symbol dix_no_auto_command is not set to Y, and the command
   line does not start with a /, DIX will insert a /command just before
   the command line. This setting makes the /screen necessary if you want
   to display a file in smg mode 

DIX SETUP


  The following symbols may be handy. 'arch' must be VAX, Alpha or IA64
     and dev:[dir] the place where the image of DIX can be found

   DIX:==$dev:[dir]dix_'arch'                  !default DIX startup in SMG mode
   DXW:==$dev:[dir]dix_'arch'/decw             !dix startup in DECwindows  mode
   DXI:==$dev:[dir]dix_'arch'/inter            !dix startup in interactive mode
   DXC:==$dev:[dir]dix_'arch'/command          !dix startup for one line command
   DXP:==$dev:[dir]dix_'arch'/plot             !dix startup for T4 plotting
   DXD:==$dev:[dir]dix_'arch'/command dir/fast !dix startup fast directory search (like DFU)

   DIX also supports a number of symbols, that are checked on startup

   DIX_DEBUG     : Y : All debug classes enabled at level 0 to the file DIX_DEBUG.DBG
                   0..9 : The same as above, but the level is set to 0..9
                   Any other value will be parsed, and debug classes,
                      level and output will be set.
                    See the help about INTERACTIVE SET DEBUG

   DIX_STATISTICS: If defined as Y, DIX will print a line on exit with the
                          elapsed, CPU, bufio, dirio, faults (like ^T)
   DIX_ENABLE_P2 : If defined as Y, DIX will make use of P2 data (Alpha, IA64).
                     This is still experimental, so you must enable it.

   DIX_FAKE_ARCH : Override the current architecture (VAX/Alpha/IA64)

   DIX supports a number of logical names

   DIX_HELP       : May point to the DIX_HELP.HLB file
                      The default place is the same directory as the image
   DIX_PLOT_SETUP : May point to the dix_plot_setup file.
                      The default name is DIX_PLOT_SETUP and the default is
                        SYS$LOGIN:.SETUP
   DIX_DES        : May point to the system-wide description file.
                      The default name is DIX_DES and the default is
                        same_dir_as_image:.TLB
   DIX_DES_USER   : May point to the user defined description file.
                      The default name is DIX_DES_USER and the default is
                        SYS$LOGIN:.TLB
   DIX_INI        : Set the name for the initialisation file. By default
                     this file is SYS$LOGIN:DIX_INI.INI. You can also
                     specify the file via the /startup qualifier.
   DIX_DECENT     : Set the name of the decent setup file,
                     By default same_dir_as_image:.setup
   DIX_NO_AUTO_COMMAND : Set this symbol to Y to disable the automatic 
                         insertion of /command for command lines starting
                         with a valid dix verb

DIX MODES


  DIX can operate in 9 modes, 3 are interactive, they let you change the
  records (if you specified /modify)

  The interactive modes

   /SCREEN_ORIENTED : DIX will display data full screen via the SMG routines
                      and lets you look at the record and possibly modify it.
   /DECW_ORIENTED   : DIX will display data full screen via the DECwindows routines
                      and lets you look at the record and possibly modify it.
   /INTERACTIVE     : DIX enter interactive (line) mode. This mode has a powerful
                      scripting language, and can also be used in BATCH.

  The non-interactive commands

   /FILE_ORIENTED : DIX will behave like DUMP, no interaction possible
   /INFO          : DIX will display information about the file.
   /VERIFY        : DIX will verify an indexed file
   /ANALYZE       : DIX will analyze an indexed file with lots of info
   /COMMAND       : DIX will take the argument and process it
   /PLOT          : DIX will take the argument and process it as PLOT/T4 'arg'

  The qualifiers /SCREEN, /DECWINDOW, /FILE,    /INTERACTIVE, /INFO
                 /PLOT    /VERIFY,    /ANALYZE, /COMMAND

   must be entered just after the DIX verb.

  Three more major-qualifiers qualifiers can be given

   /HELP    : Display help
   /DEMO    : Display demo pages
   /VERSION : Display the version, link date of DIX (/ALL for all modules)

DIX MODES ANALYZE

  DIX/ANALYZE [/DISPLAY=(option,option..)] [/VERBOSE=level]

  option can be

   KEY=n           : Analyze only key
   LEVEL=n         : Analyze only key level 'n'
   LEVEL="+n"      : Analyze only the top 'n' key levels
   LEVEL=-n        : Analyze only the lowest '-n' levels
   [NO]DATA        : Analyze the data buckets too. Since this can take a lot
                     of time, this is not the default.
   [NO]SIDR        : Display the SIDR records, this is the default
   [NO]KEYBUCKETS  : Display the buckets in the key tree, this is the default
   OUTPUT=filename : If verbose is >0, the extra output can be redirected
                     to another file. The normal output will be in the file
                     specified with /OUTPUT=filename
   START=n         : Start analysis at bucket 'n' in chain, default=0
                      (n may be negative, last but 'n' bucket of the chain)
   END=n           : End analysis at bucket 'n' in chain, default is whole chain
                      (n may be negative, last but 'n' bucket of the chain)

   /VERBOSE=level

  The verbose qualifier defines the amount of output

  VERBOSE=0    : Just the normal output, see below
  VERBOSE=1    : Print out the buckets read
  VERBOSE=2    : Detail 1 and the bucket header info
  VERBOSE=3    : Detail 2 and SIDR records and the data records
  VERBOSE=4    : Detail 3 and the SIDR pointers
  If VERBOSE>0, the output of the detail option can be redirected to another
                 file. See the OUTPUT= option
  Examples:

  $ DIX/ANA/DISP=DATA DUPKEY.IDX
  Analysis of key 1                             !analysis info for key 1
   Type STG, flags %X05:Duplicate,Nullkey=%X30
   Idx area 2, Level1 area 2, bucketsize 1, Fill 512, Level 1, rootvbn 18
   Data area 2, bucketsize 1, Fill 512, VBN 17
   Keysize 4, number of keysegments 1, minimum recordsize 9
    Segment 1, Position     5, size   4
   Level 1                                      !level 1 (toplevel) for key 1
    Start vbn            : 18, #records = 1, #buckets 1(1 blocks), 100% contiguous
     Bytes in            : Overhead: 17, Keyvalues: 4, Pointers: 2, Bucket fill: 5%
     Bytes in keys       : 4(compressed), 4(uncompressed) = 100%
   Analysis of SIDR buckets
    Start vbn            : 17, #buckets 1(1 blocks), 100% contiguous
     Bytes in            : Overhead: 14, Keyvalues: 12, Pointers: 43, Bucket fill: 16%
     Bytes in keys       : 12(compressed), 12(uncompressed) = 100%
     Records             : Keyvalues: 3, RFA's: 7, Deleted: 0
     Maximum SIDR length : 3, average 2, max SIDR length for key value:2222
     Average key length  : 4, Average data length 14
  Analysis of key 0                             !analysis for key 0
   Type STG, flags %X81:Duplicate,Data compress
   Idx area 1, Level1 area 1, bucketsize 1, Fill 512, Level 1, rootvbn 13
   Data area 0, bucketsize 1, Fill 512, VBN 4
   Keysize 4, number of keysegments 2, minimum recordsize 4
    Segment 1, Position     2, size   2
    Segment 2, Position     0, size   2
   Level 1                                      !level 1 (toplevel) for key 0
    Start vbn            : 13, #records = 1, #buckets 1(1 blocks), 100% contiguous
     Bytes in            : Overhead: 17, Keyvalues: 4, Pointers: 2, Bucket fill: 5%
     Bytes in keys       : 4(compressed), 4(uncompressed) = 100%
   Analysis of DATA buckets
    Start vbn            : 4, #buckets 1(1 blocks), 100% contiguous
     Bytes in            : Overhead: 14, Keyvalues: 44, Data: 178, Bucket fill: 70%
     Bytes in keys       : 44(compressed), 44(uncompressed) = 100%
     Bytes in datarecords: compressed 178, Uncompressed 145, = 123% (without primary key)
     Datarecords         : Valid 11, #Deleted 0, #RRV 0
     Max data length     : 18, Average = 17
     Maximum DUP keylen  : 1

  The contiguousness of the areas are not very significant except for the
  SIDR and data area. They are determined in the following way.

  If the next bucket of a bucket is adjacent to the current buffer, 5 is added
  If the next bucket lies within a bucketsize next to the current buffer, 4 is added
  If the next bucket lies within 2 bucketsizes next to the current buffer, 3 is added
  If the next bucket lies within 3 bucketsizes next to the current buffer, 2 is added
  If the next bucket lies within 4 bucketsizes next to the current buffer, 1 is added
  If the next bucket lies before the current bucket, 0 is added
  The total is multiplied by 100 and divided by the 5*(bucketcount-1). This gives a
  number between 0 and 100.

  If all buckets are adjacent in ascending order we get 100%.

DIX MODES COMMAND


  DIX/COMMAND dix_command

  Take the command line and execute it. This is a one-line interactive mode
  Command may be a list of commands via the ;command;command construct

  Each ; must be preceded by a space, or it could be interpreted as part of a filename

DIX MODES DECW_MODE


  If you specify /DECWINDOW, the program will work full screen
  using DECwindows, and you can look at the data, and possibly
  modify it (see /MODIFY qualifier).

  If you have a description present
   1. You can modify fields (if in modify mode) by entering a right arrow,
      Enter, or any printable character. You are in field modifying mode until
      you enter an Enter. After you type Enter DIX checks if the typed data
      is valid for that field(-type) and restores the original value if not.
      The record will not be updated until you type the DO key.

   2. For fields that contain field-names, you can also enter a key_getfields
      key (default PF1-G) and modify/enter the field value.

   3. If you type a key_contdis (default F8) DIX will open a popup-display
      containing information about the description of the current line, and
      update it when you move between lines. If you type key_contdis again
      DIX will remove the display.

   And lots more, see the help (Default PF2 or Help)

  on the command line you may set some settings for the DECwindows displays
  See the help in /attributes.

 Syntax
  DIX/DECWINDOW filespec[/qualifiers] [searchparameter] [searchparameter] ..

  The searchparameter is optional, see the help about [DIX/HELP] record_search
  Up to 7 (search) parameters are supported. DCL allows 8 parameters, and
  the first one is the filename.

DIX MODES DEMO


  DIX will enter demo mode, You will be show (some of) the capabilities
  of DIX.

DIX MODES FILE_MODE


  If you specify /FILE the program will dump the data to a file or the
  terminal (see /OUTPUT qualifier) in either interpreted or raw dump mode.

 Syntax
  DIX/FILE filespec[/qualifiers] [searchparameter] [searchparameter]

  The searchparameter is optional, see the help about [DIX/HELP] record_search
  Up to 7 (search) parameters are supported. DCL allows 8 parameters, and
  the first one is the filename.

DIX MODES HELP


  Display the DIX help, you are doing it now
  You can specify arguments for the help. If the first argument is a
  qualifier you must use "'s around the help text, otherwise DCL will get
  confused.
  The following qualifiers are supported for the HELP command, and must
  be entered directly after the HELP command

   /DCL       : Display the help in SYS$HELP:HELPLIB.HLB instead of the DIX help
   /DECWINDOW : Display the help in a DECwindow window. This requires the
                availability of DECwindows and a freeware package FSHELP
                (see below)

  Examples:

  $ DIX/HELP modes              ! Give help about the mode
  $ DIX/HELP modes info         ! Give help about the modes info subtopic
  $ DIX/HELP "/DISPLAY"         ! Give help about the /DISPLAY qualifier. You need
                                  the quotes here
  $ DIX/HELP record_sear/exist  ! Give help about the /exist subtopic in record_sear
  $ DIX/HELP/DCL copy           ! Give help about the COPY command in SYS$HELP:HELPLIB.HLB
  $ DIX/HELP/DECW modes         ! Give the help about modes in a DECwindows display
                                  (if FSHELP is installed)

  DIX will use the LBR$OUTPUT_HELP routine. If you also have the
  FSHELP freeware package installed (available on the same website),
  DIX will use the FSHELP_SHR inclusive a DECwindows interface.

DIX MODES INFO


  The /INFO qualifier will display information about the file(s), including
  information about the keys of an indexed file.
  This information includes name, position, size and type of keys.
  The /INFO qualifier must be the first on the command line.

  If you specify the /FDL qualifier also, DIX will output the info in
  an FDL file. This should give the same output as ANALYZE/RMS/FDL,
  but is does not analyze the data, so it is a lot faster for large files
  (but cannot be used for optimizing)

  Example:
  $ DIX/INFO SYSUAF
 Information about file KXSYS_DISK:[VMS_COMMON.SYSEXE]SYSUAF.DAT;2
 File
  Opened for       : Normal I/O,Fast I/O(Default)
   Fast Blocksize  : 1024
   Fast Multibuffer: 4
  Organization     : Indexed
  Lock mode        : Normal
  Record format    : Variable
  Creation   date  : 25-NOV-2003 17:01:26.28
  Expiration date  :  5-FEB-2007 08:15:44.15
  Backup     date  : <No backup recorded>
  Revision   date  :  9-AUG-2006 08:15:44.15
  File id          : (66004,27,0)
  File owner       : [SYSTEM] = [1,4]
  File protection  : S:RWED, O:RWED, G:RE, W:
  Globalbuffercount:          0
 Record
  Record attribute : NONE
  Max record size  :       1412
  Longest record   :          0
 Allocation
  EOF block        :         72 (FFB =    0)
  Allocated blocks :         72
  Bucketsize       :          3
 Areas
  Area Allocation bucketsize  extension
     0         72          3         10
 Keyinformation
            D C I K D  N               ..INDEX. ..DATA..
   Nr Type  u h c c c  u Lvl   Pos Siz Area Bkt Area Bkt Field
            p g p p p  l                 Nr siz   Nr siz
    0 STG   N N Y Y Y NO   1     4  32    0   3    0   3 UAF$T_USERNAME
    1 BIN4  Y Y N N N NO   1    36   4    0   3    0   3 UAF$W_MEM,UAF$W_GRP,UAF
                                                         $L_UIC
    2 BIN8  Y Y N N N NO   1    36   8    0   3    0   3 UAF$W_MEM,UAF$W_GRP,UAF
                                                         $L_UIC,UAF$L_SUB_ID
    3 BIN8  Y Y N N N NO   1    44   8    0   3    0   3 UAF$Q_PARENT_ID(1),UAF$
                                                         Q_PARENT_ID(2)
 * means the current file

  The tags in the keyinformation are
    Nr  : The key number
    Type: The key type (Descending keys have D in front)
    Dup : This key allows duplicate
    Chg : This key is changeable
    Icp : Key values are compressed in index buckets
    Kcp : Key values are compressed in data buckets
    Dcp : Data values are compressed (in data buckets)
    Nul : The null-key value (in hexadecimal) for this key or NO
    Lvl : The tree depth for index buckets
    Pos : The starting position of the key (multiple lines if more segments)
    Siz : The size of the key (multiple lines if more segments)
    Index:
     Area_nr : The area for the index buckets
     Bktsize : The bucket size for the index buckets
    Data:
     Area_nr : The area for the data buckets
     Bktsize : The bucket size for the data buckets

  If DIX has a description for this file (as above) DIX will also
   display the fields that are part of this key

    An example of an FDL command

    $ DIX/info/fdl/out=test.fdl test.dat

DIX MODES INTERACTIVE_MODE


  If you specify /INTERACTIVE, DIX will enter interactive mode
  and lets you display/modify fields. This mode works in BATCH too,
  so you can create command-files and use DIX to display/modify fields.
  See also the /INTERACTIVE qualifier.

![Interactive mode]DIX /INTERACTIVE

  Syntax
   DIX/INTER [@file] [filespec] [/qualifiers] [searchparameter] ..

  @file maybe a file containing DIX commands. If specified it must
   be the first parameter. The default filename is [].DIX
   This file can also be specified via the /script qualifier.

  Filespec is optional. If you do not specify a filespec DIX will start
  without any file open. You can then later open/close files with the
  interactive commands OPEN and CLOSE.

  Example:

  $ DIX/INTER @mycommands SYSUAF/MODIFY
  $ DIX/INTER SYSUAF/MODIFY /script=mycommands

  Will both execute the commands in mycommands[.DIX] and exit.

  The searchparameter(s) is/are optional, see the help about
    [DIX/HELP] record_search

  Since DCL allows 8 parameters, up to 7, or 6 if @file is present,
  searchparameters are supported.

DIX MODES RESTORE_MODE


  If you specify DIX/RESTORE, DIX will continue from the point you
  exited DIX the last time (if you had auto mode enabled then).

  It will open all files you had open, and select the record(s) you
  were processing at that time.
  It will also restore your recall buffer, key definitions for the
  interactive mode, display settings and so on.

  See the SET AUTO, SHOW AUTO, EXIT/[NO]AUTO command in interactive mode.

DIX MODES PIPE


  pipe command [;command [;command]]

  Make a sequence of commands. You can use loops in this statement i.e.
   DIX> pipe for k=1,10 ; show symb k ; end for
   DIX> pipe k=1 ; lp:show symb k ; k=k+1 ; if k <= 10 then goto lp

   the ; must be preceded by a space or it could be part of a filename

  This is handled as a new command procedure level. Any symbols defined
  in the pipe command will be deleted after the pipe is complete.
  If you want to preserve the symbol, declare it with /level=-1

  so
  DIX> ; int a ; a=10 ; say a    !will print 10, and a is deleted
  and
  DIX> ; int a/level=-1 ; a=10 ; say a  !will print 10, but a is still there

  You can replace the PIPE verb by a ;
  so
  DIX> pipe command ; command ; command
  will be the same as
  DIX> ; command ; command ; command

DIX MODES PLOT


  DIX/PLOT filemask/qualifiers

   DIX will execute the PLOT/T4 'filemask/qualifiers'. For more help
   see the INTERACTIVE_MODE PLOT command.
   You can also use the DIX/PLOT/CSV and the DIX/PLOT/PIE command.

DIX MODES SCREEN_MODE


  If you specify /SCREEN , DIX will work in full screen mode
  using the SMG routines, and you can look at the data, and possibly
  modify it (see /MODIFY qualifier).

  If you have a description present
   1. You can modify fields (if in modify mode) by entering a right arrow,
      Enter, or any printable character. You are in field modifying mode until
      you enter an Enter. After you type Enter DIX checks if the typed data
      is valid for that field(-type) and restores the original value if not.
      The record will not be updated until you type the DO key.

   2. For fields that contain field-names, you can also enter a key_getfields
      key (default PF1-G) and modify/enter the field value through a SMG-menu.

   3. If you type a key_contdis (default F8) DIX will open a popup-display
      containing information about the description of the current line, and
      update it when you move between lines. If you type key_contdis again
      DIX will remove the display.

   And lots more, see the help (Default PF2 or Help)

 Syntax
  DIX[/SCREEN] filespec[/qualifiers] [searchparameter] [searchparameter] ..

  The searchparameter is optional, see the help about [DIX/HELP] record_search
  Up to 7 (search) parameters are supported. DCL allows 8 parameters, and
  the first one is the filename.

DIX MODES VERIFY

  DIX/verify indexedfile [qualifiers]

  Check all buckets of an indexed file for corruption.

  Supported qualifiers are
   /verbose=n       : n=0..4 Output more info during the check
   /output=filename : Print errors to file

  DIX can be used to detect and repair corrupt indexed files
  See the deeper help

  BE VERY CAREFUL.
  ===============
  Always make a copy of the corrupt file and edit the copied file.

DIX MODES VERIFY Repairing_corrupt


  If a file has a corrupt bucket, You may use DIX to repair the file
  or get as many records out of it as possible.

  If the bucket is not a data bucket, DIX using Fast I/O can read all records
  and copy them to a new file.

  Example:
  We have a file with a corrupt index bucket (it was patched)

  $ DIX/info/verify sysu.dat/verbose=3
  Information about file USER50:[STUBBF.PROGRAMS.DIX.TEST]SYSU.DAT;2
  ...
   Reading Prologue block 1
   Checking area 0
    Reading area admin offset 0 in block 3
    Checking area fields 0
   Checking key 0
    Reading key admin block offset 0 in block 1
    Checking key fields for key 0
    Checking key tree for key 0
  %DIX_RMS-W,Bucket 7 level 1 Check bytes different, first 0A, last 0E, previous bucket 0
   Checking key 1
    Reading key admin block offset 0 in block 2
    Checking key fields for key 1
    Checking key tree for key 1
   Checking key 2
    Reading key admin block offset 102 in block 2
    Checking key fields for key 2
    Checking key tree for key 2
   Checking key 3
    Reading key admin block offset 204 in block 2
    Checking key fields for key 3
    Checking key tree for key 3

  This tells us that a bucket is corrupt in the primary key chain at level 1.
  Since this is NOT a data bucket we can use DIX to get all records from this
  file and copy it to a new file using

   $ DIX/interactive sysu.dat
    %RMS-F-CHK, bucket format check failed for VBN = 7
    %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX.TEST]SYSU.DAT;2/NOMOD

   DIX (RMS) is telling us that the file has a corrupt bucket (the root bucket
   for the primary key. RMS cannot process this file, so we try again using
   Fast I/O

   $ DIX/interactive sysu.dat/fastio
   %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX]SYSU.DAT;2/NOMOD
   DIX> WRITE/ALL/LOG new_file.dat
   %DIX-I-RECAPP, 62 records written to NEW_FILE.DAT

   So now we have a copy of the file with all record. Now use convert to
   make the file indexed again, and we have all records back

  If the corrupt bucket IS a data bucket you have two options.

  1. Use DIX to repair the corrupt bucket.
  2. Use DIX to skip the data bucket.

DIX MODES VERIFY Repairing_corrupt Repairing_bucket


   Now suppose the corrupt bucket is the in one of the data buckets.
   RMS as well as Fast I/O will follow the chain of the data-buckets and
   will find the corrupt bucket, so we cannot use the previous method.
   Below is the technique to repair a DATA-bucket (if not too heavily damaged)

   $ DIX/interactive [.test]sysu.dat
   %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX]SYSU.DAT;2/NOMOD
   DIX> ne
   DIX> ne
   %RMS-F-CHK, bucket format check failed for VBN = 55
   %RMS-F-CHK, bucket format check failed for VBN = 0

   This tells us we have a corrupt bucket at bucket 55. We need to know the
   bucketsize of the data-buckets
    $ DIX/info sysu.dat  !show key info of the file
    Keyinformation
     .....
             D C I K D  N               ..INDEX. ..DATA..
    Nr Type  u h c c c  u Lvl   Pos Siz Area Bkt Area Bkt
             p g p p p  l                 Nr siz   Nr siz
     0 STG   N N Y Y Y NO   1     4  32    0   3    0   3 <== this 3 is the
                                                              data bucketsize
   ...
   Enter DIX in block mode for this bucket (using the built-in $BUCKET
        description)

   $ DIX/INT/MODIFY /BLOCK=3/record=55/descr=$bucket SYSU.DAT
   %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX]SYSU.DAT;2/MOD
   %DIX-I-MESSAGE, "Data bucket"
   %DIX-I-MESSAGE, "Check and Check1 not equal, corrupt bucket"
   %DIX-I-USINGDES, Using description DSA50:[STUBBF.PROGRAMS.DIX]DIX_DES.TLB;135($BUCKET)
   DIX> !DIX tells us the bucket is corrupt (the check and check1 are unequal)
   DIX> examine *CHECK*
      0.0|CHECK    |19
      2.0|CHECK_VBN|55
   1535.0|CHECK1   |17

   And indeed : check and check1 are not equal. We can patch them to be equal

   DIX> DEPOSIT CHECK=17
   %DIX-I-MESSAGE, "Data bucket"        !DIX tells us it is data bucket
   DIX> UPDATE

   If this was the only problem, the bucket is now correct.
   You may test to see if the rest of the buckets looks OK
   DIX> EXAMINE

   If this looks fine, all is done. If not we need to skip this data bucket
   from the data-bucket chain, so see the other help (skipping bucket)

DIX MODES VERIFY Repairing_corrupt Skipping_bucket


   Now the bucket is very corrupt and does not contain any valid data.
   We can use DIX to skip the bucket from the data-chain. This means
   we use a bucketful of records, not perfect but better than nothing at all.

    $ DIX/info/verify sysu.dat
    Information about file USER50:[STUBBF.PROGRAMS.DIX.TEST]SYSU.DAT;2
    %DIX-E-VERIFY, Bucket 55, level 0 Check bytes different, first 13, last 11,
            previous bucket 4
    %DIX-E-VERIFY, Data bucket 55 points to bucket 33,but the upper key bucket
            points to 34
    %DIX-S-VERIFY, Using pointer from index bucket 7 to bucket 34
    %DIX-E-ERRSEEN, Error seen during verify

   So bucket 55 has two problems
    1. The check bytes do not match
    2. The next_bucket pointer (33) is probably incorrect, since the above
       lying index buckets points to bucket 34, and this index bucket seems
       to be valid.
   The previous bucket of 55 is 4, so now we need to patch bucket 4 to point
   to bucket 34, effectively skipping bucket 55.
   We still know the bucket size for data=3

   $ DIX/INT/MODIFY /BLOCK=3/record=4/descr=$bucket SYSU.DAT
   %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX.TEST]SYSU.DAT;2/MOD
   %DIX-I-MESSAGE, "Data bucket"
   %DIX-I-USINGDES, Using description DSA50:[STUBBF.PROGRAMS.DIX]DIX_DES.TLB;135($BUCKET)
   DIX> examine next_bucket
      8.0|NEXT_BUCKET>|55

   Indeed bucket 4 points to bucket 55, we now set its forward to bucket 34

   DIX> deposit next_bucket=34
   DIX> UPDATE
   DIX> REWIND
   DIX> WRITE/ALL/LOG x.x
   %DIX-I-RECAPP, 58 records written to x.x

   Now we have copied all (58 and not 62) records to x.x, and recovered most of
   the records

DIX MODES VERSION


   DIX/VERSION [/ALL][/SYMBOL] [/OUTPUT=file]

   Display the version and link date of DIX.

   If /ALL is specified, versions and creation dates of all DIX modules
          will be displayed.

   If /SYMBOL is specified DIX will define the following symbols
      DIX_VERSION   : Containing the version e.g. "7.1"
      DIX_LINK_DATE : Containing the link date e.g. "23-AUG-2008 10:12.19.45"
      If /ALL is also specified, DIX will also define the following symbols
      DIX_MODULE_COUNT    : Count of modules
      DIX_MODULE_NAME_'n' : The name of the module 'n'
      DIX_MODULE_DATE_'n' : The creation date of the module 'n'

       with n=1..dix_module_count

DIX FILETYPE_SUPPORT


  The following file types are supported.

DIX FILETYPE_SUPPORT SEQUENTIAL


  For SEQUENTIAL or RELATIVE files the record selection is based on
  the /RECORD qualifier. If the start record is nn, the first nn-1
  records will be skipped, this may take some time.
  If the record format is fixed, DIX can read the record directly without
  skipping the previous records.

DIX FILETYPE_SUPPORT SEQUENTIAL /RECORD

  /RECORD=nr

  You can specify the starting record number. For indexed files you can
  also use the /key to go to the 'n'th record on key 'key'.
  If not specified the program starts at the first record.

DIX FILETYPE_SUPPORT RELATIVE_FILES


  You can specify a record number. DIX will rewind the file and skip
  'recordnumber'-1 records.
  You can also specify a cell number with the /EQ, /GE, /GT
  In this case the access will be direct.

DIX FILETYPE_SUPPORT RELATIVE_FILES /RECORD

  /RECORD=nr

  You can specify the starting record number.

DIX FILETYPE_SUPPORT RELATIVE_FILES /EQ

  /EQ=value

  Look for a record with a cell number EQ the specified value.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT RELATIVE_FILES /GE

  /GE=value

  Look for a record with a cell number GE the specified value.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT RELATIVE_FILES /GT

  /GT=value

  Look for a record with a cell number GT the specified value.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT RELATIVE_FILES Keyvalues


  When specifying a record number or a cell number with the
  /record,/eq,/ge,/gt DIX will convert the text to a number.

DIX FILETYPE_SUPPORT INDEXED_FILES


  For INDEXED files the record selection is based on the
  /EQ or /GE or /GT or /LE or /LT and the /KEY qualifier.
  If the key has Ascending attributes, the /EQ, /GE or /GT qualifiers
  must be used, and if the key is descending, the /EQ, /LE or /LT qualifiers.
  Information about the key types can be obtained via the /INFO qualifier.

DIX FILETYPE_SUPPORT INDEXED_FILES /RECORD

  /RECORD=nr

  You can specify the starting record number. You can also use the /key
  to go to the 'n'th record on key 'key'.

DIX FILETYPE_SUPPORT INDEXED_FILES /KEY

  /KEY=nr

  Look for the keyvalue on the specified key. The default is the
  primary key (0).
  If none of the LT, LE, EQ, GE, GT options is specified, the program
  will start with the first record on the specified key.

DIX FILETYPE_SUPPORT INDEXED_FILES /LT

  /LT=value

  Look for a record with keyvalue LT the specified value.
  Information about the key types can be obtained via the /INFO qualifier.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT INDEXED_FILES /LE

  /LE=value

  Look for a record with keyvalue LE the specified value.
  Information about the key types can be obtained via the /INFO qualifier.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT INDEXED_FILES /EQ

  /EQ=value

  Look for a record with keyvalue EQ the specified value.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT INDEXED_FILES /GE

  /GE=value

  Look for a record with keyvalue GE the specified value.
  Information about the key types can be obtained via the /INFO qualifier.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT INDEXED_FILES /GT

  /GT=value

  Look for a record with keyvalue GT the specified value.
  Information about the key types can be obtained via the /INFO qualifier.
  The values will be converted by DCL to uppercase, unless enclosed in
  quotes. See also the help about keyvalues.
  If DIX is in case_sensitive mode, DIX will not uppercase the value.
  See the help about "set case "

DIX FILETYPE_SUPPORT INDEXED_FILES Keyvalues


  When specifying a keyvalue with /lt, /le, /eq, /ge, /gt the program
  will check for the key type (in the file). For binary key types
  the program will convert the data from ASCII to binary.
  For string types you can enter binary values via the %DD syntax
  where DD are hexadecimal digits (%% will enter one %).
  See the conversion options below

DIX FILETYPE_SUPPORT INDEXED_FILES Keyvalues INT2_conversion


  INT2 values can only be specified as integers.

DIX FILETYPE_SUPPORT INDEXED_FILES Keyvalues INT4_conversion


  INT4 values can be specified in 3 ways
   1. A normal integer.
   2. A number with another radix in two formats
          'DDDD'F with F : X (hexadecimal), O(octal), D(decimal), B(binary) or Rn[n]
       or %Fddddd with F : X (hexadecimal), O(octal), D(decimal) or B(binary)
   3. A Date which will be converted to DATE*4 format.
   4. A OpenVMS Identifier
   5. A UIC e.g. [SYSTEM]
   6. An ASCII string "ABCD"

DIX FILETYPE_SUPPORT INDEXED_FILES Keyvalues INT8_conversion


  INT8 keyvalues can be specified in 3 ways
   1. One big integer up to 18 characters
   2. Two INT4 values separated by a . (e.g. 10.20, see INT4 conversion)
      (e.g. SYSTEM.1-jan-1991)
   3. A date string (e.g. 1-apr-1991).

DIX FILETYPE_SUPPORT VFC_FILES


  A VFC file is a sequential file with a fixed prefix. You will normally
  see this type of file from the DCL OPEN statement. This will generate
  a VFC file with a 2 byte header, that is used for carriage control.
  But you can also create your own VFC file with other sizes (up to 255)
  for other meanings.

  DIX will display the data from the normal record in one window,
  and the VFC data in another (in screen mode), or lets you
  display the data via EXAMINE/VFC (in interactive mode).
  The file mode can also display the data when you specify
  /DISPLAY=(all) or /DISPLAY=VFC (see the help about [DIX/HELP] "/DISPLAY")

  The DEPOSIT/VFC will change data in VFC buffer (in interactive mode)
  and the PF1-Y command switches from normal data to VFC data in screen mode.

DIX DISPLAY_MODES


  DIX can work either in RAW dump format or INTERPRETED
  (see the /DESCRIPTION qualifier).

DIX DISPLAY_MODES RAW_DUMP


  In the RAW dump mode the dump is equal to the OpenVMS DUMP format.
  It is used if no description file can be found, or if the /RAW
  qualifier is specified.

  The display is split into two parts.
  The left part is the data (byte, word, longword) in decimal or hexadecimal.
  The right part is the data in ASCII (if printable).

  In RAW dump mode the following qualifiers can be used.

DIX DISPLAY_MODES RAW_DUMP /BYTE

  The data will be dumped in bytes. See also the /WORD and /LONG and /UNSIGNED qualifiers.

DIX DISPLAY_MODES RAW_DUMP /WORD

  The data will be dumped in words. See also the /BYTE and /LONG and /UNSIGNED qualifiers.

DIX DISPLAY_MODES RAW_DUMP /LONG

  The data will be dumped in longwords. See also the /BYTE and /WORD and /UNSIGNED qualifiers.
  This is the default.

DIX DISPLAY_MODES RAW_DUMP /UNSIGNED

  The data (if not in /HEX mode) will be interpreted as unsigned.

DIX DISPLAY_MODES RAW_DUMP /HEX

  Display the data in hexadecimal (Default).
  See also the /BINARY,/OCTAL,/DECIMAL qualifiers.

DIX DISPLAY_MODES RAW_DUMP /DECIMAL

  Display the data in decimal.
  See also the /HEX,/BINARY,/OCTAL qualifiers.

DIX DISPLAY_MODES RAW_DUMP /OCTAL

  Display the data in octal.
  See also the /HEX,/BINARY,/DECIMAL qualifiers.

DIX DISPLAY_MODES RAW_DUMP /BINARY

  Display the data in binary.
  See also the /HEX,/OCTAL,/DECIMAL qualifiers.

DIX DISPLAY_MODES INTERPRETED_DUMP


  In the interpreted mode, the program will try to display the fields
  of a record. This mode requires a description file (see the /DESCRIPTION)
  This is the default if a description can be found.
  Descriptions can be in files (default 'filename'.DES) or a text library.

  DIX will look for a description file in the same directory as the data file
  DIX will look for a file in the current directory.
  DIX will look for a module in the DIX_DES.TLB file (system_library)
     (see the help for the [DIX/HELP] "/SYSTEM_LIBRARY" qualifier)
  DIX will look for a module in the DIX_DES_USER.TLB file (user_library)
     (see the help for the [DIX/HELP] "/USER_LIBRARY" qualifier)
  For details see /DESCRIPTION.

  If no description can be found (and you did not specify /NODES),
   DIX will load a default description
        union
          map
            bytearr*(32765) $bytes
          end map
          map
            character*32765 $line
          end map
          map
            character $chars(32765)
          end map
        end union
   You can reference (part of) these fields, but DIX will not display
    the fields with the examine command or screen mode display
    DIX> say Examine      ! Will display in raw mode
    DIX> Say $line        ! Will display the field $line
    DIX> say $line{10:20} ! Will display elements 10:20 of $line

DIX DISPLAY_MODES INTERPRETED_DUMP /ALL


   If the /ALL is given, all matching descriptions will be used.
   If /ALL is not given, only the first match will be used.

   The search order is
   1. The .DES file in the same directory as the datafile
   2. The .DES file in the current directory
   3. Entries in user_library (if present)
   4. Entries in system_library (if present)

DIX DISPLAY_MODES INTERPRETED_DUMP /DESCRIPTION

  /DESCRIPTION[=name[,name]]

  Give the name of a record description file(s) or module.
  The format of description file/module is described in the RECORD_FORMAT help.
  If the /DESCRIPTION qualifier is given without the filename, the program will
  look for a file with a filename as the input file, but with the extension
  .DES. DIX also searches the Text library DIX_DES (with default file
  "IMAGE_DIRECTORY".TLB), so the text library will be searched
  in the same directory as the DIX image (but you can redefine the
  logical name DIX_DES to any text library) for a module with the name that
  matches the filename of the datafile. A match can be on device, directory,
  name and extension. This key may define multiple fields separated by a |.
  If there are multiple field, any field may match.
  DIX also supports a user defined library. DIX searches for the file
  DIX_DES_USER with default SYS$LOGIN:.TLB.

  Normally DIX will stop as soon as a match is found, but if /ALL is given
  all matching descriptions will be used.

  Example:
  DIX MYDEV:[MYDIR]MYDATA.MYEXTENSION [/DES]
  1. DIX searches in the current directory for the file MYDATA.DES
  2. DIX searches for a description file MYDEV:[MYDIR]MYDATA.DES
  3. DIX searches DIX_DES_USER.TLB for a module that matches the name
     MYDEV:[MYDIR]MYDATE.MYEXTENSION. Empty parts of the module name match.
     So a module with the name *MY*, .MYEXTENSION, *:[*]*.* will all match.
  4. DIX searches DIX_DES.TLB for a module that matches the name
     MYDEV:[MYDIR]MYDATE.MYEXTENSION. Empty parts of the module name match.
     So a module with the name *MY*, .MYEXTENSION, *:[*]*.* will all match.

  The first or all (/ALL specified) matches will be loaded and can be used.

   Example for multiple fields:

   Suppose the key is ".BCK|.SAV". This description will match files
   *.BCK and *.SAV.

   To insert a module in one of the text libraries you can i.e. use :

   $ LIBRARY/REPLACE DIX_DES.TLB backupdes.txt/MODULE=".BCK|.SAV"

DIX Views


 DIX can use Views. A View is a way to connect multiple records in
  multiple files to a single entity. With DIX you can display
  and modify the accumulated data as one record.

  A view is a module in the DIX_DES.TLB file (or a text file) that contains
  instructions to build the record from the various records in various files.
  The name of the module is "VIEW#view_name". The syntax of "view_name" is
  the same as that of the description records. In the examples is a view
  for a directory entry. The description has the module name ".DIR" and the
  view has the module name "VIEW#.DIR"
  If you use a file, the default file type is ".VIEW".

 You can open a file with a view. Is this view you can select fields from
  this (first) file (FIELD statement), and you can ask DIX to follow links
  to other records in the same or other files (the FOLLOW/BACK statement).

 In order to use a file in a view, it should have a description, since views
  reference fieldnames via the FIELD statement, but if you do not have
  a description you can still use the RANGE command.

 If you start DIX, you may specify the /VIEW[=namemask] after the file you
  want to "DIX". You can also use the /follow qualifier to create a
  simple "follow all" view. See the help about /follow

 DIX does support modification of views, but only in a limited way.
  The fields that may be modified must have all of the following
    a. Be fixed AND
    b. Not change the link to another file/record

  This restriction may be lifted in a future release.

DIX Views Examples


  Below are some examples of views.

DIX Views Examples Example_dir


  The following example is the view for a directory entry, and all of the
  file headers up to the [000000] directory. The view will only display the
  name fields in the file headers.

        field verslim                   !examine the version limit
        field name                      !examine the name
        follow v(1).fileid              !follow the link to the file header
                                        !of the file
        loop                            !loop
          field *_filename              !examine the name in ODS-5 part
          field fnam                    !and in ODS-2 part
        test (file_id <> backl_fid)     !stop if fid=backl_fid
          follow backl_fid              !follow link to parent
        end loop                        !end of loop

   The file header for the 000000.DIR directory has a fid of (4,4,0) and
   a back_link (to its parent directory) of (4,4,0) too.
   We assume the VIEW#.DIR module in the DIX_DES.TLB file exists and
    contains the above lines.

   $ DIX/FILE/COUNT=1 ALPHA.dir/view
   %Info:Recordnumber = 1 , Recordsize = 84 , RFA=(1,0)
     0|VERSLIM|none                     !from the directory entry
     2|NAME   |DIX_AUTOSAVE_LIBRARY.OBJ !from the directory entry
    27|FNAM   |DIX_AUTOSAVE_LIBRARY     !file header of the .obj file
    47|FNAM   |ALPHA.DIR;1              !file header of its directory
    67|FNAM   |DIX.DIR;1                !"  "    "      "
    87|FNAM   |PROGRAMS.DIR;1           !"  "    "      "
   107|FNAM   |STUBBF.DIR;1             !"  "    "      "
   127|FNAM   |000000.DIR;1             !File header of the 000000.dir file

DIX Views Examples Example_cross


   An example for a set of three files that make a simple cross reference
   system:

  The first file (CROSS_REF.CRF_FILE_NAMES) has the following description
  (.CRF_FILE_NAMES in the system or user text library)
          integer*2    file_nr                          !primary key
          character*60 file_name

  The second file (CROSS_REF.CRF_MOD_NAMES) has the following description
  (.CRF_MOD_NAMES in the system or user text library)
          integer*2    mod_nr                           !primary key
          character*32 mod_name
          integer*2    file_nr/file=.CRF_FILE_NAMES     !link to the filename

  The third file (CROSS_REF.CRF_CROSS) has the following description
  (.CRF_CROSS in the system or user text library)
          integer*2    caller_nr /file=.CRF_MOD_NAMES   !link to module name
          integer*2    called_nr /file=.CRF_MOD_NAMES   !link to module name

  We can define a view for the .CRF_CROSS file (either in i.e. the
   cross_ref.view file or in the VIEW#.CRF_CROSS module in DIX_DEF.TLB)
   (We assume that above named descriptions are in the DIX_DES.TLB file)
   $ DIX/file/count=1 cross_rec.crf_cross/view

    field caller_nr             !examine the value of caller_nr
    follow caller_nr            !follow the link to .CRF_MOD_NAMES
    gosub do_common             !common code for caller_nr and called_nr
    field called_nr             !examine called_nr
    follow called_nr            !follow the link
    gosub do_common             !common code
    exit                        !all done

    do_common:
      field mod_name            !examine the name of the module
      follow file_nr            !follow the link to the filename in .crf_file
      field file_name             !examine the filename
      back                      !pop back to the .CRF_MOD_NAMES
      back                      !pop back to the .CRF_CROSS
    return

   The result will be something like

   %Info:Recordnumber = 1 , Recordsize = 4 , RFA=(4,1)
     0|CALLER_NR|1              !from the CROSS.CRF_CROSS file
     2|MOD_NAME |DIX            !from the .MOD_NAMES file
    34|FILE_NAME|DIX_MAIN.FOR   !from the .FILE_NAMES file
    94|CALLED_NR|2              !from the CROSS.CRF_CROSS file
    96|MOD_NAME |DIX_MAIN       !from the .MOD_NAMES file
   128|FILE_NAME|DIX_MAIN.FOR   !from the .FILE_NAMES file

  Another example for the command line /follow qualifier

   $ DIX/file/count=1 cross_rec.crf_cross/follow=(end,skip)
   %Info:Recordnumber = 1 , Recordsize = 4 , RFA=(4,1)
     0|CALLER_NR|1
     2|CALLED_NR|2
     4|MOD_NAME |DIX
    36|FILE_NR  |1
    38|FILE_NAME|DIX_MAIN.FOR
    98|MOD_NAME_|DIX_MAIN
   130|FILE_NR_1|1
   132|FILE_NAME|DIX_MAIN.FOR

  the /follow=(end,skip) means :
    First display all fields of the record and then follow all
     links in a record and skip key fields

    So the display is created as:
     1: display the fields in .CRF_CROSS (CALLER_NR and CALLED_NR)
       2: Follow the link in CALLER_NR to the .CRF_MOD_NAMES file
         3: Display the fields in .crf_mod_name record with mod_nr=1
          (we do not display the MOD_NR field since the skipkey is given)
           4: Follow the link in FILE_NR to the .CRF_FILE_NAMES
           5: Display the fields in .CRF_FILE_NAMES record with FILE_NR=1
            (we do not display the FILE_NR field since the skipkey is given)
       7: Follow the link in CALLED_NR to the .CRF_MOD_NAMES file
         8: Display the fields in .crf_mod_name record with mod_nr=1
            (we do not display the MOD_NR field since the skipkey is given)
           9: Follow the link in FILE_NR to the .CRF_FILE_NAMES
          10: Display the fields in .CRF_FILE_NAMES record with FILE_NR=1
            (we do not display the FILE_NR field since the skipkey is given)

DIX Views Syntax_for_view


  A view file/module is a text file.
   It may contain the following statements

   - All the control command from interactive mode
          (if/loop/while/case...) including the gosub/return
           but not the @ or CALL statements.
   - FOLLOW   Statement to follow the link to another file
   - BACK     Statement to return to the previous file (level)
   - FIELD    To include fields.
   - RANGE    To include a range of bytes (can be useful if you have no description)
   - OPEN     To open files used to follow the fields. The open is only
              needed if you need to specify file open options others than
              the default options from the follow command (i.e. the description)
   - ECHO     To display comments to the terminal while expanding
   - EXIT     Statement to exit
   - symbol assignments

   For all the statements (except the FIELD and RANGE) the help can be
   found in the help about interactive mode.
   See also the examples

DIX Views Syntax_for_view FIELD_SYNTAX


  If you want to use the FIELD command, the file must have a description

  FIELD[/follow=follow_type][/skipkey][/readonly][/new_name=name] -
          [/quiet] fieldnamemask

  The qualifiers have the following meaning
   /readonly     : Declares the field readonly (if the field is not yet readonly).
   /follow=type  : Let DIX automatically follow all link fields
                   type can be
                      begin : First display the followed fields (and follow them)
                              and then the normal fields
                      end   : First display the normal fields and then
                              the followed fields (and follow them)
                      field : Display the followed fields and follow the
                              link immediately.
   /skipkey       : If /follow is used, this will suppress the keyfields
                    of the followed field, since they will already be
                    displayed in the current field
   /new_name=name : You may override the original name.
                    If the new_name ends with a . ,the original name is
                    appended to the new_name
   /quiet         : If mask does not match any field, DIX will signal a message
                    If you specify /quiet, DIX will not complain

   For an example see the help for the /follow qualifier

   The qualifiers must be specified before the fieldnamemask.
   Fieldnamemask is a wildcard mask to select fields of the current description

DIX Views Syntax_for_view RANGE_SYNTAX


  The RANGE command may be used whether or not the file has a description

   RANGE[/READONLY][/quiet][/name=name]  bpos:[epos]              !epos is default equal to bpos

   /readonly       : Set the field to readonly (if the file is not yet readonly).
   /quiet          : If mask does not match any field, DIX will signal a message
                      If you specify /quiet, DIX will not complain
   /name=name      : Set the name (default=B_'BPOS'_'EPOS')
   /type=fieldtype : Set the fieldtype (default is BYTEARR)

   Include bytes bpos up to and including epos
   If you do not specify epos, DIX will take the default size for the
    selected fieldtype. If you do specify epos, the size (epos-bpos+1)
    must be valid for the selected type
    so "RANGE /type=integer 0:9" will be invalid, since INTEGER*10 is not
    supported.
    and "RANGE /TYPE=INTEGER 12" will insert an INTEGER*4 (the default)

DIX Contents_of_DIX_DES.TLB


  Originally DIX_DES.TLB and DIX_DES_USER.TLB were designed to store
  record definitions (descriptions). In a later phase VIEWS were added.
  To discriminate between views and normal definitions the module names of the
  views (in the .TLB) files are preceded by VIEW#. So a view with a name
  .DIR is stored in the .TLB file with a key VIEW#.DIR and the record definition
  for the same file with key .DIR.

  Later the same technique was used to store DEMO files (DEMO#...)
  Since DIX 8.3 DIX can look up a lot of things in .TLB files so this concept
  has been enhanced. Now the following types of data can be stored in .TLBs

  Suppose the name of the object is MYNAME

  Prefix  Type

  None    The normal record definitions
  VIEW#   The view descriptions to be used via the /VIEW=MYNAME
  DEMO#   The DEMO files to be called in the DIX/DEMO mode
  FUNC#   Function definitions to be used via the LOAD/FUNC MYNAME
  PARM#   Parameter definitions to be used via LOAD /MODULE=MYNAME
  PROC#   Command scripts to be called like @MYNAME@
  STRU#   Structure definitions to be used via load/structure MYNAME

  You can store the definitions yourself via the (example for parameter file)

  $ LIBRARY/INSERT DIX_DES_USER.TLB myparam.txt/module="PARM#MYPARAMS"

  and then use if via the

  DIX> LOAD /modu=MYPARAMS    !DIX will search SYS$LIBRARY:STARLET.MLB
                              !and SYS$LIBRARY:FORSYSDEF.TLB (if is exists)
                              ! for the module MYNAME
                              !and DIX_DES_USER (the user des file, if it exists)
                              !and DIX_DES, the normal description file
                              ! for the module PARM#MYNAME

DIX RECORD_FORMAT_FOR_DESCRIPTIONS


  The description records are in normal ASCII, and can be edited with
  a normal editor. Lines starting with C, c or * are skipped
  (Fortran comment lines) and data after the ! (comment) is skipped.
  Continuation lines are not like the normal Fortran syntax but use the
  DCL syntax (- at the end of the line)
  Spaces are ignored, except within names and types and between the type
  and its qualifier.
  Single lines can be up to 255 chars, and the total line length (including
  continuation lines) can be up to 4096 chars.

  There are 6 types of lines

  -Parameter, value &type  definitions
  -Conditional statements
  -Extra statements
  -Field Declarations.
  -Control Statements
  -Macro definitions

  During the reading of the description, DIX may use symbol substitution.
  See the "INTERACT SET SUBST" help topic.

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Macros

  DIX supports macros. A macro starts with the
   #MACRO NAME [PARAM1 [PARAM2] ...] statement and ends with a
   #ENDMACRO statement

  Macros can be used to repeat a number of lines.
  Inside the macro you specify param1 and param2 by
  'param1' and 'param2'.

  Up to 16 parameters are supported, and macro calls can
  be nested to a depth of 64

  Example:
   A definition of an ACMS file

  ....

  integer*2   menu_offs
  ubyte       menu_leng
  range      (menu_offs: menu_offs+menu_leng)
   character*(menu_leng) menu
  end range

  integer*2   mdb_offs
  ubyte       mdb_leng
  range      (mdb_offs: mdb_offs+mdb_leng)
   character*(mdb_leng) mdb
  end range

  integer*2   init_appl_offs
  ubyte       init_appl_leng
  range      (init_appl_offs: init_appl_offs+init_appl_leng)
   character*(init_appl_leng) init_appl
  end range

  .....

  Above description contains a lot of similar statements.
  They can be replaced by
  ....
 #macro item name                       !define a macro first
  integer*2   'name'_offs               !it contains one parameter
  ubyte       'name'_leng               !name. During expansion
  range      ('name'_offs: 'name'_offs+'name'_leng)
    character*('name'_leng) 'name'      !'name' will be replaced by
  end range                             !the actual argument
 #endmacro                              !(it may be empty)

  item menu             !call the macro and replace 'name' by menu
  item mdb              !call the macro and replace 'name' by mdb
  item init_appl        !call the macro and replace 'name' by init_appl

 ....

DIX RECORD_FORMAT_FOR_DESCRIPTIONS PARAMETER|VALUE|TYPE_DEFINITIONS


  With the parameter definition, you can define parameter values,
  that can be used later in other parameter definitions, or in
  field declarations.
  Syntax:

     PARAMETER [(]name=expression[,name=expression] [)]
     VALUE     [(]name=expression[,name=expression] [)]
     TYPE      name=expression

  PARAMETERs may only be defined once in a description,
  VALUEs may occur multiple times in a description
  TYPEs may be used for fieldnames. See below

  All can be referenced, but none can be updated in interactive mode.

   The expression is first evaluated at read time. If this fails
   (i.e. because of dependencies on field data), DIX will retry the
   evaluation at expand time (when the record data is present)
   You may not redefine a parameter within a description, but you
   may redefine a value

  Examples:

   PARAMETER VALUE1 = 121           ! Will be evaluated at read time
   PARAMETER VALUE2 = (VALUE1*4+12) ! Will be evaluated at read time
   INTEGER*2 Test_field
   PARAMETER (p1=10)                ! Will be evaluated at read time
   PARAMETER (p2=test_field*10)     ! Will be evaluated at expand time
   PARAMETER (p3=F$FILE("RECORDL")) ! Will be evaluated at read time

  The value is evaluated as an expression.
  in the help about "interactive_commands expressions"

![Expressions]DIX INTERACTIVE_COMMAND expressions

  Parameters may also be defined globally. See the interactive command
  ADD PARAMETER. ADD VALUE, ADD TYPE and LOAD

  Example for types:
   Suppose you want to have a text name for two specific values
   You could specify

     INTEGER*4 MYNUMBER [0=zero,5=five]

   But if the string is used more often you can also use

    TYPE nice_name ="0=zero,5=five"  !declare a type
    INTEGER*4 MYNUMBER [#nice_name]  !use a name starting with a #

  These types can be refenced in an expression by
   #[\filetag[\descriptiontag]]typename"fieldname"

  Suppose the definition is in a description with tag MYDES and a file MYFILE
  All of the below will return the value (integer) 5

   #nice_name"five"
   #myfile\nice_name"five"
   #myfile\mydes\nice_name"five"

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Conditional_statements


  You can use the symbol table to conditionally use parts of the
  description. The #IF(DEF), #ELSE, #ELSEIF and #ENDIF are available to
  dis/enable parts of the description.

  The syntax is

  #IF Logical-statement
  #IFDEF symbolname
  #ELSEIF Logical-statement
  #ELSE
  #ENDIF

  The Logical-statement is evaluated using the available DIX-symbols and
  field variables.
  You can define the symbols in interactive mode via the normal
  assignments and in other modes via the /DEFINE=symbol qualifier

  Example (the indentation is just for visibility):

   #IF F$EXISTS("LANGUAGE")
     #IF LANGUAGE="DUTCH"
       CHARACTER*20 DUTCH_NAME
       #MESSAGE "The Dutch version"
     #ELSEIF LANGUAGE="GERMAN"
       CHARACTER*20 GERMAN_NAME
       #MESSAGE "The German version"
     #ELSE
       CHARACTER*20 DEFAULT_NAME
       #MESSAGE "The default version"
     #ENDIF
   #ELSE
     CHARACTER*20 DEFAULT_NAME
     #MESSAGE "The default version"
   #ENDIF

   If you change a symbol that would affect the #IF/#ELSEIF clauses,
   you need to force DIX to re-evaluate the description.
   You can do that via EXAMINE/EXPAND

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Extra_statements


   #MESSAGE text     Display message during expansion

   #COMMENT text     Display text in the fields display

   INCLUDE 'filename[(module)]'

   LOAD file[/module]

   #INSERT NAME [expression]

     Add fieldnames with values computed from other fields. This fields
     will be displayed with offset "blank", and cannot be modified.
     The expression can contain fields, parameters, and values from the description,
     but not symbols, global values/parameters.

    Example:
     In the INDEXF description, the ODS-2 filename is split in two parts.
     at offset 82 are the first 20 character of the filename (field FNAM)
     and at offset 134 the last 66 characters (field REST_FNAM)
     You could specify:
      #INSERT TOTAL_FILENAME [FNAM+REST_FNAM]

      And DIX would add a field with the name TOTAL_FILENAME and as contents
       the total filename (all 86 characters). This fieldname can be used
       and displayed in expressions.
       If you i.e. specified #INSERT TOTAL_FILENAME [F$TRIM(FNAM+REST_FNAM)]
        DIX would trim the trailing blanks

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Extra_statements INCLUDE


  This allows you to include a file (or a module in a file)
  Since this is a typical Fortran statement, Fortran defaults are used

  formats

   INCLUDE 'filename'        Include a file, default filename = SYS$DISK:[].FOR
   INCLUDE '(module)'        Include a module from a file, default library
                             is SYS$LIBRARY:FORSYSDEF.TLB
   INCLUDE 'library(module)' Include a module from a file, in .TLB file library

   Form this file /module ONLY the parameters will be loaded
    See also the help about interactive mode LOAD

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Extra_statements LOAD


   LOAD file                  Include a file, default filename = SYS$DISK:[].TXT
   LOAD library/module=modnam Include module from a library. the library
                              will be searched with a default name of
                                SYS$LIBRARY:STARLET.MLB and if that fails
                                SYS$LIBRARY:FORSYSDEF.TLB

   Form this file /module ONLY the parameters will be loaded
    See also the help about interactive mode LOAD

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Extra_statements #MESSAGE

  You can include the #MESSAGE statement in the description

  #MESSAGE text

  The text will be displayed via a message when the expander finds
  this statement. This can be useful with the #IF constructs
  see example below.

  declaration statement
  declaration statement
  ...
  #IF F$EXISTS("_DEBUG")
   #MESSAGE Debug variant
   integer*4 temp
  #ELSE
   integer*4 temp /nodisplay
  #ENDIF

  If the symbol debug is defined the value of temp will be displayed
  and during the expansion of the descriptions the message "Debug variant"
  will be displayed on the terminal
  If the symbol debug is not defined, the value of temp will NOT be
  displayed and no message will occur.

DIX RECORD_FORMAT_FOR_DESCRIPTIONS #COMMENT

  #COMMENT text

   This statement can be used in a description or a view

   The text will be displayed with the examine command
   You can use this to separate parts of the description or
     in a view parts from different files

  Example (for a view):

        field verslim                   !examine the version limit
        field name                      !examine the name
        #comment ============To file header:=============
        follow v(1).fileid              !follow the link to the file header
        loop                            !loop
          field *_filename              !examine the name in ODS-5 part
          field fnam                    !and in ODS-2 part
        test (file_id <> backl_fid)     !stop if fid=backl_fid
          #comment ============Backlink:=============
          follow backl_fid              !follow link to parent
        end loop                        !end of loop

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration


  You can use any normal Fortran declaration, with some extensions

  General format

  TYPE*(SIZE)[/qualifiers] fieldname[(dim1[,dim2[,dim3]])]

  The qualifiers must be specified BEFORE the fieldname.

  The following types are supported
   The {*n} means an implied size. You may specify the size, but if you
   do not, this size is assumed. You cannot specify a different size.

  REAL_F{*4},REAL_D{*8},REAL_G{*8},REAL_H{*16}
                     The data types are the VAX realtypes

  REAL_S{*4}, REAL_T{*8},REAL_X{*16}
                     The data types are the IEEE realtypes

  REAL*4,REAL*8,REAL*16
                     These are aliases, the actual datatype depends on
                     the size and the architecture. The default size = 4.

                     Replacement according to the following table
                               Size
                        Arch   4         8     16
                        VAX    REAL_F REAL_D REAL_H
                        Alpha  REAL_F REAL_G REAL_X
                        IA64   REAL_S REAL_T REAL_X

  COMPLEX*8, COMPLEX*16
                     The complex datatype (real,imaginary).
                      the complex*8 contains 2 real*4 values
                      the complex*16 contains 2 real*8 values

  LOGICAL*nn (nn=1..128 in bitfieldmode, 1..16 in normal mode)
                     The date types are the logical data types
                      Default size = 4(bytes) in normal mode,
                                     8(bits) in BITFIELDMODE
  RLOGICAL*nn (nn=1..128 in bitfieldmode, 1..16 in normal mode)
                     The date types are the logical data types, only the
                     value is reversed
                      Default size = 4(bytes) in normal mode,
                                     8(bits) in BITFIELDMODE

  CHARACTER*NN or CHARACTER*(NN)
                     The data types are the character datatypes
                      Default size = 1 (byte)

  [U]INTEGER*nn (nn=1..64 in bitfieldmode, 1..8 in normal mode)
                     The data type is [un]signed integer
                      Default size = 4(bytes) in normal mode,
                                     8(bits) in BITFIELDMODE
                      [U]BYTE     is accepted as alias for [U]INTEGER*1
                      [U]WORD     is accepted as alias for [U]INTEGER*2
                      [U]LONGWORD is accepted as alias for [U]INTEGER*4
                      [U]QUADWORD is accepted as alias for [U]INTEGER*8

  BITS*NN (nn=1..128 in bitfieldmode, 1..16 in normal mode)
                     The data structure is a bit stream, nn<=8 Bytes
                      Default size = 4(bytes) in normal mode,
                                     8(bits) in BITFIELDMODE

  RBITS*NN (nn=1..128 in bitfieldmode, 1..16 in normal mode)
                     The data structure is a bit stream, nn<=8 Bytes
                      This is the same as BITS, but the meaning of each
                      bit is reversed (0 means active).
                      Default size = 4(bytes) in normal mode,
                                     8(bits) in BITFIELDMODE

  For the integer and bits fields, you may add a list of names to make
  the display more readable, see the name_syntax help below

  DATE*4             The date structure is an internal date format, the number of
                       minutes since 1857 e.g. VMSdate/(10*1000*1000*60)
                       No seconds or ticks (hundredths) are allowed

  DATE*8             The date structure is a OpenVMS date format. This is
                       the default date data type.

  UDATE{*4}          The date structure is a UNIX time
                       (#seconds since 1-JAN-1970).
                       No ticks (hundredths) are allowed

  UIC{*4}            The data structure is a UIC

  CPUTIME{*4}        The data is a 32 bits integer containing CPU ticks.
                       This will be displayed as a delta time.

  RAD50{*2}          The data is a 16 bit integer contains 3 rad50 chars

  IDENTIFIER{*4}     The data structure is an OpenVMS-identifier

  RFA{*6}            The normal RFA structure. It contains a 2-byte
                     record-id/byte offset and a 4 byte blocknumber.
                     The display is (block,recid)

  BKTRFA*NN (nn=4,5,6) The data structure is an RFA as found in the indexed
                     file buckets. It contains a 2-byte record-id/byte offset
                     and a 2-4 byte blocknumber. The display is (block,recid)

  PROTECTION{*2}     The data structure is a protection mask.

  RINTEGER{*4}       The data is a INTEGER*4 with low and high 16 bits
                           swapped (PDP-11 compatible format)
  FILEID{*6}         The data is a Fileid (filenr,revnr,volnr)

  PRIVILEGE*nn       The data is a privilege mask
                     The size may be 4 or 8, the default=8
                     If the size is 8, the value is a normal OpenVMS privilege mask
                     If the size is 4, the value is a privilege mask used for
                     functions like $CHKPRO (the $CHPDEF privilege mask)
                     This type has a built-in fieldname list.

  DISKMAP            The data is an ODS-2/5 storage description found in file headers
                      There are 4 formats.
                      P:dd dd placement map
                      T:1 begin-end 8 bits count and 22 bits blocknumber (4 bytes)
                      T:2 begin-end 14 bits count and 32 bits blocknumber (6 bytes)
                      T:3 begin-end 30 bits count and 32 bits blocknumber (8 bytes)
                      If you do not specify the t:n when converting from text to
                      binary DIX will take the shortest format

  ACE                The data is the binary ACE description
                      The text must include the leading and trailing ()

  ACL                The data is a list of ACEs

  VFC{*1}            The data is interpreted as a carriage control byte
                     in a DCL VFC file. See the OpenVMS docs about the layout.

  BYTEARRAY*(SIZE)   The data is a list of bytes, and the display is a
                     line with the byte values separated by a space
  String types

   STRING [*NN]      The data is a counted ASCII string (count=byte)
   WSTRING[*NN]      The data is a counted ASCII string (count=word)
   LSTRING[*NN]      The data is a counted ASCII string (count=longword)
   ZSTRING[*NN]      The data is zero terminated string
   HSTRING[*NN]      The data is terminated by any char >127 (bit 7 = 1)

     If *NN is specified, the strings are variable in a fixed allocation size.
       The total allocation is NN (HSTRING)
                               NN+1 (STRING,ZSTRING)
                               NN+2 (WSTRING)
                               NN+4 (LSTRING)

     If *NN is not specified the allocation is variable also.
     DIX can handle display and modification of variable fields, but only if
     the record length can be changed (indexed or relative files and not fixed).

   DECIMAL strings
   [U]DECIMAL        The data is an (unsigned) decimal string. Depending on
                     some qualifiers the allowed data is 0..9,".",E,+,-
                     0..9 are always allowed.
                     If the type is UDECIMAL, the + and - are not allowed.
                     If the type specifies /fraction, the . is allowed
                     If the type specifies /exponent, the E is allowed

     For this datatype there are some extra qualifiers defined

      /ZERO_FILL       The field is filled with leading zeros. All spaces
                        will be replaced by 0.
      /FRACTION        Allow the string to contain a decimal fraction.
                        This qualifier adds the "." character to the allowed
                        character set.
      /EXPONENT        Allow the string to contain an exponent.
                        This qualifier adds the E/e and the +/- for the
                        exponent (E+12 or e-12) characters to the allowed
                        character set.
      /LEFT_JUST       If the /ZERO_FILL is not specified, this qualifier
                        decides if a short string must be left or right
                        justified.

  Fieldnames are strings up to 32 characters. They must start with a
  letter (a-z), and the following character may contain a letter (a-z),
  a digit (0-9), a $ or an _.

  Field names starting with a % and PAD fields are not displayed (fillers).
  These fields cannot be used for field-dependent computation.
  The display can also be disabled with the /NODISPLAY option, and these
  fields CAN be used.

 Qualifiers can be

  /HEXADECIMAL           Always display data in hexadecimal format
  /BINARY                Always display data in binary format
  /OCTAL                 Always display data in octal format
  /RADIX=nn              Always display the data in radix nn format
                         This can only be used for [u]integer fields
  /RANGE=min_val:max_val For integer values, limit the range of the value
  /NODISPLAY             Do not display data (can be referenced)
  /USER                  The type is a user defined type. See the help about
                         [DIX/HELP] record_for field usertypes.
  /UPPERCASE             Force conversion to uppercase on field modification
  /LOWERCASE             Force conversion to lowercase on field modification
  /LIMIT=value           If the value is reached, the repeat loop is terminated
  /LIMIT=>value           If the field has a repeat, this will terminate, else
  /LIMIT=<value           DIX will terminate the next structure repeat
                          See example
  /VFC                   This field is in the VFC area (if present) of the record
  /RELATIVE              Qualifier for POSITION (see there)
  /READONLY              This field is read-only. DIX cannot modify it.
  /EBCDIC                This field contains EBCDIC data.
                         DIX will convert to and from ASCII. This will only
                         work correctly for characters that are in
                         both character sets.
                         You can also open the file in EBCDIC mode. This
                         will automatically append a /EBCDIC to all fields
                         This conversion only takes place in char/string
                         and decimal fields.
  /DEPENDENCY            If this field changes, DIX must re-expand the description
                         since there is a dependency somewhere on this value.

  DIX allows you to mark a field as an index into another file
  To do this you need to specify at least one of the following qualifiers
  The value of the file will be used as a value for a
  key/rfa/recnr/byteoffset in the target file.
  /KEY, /RECORD, /RFA, and /BYTEOFFSET are mutually exclusive.

  /FILE=filename         Specifies that this field is a key into file
  or                     'filename'. The default is the same file.
                         The filename can also be a fileid. See the help
                         about [DIX/HELP] record_format parameters.
  /FILE="expression"     If you specify the name in "", it will be
                         interpreted as a string to be evaluated. In this
                         way you can compute the name.
  /DESCRIPTION="descr"   The explicit description used for this file.
  /KEY=keynumber         Specifies the keynumber (default=0)
  /RECORD                Specifies that the value is a record number into
                         'filename'. If used on an indexed file, it will
                         read record 'computestring' on the primary key.
  /RFA                   Specifies that the value is an RFA into the target
                         file.
  /BYTEOFFSET            Specifies that the value is a byte-index into the
                         target file (value 0 = byte 0 in block 1)
  /MATCH=LT,LE,EQ,GE,GT  Keymatch, the default is EQ search.
  /COMPUTE="compstring"  Allows you to do computation on the field contents
                         the compute string must be a valid expression that
                         delivers an integer or character value to be used
                         as key (for indexed files) or record number.
  /IF="IFstring"         If specified the IFstring expression must be TRUE
                         to take this link.

  During the evaluation of the IF, COMPUTE and FILE string the normal
  symbol substitution is active, and also the special symbols
      $FILE          (the current file)
      $DESCRIPTION   (The current description)
      $FIELD         (The contents of the current field converted to text)
      $FLD           (the current field, may be any type)

  can be used (as any other symbol/function/parameter)

  See the examples for this
  See also the radix_override help below

  Any variable can be followed by a dimension description up to 3 dimensions.
  Dimension are specified as
   high          (low=1, incr=1) or
   Low:high      (incr=1) or
   low:high:incr incr may be negative, but then low must be >= high

    The sizes and dimensions can be expressions with numbers, parameters or
    other fieldnames in the description. If fieldnames are used, they must
    appear before the line in which they are referenced.
    see the help about expressions

![expressions]DIX INTERACT expressions

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration Name_syntax


  With the (R)BITS*(*),(U)INTEGER*(*),LOGICAL*(*) and the (u)DATE*(*)
   declarations you can append a list of names to the description to
   give a readable interpretation of the values

     There are two formats

     1. [field,field,,field...] A list of fields numbered from 0 up to nn
                                Fields may be omitted, but commas are
                                significant. Mostly used for bits. A #
                                means do never display this bit even if set.

     2. [idx=name,idx=name,...] A list of numbered names, the indexes
                                do not have to be in order. Mostly used
                                for integers. The idx's are integer*4 only,
                                if the values are 8 bytes wide, DIX will check
                                if the high longword is a sign extension of the
                                low longword.

     The text can also be stored in a parameter.
      if you specify [#type_name], the actual text will be searched
       in type "type_name". It must be defined earlier via the ADD TYPE command
      This can be useful if the same strings happens more than once

   The names (field or name) can have aliases. They are specified as
     name1;name2;name3...
   All alias names can be used for text to binary translation, but only the
    first alias will be used for binary to text translation. See example below

  Example for case 1 (the privileges in SYSUAF):

     BITS*8       UAF$Q_DEFPRIV -
         [CMKRNL,CMEXEC,SYSNAM,GRPNAM,ALLSPOOL,IMPERSONATE,DIAGNOSE,-
          LOG_IO,GROUP,NOACNT,PRMCEB,PRMMBX,PSWAPM,SETPRI,SETPRV,TMPMBX,-
          WORLD,MOUNT,OPER,EXQUOTA,NETMBX,VOLPRO,-
          PHY_IO,BUGCHK,PRMGBL,SYSGBL,PFNMAP,SHMEM,SYSPRV,BYPASS,-
          SYSLCK,SHARE,UPGRADE,DOWNGRADE,GRPPRV,READALL,-
          IMPORT,AUDIT,SECURITY]

      bit(0) = CMKRNL, bit(1)= CMEXEC ...

      Bits are named in order, but bits may be skipped.
      If the non-named bits are in the mask they will be displayed with
      the text "BITnn". If any bit has the name # it will not be
      displayed (see below)

      A more complicated example for the bits in the file characteristics
       in the file header in the INDEXF.SYS
       The longword has a lot of bits defined, but also a 2-bit field that
       contains the setting for the caching options

       First we define all normal bits, and the 2-bit field is defined
        with #, so they will not be displayed (and cannot be modified using
        the bitnames). Then we skip 24 bits back and define a 2-bit
        integer with 4 possible values, and then we skip 22 bits forward again
        Also notice the ,, after the #, this signifies an unused bit.

        BITS*4          FILE_CHAR -
                [Wascontig,Nobackup,Writeback,Readcheck,Writecheck,-
                 Contigb,Locked,Contig,#,#,,Badacl,-
                 Spool,Directory,Badblock,Markdel,Nocharge,Erase,alm_aip,-
                 shelved,scratch,nomove,noshelvable,shelv_res]

        bitfield        !start in bits mode, the next 2 bits define the caching
          position/relative (-24)     !skip back 24 bits, the /relative
                                      !is optional since the value is negative
          integer*2 caching [writethrough,writeback,flush_on_clos,no_cache]
          position /relative (22)     !skip the next 22 bits(in total 3 bytes)
        end bitfield    !back to non-fieldmode again

  Example for case 2:

     INTEGER*2 type [1=special,4=normal,10=fatal]

      Field values 1,4,10 will be by displayed as a name, all others in
      numeric

  Example for specification via a TYPE

   TYPE (user_type = "1=special,4=normal,10=fatal") !must be a string
   ....                                                         !scalar type

   INTEGER*2 type [#user_type]    !reference to parameter user_type.

  Example for name aliases:

   In the SYSUAF description is the UAF$L_FLAGS field. One of the bits
   defines if the user is allowed to login. This bit has two different names
   1. In AUTHORIZE this bit is referenced by the /[NO]DISUSER name.
   2. In the $UAIDEF include file this bit is called UAI$M_DISACNT

   So the names for UAF$L_FLAGS contains an alias for this bit
   BITS*4       UAF$L_FLAGS -
   [DISCTLY,DEFCLI,LOCKPWD,RESTRICTED,DISUSER;DISACNT,DISWELCOME,DISMAIL,NOMAIL,
    GENPWD,PWD_EXPIRED,PWD2_EXPIRED,AUDIT,DISREPORT,DISRECONNECT,AUTOLOGIN,-
    DISFORCE_PWD_CHANGE,CAPTIVE,DISIMAGE,DISPWDDIC,DISPWDHIS,DEFCLSVAL,EXTAUTH,
    MIGRATEPWD,VMSAUTH,DISPWDSYNCH,PWDMIX]

   The bit has the name DISUSER;DISACNT.
    On text to binary you may use either name (DISUSER or DISACNT).
    On binary to text DIX will use the first name (DISUSER)

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration SUBFIELDS


  For all fieldtypes or normal values containing multiple data,
    RBITS,BITS,CHARACTER,xSTRING,(U)INTEGER,BYTEARRAY,COMPLEX,
    UIC,(U)DATE,DELTATIME,CPU,PROTECTION,FILEID,RFA,BKTRFA,RAD50,ACL

  DIX will normally display all data on one line, and
  lets you examine/modify the whole structure in one time.

  Sometimes it may be useful to specify a specific subfield of the whole
  structure. Below is a table of transformation

  Subfields can be used with the
    a. examine command (fieldnames)
        This will display a multiple line display with each subfield
        on a separate line.
    b. Evaluation of fieldnames/symbols.
        This will deliver a table containing the subfield values

  For the following type you can only specify a bit/bytenumber

   CHARACTER,xSTRING  byte-size character 1..len(string)
   BYTEARRAY          byte-size byte      1..len(bytearray)
   (U)INTEGER         one-bit integer     0..#bits-1
   RAD50              byte-size character 1..3
   ACL                The ACE in the ACL

  For the following types you can specify a list of bit values via the
  fieldnames construct [name1,name2,name1]

   RBITS              LOGICAL
   BITS               LOGICAL

  The following fields have predefined subfields

   U(DATE)            Integer  YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,HUNDREDTH
   DELTATIME,CPU      Integer  DAY,HOUR,MINUTE,SECOND,HUNDREDTH
   PROTECTION         Integer  SYSTEM,GROUP,OWNER,WORLD
   FILEID             Integer  FILENR,REVISION,VOLUME
   RFA                Integer  BLOCK,OFFSET
   BKTRFA             Integer  RECID,BUCKET
   PRIVILEGE[*8]      Logical  The normal 39 privilege names
   PRIVILEGE[*4]      Logical  The 12 privileges in the audit log
   COMPLEX            Real     REAL,IMAG

   You may specify a list of either
     a. subfield name masks (between "")
        If the name mask does not contain a wildcard (* or %), DIX will
         match the beginning of the keyword, this may match more than one name.
        If the name mask does contain a wildcard, DIX will select all names
         matching the wildcard.
   or
     a. element numbers
     b. ranges like 1:4
     c. ranges with stride like 1:5:2 or 5:1:-2

   Suppose you have define the following fields

   RBITS*7 UAF$B_PRIMEDAYS -    !value=[t,t,t,t,t,f,f]
          [MONDAY,TUESDAY,WEDNEDSAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY]
   CHARACTER*32 UAF$T_ACCOUNT   !value=TACV

   You can now specify

   UAF$B_PRIMEDAYS{"*T*"} to reference the three one-rlog values
      514.1|UAF$B_PRIMEDAYS{TUESDAY} |True
      514.3|UAF$B_PRIMEDAYS{THURSDAY}|True
      514.5|UAF$B_PRIMEDAYS{SATURDAY}|False

   UAF$T_ACCOUNT{3:5,1}
      54.0|UAF$T_ACCOUNT{3}|C
      55.0|UAF$T_ACCOUNT{4}|V
      56.0|UAF$T_ACCOUNT{5}|
      54.0|UAF$T_ACCOUNT{1}|T

  But also "TEST"{*} will deliver a table of 4 characters
      and 10{*} will deliver a table of 32 bits (if integersize=4)

  The syntax between the {} is
    "*XYZ*": a mask. This only works on fields with fieldnames defined
    "AB"   : Match all names beginning with AB
    "*"    : All elements with a fieldname
    *      : All elements
    4-5    : Element 4..5
    4-*    : element 4..end_of_field
    *-4    : element begin_of_field..4
    12     : Element 12 only
    1:5:2  : Element 1,3 and 5.
    5:1:-2 : Element 5,3 and 1

  Subfields can be used on fields (you may use the field value names)
  or normal symbol values

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration SUBFIELDS Examples_examine


   a byte wide integer

   DIX> exa UAF$B_RTYPE
     0.0|UAF$B_RTYPE|1
   DIX> exa UAF$B_RTYPE{*}
     0.0|UAF$B_RTYPE{0}|1
     0.1|UAF$B_RTYPE{1}|0
     0.2|UAF$B_RTYPE{2}|0
     0.3|UAF$B_RTYPE{3}|0
     0.4|UAF$B_RTYPE{4}|0
     0.5|UAF$B_RTYPE{5}|0
     0.6|UAF$B_RTYPE{6}|0
     0.7|UAF$B_RTYPE{7}|0

  A UIC

   DIX> exa UAF$L_UIC
    36.0|UAF$L_UIC|[100,1515]

   DIX> exa UAF$L_UIC{"*"}              !display all fields
    36.0|UAF$L_UIC{GROUP} |00000001515
    38.0|UAF$L_UIC{MEMBER}|00000000100
   DIX> exa UAF$L_UIC{"MEM*"}            !display fields matching MEM*
    38.0|UAF$L_UIC{MEMBER}|00000000100

  A data field
   DIX> exa UAF$Q_LASTLOGIN_N               !the normal way
   404.0|UAF$Q_LASTLOGIN_N|10-JUL-2008 17:20:01.30
   DIX> exa UAF$Q_LASTLOGIN_N{*}             !examine all subfields
   404.0|UAF$Q_LASTLOGIN_N{YEAR}     |2008
   404.0|UAF$Q_LASTLOGIN_N{MONTH}    |7
   404.0|UAF$Q_LASTLOGIN_N{DAY}      |10
   404.0|UAF$Q_LASTLOGIN_N{HOUR}     |17
   404.0|UAF$Q_LASTLOGIN_N{MINUTE}   |20
   404.0|UAF$Q_LASTLOGIN_N{SECOND}   |1
   404.0|UAF$Q_LASTLOGIN_N{HUNDREDTH}|30
   DIX> exa UAF$Q_LASTLOGIN_N{"*"}           !examine all fields matching *
   404.0|UAF$Q_LASTLOGIN_N{YEAR}     |2008
   404.0|UAF$Q_LASTLOGIN_N{MONTH}    |7
   404.0|UAF$Q_LASTLOGIN_N{DAY}      |10
   404.0|UAF$Q_LASTLOGIN_N{HOUR}     |17
   404.0|UAF$Q_LASTLOGIN_N{MINUTE}   |20
   404.0|UAF$Q_LASTLOGIN_N{SECOND}   |1
   404.0|UAF$Q_LASTLOGIN_N{HUNDREDTH}|30
   DIX> exa UAF$Q_LASTLOGIN_N{"*U*"}         !examine all fields matching *U*
   404.0|UAF$Q_LASTLOGIN_N{HOUR}     |17
   404.0|UAF$Q_LASTLOGIN_N{MINUTE}   |20
   404.0|UAF$Q_LASTLOGIN_N{HUNDREDTH}|30

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration SUBFIELDS Examples_evaluate


  Fieldname and symbols may be used in evaluations with subnames.

  DIX> examine UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|10-JUL-2008 17:20:01.30
  DIX> eval UAF$Q_LASTLOGIN_N
  10-JUL-2008 17:20:01.30
  DIX> eval UAF$Q_LASTLOGIN_N{*}
  [2008,7,10,17,20,1,30]
  DIX> eval UAF$Q_LASTLOGIN_N{"*U*"}
  [17,20,30]

  Now for a symbol

  DIX> a=UAF$Q_LASTLOGIN_N      !contains a date value
  DIX> eval a
  10-JUL-2008 17:20:01.30
  DIX> eval a{*}
  [2008,7,10,17,20,1,30]
  DIX> eval a{"*U*"}
  [17,20,30]

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration SUBFIELDS Examples_deposit


  DIX> exa UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|10-JUL-2008 17:20:01.30
  DIX> dep UAF$Q_LASTLOGIN_N{"DAY"}=23
  DIX> exa UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|23-JUL-2008 17:20:01.30

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration SUBFIELDS Examples_assign


  DIX> exa UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|10-JUL-2008 17:20:01.30
  DIX> UAF$Q_LASTLOGIN_N{"DAY"}=23
  DIX> exa UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|23-JUL-2008 17:20:01.30
  DIX> a=UAF$Q_LASTLOGIN_N
  a{"DAY"}=25
  DIX> say a
  23-JUL-2008 17:20:01.30

  Or with much more fun

  DIX> a{2:7}=1         !change all subfields except the year
  DIX> say a
  1-JAN-2008 01:01:01.01

  DIX> A{4:7}=[1,2,3,4]  !table shape must be equal (both have 4 elements)
  DIX> say A
  1-JAN-2008 01:02:03.04

  DIX> UAF$Q_LASTLOGIN_N{4:7}=[1,2,3,4] !table shape must match
  DIX> exa UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|23-JUL-2008 01:02:03.04

  DIX> UAF$Q_LASTLOGIN_N{"*U*"}=[10,11,12]  !table shape must match
  DIX> exa UAF$Q_LASTLOGIN_N{"*U*"}
  404.0|UAF$Q_LASTLOGIN_N{HOUR}     |10
  404.0|UAF$Q_LASTLOGIN_N{MINUTE}   |11
  404.0|UAF$Q_LASTLOGIN_N{HUNDREDTH}|12
  DIX> exa UAF$Q_LASTLOGIN_N
  404.0|UAF$Q_LASTLOGIN_N|23-JUL-2008 10:11:03.12

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration USERTYPES

  The user can define his own types. The translations between ASCII and
  binary must be programmed in the DIX interactive language.
  This translation script can be defined in the following ways.
  1. In the .DES file
     Somewhere in the .DES file there must be a section the contains the
     script code. This section must begin with #TYPE name and end with #ENDTYPE
  2. In a module in the DIX_DES.TLB (either user or system) library.
     The module name must be USERTYPE_'name'. In this case the
     #TYPE and #ENDTYPE tags are not necessary.

  This script is called with 4 symbols defined
  1. ACTION : a string symbol that defines the action to take, values can be
              SIZE   : Return the size (in bits) of the binary data.
                       (only used in variable length data)
              ASCBIN : Convert from ASCII to binary
              BINASC : Convert from binary to ASCII
  2. DATA   : A string variable containing the source data.
              In case "SIZE" and "BINASC" DATA contains the binary data
              In case "ASCBIN" DATA contains the ASCII text.
              In all cases the length of the string is the size in bytes.
  3. BITSIZE: An integer value that contains the size in bits. Normally this
              is 8*length(data), but not for bitfields.
  4. FIELDS : The fields as defined in the declaration statement.

  The script must set the following symbols
  Case "SIZE"   : SIZE, an integer containing the size in BITS.
  case "ASCBIN" : RESULT, a string variable containing the binary data.
                  SIZE, an integer value containing the size in BITS.
  case "BINASC" : RESULT, a string variable containing the ASCII text.

  Also the script must finish with an EXIT statement that returns the status.
   For BINASC 0 means the text will be suppressed by the /compress qualifier.
              1 means is not regarded as "suppressible"
   For others 1=ok, 2=error.

  Example:
  You have a line in the description record:

  mytype*8/user fieldname  !user type mytype, size=fixed to 8.

  Now we must have either a section in the description record enclosed
   in the following statements:
    #type usertype
      ...
    #endtype
  Or a module in the DIX_DES or DIX_DES_USER file with the name USERYTPE_MYTYPE
    In this case the #type and #endtype are not needed.

  Below an example of a script that will work. It will convert a 8 byte
  string to a sequence like 12,34,56,43,123,0,56,9

  #type  mytype
  if (action = "SIZE") then     !return symbol SIZE (size in bits)
   size = 8*8                   !will not be called since the size is
   stat = 1                     !fixed at 8 bytes (is 8*8 bits)
  endif

  if (action = "BINASC") then   !return symbol RESULT
   nk = f$length(data)
   stat = 0                     !assume all bytes are ZERO
   result = ""
   for k=1,nk
    kar = f$extract(k-1,1,data)
    byt = f$extzv(0,8,kar)
    if (byt <> 0) stat = 1      !not all bytes ZERO
    result = result + "," + string(byt)
   endfor
   result = f$extract(1,-1,result)
  endif

  if (action = "ASCBIN") then   !return symbol RESULT and SIZE
   set noon
   result = ""
   k = 0
   stat = 2                     !assume error in conversion
  lp2: part = f$element(k,",",data)
   if (part <> ",") then
    byt = int(part)
    if (even($STATUS)) goto err
    if (byt < 0 | byt > 255) goto err
    result = result + f$char(byt)
    k = k + 1
    goto lp2
   endif
   size = f$length(result)*8    !return length in bits
   stat = 1                     !successful convert
  err:
  endif
  exit 'stat'                   !return conversion result
  #endtype

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Field_declaration RADIX_OVERRIDE


  Normally all fields are displayed in decimal or text.
  If the fieldtype is followed by the a radix qualifier the display
  (and also the input is in the requested radix)

  The following radices are supported
  /HEXADECIMAL
  /OCTAL
  /BINARY

  Example:

  INTEGER*4 FIELD         Will be displayed and modified in decimal
  INTEGER*2/BIN DATA      Will be displayed and modified in binary
  INTEGER*2/OCT DATA      Will be displayed and modified in octal
  CHARACTER*3/HEX TMP     Will be displayed and modified in hexadecimal

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements


  DIX also supports a number of control statements

  STRUCTURE,ENDSTRUCTURE    After the structure statement follows a name
                            optionally followed by a dimension (dim1,dim2,dim3)
                            If the name is specified the fieldname is
                            extended by .structurename. if no name is specified,
                            the fieldname is not extended

  UNION,ENDUNION
  MAP,ENDMAP                See MAP_SYNTAX below.

  RANGE,ENDRANGE            See RANGE_SYNTAX below
  BLOCK,ENDBLOCK            See RANGE_SYNTAX below

  POSITION[/RELATIVE] (value) Set the bit/byte offset to the value.
                             The () must be specified.
                            This can be useful in some overlay structures
                            See also the example in RANGE_SYNTAX. The value
                            is the new byte position, unless in a bitfield,
                            where the value is in bits.
                            If the /relative is given (or the value is negative)
                            the value is added/subtracted to/from the current
                            offset, else it new offset=value.

  POINTER                   Temporary override the bit offset for the
                            following structure. See pointer_syntax below

  PAD[*NN]                  Round up bit/byte-offset to NN fold. nn=2,4,8
                            The default in bitmode 8 (align to next byte)
                                     else       2 (align to next word)
                             Rounding takes 0..NN-1 bytes/bits.
                            The verb ALIGN is a synonym for PAD
                            The /VFC or not decides where the pad is done

  PAD PACKED|NATURAL        Set a policy for padding/aligning.
                            The verb ALIGN is a synonym for PAD
                            PACKED : Align from now on fields on bit/byte boundary
                            NATURAL: Align from now on fields on its natural size
                             i.e. INTEGER*4 will be aligned on a 4 byte boundary
                            The PAD*nn overrules this setting for the next
                            field only.

  EXIT [condition]          If condition is not specified, it will be evaluated
                            true. If condition is true, skip the repeat of the
                            current structure (there must be one)
                            See exit_syntax below

  ABORT reason [condition]  If the abort statement is seen, DIX checks if
                            condition evaluates to TRUE (or is not present).
                            If this is the case, the description is regarded
                            as not valid. This statement can be used to do
                            some sanity checking. See the examples help
                            for an example.
  DEFAULT INTEGER size      Set the default integer size.
                            Size can be 4,8,32 or 64
  DEFAULT REAL size         Set the default real size
                            Size can be 4,8,16,32,64 or 128

  You can also define your own types. See the help about
    [DIX/HELP] record_form field usertypes.

  BITFIELD
  ENDBITFIELD
    Normally the number after the * will be interpreted as bytes, but
    between a BITFIELD and an ENDBITFIELD the numbers will be interpreted
    as bits. Only (U)INTEGER, (R)BITS, LOGICAL and PAD fields are allowed between
    BITFIELD and ENDBITFIELD. After an ENDBITFIELD the record pointer will
    be padded to the next byte.

  Case construct. Select one of the case constructs.
    SWITCH/CASE/ENDSWITCH           See the help about the switch_case_endswitch

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements RANGE_SYNTAX


  The record descriptions can contain one or more RANGES or BLOCKS
  RANGE[/RELATIVE] (min_offset:max_offset)
    field
    field
    ...
  END RANGE
  BLOCK[/RELATIVE] (start_pos:end_pos)
    field
    field
    ...
  END BLOCK

  The () are required syntax.
  The fields start at offset "min_offset" and continue until the offset
  "max_offset". If the byte_offset is >= max_offset, the rest of
  the RANGE is ignored. RANGE and BLOCK are very much the same, but
  after the ENDRANGE is found, the bit offset is restored to the value
  before the RANGE, and the BLOCK sets the bit offset to end_pos.
  So if the range/block is in another part of the record you should use
  RANGE, and if the range/block is inline you should use BLOCK

  If /relative is specified, the start_pos and end_pos are added to the
  current bit_offset, otherwise they will set the bit_offset

  An example is in the ODS-2 File headers:

        byte            id_offset       ! Offset to Ident area
        byte            map_offset      ! Offset mapping area
        byte            acl_offset      ! Offset to ACL area
        byte            res_offset      ! Offset to ACL area
        integer*2       seg_num         ! Extension segment number
        ....
        range (map_offset*2:acl_offset*2-1)
         diskmap maps(256)              !enough
        end range
        .....
        position (510)
        integer*2/hex checksum

  The DISKMAP entries start at byte offset MAP_OFFSET*2 (MAP_OFFSET is in
  words) and continues until ACL_OFFSET*2-1.

  The checksum is at fixed location 510

  An example for the BLOCK statement is in the $BUCKET description for
  a bucket in an indexed file:
   ...
   uinteger*2 first_free_byte
   ...
   block (14:first_free_byte)   !this part extends from byte 14 ..the
                                !value in first_free_byte
     structure sidrvalues(*)    !we don't know how many sidr values there are
                                !but if we cannot exceed the block
        integer*2 total_len     !the total length of the sidrvalue
        ...                     !display the keyvalue (compressed or not)
        block/relative (0:total_len+%loc("TOTAL_LEN")-%location+2)
                                !the sidrvalue record
                                !starts at offset 0 (relative) and continues
                                !until the length is exceeded
          structure rrvs(*)    !the rrvs are limited to the block
          ...
          end structure         !end of the rrvs
        end block               !end of the rrv block
     end structure              !end of the sidr values structure
   end block                    !end of the total block
  ...

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements MAP_syntax

  The MAP command has a special syntax. It is included in a UNION statement.

   UNION
    MAP [selectionstring]
    END MAP
    MAP [selectionstring]
    END MAP
   ..
   END UNION

  If there is no selectionstring specified, DIX will show the mapping.
  If there is a selection string, DIX will show the map only if the
  selection string matches. The format for the selection string is:

  Expression=sel_value[,sel_value...]
  And sel_value is
  1. expression             Just a single (integer) expression
  2. expression:expression  A range of (integer) expressions

  At this moment only integer expressions are allowed.

  You can specify a dependency on a previously defined variable.

  SYNTAX:
  integer*4 sel         !any field will do (dependency field)
   UNION
    MAP SEL=value  !Display this map if SEL has value "value"
    END MAP
    MAP SEL=VALUE1 !Display this map if SEL has value "value1"
    END MAP
   ..
   END UNION

  If all maps have a dependency and none of them is used, DIX will always
  use the last one, unless one of the MAP entries has a dependency fieldname
  of *

  Example:

  integer*4 sel         !any field will do (dependency field)
   UNION
    MAP SEL = 0,10:12  !case for sel=0 and 10:12
     character*4 valuec
    END MAP
    MAP SEL = 1        !case for sel=1
     integer*4 value4
    END MAP
    MAP *               !case for all other values of sel
     logical*4 valuel
    END MAP
    MAP SEL = 2        !case for sel=2
     integer*2 value2(2)
    END MAP
   END UNION

  If SEL has value 0 or is between 10 and 12 the character VALUEC is displayed
  If SEL has value 1 the INTEGER*4 VALUE4 is displayed
  If SEL has value 2 the INTEGER*2 VALUE2(2) is displayed
  If SEL has any other value the LOGICAL*4 VALUEL is displayed

  If the MAP * had not existed, and SEL would not have been 0 or 10-12 or
   1 or 2 the last map (SEL=2 : = VALUE2(2)) would have been used.

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements POINTER_syntax

  The pointer statement allows you to decode a piece of data in an other
  place in the record.

   Syntax POINTER[*n] [/RANGE=min:max] fieldname [pointee]
    The next structure block (there must be a structure block directly
    after this statement) will contain the fields that are part of the
    pointed data.

   The *n is optional, default *4
   The /range is optional, if allows you to mark certain values of the
   pointervalue as not valid, so POINTER/RANG=1: name [pointee] will
   not be taken is the contents of the pointer is <1.

   The [pointee] is necessary. If contains the fieldname, of which the
    address will be added to the pointer value to get the correct offset

  An example is the PENDING structure (pending.dat) for Allin1/Office server:

        character*64 pending_key          !MAIL + the name of the user
        character*1  record_code          !continuation record index
        character*1  cont_flag            ! flag for continuation record
        integer*2    total_attr_size      !total size of the pointers+data
                                          ! of all records together
        integer*2    this_rec_attr        !size of pointer+data in this record
        character*2  usage_count          !how often is this record used
        character*5  new_mail_count       !new mail count for the user
        character*3  padding
        structure pointers(100)               [1] !start of pointer/data
          integer*2 type [7=mail]                 !type of field
          integer*2 %dummy
          pointer*4 offs [pointers]           [2] !offset to the "pointer" field
          structure work                      [3] !the data section
            integer*2 length                      !length of string
            byte  %unknown(6)
            character*(length-6) test             !the string
          end structure                       [4] !end of the data definition
          exit [offs+length+2>=this_rec_attr] [5] !exit statement
        end structure

    The record is built up as follows
    a. 80 bytes of fixed data
    b. a pointer section containing an array of
        1. Type
        2. Offset to a position in the record after the pointers
    c. the text area pointed to by the offset

    The statement pointer*4 offset[pointers]  at [2] must be followed by a
    structure statement [3].
    DIX will take the value from the record at the position of the pointer
    statement [2] (the length contains the size of the field), adds the
    location of "POINTERS" [1], and uses that offset to expand the
    statements in the structure "work" [3]. When the end structure [4]
    is found, DIX will resume processing the next statement [5]
    with the saved offset.
    At the end [5] is the exit test. If the offs > cur rec length : exit
    This means to leave the "pointers" structure. Since there is no more
    data available, the display is stopped.

  See the display below

    0|PENDING_KEY            |MAIL JOHN.DOE
   64|RECORD_CODE            |
   65|CONT_FLAG              |.
   66|TOTAL_ATTR_SIZE        |86
   68|THIS_REC_ATTR          |82
   70|USAGE_COUNT            |
   72|NEW_MAIL_COUNT         |3
   77|PADDING                |
   80|POINTERS(1).TYPE       |MAIL
   84|POINTERS(1).OFFS       |16
   96|POINTERS(1).WERK.LENGTH|31
  104|POINTERS(1).WERK.TEST  |OA$SHARA7718:IFQ3FORG.TXT
   88|POINTERS(2).TYPE       |MAIL
   92|POINTERS(2).OFFS       |49
  129|POINTERS(2).WERK.LENGTH|31
  137|POINTERS(2).WERK.TEST  |OA$SHARE2664:IFR1XUY1.TXT
   96|POINTERS(3).TYPE       |31

  You could suppress the display of pointers(1).offs, by changing the
  definition of pointer to :
     pointer*4/nodisplay offs [pointers]

  Another example is from the records of the accounting file:

    BITFIELD
     INTEGER*1 FLAG
     INTEGER*7 TOTTYPE [,PRCDEL,PRCPUR,IMGDEL,IMGPUR,SYSINIT,SETTIME,LOGFAIL,PRINT,USER,ENABLE,DISABLE,ALTACM,FILE_FL,FILE_BL]
     INTEGER*4 SUBTYPE [,INTERACTIVE,SUBPROCESS,DETACHED,BATCH,NETWORK]
     INTEGER*3 VERSION
     INTEGER*1 CUSTUMER
    ENDBITFIELD
    INTEGER*2 LENGTH
    DATE SYSTIME
    STRUCTURE PACKET(10)                            [1]
      BITFIELD
       INTEGER*1 PACKETFLAG
       INTEGER*7 PACKETTYPE [,ID,RESOURCE,IMAGENAME,FILENAME,USER_DATA,,,PRINT]
       INTEGER*4 SUBTYPE
       INTEGER*3 VERSION
       INTEGER*1 CUSTUMER
      ENDBITFIELD
      INTEGER*2 SUBLENGTH
      UNION
       MAP PACKETTYPE=1
        INTEGER*4/HEX PID
        INTEGER*4/HEX OWNER
        UIC UIC
        INTEGER*4 PRIVS(2)
        BYTE PRIO
        BYTE FLAGS
        POINTER*2/RANGE=1: USERNAMEOFFSET [PACKET]  [2]
        STRUCTURE                                   [3]
         STRING USERNAME
        END STRUCTURE                               [4]
        POINTER*2/RANGE=1: ACCOUNTOFFSET [PACKET]   [5]
        STRUCTURE
         STRING ACCOUNTNAME
        END STRUCTURE
        .... and some more pointers for other fields
       END MAP
      ... for other packettypes
      END UNION
    ENDSTRUCTURE

  The pointer statement at [2]
        POINTER*2/RANGE=1: USERNAMEOFFSET [PACKET]  [2]
   will be processed as follows.
    Take the value from the record, 2 bytes The (*2).
    See if this value is at least 1 (the /rang=1:)
    If not, skip the following structure [3], and continue with the next [5]
    If it is >=1, add the value to the offset of PACKET [1]
     and decode the data at that offset as the structure [3]
       So we expect a STRING datatype there
            (the structure contains only one field)
     After this sidestep (we found the ENDSTRUCTURE [4]),
    return to processing the data at [5]

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements EXIT_syntax

  The pointer statement allows you to terminate a structure repeat count

        character*64 test
        structure pointers(100)               [1]
          integer*4 type [7=mail]
          integer*4 value
          exit [type=10]                      [2]
        end structure
        character*10 rest

    The record is built up as follows
    a. 64 bytes of fixed data (test)
    b. a structure section containing an array of
        1. Type
        2. value
    c. 10 bytes trailer (rest)

    The statement "exit [type=10]" at [2] will exit the *100 repeat for [1]
    if the contents for type = 10.

   0|TEST                   |MAIL 01CURSIST
  80|POINTERS(1).TYPE       |MAIL
  96|POINTERS(1).VALUE      |20
  88|POINTERS(2).TYPE       |MAIL
  92|POINTERS(2).VALUE      |25
  96|POINTERS(3).TYPE       |10         <- this terminates with the exit
 100|POINTERS(3).VALUE      |25
 104|REST                   |The rest

  If the description had been
        character*64 test
        structure pointers(100)               [1]
          integer*4 type [7=mail]
          exit [type=10]                      [2]
          integer*4 value
        end structure
        character*10 rest

  The result would have been (POINTERS(3).VALUE at 100 is not displayed,
  and so the offset for REST is 4 lower

   0|TEST                   |MAIL 01CURSIST
  80|POINTERS(1).TYPE       |MAIL
  96|POINTERS(1).VALUE      |20
  88|POINTERS(2).TYPE       |MAIL
  92|POINTERS(2).VALUE      |25
  96|POINTERS(3).TYPE       |10         <- this terminates with the exit
 100|REST                   |The rest

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples


DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples EXAMPLE_FOR_SWITCH


   INTEGER*4 value[_expression]
   SWITCH value
     CASE 1                     !case taken if value=1
      integer*4 value1
      character*20 text1
     CASE 4                     !case taken if value=4
      integer*4 val2
      logical*4 ext
     CASE                       !default case if nothing matches
      character*(20) default
     CASE 1                     !will not be found, since we had a
      integer*4 not_used        !match before
     CASE                       !will not be found, since we had a
      integer*4 not_used_def    !match before
   ENDSELECT

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples Example_for_bitfield


    INTEGER*4 value            value contains 4 bytes = 32 bits
    BITFIELD
     integer*4 first_nibble    value contains 4 bits.
     logical*1 first_bit[0=no,1=yes]
                               value contains 1 bit
     PAD 2                     Align to even bit (so this takes 1 bit)
     integer*1 second_bit      value contains 1 bit
    ENDBITFIELD                aligns on byte boundary (so 1 pad bits)
    LOGICAL*1 temp             value contains 1 byte.

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples Example_for_file_link


    CHARACTER*12/FILE=SYSUAF Username
                             You can follow this link to the file SYSUAF
                             keyvalue the contents of "USERNAME", KEY=0

    INTEGER*4/FILE=DATAFILE/RECORD/COMPUTE="$field+10" index
                             You can follow this link to the file DATAFILE
                             with the record number the contents of
                             the field "index" + 10

    INTEGER*4/FILE=SYSUAF/KEY=1/IF="$field>0" identifier
                             Follow the identifier to the SYSUAF file, but
                             only if the identifier is >0 (UIC identifier)

   Example for not displayable fields:

   The file_char bits in the INDEXF.SYS contain 2 bits that define the
    caching attributes (bit 8 and 9). Since the names for these bits are
    a #, DIX will not display these bits.

    The POSITION (-24) : Reposition the byte_offset by 24 (bits).
    The INTEGER*2      : Define a 2 bits integer with 4 possible values.
    The POSITION/RELATIVE (22) : Sets the byte_offset back to where we were.

        bits*4          file_char -
                [Wascontig,Nobackup,Writeback,Readcheck,Writecheck,-
                 Contigb,Locked,Contig,#,#,,Badacl,-
                 Spool,Directory,Badblock,Markdel,Nocharge,Erase,alm_aip,-
                 shelved,scratch,nomove,noshelvable,shelv_res]
        bitfield        !start in bits mode, the next 2 bits define the caching
          position/relative (-24)     !skip back 24 bits, the /relative
                                      !is optional since the value is negative
          integer*2 caching [writethrough,writeback,flush_on_clos,no_cache]
          position /relative (22)     !skip the next 22 bits(in total 3 bytes)
        end bitfield    !back to non field mode again

     This could also have been achieved by
        structure                   !no name attached
          union
            map
              bits*4          file_char -
                [Wascontig,Nobackup,Writeback,Readcheck,Writecheck,-
                 Contigb,Locked,Contig,#,#,,Badacl,-
                 Spool,Directory,Badblock,Markdel,Nocharge,Erase,alm_aip,-
                 shelved,scratch,nomove,noshelvable,shelv_res]
            end map
            map
              byte %temp1
              bitfield
                integer*2 caching [writethrough,writeback,flush_on_clos,no_cache]
              end bitfield      !will align back to the next byte
            end map
          end union
        end structure

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples EXAMPLE_for_ABORT


  The following description is from the SYSUAF description. The
  UAF$B_RTYPE is expected to be 1.

  BYTE UAF$B_RTYPE
  ABORT wrongtype [UAF$B_RTYPE <> 1]
  ....  rest of description

  If the UAF$B_RTYPE is <> 1, DIX will assume that the current record
  cannot be described by this description. DIX will issue a warning
  "description is aborted wrongtype. The description will remain
  open for the file, so if another record does have the right UAF$B_RTYPE
  this record will be displayed using this description.

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples EXAMPLE_for_MAP

           PARAMETER REP_BITS=2
           INTEGER*4 RECNR
           STRUCTURE DATUSR
             DATE*4 DATTIM      !internal date format #minutes since 1857
             UIC*4 UIC          !standard OpenVMS UIC format (group,member)
           END STRUCTURE
           INTEGER*2 type -     !1,4,10 will be by name, all others in
              [1=special,4=normal,10=fatal]    !decimal format
           INTEGER*2 COUNT
           INTEGER*4 RESCHED
           STRUCTURE BITS(REP_BITS)    !2 structures, with both bits*1 flag=1 byte long
             BITS*1 FLAGS [mon,tue,wed,thu,fri,sat,sun]      !the total is 2 bytes
           END STRUCTURE
           UNION

            MAP TYPE=Special    !this case is valid if type=1 (special)
             INTEGER*2 time(2)
            END MAP

            MAP *               !this case is valid for any other field value
             CHARACTER*2 dunnow !
            ENDMAP

            MAP type=normal     !this case is value if type=4 (normal)
             INTEGER*4 time
            ENDMAP

            MAP Type=fatal      !this case is valid if type=10 (fatal)
            ENDMAP              !No allocation is this type
           ENDUNION             !total structure length is dependent on type

           WSTRING*60 MESSAGE   !word counted ASCII string with 60 bytes room
           INTEGER*4 FIELD(1:COUNT)
                                !field has COUNT members

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples EXAMPLE_for_FIELD_FOLLOW

  An example about field_following to another file:

  The example is about 3 RMS indexed files that form a simple source module
  cross_reference system

  The first file (CROSS_REF.CRF_FILE_NAMES) has the following description
  (.CRF_FILE_NAMES in the system or user text library)
          integer*2    file_nr                          !primary key
          character*60 file_name
          integer*2    %filler

  The second file (CROSS_REF.CRF_MOD_NAMES) has the following description
  (.CRF_MOD_NAMES in the system or user text library)
          integer*2    mod_nr                           !primary key
          character*32 mod_name
          integer*2    file_nr/file=.CRF_FILE_NAMES     !link to the filename

  The third file (CROSS_REF.CRF_CROSS) has the following description
  (.CRF_CROSS in the system or user text library)
          integer*2    caller_nr /file=.CRF_MOD_NAMES   !link to module name
          integer*2    called_nr /file=.CRF_MOD_NAMES   !link to module name

  Now if you open a record in the third file
  $ DIX CROSS_REF.CRF_CROSS
  %DIX-I-USINGFIL, Using file DSA40:[DIR]CROSS_REC.CRF_CROSS
  %DIX-I-USINGDES, Using description DIX_SYS(.CRF_CROSS)
  DIX> EXA *
   0|CALLER_NR>|738             !the > tells us there is a link present
   2|CALLED_NR>|-262

  DIX> EXA/DES *
   0|CALLER_NR>|738
     Type      :INTEGER*2
     Linenumber:0
     Variable  :False
     Dependency:False
     Link file :.CRF_MOD_NAMES  !and yes there is a link defined
     Link field:0
     Match     :EQ
   2|CALLED_NR>|-262
     Type      :INTEGER*2
     Linenumber:1
     Variable  :False
     Dependency:False
     Link file :.CRF_MOD_NAMES
     Link field:0
     Match     :EQ

  DIX> Follow CALLER_NR         !try to follow this link
  File .CRF_MOD_NAMES not (yes) opened, open it (y/[n]):Y     !do you want to open the file
  %DIX-I-USINGFIL, Using file DSA40:[DIR]CROSS_REF.CRF_MOD_NAMES
  %DIX-I-USINGDES, Using description DIX_SYS(.CRF_MOD_NAMES)

  DIX> Exa *
  0|MOD_NR  |738
  2|MOD_NAME|CHECK_ALLOWED_USER
 34|FILE_NR>|66                 !and this field has a link defined

  DIX> Follow file_nr
  File .CRF_FILE_NAMES not (yes) opened, open it (y/[n]):y
  %DIX-I-USINGFIL, Using file DSA40:[DIR]CROSS_REF.CRF_FILE_NAMES
  %DIX-I-USINGDES, Using description DIX_SYS(.CRF_FILE_NAMES)

  DIX> Exa *
  0|FILE_NR  |66
  2|FILE_NAME|REM_SERVER_CHECK_ACCESS

  DIX> Back                     !now back trace
  %DIX-I-USINGFIL, Using file DSA40:[DIR]CROSS_REF.CRF_MOD_NAMES
  %DIX-I-USINGDES, Using description DIX_SYS(.CRF_MOD_NAMES)

  DIX> Exa *
  0|MOD_NR  |738
  2|MOD_NAME|CHECK_ALLOWED_USER
 34|FILE_NR>|66

  DIX> Back                     !and again a back trace
  %DIX-I-USINGFIL, Using file DSA40:[DIR]CROSS_REC.CRF_CROSS
  %DIX-I-USINGDES, Using description DIX_SYS(.CRF_CROSS)

  DIX> EXA *
   0|CALLER_NR>|738             !the > tells us the is a link present
   2|CALLED_NR>|-262

  As you see, you can jump around an look at the record structures and links

  Another example is the .DIR description:

  integer*2 verslim [32767=None]                !version limit
  bits*1 flags                                  !flag byte
  string name                                   !bytecounted string (variable)
  pad*2                                         !align to word boundary
  structure v(64)                               !n*version,fileid
    integer*2 version
    fileid    fileid/file=[000000]indexf.sys/record-
       /comp="f$getd($file,""blnr"")+int(f$extr(1,-1,f$elem(0,"","",$FIELD)))"
  end structure

  The fileid has a link to the corresponding INDEXF.SYS with a record number
  equal to the first number in the fileid (layout = (filenr,revnr,volume))
  + the record number in INDEXF.SYS of the file header with fileid 0.

  You need read access to the index file for this

  $ DIX somedir.dir/int
  %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX]SOMEDIR.DIR;1/NOMOD
  %DIX-I-USINGDES, Using description DSA50:[STUBBF.PROGRAMS.DIX]DIX_DES.TLB;54(.DIR)
  DIX> exa *
   0|VERSLIM     |NONE
   2|FLAGS       |
   3|NAME        |Q.Q
   8|V(1).VERSION|1
  10|V(1).FILEID>|(63474,3,0)

  DIX> foll v(1).fileid         !follow link to file header
  File [000000]INDEXF.SYS not (yet) opened, open it (y/[n]):y
  %DIX-I-USINGFIL, Using file USER50:[000000]INDEXF.SYS;1/NOMOD
  %DIX-I-USINGDES, Using description DSA50:[STUBBF.PROGRAMS.DIX]DIX_DES.TLB;54(INDEXF)
  DIX> exa *
    0|ID_OFFSET          |40
    ...
    8|FILE_ID            |(63474,3,0)
    ...
   66|BACKL_FID         >|(62674,1,0)
   80|FNAM               |Q.Q;1
    ...
  DIX> Follow backl_fid         !follow link to parent directory
    0|ID_OFFSET          |40
   ...
    8|FILE_ID            |(62674,1,0)
   ...
   66|BACKL_FID         >|(44986,1,0)
   ...
   80|FNAM               |SOMEDIR.DIR;1
   ...
  DIX> back             !back to the file header

  DIX> exa *
    0|ID_OFFSET          |40
    ...
    8|FILE_ID            |(63474,3,0)
    ...
   66|BACKL_FID         >|(62674,1,0)
   80|FNAM               |Q.Q;1
    ...

  DIX> back             !back to the entry in the somedir.dir file
  %DIX-I-USINGFIL, Using file USER50:[STUBBF.PROGRAMS.DIX]SOMEDIR.DIR;1/NOMOD
  %DIX-I-USINGDES, Using description DSA50:[STUBBF.PROGRAMS.DIX]DIX_DES.TLB;54(.DIR)

  DIX> exa *
   0|VERSLIM     |NONE
   2|FLAGS       |
   3|NAME        |Q.Q
   8|V(1).VERSION|1
  10|V(1).FILEID>|(63474,3,0)

DIX RECORD_FORMAT_FOR_DESCRIPTIONS Control_statements Examples EXAMPLE_for_LIMIT_QUAL


 Example for the /LIMIT qualifier:

  Description
   CHARACTER*10 TEXT
   STRUCTURE data(100)
     INTEGER*4 flag/limit=>100
     CHARACTER*20 what
   END STRUCTURE

  If the field limit contains a value > 100, the repeat for the
  structure data(100) will be terminated.

   CHARACTER*10 TEXT
   STRUCTURE data(100)
     INTEGER*4 flag(5)/limit=>100
     CHARACTER*20 what
   END STRUCTURE

  If the field limit contains a value > 100, the repeat for the
  structure flags (5) will be terminated, but the repeat for
  the structure will be continued

DIX Record_searches


  You can search records in three ways.
  a. Via the key record selection (/ge/gt/eq/le/lt). This will only
     work for indexed or relative files

  b. Via the record selection (/record). This will work for all types of files

  c. Via a search on record contents. This help page describes this method.

  DIX has a powerful record search function. You can look for data in
  records, but also in fields (if you have a description).
  Parameters 2..8 can be used for search input.

  If the fields are not text-fields but binary data, DIX will do a convert
  of the search string to binary and then do the compare.

  DIX also allows you to search data in more than one record, so a query
  like "search a record that contains A and the next record contains B" is
  possible, and this is not limited to just 2 records.

  The search can be a simple locate, or a wildcard match, or a compare
  (le,le,eq,ge,gt), and the compares can be done in any known type.

  The searchsyntax is

    Parameter [parameter2] [parameter3...] Up to 7 parameters.

  If more than one parameter is given, parameter2 must match data in the
  following record, parameter3 in the next record and so on.

  Each parameter has the syntax (a list of values and qualifiers)

    string1[/qual],string2[/qual],..

  Search can be used in 4 places
  Interactive mode : Entered on the command line or in the interactive commands:
                      Will set the record pointer to the first match
  Screen mode      : Will set the record pointer to the first match
  DECwindows mode  : Will set the record pointer to the first match
  File mode        : Will display all records matching the search
                     (unless /count is given)

DIX Record_searches Examples


  All these examples are for the DIX/FILE mode. They can also be used
  for the screen and interactive mode. The file mode will display all matches,
  the interactive and screen will select the first record that matches.

  1. $ DIX/FILE data.dat TEST
     Display all records that contain TEST (/MATCH=LOCATE). The search is
     NOT case sensitive.

  2. $ DIX/FILE data.dat TEST,12/FIELD=FOR*MAT/MATCH=GE
     Display all records that contain TEST (/MATCH=LOCATE),
     OR have the value in any field that matches "FOR*MAT" >=12

  3. $ DIX/FILE data.dat TEST/LOGIC=AND,12/FIELD=FORMAT/MATCH=GE
     Display all records that contain TEST (/MATCH=LOCATE),
     AND have the value of field "FORMAT" >=12

  4. $ DIX/FILE data.dat TEST/WINDOW=(position=10,size=40)
     Display all records that contain TEST (/MATCH=LOCATE) in the
     byte 10..49 of the record. The search is NOT case sensitive.

  5. $ DIX/FILE data.dat *XYZ/MATCH=match
     Display all records that match *XYZ (so the XYZ must be at
     the end of the record.

  6. $ DIX/FILE data.dat "TesT"/case_sensitive
     Display all records that contain TesT is this case.

  7. $ DIX/FILE data.dat string1,string2/next_record/wild=extended
     Display the records that contains string1 and the next record
     matches string2 (with extended wild characters).
     Only the first record is displayed.

  8. $ DIX/FILE data.dat 123:456/match=range/field=myfield
     Displays the records that contain a value between 123 and 456
     (including) in field myfield

  9. $ DIX/FILE data.dat 123/field=myfield/type=integer*2/mat=eq
     Displays the records that contain an value of 123 in the
     first two bytes (converted as integer*2) of the field myfield
     Field myfield does not have to be of type integer.

 10. $ DIX/FILE data.dat 123/field=myfield/type=integer*2/wind=(pos=10)/mat=eq
     Displays the records that contain an value of 123 in the
     bytes 10,11 (converted as integer*2) of the field myfield.
     If bytes 10-11 do not exist in the field, the match returns false.

 11. $ DIX/FILE data.dat 123:456/field=myfield/wind=(pos=10,siz=4)/mat=Range
     Displays the records that contain an value between 123 and 456 in the
     bytes 10-13 (converted as integer*4 (size=4)) of the field myfield.
     If bytes 10-13 do not exist in the field, the match returns false.

 12. $ DIX/file data.dat *str*ing1*/mat=match/wild 1234/matc=eq/field=myfield
     search for a record that match *str*ing1*
     AND the next record contains the value 1234 in field myfield.

 13. $ DIX/FILE data.dat string1 string2 string3
     Will search for a record that contains "string1"
              AND the next record contains "string2"
             AND the third record contains "string3".
     Record 1 will be displayed, record 2 and 3 not.

 14. $ DIX/FILE data.dat string1 string2/show string3/show
     Will search for a record that contains "string1"
              AND the next record containing "string2"
              AND the third record containing "string3".
     Record 1 will not be displayed, record 2 and 3 will.

 15. $ DIX/FILE data.dat string1 10/mat=ge/loca=recl string3
     Will search for a record that contains "string1"
                      AND the next record has a record length of 10 or more,
                      AND the 3 record contains string3

 16. $ DIX/FILE SYSUAF RESTRICTED/field=*flag*/mat=eq
     Will search all SYSUAF records that have ONLY the restricted flag

 17. $ DIX/FILE SYSUAF DISACNT/field=*flag*/mat=ge
     Will search all SYSUAF records that have AT LEAST the DISACNT flag

 18. $ DIX/FILE filename "1"/win=(pos=0,size=1)/log=and,1/loca=recl/match=eq
     Will search all records with a ! in the first position
     and no more on the line (record length=1)

 19. $ DIX/FILE filename 10:12/loca=recl/match=range
     Will search all records with a record length between 10 and 12

DIX Record_searches SEARCH_Qualifiers


DIX Record_searches SEARCH_Qualifiers /BACKWARD


  Search the file in the backward direction. Beware that this may take
  a long time, especially for sequential files (backspace is implemented
  as a rewind/read n-1 records).

DIX Record_searches SEARCH_Qualifiers /CASE_SENSITIVE


  The text in STRING is to be matched case sensitive. DCL will change
  all parameters to uppercase unless within quotes. So if you use
  /case_sensitive, make sure STRING is within quotes.
  This qualifier is positional, so each search item can have its own value.

DIX Record_searches SEARCH_Qualifiers /EXISTS


  If the /field is specified, DIX checks if the field is present.
  If the /WINDOW is also used, DIX checks if the range specified
  is in the record (no /FIELD) or in the field.
  The search string will not be used in this case.

DIX Record_searches SEARCH_Qualifiers /FIELD

  /FIELD=NAMEMASK

  namemask is fieldnamemask
              descriptionmask\fieldnamemask
              filenamemask\descriptionmask\fieldnamemask

  If filename mask is present, the pattern is matched against the filename
   if no match is found, this entry is skipped.
  If descriptionname mask is present, the pattern is matched against the
   description. If no match is found, this entry is skipped.

  Normally DIX will search the string in the whole record. If you
  enter /FIELD only the field(s) that match the "fieldnamemask"
  are searched. This match uses the normal OpenVMS wildcard * and %.
  See the examples, see also the /WINDOW qualifier.

  The type of the field (integer, character, etc.) determines the way the
  compares are done. For example, for INTEGERS the compare is done in
  binary etc.
  This qualifier is positional, so each search item can have its own value.

DIX Record_searches SEARCH_Qualifiers /LOCATION

  /LOCATION=location_value

  Where the data should be searched.
  location_value can be
   data : The normal data (Default)
   VFC  : The VFC data
   both : In the VFC as well in the normal data
   recl : Special value for comparing record_length. In the case only the
          /match=lt,le,eq,ge,gt and range can be used. The default will be eq

DIX Record_searches SEARCH_Qualifiers /LOGIC

 /LOGIC=AND
 /LOGIC=OR   !Default

  If you specify /LOGIC=AND, this string must match as well as the next.
  This qualifier is positional, so each search item can have its own value.

  Example:

  STRING1/LOGIC=AND,STRING2

  Matches only if both STRING1 and STRING2 are found.

  STRING1/LOGIC=OR,STRING2   (the /logic=or is default)

  Matches only if either STRING1 or STRING2 are found.

  STRING/LOGIC=AND,STRING2,STRING3

  Matches only if either (STRING1 and STRING2) or STRING3 is found.

DIX Record_searches SEARCH_Qualifiers /MATCH

 /MATCH=LOCATE  (Default)
 /MATCH=MATCH
 /MATCH=LT
 /MATCH=LE
 /MATCH=EQ
 /MATCH=GE
 /MATCH=GT
 /MATCH=RANGE

  Defines the match.
  This qualifier is positional, so each search item can have its own value.

  See also the /wildcard qualifier

  LOCATE : The string must occur somewhere in the (part of the) record
  MATCH  : The string must match the whole record
   LE,LE,EQ,GE,GT :
          The value is compared with the STRING. This can be used with a /FIELD
          If the field value is a numeric value, compares are done in the normal
          numeric way. If the field value is a STRING, compares are done as
          strings. See also the /TYPE command to overrule the default type.
          For the [R]BIT datatype DIX has the following rule:
          LE : All specified bits may be present, but not more
          GE : All specified bits must be present, but there may be more
          LT : All specified bits may not be present
          EQ : All specified bits must be present, but not more

  RANGE : The search string is LOW:HIGH. A match will be found it the value
           is between LOW and HIGH (including the boundaries).

  Example:

   123/FIELD=UAF$W_BYTLM/MATCH=GE        (binary (integer*2)   field)
   Will display all records with the UAF$W_BYTLM value >=123.  (binary compare)

   XYZ/FIELD=UAF$T_USERNAME/MATCH=LT     (ASCII (character*12) field)
   Will display all records with the UAF$T_USERNAME value <XYZ (ASCII compare)

   123:345/field=UAF$L_BYTLM/MATCH=RANGE (binary (integer*4) field)
   Will display all records with BYTLM between 124 and 345

DIX Record_searches SEARCH_Qualifiers /NEXT_RECORD


 With the /NEXT_RECORD you can specify a search over more than one record.
 If you specify string1,string2/next_record, DIX will look for records that
 contain string1 in this record and string2 in the next record.
 This should normally be done by using more than one parameter, and the above
 example is equivalent to : string1 string2, but if you need more than
 6 records to match, you need this option (DCL allows only 8 parameters).
 This qualifier is positional, so each search item can have its own value.

DIX Record_searches SEARCH_Qualifiers /NOT


  The result of the test will be reversed. So a match with /LOCATE will return
  true if the string is not found.
  This qualifier is positional, so each search item can have its own value.

DIX Record_searches SEARCH_Qualifiers /RECORD

  /RECORD=N

  Start search at record N. If /record is not specified, DIX will start the
  search from the first (or current) record
  N can be negative, in that case DIX will start from N record before the
  end_of_file.
  See also the /LIMIT qualifier.
  Example:
  (assume a file of 50 records)

  /RECORD=5/LIMIT=10   ! Search record 4..14
  /RECORD=-10/LIMIT=4  ! Search record 41..44

DIX Record_searches SEARCH_Qualifiers /SHOW


  If no /show is given on a multi record search, the first record is displayed
  You can give a /show for any of for all records. See the examples

DIX Record_searches SEARCH_Qualifiers /TYPE

  /TYPE=datatype[*size]

  This allows you to overrule the default datatype (the type of the field,
  or CHARACTER if no field is given). Datatype can be any valid declaration
  i.e. INTEGER, CHARACTER, UIC, BITS, etc.
  The size has its default for each datatype (see the description help)
  "help record_format_for_descriptions field_decl"

DIX Record_searches SEARCH_Qualifiers /WINDOW

  /WINDOW=(position=n,size=m)
  Do not use the whole record, but take a subset. See also the /FIELD qualifier.
  Position starts at byte 0. Size defaults to 1. If the /TYPE is used, the
  size defaults to the size of the datatype.
  This qualifier is positional, so each search item can have its own value.

DIX Record_searches SEARCH_Qualifiers /WILDCARD

  /WILDCARD=NONE
  /WILDCARD=STANDARD    (Default)
  /WILDCARD=EXTENDED

  /WILDCARD=NONE     No wildcard matching is used.
  /WILDCARD=STANDARD The following wildcard characters can be used
            *     : matches all substrings (0 or more chars)
            %     : matches exactly 1 char
  /WILDCARD=EXTENDED The Following extended wildcard characters can be used
            [abc] : Matches a "a" or a "b" or a "c"
            [-abc]: Matches anything except a,b,c
            [a-z] : Matches all letters (a-z)
            [-a-z]: Matches anything except letters
            'a    : Char "a" is no longer a special char ([*%' etc.)
            ~     : If in front of the search string, the search string must be in the
                    beginning of the line, if at the end of the search string,
                    the search string must be at the end of the line
            !     : Matches one or more whitespace chars

DIX Record_searches SEARCH_Qualifiers /VALID


  The search string must be converted to a specific type.
  If this conversion succeeds, this match succeeds

  This qualifier can be useful if you have specified a /FIELD with
  a wildcard somewhere, and the matching fields have different types.

DIX Default_descriptions


  DIX has a number of descriptions. They are stored in the DIX_DES.TLB
  file. If you want to add descriptions you may add them to this .TLB file,
  or if you do not have write access to this file, you may add them
  to the DIX_DES_USER.TLB file which can be placed in your own directory.
  See the help about [DIX/HELP] "/user_library".
  The standard descriptions are (besides a number of entries for my own use)

DIX Default_descriptions $AREA

   A description for a disk block containing one or more indexed-files
    areas. You must open the indexed-file in block-mode.

    DIX[/int] indexedfile/block=1/record=n/descr=$area

   If the record=n points to a block that contains areas, this
   description will show the contents of the area(s).

DIX Default_descriptions $BUCKET

   A description for a disk block(s) containing one or more indexed-files
    buckets. You must open the indexed-file in block-mode.

    DIX[/int] indexedfile/block=k/record=n/descr=$bucket
    DIX> exa *
    DIX> FULL_BUCKET=1
    DIX> exami/expand

    in the /block=k, the k is the bucket_size of this bucket.
    If the record=n points to a block that contains a bucket, this
    description will show the contents of the bucket.
    All variants of the bucket (INDEX, SIDR and DATA) are supported
    If you want to see the contents of the record data in the
    data-buckets, you must define a symbol FULL_BUCKET.

DIX Default_descriptions $DEFAULT

   A default description containing

    BYTEARR $BYTES(record_length)
    CHARACTER*(record_length) $LINE
    CHARACTER $CHARS(record_length)

DIX Default_descriptions $KEY

   A description for a disk block(s) containing one or more indexed-files
    key blocks. You must open the indexed-file in block-mode.
    DIX[/int] indexedfile/block=1/record=n/descr=$key

    If the record=n points to a block that contains a key block, this
    description will show the contents of the key.

DIX Default_descriptions $PROLOGUE


   A description for a disk block(s) containing and indexed/relative-file
    prologue block. You must open the indexed-file in block-mode.
    The prologue block is the first block in the file.

    DIX[/int] indexedfile/block=1/record=1/descr=$prologue

DIX Default_descriptions $LINE


    The whole record will be display as a character line.
    Unprintables will be displayed depending on the "SET FORMAT" command

DIX Default_descriptions *DAF*.DAT


    The layout of the All-In-1/office-server DAF file records.

DIX Default_descriptions .AUDIT$JOURNAL


   The layout of the SECURITY.AUDIT$JOURNAL file.

DIX Default_descriptions .BCK|.SAV


  The layout of a backup save set
  This description will match all files with names *.BCK and *.SAV

DIX Default_descriptions .DIR


    The layout of directory file records

DIX Default_descriptions ACCOUNTNG


    The layout of ACCOUNTNG.DAT file records

DIX Default_descriptions DOCDB


    The layout of the All-In-1/office-server DOCDB file records.

DIX Default_descriptions FILECAB


   The layout of the All-In-1/office-server FILECAB file records.

DIX Default_descriptions INDEXF


    The layout of the INDEXF.SYS file records, but only those records
    that contain file headers. The first few hundred blocks contain
    a bitmap of used file headers

DIX Default_descriptions LMF$LURT


    The layout of the LMF$LURT file. This file contains the information about
     how many license points are needed for all computer types for
     the various types of licences

DIX Default_descriptions MONITOR


   Files containing monitor recording files

DIX Default_descriptions NETPROXY


  The contents for the NETPROXY file

DIX Default_descriptions NET$PROXY


  The contents for the NET$PROXY file

DIX Default_descriptions NETWORK


    The layout of the All-In-1/office-server NETWORK file records.

DIX Default_descriptions PARTITION


    The layout of the All-In-1/office-server PARTITION file records.

DIX Default_descriptions PENDING


    The layout of the All-In-1/office-server PENDING file records.

DIX Default_descriptions PROFILE


    The layout of the All-In-1/office-server PROFILE file records.

DIX Default_descriptions QUOTA.SYS


   The layout of disk quota files, disk:[000000]QUOTA.SYS

DIX Default_descriptions RESERVATIONS


    The layout of the All-In-1/office-server RESERVATIONS file records.

DIX Default_descriptions RIGHTSLIST


    The layout of the RIGHTSLIST file records.

DIX Default_descriptions SYSUAF


    The layout of the SYSUAF file records.

DIX Default_descriptions SYSDUMP.DMP


  The layout of the first (2) block(s) of the SYSDUMP.DMP file
   To be used with $ DIX/block=2 SYS$SYSTEM:SYSDUMP.DMP

DIX Default_descriptions VMS$PASSWORD_HISTORY


    The layout of the VMS$PASSWORD_HISTORY file records.

DIX Default_descriptions VMSMAIL_PROFILE


    The layout of the VMSMAIL_PROFILE file records.

DIX Case_sensitivity


  By default, DIX is not case sensitive, all commands/data will
  be converted to upper case (unless within quotes).

  You can enable case_sensitivity via the interactive command
  DIX> enable case or disable case or set process/case_lookup

  You can also enable case_sensitivity on the command line via
  the /flag=case_sensitive, but you also need to tell DCL that
  you want case_sensitive mode via the command:
  $ SET PROCESS/PARSE_STYLE=EXTENDED
  I am sorry, but that will not work on VAX (and older alpha versions)

  If you work in case_sensitive mode, all symbol/field/parameter
  names are case sensitive, and also values from commands are not
  uppercased. So i.e. if you want to read a record from an indexed
  file (with the /eq=xyz qualifier), you need to specify xyz in
  the correct case (and you do not need the ""'s)

  For more info see the help about "interac set case"

  Examples:
  DIX> exa sym1         !in case sensitive mode the symbol sym1 is printed
                        !in not case_sensitive mode SYM1
  DIX> exa "sym1"       !in both cases the sym1 is printed

DIX Version_history


 Version Author       Date   Comment
  1.0     F.S.   19-jan-1991 Initial release
  1.1     F.S.    1-mar-1991 Support for sequential files
  2.0     F.S.    1-jan-1992 Use of SMG routines
  2.1     F.S.   26-feb-1992 Support block I/O
  2.2     F.S.   27-feb-1992 Support fieldnames for bits values
  2.3     F.S.   18-mar-1992 Support for multiple files
  3.0     F.S.    1-jul-1998 Multiple changes
                              support for parameters
                              support for run-time evaluation of expressions
  3.1     F.S.   10-mar-2003 Support for scripting in interactive mode
  3.2     F.S.   16-Jun-2003 Added user defined keys
  4.0     F.S.    7-may-2004 Added user defined types
  5.0     F.S.   19-apr-2006 Added a lot of new features, see the release_notes
  6.0     F.S.    1-dec-2006 Added DECwindow interface
  7.0     F.S.    1-feb-2008 Added views and a lot more
  7.1     F.S.   14-apr-2009 Added a lot of DCL compatibility
  7.2     F.S.    1-dec-2009 Added compiled scripts/indexed symbols
  8.0     F.S.    1-oct-2011 Added plot command
  8.1     F.S.   22-mar-2012 Added plotting of CSV files
  8.2     F.S.   31-oct-2012 plotting pie charts.
  8.3     F.S.    1-oct-2013 Smaller enhancements, access to library modules
                             Added description and structured type symbols.
  8.4     F.S.    1-jun-2014 A lot of smaller enhancements, Added complex datatype
                             Added auto command completion (set term/auto)
  8.5     F.S.    1-mar-2016 Smaller enhancements', added pdf output for plots
  8.6     F.S.    1-sep-2016 Added checksums for sha, md5
  8.7     F.S.    1-jan-2019 Added the DECENT command
c

DIX Qualifiers


DIX Qualifiers /AUTOSAVE

 For interactive, screen and DECwindows mode only.
  Set the autosave flag to enabled. If you later exit DIX, the
  context will be saved, and you can restore with DIX/RESTORE
  See also the "modes restore", "interactive_com set auto" help

DIX Qualifiers /ATTRIBUTES


   In DECwindows mode only. You can set some attributes of the DECwindows
   displays. You can later change them via the interactive command
   SET DECW[/qualifiers]

  Syntax /ATTRIBUTES=(attr,attr...)

 Attr can be

  HEIGHT=n       : The height of the main display in pixels
                    The default is 80 characters, so it depends on the font
  WIDTH=n        : The width of the main display in pixels
                    The default is 30 lines, so it depends on the font
  FONT=name      : Name can be Small, Medium, Large, name=fontname
                    The default is medium on display with more than 1024
                    pixels, and small for smaller ones.
  COLOUR=display=(fore=colour,back=colour,High=colour)
                  : Change the colours for the various displays
                    The default colours are
                     background=gray50, foreground=white, high=red
    Display can be
         main       The main display
         offset     The offset part of the main display
         field      The field part of the main display
         value      The value part of the main display
         bar        The scroll bars
         menu       The menu
         message    The message display
         alldisplay The all-format display
         desdisplay The description display

DIX Qualifiers /BINARY

  If the /BINARY qualifier is given, the program will display the data
  in binary.

  The default is /HEX in raw dump mode.
  The default is /DECIMAL in interpreted mode.
  See also the /HEX, /BINARY and /OCTAL qualifier.

   /BINARY is a shortcut for /radix=2

DIX Qualifiers /BLOCKED

  /BLOCKED[=blocksize]
  /BLOCKED[=blocksize.bytesize]

  If the /BLOCK qualifier is specified, the file is accessed via block I/O.
  You can either specify a number, this will interpreted as a number of
  disk blocks, or a block.byte where you can specify part of one or more
  blocks. The total size cannot exceed 65535.

  The data transfer is done via a blocksize 512 bytes, and
  no record structure is assumed. This method can destroy file/record
  integrity and should only be used if you know what you are doing.
  Blocksize is default 1 (512 bytes if you specify /BLOCKED).
  It can be useful for files with undefined record type (as the DUMP file).

  In blockmode you can use the /record=n qualifier to select the 'n'th
   record of the /blnr=n to start the read at virtual blocknumber 'n'

  Examples:

  $ DIX/INT filename/block=4    !use a block size of 4*512 bytes
  $ DIX/INT filename/block=0.32   !Use a blocksize of 32 bytes
  $ DIX/INT filename/block=2.32   !Use a lblocksize of 1056 (2*512+32)
  $ DIX/INT filename/block=0.1056 !the same as above

  $ DIX/INT filename/block=0.128/rec=6  !read blocknumber 2, bytes 128..255
  $ DIX/INT filename/block=0.128/blnr=2 !read blocknumber 2, bytes 0..127
  $ DIX/INT filename/block=2/rec=4      !read blocknumber 7 and 8
  $ DIX/INT filename/block=2/blnr=4     !read blocknumber 4 and 5

DIX Qualifiers /BLNR

  /BLNR=nn

  If block mode I/O, you can select a virtual blocknumber to start the read

  $ DIX/INT filename/block=0.128/rec=6  !read blocknumber 2, bytes 128..255
  $ DIX/INT filename/block=0.128/blnr=2 !read blocknumber 2, bytes 0..127
  $ DIX/INT filename/block=2/rec=4      !read blocknumber 7 and 8
  $ DIX/INT filename/block=2/blnr=4     !read blocknumber 4 and 5

DIX Qualifiers /COMMAND

  /COMMAND dix_command(s)  In command mode
  /COMMAND=dix_command(s)  In interactive mode

  The command mode will start DIX and execute dix_command with all
  functions available in interactive mode. You may specify multiple
  commands separated by ;'s
      command;command;command..
  This mode does not allow parameters.

  In interactive mode (DIX/inter/command=(command[,command)) [parameters]
   The will startup DIX in interactive mode, inclusive the parameters
   and execute the commands.

  COmmand lines not starting with a /, will have the /command qualifier
  inserted before the line, unless the symbol DIX_NO_AUTO_COMMAND is set to Y

  Examples:

   DIX/COMMAND dir *.*/sort=(organization,date=creat)
    Will generate a list of files sorted by
      1. Organization (idx,rel,seq)
      2. The creating date

   DIX/INTER/COMMAND=("while true","exam uaf$t_user*","next rec","end while") -
            sysuaf

    Display a list of users defined in the SYSUAF file.

DIX Qualifiers /COMPRESS


  By default DIX will display all fields. If you specified /COMPRESS,
  "empty" fields will not be displayed.
  For text data "empty" means all blank (spaces, binary %X20)
  For binary data "empty" means all zeros (binary %X00)

DIX Qualifiers /COUNT

  /COUNT[=number]

  If the /COUNT qualifier is given, the program will dump "number"
  records. If number is omitted, DIX will default to /COUNT=1
  if a record is specified via the /LT,../GT or the /RECORD qualifier and
  to /COUNT=0 (all records) otherwise.
  This will only work in FILE_ORIENTED mode.
  The /LIMIT qualifier limits the number of records searched, the
      /COUNT the number of results

DIX Qualifiers /CSV

  /CSV
   /CSV=(Csv_option[,csv_option...])

  Csv_option can be
   HEADER    : Print a header line before all data
   NOQUOTES  : Do not 'quote' fields (see below)
   ALL_QUOTES: User quotes around all fields
   SEPARATOR=COMMA    : Use COMMA as separator     (Default)
   SEPARATOR=TAB      : Use TAB char as separator
   SEPARATOR=COLON    : Use COLON (:) as separator
   SEPARATOR=BAR      : Use | as separator
   SEPARATOR=SEMICOLON: Use SEMICOLON (;) as separator
   SEPARATOR=CHARACTER=%Xdd : Use %Xdd as separator
   QUOTE=DOUBLEQUOTE   : Use the " character for quotes around fields (Default)
   QUOTE=QUOTE         : Use the ' character for quotes around fields
   QUOTE=CHARACTER=%Xdd: Use the %Xdd character for quotes around field

  If you want quoting (the default), DIX will insert the "quotecharacter"
  around text fields and field that contain the "separatorcharacter" or space

  If you specify ALL_QUOTES, DIX will insert the "quotecharacter"
  around all fields.

  If you specify NOQUOTES, DIX will never insert the "quotecharacter"

  The header fields are regarded as "text" fields.

  See also the /SELECT qualifier for help about selection of fields

  Example:

  DIX/FILE/CSV=(header,all_quotes,quote=quote,separator=semicolon) file
    Output is a file with all fields quoted, using ' as quote and ; as
    separator with a header line.

  DIX/FILE/CSV=(header,noquote,separator=char=32) file
  or
  DIX/FILE/CSV=(noquote,separator=char=%X20) file
    Output is a file with no fields quoted, and SPACE as separator

DIX Qualifiers /DECIMAL

  If the /DECIMAL qualifier is given, the program will display the data
  in decimal.

  The default is /HEX in raw dump mode.
  The default is /DECIMAL in interpreted mode.
  See also the /HEX, /BINARY, /OCTAL and /RADIX qualifier.
   /DECIMAL is a shortcut for /radix=10

DIX Qualifiers /DECWINDOW

  /DECWINDOW

  If the /DECWINDOW qualifier is given, the program will display a
  record, (either interpreted or raw) and lets you specify
  editing (only in /MODIFY mode) or display commands. You can
   1. Alter display formats (raw/interpreted)
   2. Modify/insert/delete records (only in modify mode)

   Press the PF2/HELP key for info in screen mode.
  The /DECWINDOW qualifier must be the first on the command line.
  This mode will only work if you have DECwindows installed.

DIX Qualifiers /DEFINE


  /DEFINE=(definition[,definition...])

  A definition can be
  1. name       : This will deliver an integer symbol with the value 1
  2. name=value : DIX will try to convert value to integer. If this
                  succeeds an integer symbol will be defined. If this
                  fails a character symbol will be defined.
  See also the /script qualifier

DIX Qualifiers /DEMO


  DIX/DEMO [demoname]

  The [demoname] is a mask for the selection of demos.

  Start a demonstration. If you do not specify the demoname, or the
  mask matches more than one demo DIX will display a screen with a list
  of demos. You can then select one and a demo slide-show will begin.

DIX Qualifiers /DISPLAY

   /DISPLAY=(displayitem[,displayitem...])
   /DISPLAY=ALL Default

  Valid with /FILE only. This qualifier defines which parts of the
                         record are printed.

  Valid displayitems are
  [NO]RECNR     : Print the record number
  [NO]RECSIZE   : Print the record size
  [NO]VFC       : Print the VFC part of the record (If the file contains VFC data)
  [NO]DATA      : Print the data part of the record
  [NO]RFA       : Print the RFA of the record
  ALL           : Print all parts
  WHOLE_RECORD  : Do not try to format, just dump the whole record. In this case
                  all other flags are cleared. You may use /FORMAT to select the
                  display of binary data, the default is passall. You may also
                  specify /display=(whole,[recnr],[recsize],[rfa]) to add an
                  additional record with this info.
  [NO]WRAP      : If set, DIX will wrap output to terminal width. The default is WRAP
  [NO]BIT_OFFSET: Force offsets to be displayed with the bit offset part.
                   Normally DIX displays bit_offsets only if somewhere in the
                   record a data field is not byte aligned.
  SEPARATOR=sep : Set the separator between offsets/fieldnames/data
                   Allowed options are
                    SEPARATOR=COMMA    : Use COMMA as separator
                    SEPARATOR=TAB      : Use TAB char as separator
                    SEPARATOR=COLON    : Use COLON (:) a separator
                    SEPARATOR=SEMICOLON: Use SEMICOLON (;) as separator
                    SEPARATOR=BAR      : Use | as separator (Default)
                    SEPARATOR=CHARACTER=%Xdd: Use %Xdd as separator
  DESCRIPTION   : Display the description of a field after the field data.

DIX Qualifiers /EBCDIC


  The file contains EBCDIC data.
  DIX assumes the whole record is EBCDIC. You can also define fields
  with EBCDIC contents. If you have a description present, DIX will
  add a /EBCDIC to all fields. If you have no description the raw display
  will display the data after conversion to ASCII

DIX Qualifiers /FAST

  /FAST=number
  /FAST=1024  (Default)

  If you specify /FAST, DIX will read the file bypassing RMS, using
  SYS$QIOW to access the data blocks. This may speed up searches for
  indexed files, skipping the overhead for RMS-locking. It also allows
  you to read (not modify) files that are locked. Since DIX bypasses
  RMS locking there is no guarantee that you will get the correct data,
  you are completely on your own.

  If number is positive, it specifies the size of the buffers
    (in blocks), DIX will use for file I/O.
  If you specify number as -1, DIX will
    map the file in memory via a SYS$CRMPSC function and all I/O
    will be done via paging. On Alpha and IA64 DIX will choose
    between p0 and p2 space depending on the size of the file.
    Specifying number=-2, will force p2 space.

  For searches though files it may speed up things, but not always.
  It depends on how the buckets are distributed over the file.
  If the buckets are mostly sequential in the file,
  DIX can use large buffers, and read many buckets in one I/O. If
  buckets are scattered over the file, these large reads will not be
  beneficial, and a normal search with the SYS$GET may be faster.
  The qualifier is supported for all types of files, but the gain for
  non-indexed files may be small.

DIX Qualifiers /FILE


  DIX will dump the record(s) like OpenVMS dump, or if a description
  is given in description format. If you do not specify /COUNT DIX
  will output all records of the file.
  The /FILE qualifier must be the first on the command line.

DIX Qualifiers /FLAG

  /FLAG=(name[,name...])

   Set initial mode settings for interactive, DECwindows and screen mode

   name can be
   DCL_COMPATIBLE : For scripts
   DCL_FALLBACK   : Dcl_compat + spawning of unknown verbs
   USE_MOUSE      : Enable mouse usage
   LOW_FIRST      : For multidimensional tables
   CASE_SENSITIVE : Enable case sensitive mode

   For more info see the help in interactive_mode set ...

DIX Qualifiers /FOLLOW


  /FOLLOW=(begin,[skipkey])
  /FOLLOW=(end[,skipkey])
  /FOLLOW=(field[,skipkey])

  This is an easy way to generate a one line view
  The generated source for the view file is
     "field/foll=begin|end|field[/skipkey] *"
  See the documentation about VIEWs for more info

  If you have a file with a description that contains a link to another file
  DIX can automatically include the fields from that file.
  If you specify /FOLLOW=BEGIN, DIX will first follow all link fields, and
     then display all fields of current description
  If you specify /FOLLOW=END, DIX will first display all fields of the
     current description, and then the follow fields.
  If you specify /FOLLOW=FIELD, DIX will follow the link directly after
     the follow field is found.
  If you ADD the skipkeys keyword, DIX will not print the keyfields of
     the followed file, since that value will probably also be a field
     in the follow field.

  Examples:
   This example is a set of the files that make a (simple) cross reference
   system

   File 1. name.CRF_CROSS
    Contains records with 2 numbers.
      First the module number of the caller
      And then the module number of the callee

        integer*2 /file=.CRF_MOD_NAMES caller_nr !link to mod_names
        integer*2 /file=.CRF_MOD_NAMES called_nr !link to mod_names

   File 2. name.CRF_MOD_NAMES
    Contains the module number and the name and a link to the filename
     There is a key on the mod_nr

        integer*2    mod_nr
        character*32 mod_name
        integer*2    /file=.CRF_FILE_NAMES file_nr !link to file_names

   File 3. name.CRF_FILE_NAMES
    Contains the file number and the file name
     There is a key on the file_nr

        integer*2    file_nr
        character*60 file_name

    $ DIX/FILE/COUNT=1/CSV=HEADER name.CRF_CROSS        !DIX will not follow the links
    "CALLER_NR","CALLED_NR"
    738,-262

    $ DIX/FILE/COUNT=1/CSV=HEADER name.CRF_CROSS/FOLLOW=END
    "CALLER_NR","CALLED_NR",
       "MOD_NR","MOD_NAME","FILE_NR",
             "FILE_NR","FILE_NAME",
       "MOD_NR","MOD_NAME","FILE_NR",
             "FILE_NR","FILE_NAME"
    738,-262,                           !both caller and callee
       738,"CHECK_ALLOWED_USER",66,     !info about caller number
              66,"REM_SERVER_CHECK_ACCESS",  !and its file
       -262,"SYS$VERIFY_PROXY",69,      !info about callee
              69,"SYSTEM"                    !and its file

     The indentation is only to show the actions.

    $ DIX/FILE/COUNT=1/CSV=HEADER name.CRF_CROSS/FOLLOW=FIELD
     "CALLER_NR",
       "MOD_NR","MOD_NAME","FILE_NR",
         "FILE_NR","FILE_NAME",
     "CALLED_NR",
       "MOD_NR","MOD_NAME","FILE_NR",
         "FILE_NR","FILE_NAME"
     738,                               !caller number
        738,"CHECK_ALLOWED_USER",66,     !its name
           66,"REM_SERVER_CHECK_ACCESS",  !and its file
     -262,                              !callee number
        -262,"SYS$VERIFY_PROXY",69,      !its name
           69,"SYSTEM"                    !and its file

     Again, the indentation is only to show the actions.

     You will see that the mod_nr and file_nr are specified twice
     If you had added a SKIPKEYS, the display would have been

    $ DIX/FILE/COUNT=1/CSV=HEADER name.CRF_CROSS/FOLLOW=(FIELD,skip)
     "CALLER_NR",
       "MOD_NAME","FILE_NR",
         "FILE_NAME",
     "CALLED_NR",
       "MOD_NAME","FILE_NR",
         "FILE_NAME"
     738,                           !caller number
        "CHECK_ALLOWED_USER",66,      !its name
           "REM_SERVER_CHECK_ACCESS",  !and its file
     -262,                          !callee number
        "SYS$VERIFY_PROXY",69,        !its name
           "SYSTEM"                     !and its file

       The display of the MOD_NR/FILE_NR for the second and third
        level files are now gone, since they are the key values

DIX Qualifiers /FORMAT

  /FORMAT=(option,option...)

  /FORMAT=(DOT,ANSI)     (Default)

  Normally all "character"-like fields will not contain unprintable data.
  These field types are CHARACTER,xSTRING.
  If the data does contain unprintables (hex 0:1f,7f,80:9f or ff, this
  includes the TAB character) the /FORMAT qualifier determines how this
  data should be displayed.

   Option can be
    DOT   :All unprintables are replaced by a ".". This encoding is not
            reversible, after an unprintable value is replaced by a ".",
            DIX cannot know what the unprintable value was. This may
            be a problem in the screen mode.
    HEX   :All unprintable data is displayed as %Xdd, a hexadecimal display.
            A % in the data will be displayed as %%. This display is reversible,
            so DIX can reconstruct the original unprintable value.
            If you are in this mode, on input a % must be entered as %%
    PASSALL:DIX will not change the unprintable data. The data is displayed as
            it is. This mode will not work in screen mode, and maybe poorly
            when the output device is a terminal.
    DUMP   :Unprintable bytes are represented by a 2 or 3 letter mnemonic
            like <DEL> or <CR>. A < in the text will be displayed as <<.
            This display is reversible, so DIX can reconstruct the original
            unprintable value.
            If you are in this mode, on input a < must be entered as <<

    ANSI   :In combination with one of the first 4, allow ansi sequences to
            be printed 
    SPECIAL:In combination with one of the first 4, allow BEEP (char(7)) and
            TAB (char(9)) to be printed

DIX Qualifiers /HEX


  If the /HEX qualifier is given, the program will display the data
  in hexadecimal.
  In interpreted mode the CHARACTER*(*) fields will be dumped in
  ascending order separated by spaces. All other fields will be dumped
  in descending byte order (the OpenVMS standard).

  The default is /HEX in raw dump mode.
  The default is /DECIMAL in interpreted mode.
  See also the /HEX, /BINARY, /OCTAL and /RADIX qualifier.

   /HEX is a shortcut for /radix=16

DIX Qualifiers /INTERACTIVE


  Enters INTERACTIVE mode. This is a command line mode that allows you to
  enter commands at the prompt. This mode is useful for DCL procedures.
  See the INTERACTIVE_COMMANDS help for possible commands.
  This mode also supports scripting commands (IF, GOTO etc.).

  The /INTERACTIVE qualifier must be the first on the command line.

  Example:

  $ DIX/INTERACTIVE SYSUAF/EQ=SYSTEM
  Processing file: SYS$COMMON:[SYSEXE]SYSUAF.DAT;1/NOMOD
  Using description: DSA0:[PROGRAMS.DIX]DIX_DES.TLB;9(SYSUAF)
  DIX> disp *pwd*
  340.0|UAF$Q_PWD(1)      |22B619B5
  344.0|UAF$Q_PWD(2)      |E19FAE22
  348.0|UAF$Q_PWD2(1)     |00000000
  352.0|UAF$Q_PWD2(2)     |00000000
  362.0|UAF$B_PWD_LENGTH  |8
  372.0|UAF$Q_PWD_LIFETIME|30 00:00:00.00
  380.0|UAF$Q_PWD_DATE    |17-MAY-2002 18:34:12.00
  388.0|UAF$Q_PWD2_DATE   |17-NOV-1858 00:00:00.00
  DIX> EXIT

  You can type HELP at the prompt to obtain online help.

DIX Qualifiers /KEYBOARD

  /KEYBOARD=value

   Define the input keyboard. Value can be
    Normal : The LK45X keyboard layout
    PC     : The normal PC-type keyboard. Since the PC-keyboard
             misses some keys, those keys are redefined. This is
             visible in the help.
             f13..f20 are displayed as Shift-F3..Shift-f10
             Find                      Home
             Select                    End
             Next_screen               PageDown
             Prev_screen               Pageup
    LAPTOP : The normal LAPTOP misses also the PF1-PF4 keys, they
             are redefined to ^F, ^G, ^K and ^L as well as the PC
             keyboard modifications.

    EXTENDED: Use extend input method for command input
              See the set terminal/exten for more info

DIX Qualifiers /LIMIT


  Set limits to the records DIX will process from this file

  For indexed files
   /LIMIT=(value=end,key=nn)         !limit to key value <=end
   /LIMIT=(value=(begin,end),key=nn) !limit to key values >=beg and <=end
   /LIMIT=(number,value=(begin,end),key=nn) !limit to record numbers
                                            !>=beg and <=end for key nn

  For non-indexed files or if you do not want to use key values but record numbers
   /LIMIT=(number,value=end)         !limit to record number <=end
   /LIMIT=(number,value=(begin,end)) !limit to record number >=beg and <=end

  Limit the number of records searched. If /limit is not specified
  DIX will process all records of the file.

  If /LIMIT=VALUE=nnnnn the nnnnn is the last record number searched
  If /LIMIT=VALUE=(xyx,key) the xyz is the last key value processed

  Together with the /RECORD, you can search a part of the file
  The /COUNT qualifier limits the number of records printed.

  If the begin is set, DIX will position the file on the first record
  that satisfies the record/key value.
  If the end is set, DIX will issue a warning when the
  record number/keyvalue exceeds the value

  Example:

   $ DIX/FILE myfile.dat/limit=value=10
     Will process records 1..10 of the file
   $ DIX/FILE myfile.dat/limit=value=(4,10)
     Will process records 4..10 of the file
   $ DIX/FILE myfile.dat/limit=(key=0,value=("A","B") )
     Will process records with keyvalues >="A" and <="B" of the file

DIX Qualifiers /LOCKING

  /LOCKING=(val,val...)

  Val can be
  RRL      : Read all record with the RAB$M_RRL option. This means that even
             if the record is locked by another stream, DIX can read it.
             The usage is at your own risk, since any other user can
             modify the data you are looking at (and possibly change).

 OPTIMISTIC: DIX will read the record with the RAB$M_NLK option. The record
             is read, but not locked. Other streams can read the data.
             When you want to update a modified record, DIX will check if
             the record still contains the original data, and if not
             warn you, and give you the option to not modify the record.
             If the file is opened with /nomodify (Default) records will
             never be locked (the file is readonly).

DIX Qualifiers /MARK

  If you leave the program DIX will define a symbol DIXRFA containing
  the filename and RFA of the current record. If you start DIX at a
  later moment with the same file and the /RFA qualifier, DIX will return
  to the same record as before.

  Example:
  $ DIX/INTER SYSUAF/EQ=SYSTEM
  DIX> EXA *        ! Will display all data of the SYSTEM record
  DIX> READ         ! Will read the next record from the SYSUAF
  DIX> Exit         ! Leave DIX
  $ DIX/RFA SYSUAF  ! Will return you to the record in SYSUAF following
                      the SYSTEM record.

DIX Qualifiers /MAX_BYTES

   /MAX_BYTES=n

   Limit the read from the file to maximum 'n' bytes

   Example:

   DIX/FILE filename/max_bytes=10

     Dump the first 10 bytes of all records in the file.

DIX Qualifiers /MODIFY


  If the /MODIFY qualifier is specified, you are allowed to modify
  /delete/insert records, Either in interactive or screen mode, and
  in raw (DEP BYTE_OFFSET=VALUE) or description mode (DEP field_name=value).
  The /WRITE qualifier is a synonym for /MODIFY

DIX Qualifiers /MOUSE

  /MOUSE    (Default)
  /NOMOUSE

  Enable the usage of the mouse in screen (SMG) mode.
  By default mouse_usage is enabled, but if you want, you can disable it to
  allow the mouse for selecting text.
  In the interactive mode the mouse usage can be enabled/disabled via the
  set mouse command.

DIX Qualifiers /MULTI_FILE


  Normally DIX will open only one file. If you specify more than
  one file (via wildcard or list), the program will prompt you which
  file to use. If you specify /MULTI_FILE, DIX will open all files
  and lets you switch between them.

  If you specify DIX/FILE, multi_file is the default.

DIX Qualifiers /OFFSET

  /[no]OFFSET
  /OFFSET=DECIMAL Default
  /OFFSET=HEX
  /OFFSET=BINARY
  /OFFSET=DECIMAL

  If the /NOOFFSET qualifier is given, the program will not display
  the byte offsets of the data. The default is /OFFSET(=decimal)

DIX Qualifiers /OCTAL


  If the /OCTAL qualifier is given, the program will display the data
  in octal.

  The default is /HEX in raw dump mode.
  The default is /DECIMAL in interpreted mode.
  See also the /HEX, /DECIMAL and /BINARY and /RADIX qualifier.

   /OCTAL is a shortcut for /radix=8

DIX Qualifiers /OUTPUT

  /OUTPUT=Filename

  Give an alternative output file. This qualifier will only be used if you
  specify the /FILE qualifier. The default is the terminal.
  If you specified /WIDE the width will be 132.
  If you specified /WIDTH=nn, the width will be nn (up to 4095)

DIX Qualifiers /RADIX

  /RADIX=nn (nn=2..36)

  Display/modify data in any radix.
  This is the general case of /hex, /decimal, /octal and /binary

DIX Qualifiers /RAW


  If DIX can find a description, DIX will use it. If you specify /RAW
  DIX will display in RAW mode even if it can find a description.

DIX Qualifiers /RFA

  /RFA=(rfaval)

   Can be used to select a specific record by RFA
  rfaval is either a 3 16bits number value (like dump)
    bucketnrl,bucketnrh,offset
  or a 32 bits bucketnr, followed by a 16bit offset

  Example:
   $ DIX FILE.DAT/RFA=(100,12)    !Bucket=100, offset=12
   $ DIX FILE.DAT/RFA=(100,3,12)  !Bucket=3*65536+100, offset=12

DIX Qualifiers /SCREEN

  /SCREEN

  If the /SCREEN qualifier is given, the program will display a
  record, (either interpreted or raw) and lets you specify
  editing (only in /MODIFY mode) or display commands. You can
   1. Alter display formats (raw/interpreted)
   2. Modify description files
   3. Create description files
   4. Modify/insert/delete records (only in modify mode)

   Press the PF2/HELP key for info in screen mode.
  The /SCREEN qualifier must be the first on the command line.

DIX Qualifiers /SCRIPT

  /SCRIPT=filename

  If interactive mode, if you enter /script=file, DIX will take commands
  from that file (default file type is .DIX), and return to DCL.
  See also the /define qualifier and the /command qualifier
  If you are in dcl_compat mode, the default file type is .COM

  You can also execute a script via the @filename on the command line
   $ DIX/INT @filename ...

DIX Qualifiers /SELECT

  /SELECT=(name[,name...])

 In the /FILE mode, DIX will print all fields (of all descriptions) to a file.
 If you specify /SELECT, DIX will display only fields with a name that matches
 one of the name(s) of the /SELECT. Wildcards (* and %) can be used.
 The value is [filemask\][descriptionmask\]fieldmask.
 If only one \ is found, it is the descriptionmask, and the filemask is *\ .
 If no description mask is given, all description (for the current file) are used.

 There is one special name
   $LINE : This will display the whole record as a single line, as if a
           description with one line "CHARACTER*32767 LINE" has been given.

 Examples:

  $ DIX/FILE SYSUAF/EQ=SYSTEM              ! Will display all the known fields.
  $ DIX/FILE SYSUAF/EQ=SYSTEM/SELEC=*PWD*  ! Will display only the fields
                                             with PWD in the name.
  $ DIX/FILE SYSUAF/EQ=SYSTEM/SELEC=UAF$P* ! Will display only the fields
                                             beginning with UAF$P
  $ DIX/FILE SYSUAF/des=(sysuaf,special) -
     /EQ=SYSTEM/SELEC=(SYS*\UAF$P*,SPE*\TEMP*)
                                         ! Will display only the fields that
                                           match UAF$P* in the description SYSUAF
                                           or TEMP* in the description SPECIAL
  $ DIX/FILE SYSUAF/des=(sysuaf,special) -
     /EQ=SYSTEM/SELEC=(TEMP*)
                                         ! Will display only the fields that
                                           match TEMP* in the description SYSUAF
                                           or TEMP* in the description SPECIAL

  $ DIX/FILE SYSUAF /select=$LINE.       ! !Display each record with a single
                                           description "CHARACTER*32767"

  $ DIX/FILE a*.dat/MULTI/sel=(ax*\*\field1,ay*\*\field2)
                                         ! Dump all files a*.dat. For the ax*.dat
                                           files all field1 fields are displayed,
                                           and for the ay*.dat the field2 fields.
                                           All other fields (also in other files)
                                           are NOT displayed.

  The select is case insensitive.

DIX Qualifiers /SHARED

  /SHARED    (Default in DIX mode)
  /NOSHARED  (Default in DCL mode)

  Open the file share or not shared.

DIX Qualifiers /STARTUP

  /STARTUP=filename
  /STARTUP=DIX_INI   (Default)

  Process commands from a startup file. The default filename is SYS$LOGIN:.INI
  See the topic about the interactive_commands about allowed commands.
  If the qualifier is defaulted, a missing file (SYS$LOGIN:DIX_INI.INI) will not
  be signaled. If you specify /startup explicitly, the file must exist.

DIX Qualifiers /STRICT

  /STRICT=(mode[,...])

  Sets the STRICT mode for DIX for this level. Deeper levels inherit
  the strict mode from the outer levels.

  Normally DIX is not very strict in the symbol handling.
  You can define new symbols by typing
  1. a=10 (define the symbol a, type integer, value 10)
  and then say
  2. a="SKLFG" (redefine a to type character, value "SKLFG"

   TYPING      : Once a symbol is created, you cannot change the type anymore
                 In the example above you can do 1. but not 2.
   DECLARATION : All symbols have to be declared before usage
                 This also disallows calling subroutines or @ files
                   and not having the same number of arguments
                   given and declared.
   LOCAL       : Even with /DECLARATION, symbols from an outer level
                 can be used. With /LOCAL this is not allowed.

DIX Qualifiers /SYMBOL

  /SYMBOL=symbolname

  If you specify /SYMBOL and DIX operates in /FILE mode, the
  result is printed to the output file, and symbols are defined for
  each fieldname.
  for example
  $ DIX/FILE sysuaf/eq=system/select=*pwd*/symb=test
    will display
  %Recordsize = 644
  340.0|UAF$Q_PWD(1)          |22B619B5
  344.0|UAF$Q_PWD(2)          |E19FAE22
  348.0|UAF$Q_PWD2(1)         |00000000
  352.0|UAF$Q_PWD2(2)         |00000000
  362.0|UAF$B_PWD_LENGTH      |8
  372.0|UAF$Q_PWD_LIFETIME    |30 00:00:00.00
  380.0|UAF$Q_PWD_DATE        |17-MAY-2002 18:34:12.00
  388.0|UAF$Q_PWD2_DATE       |17-NOV-1858 00:00:00.00
    But also the following symbols will be set
  $ show symbol test*
  TESTUAF$B_PWD_LENGTH = "8"
  TESTUAF$Q_PWD(1) = "22B619B5"
  TESTUAF$Q_PWD(2) = "E19FAE22"
  TESTUAF$Q_PWD2(1) = "00000000"
  TESTUAF$Q_PWD2(2) = "00000000"
  TESTUAF$Q_PWD2_DATE = "17-NOV-1858 00:00:00.00"
  TESTUAF$Q_PWD_DATE = "17-MAY-2002 18:34:12.00"
  TESTUAF$Q_PWD_LIFETIME = "30 00:00:00.00"

  This makes it easy to use DIX in command procedures.

DIX Qualifiers /USER_LIBRARY

  /USER_LIBRARY=usertlbfile
  /USER_LIBRARY=DIX_DES_USER (Default)

  If you specify /USER_LIBRARY (Default), DIX will use this .TLB file
  for extra description records.
  The default file specification is SYS$LOGIN:.TLB
  So if you place a DIX_DES_USER.TLB in your login directory, DIX can
  it. In this file you can store your own descriptions, if you do not
  have write access to the default DIX_DES.TLB file.

DIX Qualifiers /SYSTEM_LIBRARY

  /SYSTEM_LIBRARY=systemtlbfile
  /SYSTEM_LIBRARY=DIX_DES (Default)

  If you specify /SYSTEM_LIBRARY (Default), DIX will use this .TLB file
  for system-wide description records.
  The default file specification is DIX-image-directory:.TLB
  If you want to add your own descriptions, you may add them in this
  file, or (if you do not have write access to this file) in the
  DIX_DES_USER.TLB file. See the help about [DIX/HELP] "/USER_LIBRARY".

DIX Qualifiers /WIDE


  Set the output width (/INFO and /FILE) to 132.
  This is a shorthand for /WIDTH=132.

DIX Qualifiers /WIDTH

  /WIDTH=nn

  Set the output width (/INFO and /FILE) to nn
  nn will be clipped between minimum 80 and maximum 4095.

DIX Qualifiers /WRITE


  If the /WRITE qualifier is specified, you are allowed to modify
  /delete/insert records, Either in interactive or screen mode, and
  in raw (DEP BYTE_OFFSET=VALUE) or description mode (DEP field_name=value).
  The /WRITE qualifier is a synonym for /MODIFY

DIX INTERACTIVE_COMMANDS


 If you specify /INTERACTIVE the program will enter command line mode.
 It will prompt you for commands. Lines can be continued with a -
 on the last position of the line (like DCL).
 The only exception is the variable-- command, so if you want a continuation
  line ending on a -(minus) be sure to add a space between the two -'s
    a=a - -   (mind the space between the -'s) will be a=a-10
       10
   versus
    a --        will be a--

 Blanks are not significant, except in symbol names, verbs and strings.
 DIX is by default not case sensitive, except within strings.
 DIX can be set to case_sensitive mode, see the help about "set case"

 DIX has a powerful set of commands to enable scripting inside a command file.

 See the @file_and_commands_in_file help topic.

 You can make a one-line command list. To do this you must start the command
 with PIPE or a ; and separate the commands with a ;
 Example:
   DIX> PIPE for k=1,10 ; evalu k ; endfor
    will create pseudo-command file containing
     for k=1,10
     evalu k
     endfor
   DIX> ; for k=1,10 ; evalu k ; endfor    !alternative version

  And execute it. In this way you can use the 'file_commands' on the command line
  If DCL mode enabled, DIX expects each line to start with a $ (all others are
  data lines). To help you in DCL mode DIX will automatically insert a $ before
  each line, unless the first line starts with a $. In that case DIX will assume
  you understand the need for leading $.
  Example (in DCL mode):

  DIX> ;show time;show time;show time
     DIX will insert a dollar before each line
  DIX> ;$type sys$input;line1;line2;$show time
     Since the first line starts with a $, DIX assumes you understand the need
     for a $ before each command. Line2 and line3 will be regarded as data
     for the type command.

  If you enter a command without a verb, DIX will try to evaluate the line
   as an expression and print the result, so an input like
  DIX> 10*10    !will give the answer
  100           !just as if you had typed DIX> eval 10*10

  If you enable check_symbol DIX will check for default extra settings
   for a command. So
  DIX> dire     !will do a normal directory
  $dix_command_directory="/size"
  DIX> enable check_symbol
  DIX> dire ... !will do a directory/size ...

  The symbol is DIX_SYMBOL_COMMANDNAME, where commandname is the fully
     specified command (so directory and not dire)

DIX INTERACTIVE_COMMANDS Output_modes


   Normally DIX will print the output of the commands to the terminal
   (or the filename given with @command/out=filename)

   Some commands (the ones with possibly a lot of output) accept the
     /OUTPUT=filename qualifier : Output to a file
     /PAGE qualifier            : Output per page
     /SCREEN qualifier          : Get all output first and then let
                                  you look at it in a window.

   If the output filename is preceded by a # or DCL: or DCL::,
    DIX will take the rest of the filename as a symbol name,
    and store results in (DCL_) symbols
    name,name_1,name_2...name_n.
    The symbol name_cnt will be filled with the highest index (might be 0)
    In this way you can use DIX to define DCL symbols, e.g. after
    $ DIX/COMM/OUT=dcl:abc say 4+5
    the DCL symbol ABC will be defined with the value 9

    DCL:: will define global symbols, and DCL: local ones

           Example: DIX> dir/out=dcl:tmp.tmp ;
                    DIX> open lun dcl:tmp.tmp ;
                    DIX> proces data
                    DIX> close lun [/dispose=delete]
                 Or
                    DIX> type mem:tmp.tmp

    If the output filename is preceded by MEM:, the output is stored
    in a memory table. I.e. DIX> dir/out=mem:tmp.tmp ;
                            DIX> open lun mem:tmp.tmp ;
                            DIX> proces data
                            DIX> close lun [/dispose=delete]

    The output files generated via the mem: and dcl: will be treated as
     files, so you can also do a directory mem:*. These 'files' can also
     be deleted. The names may contain letters, digits and ., but the first
     character must be a letter

    The 'device'names mem: and dcl: can be shown and changed via the
     set/show extra_devices

   For all commands you can redirect the output to a (one dimensional)
    DIX_symbol via the "symbolname < command" syntax

   You may also use the < syntax to get a count of lines/words/chars
    the output has generated, if you precede the symbolname with a #
    (or specifying only a #), see the examples below

    Example:
    !default to screen
    DIX> SHOW SYMBOL
    %OVERFLOW=False
    $STATUS=00000001
    $SEVERITY=1
    $DESCRIPTION=""
    $FILE=""
    $NRARGS=0

    DIX> test<show symbol     !Output to symbol testno output
    DIX> Show symb/all test   !show the symbol (contains 6 lines)
    TEST(1)="%OVERFLOW=False"
    TEST(2)="$STATUS=00000001"
    TEST(3)="$SEVERITY=1"
    TEST(4)="$DESCRIPTION="""
    TEST(5)="$FILE="""
    TEST(6)="$NRARGS=0"

    DIX> #<show symbol        !example of counting
    %OVERFLOW=False           !the normal output
    $STATUS=00000001
    $SEVERITY=1
    $DESCRIPTION=""
    $FILE=""
    $NRARGS=0
    TEST= table(6)
    7 lines, 7 partial lines, 7 words, 88 characters printed  !and the counters

    DIX> #test<show symbol     !example of counting/symbol output
    7 lines, 7 partial lines, 7 words, 88 characters printed
    DIX>                      !no output, except for count line
    DIX> show symb test
    TEST= table(7)            !test is a table of 7 elements

  Example for output file specifications:

   DIX> show symbols/out=tst.dat           !output to the file test.dat
   DIX> show symbols/out=#abc              !output to ABC, ABC_1, ABS_2...
   DIX> show symbols/out=mem:name          !output to memory file name
   DIX> show symbols/out=dcl:name          !output to DCL symbol 'file' name

   $ DIX/COMMAND show symbols/out=dcl:name  !output to DCL symbol 'file' name
   $ show symbol name*                        !and on DCL level the symbols are there
    NAME_1 = "$ARCHITECTURE="ALPHA""
    NAME_2 = "$DESCRIPTION="""
    NAME_3 = "$DIX_VERSION="8.6""
    NAME_4 = "$FILE="""
    NAME_5 = "$NRARGS=0"
    NAME_6 = "$SEVERITY=1"
    NAME_7 = "$STATUS=00000001"
    NAME_8 = "%OVERFLOW=False"
    NAME_CNT = "8"

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file

  Format
   @filename[/output=filename][/[no]verb[=readin]][/usage]-
            [/dcl_compatible[=value]]-
            [/verify] -
            [/password=pwd] -
            [expression[,expression...]

  Take the commands from a command file. The default filespec is
  'this_directory'.DIX, or .COM if in DCL compatible mode.

  The expressions will be available in the subroutine as local symbols
  with the names Pn (As DCL) or any name the ENTRY statement gives them.
  There is no limit to the number of arguments.
  There is also a symbol $NRARGS that contains the number of arguments.
  See also the help about the ENTRY command.

  The /[no]verbs decides if verb symbol substitution is ON or OFF for
   commands in the file (default is OFF). The OFF mode allows DIX to
   precompile all statements in the file, make execution a lot faster.
   The ON mode disables the precompile mode, because DIX does not know
   if the verb may have been changed (i.e. like dir*ectory = "dir/col=1")
   See also the help about compiler hints.

  If you specify /verb=readin, the verbs will be translated on reading the
   command file, but not again on execution of the statements. In this
   way you can use global symbols for your verbs, but you cannot change
   the verbs in the command file.

  The /usage will display a control-t like line after execution of
   each command. If the user had set the statistics to /usage
   DIX will output a line for the usage data after execution of the command file

  The /[NO]DCL_compatible decides if the command file is executed in DCL mode
   If not specified, DIX uses the current setting for DCL_COMPAT
     set dcl_compat compatible
     set dcl_compat fallback

   /dcl_compatible=none       No DCL functionality
   /dcl_compatible=compatible Support for leading $, replace .xx. by =<>
   /dcl_compatible=fallback   Compatible + Unknown DIX verbs will be spawned to DCL

  The file is read into memory before any statement is executed. At this
  point all loop-structures are checked for correct overlap, so
   FOR
    IF
    ENDFOR
   ENDIF
  is not accepted.

  During this phase DIX will pre-compile all statements in the file
  (if verb substitution is OFF for command procedures). See the remarks
  about /verb above.

  Also Verb symbol-substitution for loop control verbs like IF, LOOP,
  [END]FOR, [END]WHILE, etc. is NOT supported.

  Loop commands can also be entered in terminal input mode (so not in a
   command file). DIX will prompt you to enter more command lines until the
   END statement is found, and them execute this set of commands.
   (This happens as if the commands had been entered in a command procedure
    so the command level will be one higher. This may affect symbols.)
   Support is for the IF, LOOP, SWITCH, REPEAT, and WHILE statement.

 Inside a command file you can use the following extra commands.

 If the file is a compiled file (via the compile command) and
  contains a password, you can (but maybe should not) specify the
  password via the /password= qualifier. If you do not specify it
  you will be prompted for the password.

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file Compiler hints


  You can give hints to the parser/compiler
  Hints may be abbreviated, as long as they are unique

  At this moments 2 hints are defined

  On starting a command procedure you can specify the /verb qualifier
  This qualifier sets the initial setting for the verb substitution.
  If verb substitution is ON, DIX cannot precompile command since the
  verb symbol may be set somewhere in the procedure.

  In the procedure you can switch this behaviour.
  ##VERB_SUBSTITUTION   : From now on verb substitution is possible,
                          so precompilation is disabled
  ##NOVERB_SUBSTITUTION : From now on verb substitution is not possible
                          so precompilation is enabled

  This allows DIX to precompile all statements except those between
  the ##VERB and the ##NOVERB

  Example:

  dir1:=dir/date           !set a symbol for dir1
  k=1                      !
  gosub werk
  set stri/typ/decl
  ##verb                   !the next statements will not be precompiled
                           !since the verb dir1 does not exist
  dir1 *.com;              !parse at run time to use dir1
  ##NOverb                 !From now on statements can be precompiled again
  bla: integer a=10
  a=20

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file CALL


  Call label [expression[,expression...]
  Call to a subroutine with optional parameters
  There is no limit to the number of arguments.

  See help about SUBROUTINE statement

  The parameters will be local symbols for the SUBROUTINE, see the help
  about [DIX/HELP] interactive symbols.

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file DECK

  DECK [/DOLLARS=string] [/SYMBOL_SUBSTITUTION[=keyword]]

   The DECK statement is meant to allow user data to be inside a
   command procedure (see the DCL help about DECK)
   the /DOLLARS specifies a string used to signal the end of the data
     The default is /dollars=EOD. The match IS case-sensitive, so if you
     want a lowercase string, include the string within "".

   If /SYMBOL_SUBSTITUTION is set, DIX will try to substitute
   all strings between ''s. This allows you to use data lines and
   still have symbol substitution. See example below

   Symbol_substitution is strict or lax (see enable lax_quotes)
   The default is the current lax setting (DCL mode automatically enables LAX),
    but may be overruled by
    /SYMBOL=STRICT  Use strict quotes, all quotes must in pairs
    /SYMBOL=LAX     Use lax quotes (the first non letter/digit stops the symbol)

   DIX can operate in 2 modes
   DCL_COMPAT : The data is ended by a statement starting with a $.
                 This may be the EOD command. In this mode, all lines
                 not starting with a $ will be regarded as data (like DCL,
                 so the DECK statement is not needed.
   Normal     : The data is ended by the DOLLARS string
                 Since DIX cannot distinguish between data and commands
                 (no leading $), you must use the DECK statement.

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file DECK Examples

  Example for DCL mode (leading $ required, so DECK is optional):

     $type sys$input      ! example with no deck and no EOD
     line 1               ! 3 data lines
     line 2
     line 3
     $exit

     $type sys$input      ! example with deck and eod
     $deck                ! Using the $DECK
     line 1               ! 2 data lines
     line 2
     $eod                 ! It stops here

  Example for DIX mode, DECK statement required:

     type sys$input     ! example with explicit /dollars
     deck/dollars=test  ! the test will be uppercased by DIX
     line 1             ! 2 data line
     line 2
     TEST               ! The terminator
     exit               ! Exit

     type sys$input     ! example with implicit dollars (EOD)
     deck               ! so we stop with a line containing EOD
     line 1 nodol       ! 2 data lines
     line 2 nodol
     EOD                ! The terminator

   Example with /symbol_substitution, the examples are for DIX mode:

    type sys$input
    deck                ! without symbol substitution
    line 1 nodol 'a'    ! 2 data lines
    line 2 nodol 'a+1'
    EOD                 ! Terminator

    This will return:
    line 1 nodol 'a'
    line 2 nodol 'a+1'

    a=10
    type sys$input
    deck/symbol         ! with symbol substitution
    line 1 nodol 'a+2'
    line 2 nodol 'a+3'
    EOD

    This will return:
    line 1 nodol 12
    line 2 nodol 13

   For DCL mode the example is the same, but in this case the $DECK
   is necessary, since that is the statement with the /symbol

    $a=10
    $type sys$input
    $deck/symbol        ! with symbol substitution
    line 1 nodol 'a+2'
    line 2 nodol 'a+3'
    $EOD

    Read the description inline from the command file

    OPEN name filename/des=sys$input
    DECK
    description text
    EOD

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file ENTRY

  ENTRY parametername[qualifiers][,parametername[qualifiers]...]

   Declare names for parameters on @ed files.
   must be the first command in the file

   If a call is make to a command file, the (optional) parameters are
   evaluated, and the resulting value is placed in the (local) symbol
   with the name "parametername" or Pn if there are more parameters
   than parameternames.

   Qualifiers can be
   /REAL
     You may specify the size of the real with the
      /SIZE=4,8,16
   /[U]INTEGER
   /CHARACTER
   /DATE
   /DECIMAL
   /LOGICAL      The expression given at the @ line must match the
                 type given to this symbol
   /SYMBOL
    If the parametername has a /SYMBOL qualifier, the parameter will be
    an alias to the original expression parameter. If you use the
    /SYMBOL the caller must be a symbol or any subset (except indexed symbols).
    If you change the parameter the changes will be done to the
    caller symbol. This is a way to let the @file return output values.
    If you use /SYMBOL and the parameter is an indexed symbol, you may
    only use the whole symbol, not a subset.

   If DIX is in STRICT/DECLARATIONS mode, the number of defined and
   actual parameters must be equal, and all parameternames must have a type.

  Example:

  integer x=10
  @mysub 10*4,"Text",x,41

  and the file mysub.DIX contains the following lines

  entry count/integer,name,xparam/symbol
  ...
  ...
  exit

  In the file "mysub" there will be 5 symbols defined
  COUNT  : Integer with the value 40 (the expression MUST be integer).
  NAME   : Character with the value "Text"
  XPARAM : Integer with the value 10, is an alias for to symbol x.
           and modifications are done to the X symbol of the caller
  P4     : integer with the value 41
  $NRARGS: Integer with the value 4 (4 arguments)

  If there are more parameternames than parameters, the parametername
  will be defined as a character string with the value "" (empty).
  If there are more parameters than parameternames, the symbols
  P* are defined with the same type as the parameter.

  Both possibilities are not allowed with the STRICT/DECLARATION mode.

  Examples:

   Example for a subsetted table:

   DIX> INTEGER val(10,2)
   DIX> @tt: val(1,*)
   DIX_1> ENTRY MYVAL/symbol
   DIX_1> show symbol myval/fu
   MYVAL(Fixed,Integer,Level=2.0,alias->VAL)=table(2)
   DIX_1> say myval
   [0,0]
   DIX_1> myval(2)=12
   DIX_1> exit
   DIX> say val
   [[0,0,0,0,0,0,0,0,0,0][12,0,0,0,0,0,0,0,0,0]]

   Example for a structured type:

  DIX> load/structure def_main.struct    !load the structure
  DIX> sh struc/fu def_main               !what does it look like
  DEF_MAIN, level 1                      !
  File USER50:[STUBBF.PROGRAMS.DIX.SOURCE]DEF_MAIN.STRUCT;2
  INTEGER*4              INDEX
  CHARACTER*40           MYSTR
  REAL_X*16              REAL16VAL
  INTEGER*4              EXTRA_INT
  INTEGER*4              EXTRA2(2,3)
  DIX> decl/stru=def_main val             !declare a symbol of this type

  DIX> say val                           !normal evaluate, only values
  [0,,0.0,0,[[0,0][0,0][0,0]]]
  DIX> @tt: val.extra2(2,*)               !call a subroutine
  DIX_1> entry locval/symbol             !declare a local value as alias
  DIX_1> show symbol locval/fu           !is now a table of elements
  LOCVAL(Fixed,Integer,Level=2.0,alias->VAL)=table(3) !extra(2,1),(2,2),(2,3)
  DIX_1> say locval
  [0,0,0]
  DIX_1> locval(3)=31                   !set the 3 (=(2,3)) to 31
  DIX_1> exit
  DIX> say val
  [0,,0.0,0,[[0,0][0,0][0,31]]]         !et voila

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file GOTO


 Syntax: Goto Label

  Goto the line with this label. If the label cannot be found,
  DIX will close this command file (and possibly its parent) until
  the input comes from a terminal or (in BATCH) exit DIX.
  The label must be visible from the current context level, so for
  example "LAB" will not be found, because "LAB" is in the repeat/until
  structure, and you cannot jump into a loop structure.

  x=1
  repeat
   lab : x=x+1
  until x>5
  goto lab

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file GOSUB


  Syntax: GOSUB label

  Goto the line with this label. If the label cannot be found,
  DIX will signal an error. Depending on the current ON state DIX
  may continue or close the command file.
  The return address will be stacked, and the RETURN command returns
  you to the next line.
  The label must be visible from the current context level, so for
  example "LAB" will not be found, because "LAB" is in the repeat/until
  structure, and you cannot jump into a loop structure.

  x=1
  repeat
   lab : x=x+1
  until x>5
  gosub lab

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file Labels

 Each line can be preceded by a label.
  The label can be any string terminated by a :
  Label names are not case-sensitive and can have up to 32 characters.
  All the character must be a-z 0-9 $ or _.

  Example:

  This_label12 : statement

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file ON


  On option [then] command

    The then is optional

  Option can be

  Warning
  Error
  Severe
  Control_c
  overflow

  And can be abbreviated to one letter

  For the message levels:
    If an error occurs, DIX will execute 'command' for the error level or
    a lower level.

    Example:

    ON error goto label_error.
    Any error and severe will jump to label_error. Warnings will be ignored.

  on overflow say "got overflow"  !say "got Overflow" if it is found

  on control_c then debug         !Jump to the debugger if you hit a ^c

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file RETURN

  Will return from a previous GOSUB.

  Return without an open GOSUB is NOT signaled as an error. DCL does not
  signal it, and so does DIX.

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file SUBROUTINE_ENDSUBROUTINE


  Format
  label: SUBROUTINE [parametername[/qualifiers][,parametername[/qualifiers]...]]

   Defines the beginning of a subroutine in a command procedure. The
   SUBROUTINE command must be the first executable statement in a
   subroutine. The subroutine must be terminated with an ENDSUBROUTINE.
   If a call is make to a subroutine, the (optional) parameters are
   evaluated, and the resulting value is placed in the (local) symbol
   with the name "parametername" or Pn if there are more parameters
   than parameternames.

   Qualifiers can be
   /REAL
     You may specify the size of the real with the
      /SIZE=4,8,16
   /[U]INTEGER
   /DATE
   /DECIMAL
   /CHARACTER
   /LOGICAL      The expression given at the @ line must match the
                 type given to this symbol
   /SYMBOL
   If the parametername has a /SYMBOL qualifier, the parameter will be
   an alias to the original expression parameter. If you use the
   /SYMBOL the caller must be a symbol or an scalar element of a symbol.
   If you change the parameter, the changes will be done to the
    caller symbol. This is a way to let the SUBROUTINE return
    output values.

   If DIX is in STRICT/DECLARATIONS mode, the number of defined and
   actual parameters must be equal.

  Example:

  integer x=10
  Call mysub 10*4,"Text",x,4

  mysub: subroutine count,name/character,xparam/symbol
  ...
  ...
  endsubroutine

  In the subroutine "mysub" there will be 5 symbols defined
  COUNT  : Integer with the value 40
  NAME   : Character with the value "Text" (must be a character expression)
  XPARAM : Integer with the value 10, is an alias for the symbol X,
           and so modifications are done to the X symbol of the caller
  P4     : Integer with the value 4
  $NRARGS: Integer with the value 4 (4 arguments)

  If there are more parameternames than parameters, the parametername
  will be defined as a character string with the value "" (empty).
  If there are more parameters than parameternames, the symbols
  P* are defined with the same type as the parameter.

  Both possibilities are not allowed with the STRICT/DECLARATION mode.

DIX INTERACTIVE_COMMANDS @file_and_commands_in_file Examples


  k = 1                         !define symbol k value 1
  Loop: k = k + 1                  !label + increment of symbol
  Examine field_'k'             !exam with symbol substitution
  If (2*(k+10) < 20) goto loop  !test for repeat

  This following script will increment BYTLM by 1000 for all users with
  a name that matches *A*, and have a BYTLM of >=50000 and a JTQUOTA >4000
  (maybe not a very useful example, but is shows the possibilities)

        nmod = 0
        nfnd = 0
        on error goto done
   loop:
        nfnd = nfnd + 1
        if (f$matchwild(uaf$t_username,"*A*")) goto next
        echo "Found user ''uaf$t_username'"
        if (uaf$l_bytlm < 50000 | uaf$l_jtquota <= 4000 ) goto next
        deposit uaf$l_bytlm='uaf$l_bytlm + 1000'
        nmod = nmod + 1
        update/quiet
        echo "Updated ''uaf$t_username' to ''uaf$l_bytlm'"
   next:
        read
        goto loop
   done:
        echo "Found ''nfnd' users, modified ''nmod' users"

DIX INTERACTIVE_COMMANDS Dcl_compatibility


  DIX has a syntax very similar to DCL. If you want to be able
  to use DCL command files, DIX has to be put in dcl_compat mode.
  DIX will then remove leading $'s, and if in fallback mode
  it will spawn commands that are not recognized by DIX.

  You can set/clear dcl_compat mode via the

  SET DCL none|compatible|fallback
  Or via:
  @procedure/dcl[=fallback]

  You cannot change the dcl_compat mode within one procedure.

  There are 2 levels of dcl_compat mode
  compatibility : -leading $'s are removed before parsing
                  -the DECK statement behaves DCL-like
                  -.lt., .ge. etc. are replaced by the DIX counterparts < > etc.
  fallback      : -If a command fails to be parsed by DIX (IVVERB)
                   DIX will spawn the command line. Be aware that
                   spawning is not the same as execution under DCL
                   and that DIX symbols are not DCL symbols,
                   but maybe the spawn will do what you want.

DIX INTERACTIVE_COMMANDS Debugger

  DIX has a built-in debugger for the debugging of command-scripts

  You start this by @procedure/debug

  You can set/delete break and watchpoints
  You can step [/into] and go

  You can also specify most of the interactive DIX commands to
  examine/modify symbols/fields etc.

  The statement breakpoint in a command procedure will
    also activate the debugger

  By default the following keys are defined
  KP5     : Show calls
  PF1-KP5 : Show call /full
  KP0     : Step
  PF1-KP0 : Step/into

  And you may define more via the def/key command.

  You can also store commands in a file and execute the file via
   @file (default filespec .DIX;), the @commands can be nested 10 deep.

  Verb substitution is also active (if you have in enabled, this is the default)
        DixDbg> sb:=show break
        DixDbg> sb                   !will show the current breakpoints

DIX INTERACTIVE_COMMANDS Debugger levels


   Each command procedure has a level

   DIX> @first    ! level 2 (the DIX> prompt is level 1)
     if there is a @ line in first[.dix]
       that procedure will be at level 3

   Since DIX is an interpreter, DIX does not know anything
   about deeper levels until the @ is reached.
   So if you are on level 2, you cannot specify breakpoints
   on deeper levels

  On some commands you can specify lines/labels on lower levels
   via the level\line or the level\label syntax

DIX INTERACTIVE_COMMANDS Debugger cancel


   cancel break
   cancel watch
   cancel trace

DIX INTERACTIVE_COMMANDS Debugger cancel break


  cancel a breakpoint

    cancel break/all                          Cancel all breakpoints
    cancel break line [level\]nn              Cancel Break on line number
    cancel break label [level\]labelname      Cancel Break on a label
    cancel break call                         Cancel Break on call
    cancel break return                       Cancel Break on return
    cancel break message                      Cancel Break on error level

DIX INTERACTIVE_COMMANDS Debugger cancel trace


  cancel a tracepoint

    CANCEL TRACE/ALL                          Cancel all tracepoints

    CANCEL TRACE LINE [LEVEL\]NN              Cancel trace on line number
    CANCEL TRACE LABEL [LEVEL\]LABELNAME      Cancel trace on a label
    CANCEL TRACE CALL                         Cancel trace on call
    CANCEL TRACE RETURN                       Cancel trace on return
    CANCEL TRACE MESSAGE                      Cancel trace on error level

DIX INTERACTIVE_COMMANDS Debugger cancel WATCH


   cancel watch /all                          Cancel all watchpoints
   cancel watch name                          Cancel watchpoint "name"

   cancel the specified watchpoint

  Supported qualifiers

   /field          Name is a fieldname, if /field is not
                   specified, name is a symbol

DIX INTERACTIVE_COMMANDS Debugger go


   Go [line][label]

   (re)start processing until a breakpoint occurs

    optionally a line or label may be specified.
    DIX will restart execution from that line
    line or label must be in the current level

DIX INTERACTIVE_COMMANDS Debugger help


  help [token]

  Help about the debugger

DIX INTERACTIVE_COMMANDS Debugger set


  Set some things

  set break
  set watch
  set trace

DIX INTERACTIVE_COMMANDS Debugger set watch


   set watch name

  If the symbol/field matching name is touched or modified
    display the value (and the new if changed)

  Supported qualifiers

   /field          Name is a fieldname, if /field is not
                   specified, name is a symbol

   /reference      If /reference is specified, DIX will also
                   report references (not changes)
                   If /reference is not specified, DIX will
                   only report changes
   /break          If the symbol/field is touched (with /refer) or
                   modified DIX will enter the debugger

  Watchpoints support the following qualifiers

   /when="dix_command"
     If the watchpoint is reached, DIX will execute the code specified
     The result must be a logical. It the expression evaluates to true
     the watchpoint will be taken (but the /after must be satisfied too)

   /after=n
     Take the watchpoint after the 'n'th time.
     If both the /when and the /after are specified, DIX will evaluate
     the /when first, and if that succeeds, the /after is tested.

   /do="dix_command[;dix_command...]"

     When a watchpoint is found (after the /when and the /after are
     satisfied, DIX will execute the commands. All commands are
     executed, even if one of them is a "go" or a "step"

DIX INTERACTIVE_COMMANDS Debugger set break


    set break line [level\]nn              Break on line number
    set break label [level\]labelname      Break on a label
    set break call                         Break on call/gosub
    set break return                       Break on return/exit
    set break message severe|error|warning Break on error level
    set break instruction instructionname  Break on a specific instruction

     Instruction names are the normal DIX command verbs, the @ command
     is named AT, and the assignment (a=10) as ASSIGN.

   Both nn and labelname may be prefixed by level\ to
   set breaks on lower levels

  Supported qualifiers

   /when="dix_command"
     If the breakpoint is reached, DIX will execute the code specified
     The result must be a logical. It the expression evaluates to true
     the breakpoint will be taken (but the /after must be satisfied too)

   /after=n
     Take the breakpoint after the 'n'th time.
     If both the /when and the /after are specified, DIX will evaluate
     the /when first, and if that succeeds, the /after is tested.

   /do="dix_command[;dix_command...]"

     When a breakpoint is found (after the /when and the /after are
     satisfied, DIX will execute the commands. All commands are
     executed, even if one of them is a "go" or a "step"

   /temporary
     Remove the breakpoint when it is reached

DIX INTERACTIVE_COMMANDS Debugger set trace


    set trace line [level\]nn              Trace on line number
    set trace label [level\]labelname      Trace on a label
    set trace call                         Trace on call/gosub
    set trace return                       Trace on Exit/return
    set trace message severe|error|warning Trace on error level
    set trace instruction instructionname  Trace on a specific instruction

     Instruction names are the normal DIX command verbs, the @ command
     is named AT, and the assignment (a=10) as ASSIGN.

   Both nn and labelname may be prefixed by level\ to
    set tracepoints on lower levels

  Supported qualifiers

   /when="dix_command"
     If the tracepoint is reached, DIX will execute the code specified
     The result must be a logical. It the expression evaluates to true
     the tracepoint will be taken (but the /after must be satisfied too)

   /after=n
     Take the tracepoint after the 'n'th time.
     If both the /when and the /after are specified, DIX will evaluate
     the /when first, and if that succeeds, the /after is tested.

   /do="dix_command[;dix_command...]"

     When a tracepoint is found (after the /when and the /after are
     satisfied, DIX will execute the commands. All commands are
     executed, even if one of them is a "go" or a "step"

   /temporary    Remove the breakpoint when it is reached

DIX INTERACTIVE_COMMANDS Debugger show


   show break    Show breakpoints
   show trace    Show tracepoints
   show watch    Show watchpoints
   show calls    Show call stack

DIX INTERACTIVE_COMMANDS Debugger step


   Step[/into] [line][label]

   (re)start processing until the next line

    optionally a line or label may be specified.
    DIX will restart execution from that line
    line or label must be in the current level

   if the line is a @ line, DIX will not debug the
   deeper level unless the /into qualifier is specified

DIX INTERACTIVE_COMMANDS Debugger type


   type        Type the current line
   type nn     Type line nn
   type nn:mm  Type line nn:mm
   type *      Type all lines

   type level\..  Type lines from lower levels

   If you specify /full DIX will also display the
   level and the command procedure.

DIX INTERACTIVE_COMMANDS ADD


  ADD DESCRIPTION name[,name...]
  ADD VIEW name[,name...]
  ADD PARAMETER
  ADD VALUE
  ADD TYPE
  ADD SELECT_FILE

  Add new descriptions/views to the current file.
   See also the remove command.

    Add description mask

    Will add the descriptions matching mask to the current file

  Parameter/values are a special type of symbol
   By default parameter/type/value names are not case sensitive,
   unless DIX is put into case sensitive mode, see the help about
   "set case"

   Parameter, type and values can be defined GLOBAL (/global) or
    at a specified level via /LEVEL=n.
     n can be  1..current command level
       or     -1..-n  N levels up

   The default level is the current command level

    ADD PARAMETER name=value     Cannot be changed
    ADD VALUE=value              May be modified

  Types are used to specify enumeration types for symbols
     See also the help about [DIX/HELP] interactive declaration

    ADD TYPE name=value

    Example:
    DIX> Add type myvals="0=zero,1=one,10=big"  !define a type to be used
    DIX> a=10                                   !add a new symbol
    DIX> Set symb a/type=#myvalues              !add a fieldname list to the
                                                !symbol
    DIX> Evaluate a                             !Evaluate will not use fieldnames
    10
    DIX> show symb a                            !show symbol will use the
    A=big                                       !fieldnames
    DIX> show symb/fu a                         !show all info about a
    A(Integer*4,Level=1.0)=big
    Type : #MYVALUE (0=zero,10=big)

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE


  syntax : Add select_file name [/qualifiers]

  Make a file selection symbol to be used with F$SEARCH, F$SELECT_FILE
    or the directory/select=select=name

  You can describe which attributes a file must have

  Example:

  DIX> Add sele big /selec=size=min=1000  !Create a selec mask for files bigger
                                          ! than 1000 blocks
  DIX> big_f = f$search("*.*",,,,,"big")  !return the first file with size>=1000
  DIX> say f$select("big_file.dat","big") !return true/false if file big_fil.dat
                                          !is bugger/smaller than 1000 blocks

  For more help see also the help about directory/select

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /global

   Define the pattern in the global symbol table. By default the patterns
    is stored at the current command level.

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /level

  /level=n

   Define the pattern in the command procedure level n.
   n can be
   1,2,...    Absolute level
   -1,-2      Lower levels

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /select

   /select=(tag, tag..)
  Tag can be
   version=(min=nn,max=nn)         !check file version number
   size=(min=nn,max=nn)            !check file size (EOF)
   allsize=(min=nn,max=nn)         !check file size (Allocated)
   headers=(min=nn,max=nn)         !check number of file headers
   extents=(min=nn,max=nn)         !check number of file extents
   acl.size=(min=nn,nax=nn)        !check ACL size in bytes
   acl.count=(min=nn,max=nn)       !check ACL count
   fileid=(min=nn,max=nn)          !check fileid
   unused_size=nn                  !check unused size (between END_OF_FILE and allocated)
   by_owner=user                   !check on username
   organization=tag                !check file organization
     tag can be seq,rel,idx,syml
   record_format=tag               !check record format
     tag can be udf,fix,var,vfc,stream,stream_lf,stream_cr
   journal=tag                     !check journal files
     tag can be journal, aij,bij,ru
   flag=(tag)                      !check file flags
     tag can be nobackup,locked,nomovefile,wbcache,readverify,
                writeverify,directory,badacl,badblock,nocharge,erase

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /UIC

  /UIC=UIC
   Add a UIC selection

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /since

  /since=date
   Add a since date. See also the /created, /modified, /backup and /expired

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /before

  /before=date
   Add a before date. See also the /created, /modified, /backup and /expired

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /created

  The /since and/or /before are checked against the creation date

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /modified

  The /since and/or /before are checked against the modification date

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /backup

  The /since and/or /before are checked against the backup date

DIX INTERACTIVE_COMMANDS ADD SELECT_FILE /expired

  The /since and/or /before are checked against the expiration date

DIX INTERACTIVE_COMMANDS ANALYZE

  ANALYZE [/DISPLAY=(option,option..)] [/VERBOSE=n]

  option can be
   KEY=n           : Analyze only key
   LEVEL=n         : Analyze only key level 'n'
   LEVEL="+n"      : Analyze only the top 'n' key levels
   LEVEL=-n        : Analyze only the lowest '-n' key levels
   [NO]DATA        : Analyze the data buckets too. Since this can take a lot
                     of time, this is not the default.
   [NO]SIDR        : Display the SIDR records, this is the default
   [NO]KEYBUCKETS  : Display the key buckets records, this is the default
   DETAIL          : The amount of detail 0..4
                       Be careful, this can generate a lot of output.
   OUTPUT=filename : If verbose is >0, the extra output can be redirected
                     to another file. The normal output will be in the file
                     specified with /OUTPUT=filename
   START=n         : Start analysis at bucket 'n' in chain, default=0
                      (n may be negative, last but 'n' bucket of the chain)
   END=n           : End analysis at bucket 'n' in chain, default is whole chain
                      (n may be negative, last but 'n' bucket of the chain)

  VERBOSE=0    : Just the normal output
  VERBOSE=1    : Print out the buckets read
  VERBOSE=2    : Detail 1 and the bucket header info
  VERBOSE=3    : Detail 2 and SIDR records and the data records
  VERBOSE=4    : Detail 3 and the SIDR pointers
  If verbose>0, the output of the detail option can be redirected to another
                  file. See the OUTPUT= option

  For more info see the help about [DIX/HELP] modes analyze

![DIX MODES analyze]DIX modes analyze

DIX INTERACTIVE_COMMANDS ASSIGN


  symbolname=value
  fieldname=value

  You can assign values to symbols or fieldnames
  Fieldnames can also be assigned via the deposit command
  There are also four special formats

   name++   name=name+1
   name--   name=name-1
   name+=n  name=name+n
   name-=n  name=name-n

   For these formats only [u]integer types (symbols or fields) are allowed

  In DCL compatible mode the symbol[d1,d2]=expression and :=expression are
  also supported for strings and integers (like DCL)

DIX INTERACTIVE_COMMANDS ASSIGN ASSIGN_SYMBOLS


  symbolname = value

  Symbol may be a table or a subset of a table. In this case value
  must either be a scalar or have the same shape as the symbol

  Examples:

   a=10                 !scalar assignment
   decl a(3,3)/integer  !declare an integer table(3,3)
   a(*,*) = 0           !all values(9) to 0
   a(3,*) = 10          !all values(3,*) (3 of them) to 10
   a(3,*) = [1,2,3]     !fill a(3,*) with 1,2,3 respectively

  For indexed symbols you can also modify an existing entry or add a new
   one the indexed symbol
    declare/index=char test/int !create an indexed symbol test of type integer
    test("a")=1                 !add a new element
    test("a")=2                 !modify element "a"
    test("b")=4                 !add a new element "b"
    test("c")=test("c") + 1     !update element "c"
                                  or create it if not yet present

  For description type symbols you may change all individual fields
    DIX> load/descr sys$input mydesc
     integer*4 testi
     real*4 testr
     character*20 testc
    ^Z
    %DIX-I-DESADD, Description sys$input:mydesc added
    DIX> show des/loaded mydesc
    Name  : sys$input:mydesc
    Status : Fixed
     INTEGER*4          TESTI
     REAL_F*4           TESTR
     CHARACTER*20       TESTC
     No variable Data lines
    DIX> declare/des=mydesc mysymb
    DIX> show symb mysymb/fu/all
    MYSYMB(Descr=sys$input:mydesc,Level=1.0)=2 descriptions,2 expanded
     MYSYMB.TESTI=0
        0 INTEGER*4 TESTI
     MYSYMB.TESTR=0.0
        4 REAL_F*4 TESTR
     MYSYMB.TESTC=
        8 CHARACTER*20 TESTC
    DIX> mysymb.testi = 12
    DIX> mysymb.testc = "abcd"
    DIX> show symb mysymb/all
     MYSYMB.TESTI=0
     MYSYMB.TESTR=0.0
     MYSYMB.TESTC="abc"
    DIX> show symb mysymb.*i/all

DIX INTERACTIVE_COMMANDS ASSIGN Assign_fields


  fieldname=value

  Fieldname may be the name of one field, or an table
  Fieldname may not contain wildcards (Except in the final dimension)
  value must have the same shape as fieldname

  Examples:
   suppose we have a field test.value(2,2) somewhere

  test.value(1,1) = 10          !assign to value(1,1)
  test.value      = 10          !assign 10 to all values (4 fields)
  test.value(1,*) = 10          !assign 10 to (1,*) (2 fields)

  The following is not supported
  Suppose we have a test(3).value(2,2)
   test(1).value(1,1) is valid, but
   test(*).value(1,1) not

  You may also assign values to fieldnames via the DEPOSIT command
  The differences are
   deposit
     allows wildcarding of the name (a text match is done)
      the text after the = is interpreted as text, and will be converted
      according the fieldname type.
   assign
     Does not allow wildcarding of the name, but it does support
      wildcarding in the lowest dimension
     The piece after the = is evaluated as an expression, and must
      deliver a result of the same (or compatible) type as the field

DIX INTERACTIVE_COMMANDS BACK


  Syntax BACK [/LOG]
  This command allows you to return to the file from which you
  followed a link to this file. Up to 16 jumps are saved in a history
  buffer.
  See also the FOLLOW command

DIX INTERACTIVE_COMMANDS BREAK


   If the break command is found in a command file, DIX jumps to the
     DIX debugger.
   The command is ignored when issued from the terminal

DIX INTERACTIVE_COMMANDS CD

  CD[/log] [string]
  A fast way to change directories. You can also use the SET DEFAULT command,
  but CD is easier to use.
  SDF is a synonym for CD

  Syntax:
  CD token[.token[.token...]
     Token can be
     1.            The beginning of the directory or a complete device name.
                   If the directory is not unique, DIX will print a list of
                   directories, and lets you choose one.
                   If token ends with a :, DIX will change the current disk
                   to the token.
     2. #        : This is the SYS$LOGIN of the current user
     3. ~username: The login directory of user 'username'. If username is not
                   specified, the current user will be used, and it is
                   equivalent to #. This may need GRPPRV or SYSPRV privilege
     4. -          Go one level up. If this is the last item on the line you
                   must add a . to prevent DIX from asking for a continuation
                   line.

   Instead of the . as separator, the / or the \ can also be used.
    If the / or the \ is typed as the first character, DIX will jump to
    the [000000] directory of the current disk.

   Examples:
    DIX> CD     !display current directories
    Current directory:USER50:[STUBBF.PROGRAMS.DIX.SOURCE]
    Subdirectories found :        DATA      T4        TEST

    DIX> CD T     !go to a directory starting with a T (there are 2)
    1:T4   2:TEST !DIX will display all matches and ask you for a choice
    Choose 1..2:2
    New directory:USER50:[STUBBF.PROGRAMS.DIX.SOURCE.TEST]

    DIX> cd -.    !go one up again
    New directory:USER50:[STUBBF.PROGRAMS.DIX.SOURCE]

    DIX> CD ~     !go to my login directory is the same as CD #
    New directory:USER50:[STUBBF]

    DIX> CD P.D.S  !I want to go back to programs.dix.source
    1:PCSI          2:PERF      3:PROGRAMS
    Choose 1..3:3 !choose programs, and now we again have multiple matches
    1:DELETE_INTRUSIONS 2:DISKSTAT          3:DISTRIBUTED    4:DIX
    Choose 1..4:4 !Choose DIX, and now there are no more ambiguous directories
    New directory:USER50:[STUBBF.PROGRAMS.DIX.SOURCE]

    DIX> CD ~OTHERUSER  !goto login of otheruser (needs privileges)
    New directory:USER100:[OTHERUSER]

DIX INTERACTIVE_COMMANDS CHARACTER

   CHARACTER[/level=n][/global] name[dimensions][=value]
   CHARACTER name[=value]

   Declare a new symbol of type "CHARACTER" and optionally give a value.
   The value (if present) must be an expression of type "character"

  Example:
   CHARACTER mystring="Heading line"
  See the help about [DIX/HELP] interactive declaration

DIX INTERACTIVE_COMMANDS CHECKSUM


   Compute sha* and md5 checksums of files or strings

   checksum/xor=[vms] parameter [/qualifiers]   !compute xor hash
   checksum/sum       parameter [/qualifiers]   !compute sum hash
   checksum/md5       parameter [/qualifiers]   !compute md5 hash
   checksum/sha=n     parameter [/qualifiers]   !compute sha hash
                                            ! n=1,224,256,384,512, default=256

   DIX will compute the data only from the record contents (if not in block_mode)
   If you copy the file to i.e. windows, the checksum may be different. This
   has two possible reasons.

   a. For text files (ASCII transfer) the windows checksum utility checks
      all data in the file including the separating CRLFs.
      See the /add qualifier for a possible solution
   b. If you checksum a .ZIP file, RMS will read the file as 512 byte records
      but the last record may not be completely filled (END_OF_FILE in the middle of
      the block). Use the /exact_file_size qualifier for a solution.
      The same applies if you checksum the file in block mode.

   For the sum and xor checksum you can specify the /byte,/word and /longword
    qualifier to select the size of the xor/sum value.
    The default size is longword.

    If the size in /word or /long, and the record does not contain a multiple
     of bytes (2 or 4), the record will be appended by binary 0.
    If the user specifies /xor=vms, the last bytes will be added instead
     the appending with binary 0. This matches the OpenVMS checksum/algor=xor
     method.

   Parameter is
      a filename to checksum or a string (if /string is specified)
   Qualifiers

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers


DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /string


  The parameter is a string and not a filename.

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /symbol

  /symbol[=name]

  Store result in a DIX symbol "name". The default value is CHECKSUM$CHECKSUM
  If you also specify /dcl, the result will be in a DCL symbol
  If you are running in command mode (DIX/COMMAND), /DCL is default

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /DCL

  If /symbol is specified, the result must be in a DCL symbol
  If you are running in command mode (DIX/COMMAND), /DCL is default

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /logical

  /logical[=name]

   Store result in a process logical. The default value is CHECKSUM$CHECKSUM

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /job_table

  If /logical is specified, the logical will be stored in a job logical name table

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /block_mode

  /block_mode
    Open the file in blockmode, normally only records are processed
    In this case all bytes in the file are used, also the record separators.
    See also the /exact_file_size qualifier.

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /byte

  For the sum and xor checksum only.
  Set the size of the checksum to byte.

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /word

  For the sum and xor checksum only.
  Set the size of the checksum to word (2 bytes).

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /longword

  For the sum and xor checksum only.
  Set the size of the checksum to longword (4 bytes).

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /skip

   /skip=tag

     Skip certain characters in input.
      Tag can be
        LF   : Skip LF character
        CR   : Skip LF character
        BOTH : Skip CR and LF character, this is the default /skip

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /add

  /add=tag
     Add certain characters after each record.
      Tag can be
        LF   : Add LF character
        CR   : Add LF character
        BOTH : Add CR and LF character, this is the default /add

DIX INTERACTIVE_COMMANDS CHECKSUM qualifiers /exact_file_size


  For fixed files only. The last record can have less than
  the fixed record length. RMS will always report the
  fixed record length. With this switch the checksum will
  only be computed on the real file size. This may/will be useful for
  .ZIP files

DIX INTERACTIVE_COMMANDS CHKA


  CHKA Check access to files

  Syntax : CHKA filename user /qualifiers

  Check if user has access to the file(s).
  If no access is possible, DIX will check upper directories until
  access is possible.
  CHKA will show the ACL or privilege used to access the file
   If no ACL or privilege is shown, access will be via ownership/fileprotection

  You need privileges (SYSPRV or BYPASS) if you want to query for
    anybody but yourself

  Parameters
    filename : The file to check
    User     : The user to check for
  Qualifiers
   Access qualifiers
    /read     : See if read access is possible
    /write    : See if write access is possible
    /update   : See if update access is possible
    /delete   : See if delete access is possible

     the /read is default, and only one access qualifier may be used

   Other qualifiers
    /defpriv  : The default user privileges instead of the authorized
    /batch    : See is access in batch is allowed
    /all_level: Print access of all upper directories
    /ids=(id,id..) : Extra identifiers to grant to the user
                     (so i.e. /batch is the same as /ids=batch)

  Examples:
   User STUBBF has SYSPRV in authorized, but not in default privileges

   DIX> chka sys$system:zic.exe             !Read access to zic.exe?
   R access to SYS$COMMON:[SYSEXE]ZIC.EXE;1

   DIX> chka sys$system:zic.exe /write      !write access to zic.exe?
   W access to SYS$COMMON:[SYSEXE]ZIC.EXE;1
    because priv SYSPRV

   DIX> chka sys$system:zic.exe /write/defp !write access to zic.exe with
                                           default privileges?
   NO W access to SYS$COMMON:[SYSEXE]ZIC.EXE;1
    NO W access to DISK$ALPHASYS:[VMS$COMMON]SYSEXE.DIR;1
     E access to DISK$ALPHASYS:[000000]VMS$COMMON.DIR;1
   %SYSTEM-F-NOPRIV, insufficient privilege or object protection violation

  If ACLS are present like on test.dix. User TEST has no extra privileges.

    $ DIR/SEC TEST.DIX
    TEST.DIX;13             [STUBBF]            (RWED,RWED,RE,)
      (IDENTIFIER=[TEST],ACCESS=WRITE)

    DIX> chka TEST.dix test        !user test has no read access
     NO R access to USER50:[STUBBF.PROGRAMS.DIX.SOURCE]TEST.DIX;1
      E access to DISK$ALPHASYS:[STUBBF.PROGRAMS.DIX]SOURCE.DIR;1
    %SYSTEM-F-NOPRIV, insufficient privilege or object protection violation

    DIX> chka test.dix test/write  !user test has write access by ACL
     W access to USER50:[STUBBF.PROGRAMS.DIX.SOURCE]TEST.DIX;1
      Because of ACL (IDENTIFIER=[TEST],ACCESS=WRITE)

DIX INTERACTIVE_COMMANDS CLOSE

   CLOSE[/qualifiers]       Close the current file
   CLOSE[/qualifiers] mask  Close file with tag=mask or filename matches mask
                            Mask can contain wildcards

  Will close the file(s) that match 'mask'. If the current file is closed
  the first file in the list will become the current file.

DIX INTERACTIVE_COMMANDS CLOSE qualifiers


DIX INTERACTIVE_COMMANDS CLOSE qualifiers /DISPOSITION

  /DISPOSITION=what

  What to with the file when it's closed
  what can be
   KEEP   : This is the default, do nothing
   SUBMIT : Submit the file to SYS$BATCH
   PRINT  : Print the file to SYS$PRINT
   DELETE : Delete the file

 Only supported for RMS files, no Fast I/O or library module

DIX INTERACTIVE_COMMANDS CLOSE qualifiers /ERROR

  /ERROR=label

  If the CLOSE results in an error, DIX will jump to the label.
  If the /ERROR qualifier is not specified, DIX will look for the ON condition.

DIX INTERACTIVE_COMMANDS CLOSE qualifiers /LOG


  /LOG
  /NOLOG  (Default)

  If you specify /log, DIX will show the file(s) closed.
  Also the new current file is displayed (or the no files open message)

DIX INTERACTIVE_COMMANDS COMPILE


   COMPILE dixfile [/qualifiers]

   Compile the DIX file to a compiled file. This may load a little faster,
   but runtime performance will be the same, since DIX precompiles all scripts.
   However using compiled scripts makes it (nearly) impossible for users to
   adapt the script, certainly if you do not specify /include
   and even more if you specify /encrypt

  Supported qualifiers
   /INCLUDE_SOURCE : Include the source of the script. This allows the user
                     to display the lines during execution if SET VER is on
   /ENCRYPT        : Encrypt the output file. This makes it very hard to
                     change the commands.
   /OUTPUT=filename: The default filename is 'INPUTFILE'_COMPILED
   /LOG            : Display logging info
   /COMPRESS       : Compress the output file. This makes the file smaller.
                     This is the default
   /PASSWORD=string: Add a password for the file. This will also set the
                     ENCRYPT flag. On execution the user must specify the
                     password.
   /DCL_COMPATIBLE[=compatible|fallback]
                   : Set the DCL compatible mode
                     The default is /NODCL, /DCL is /DCL=compatible
   /VERB[=none|always|reading]
                   : Set the verb substitution
                     The default is /NOVERB, /VERB is /DCL=always
                     See the help about "intera file_and_commands_in_file"

   Example:

    DIX> compile script/log   !compile script.dix to script.dix_compiled
    Compiled DISK:[DIR]SCRIPT.DIX/COMPRES;4
     /output=DISK:[DIR]SCRIPT.DIX_COMPILED;2
     20 records saved containing 3055 bytes
    DIX> @script.dix_compiled !execute compiled script
    ....

    DIX> Compile a.com/DCL   !compile a DCL command file

DIX INTERACTIVE_COMMANDS CONVERT


  Convert [/qualifiers] inputfile[,inputfile] outputfile

  Convert an input file to an output file. Just like DCL convert.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers


DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /APPEND


   Controls whether converted records from an input file are
   appended to an existing sequential file.

   Normally DIX would create a new output file, but if you specify
   /append, DIX will append all records from inputfile to outputfile.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /EXCEPTIONS_FILE


   Specifies whether an exceptions file (file type .EXC) is to be
   generated during the conversion.

   Format

     /EXCEPTIONS_FILE [=filespec]
     /NOEXCEPTIONS_FILE (Default)

   Filespec is by default SYS$OUTPUT

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /EXIT


   Controls whether the DIX exits when it encounters an exception record.
   By default, DIX continues processing records when it encounters
   an exception record.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /FAST_LOAD


   Specifies whether the DIX uses a fast-loading algorithm for
    indexed files.

   Format

     /FAST_LOAD  (Default)
     /NOFAST_LOAD

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /FDL


   Indicates that an FDL file is to be used in creating the output
   file.

   Format

     /FDL=fdlfile

   Specifies the FDL file to be used in creating the output file.
   The newly created output file will have the name specified by the
   fdlfile command parameter; this name overrides any file name
   specified in the FDL file.

   The default file type for the FDL file is .FDL.
   The FDL file can also be specified inline. If the first character
   of the FDL file is a ; DIX will treat the filespec as a (; separated)
   string that contains the FDL specifications.

   Example:
    DIX> convert/fdl=x a b
           Convert file a to b using FDL file x.fdl

    DIX> convert/fdl="; file ; org seq" a b
           Will convert file a to b as if an FDL file
             FILE
              ORG SEQ
           is given.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /FILL_BUCKETS


   Controls whether to override the bucket fill percentage parameter
   associated with the output file.

   Format

     /FILL_BUCKETS

     /NOFILL_BUCKETS  (Default)

   If you specify /FILL_BUCKETS, the DIX fills the output file
   buckets with as many records as possible.
   This option is valid only for indexed output files.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /FIXED_CONTROL


   Controls file conversions between files having variable-length
   with fixed-length control field (VFC) records and files having
   other record formats.

   Format

     ED_CONTROL

     /NOFIXED_CONTROL  (Default)

   This qualifier applies only to conversions where either the input
   or the output file, but not both, uses VFC records. This option
   is applicable only to sequential files.

    o If you specify /FIXED_CONTROL and the input file uses VFC
      records but the output file does not, the fixed-length control
      field from the input record is inserted into the output record
      as data.

    o If you specify /FIXED_CONTROL and the output file has VFC
      records but the input file does not, the leading part of the
      input record is used to fill the fixed-length control part of
      the output record.

    o If you specify /NOFIXED_CONTROL and the input file uses VFC
      records but the output file does not, the fixed-length control
      field from the input record is not included as data in the
      output record.

    o If you specify /NOFIXED_CONTROL and the output file has
      VFC records but the input file does not, the control field
      attached to the output record is set to null.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /KEY


   Directs DIX to read records from an indexed file
   using a specified key of reference, such as the primary key, the
   first alternate key, or the second alternate key.

   Format

     /KEY=n

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /MERGE


   Specifies that records are to be inserted into their proper
   position in an existing indexed file.

   Format

     /MERGE

     /NOMERGE  (Default)

   The /MERGE qualifier is useful when your input records are not
   sorted and you do not want them to be sorted as they are loaded
   into an output file.

   If you specify both /MERGE and /CREATE, /MERGE overrides the
   /CREATE qualifier.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /PAD


   Determines whether short records are to be padded.

   Format

     /PAD [=[%b]x]

     /NOPAD  (Default)

   Specifies that the short records are to be padded with either
   ASCII characters (A through Z, a through z, or 0 through 9) or
   numeric values.

   To specify x as a numeric value, you must specify the numeric
   base using the percent symbol (%) followed by one of the
   following characters:

   D    Indicates that x is a decimal number.
   O    Indicates that x is a octal number.
   X    Indicates that x is a hexadecimal number.
   B    Indicates that x is a binary number.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /PROLOG


   Specifies the prolog version number of the output indexed file.

   Format

     /PROLOG=n

   Specifies the prolog number 1, 2, or 3.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /READ_CHECK


   Specifies whether each input record is to be read from the file a
   second time and compared to the record originally read.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /SECONDARY


   Increases DIX's performance by reducing the
   number of required passes through the input data. This is
   accomplished by placing alternate key information into the
   CONVWORK file.

   Format

   /SECONDARY=n

   Qualifier Value
   n
   Specifies the number of alternate keys that will be loaded to
   the CONVWORK file with each pass through the input data.

   This qualifier is valid when you are fast-loading a file with
   more than one alternate key. This option allows CONVERT to use
   more disk space for its work file than would be used by default.

   The default number of alternate keys written to the CONVWORK
   file is 1.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /SHARE


   Specifies whether the input file is to be opened for sharing with
   other processes during the conversion.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /SORT


   Specifies whether the input file is to be sorted before being
   loaded into an indexed file. The sort is done according to the
   primary key of the output file.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /STATISTICS


   Determines whether statistics about the file conversion are to
   be displayed.

   Format

     /STATISTICS[=keyword]

     /NOSTATISTICS  (Default)

   Keyword     Meaning

   BRIEF       Displays a summary of the file conversion at the
               completion of the operation. This is the default.
   FULL        Displays summary information at the completion of
               each key load containing Sort and Load statistics
               for the key. A summary of the file conversion is
               also displayed at the completion of the operation.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /TRUNCATE


   Specifies whether records that exceed the maximum record length
   for variable-length records, or records that exceed the specified
   record length for fixed-length records, are to be truncated.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /WORK_FILES


   Specifies the number of temporary work files to be used during
   the sort process.

   Format

     /WORK_FILES=n

   Specifies the number of work files you want. You can specify 0 or
   any value from 1 through 10. The default is 2 work files.

DIX INTERACTIVE_COMMANDS CONVERT Qualifiers /WRITE_CHECK


   Specifies whether all writes are to be checked by comparing the
   new disk records with the original records in memory.

DIX INTERACTIVE_COMMANDS CREATE


  Create something

  CREATE/FILE filename                  !create new file
  CREATE/DESCRIPTION new_description    !create new description record
  CREATE/RECORD [tag]                   !create new record in a file

  In DIX mode the /RECORD is the default
  In DCL mode the /FILE is the default

DIX INTERACTIVE_COMMANDS CREATE CREATE


  CREATE/RECORD [TAG]

  Create a new record. The record will be filled with default data
   - binary null for non-text fields
   - Spaces for text fields
  and then allow you to modify this record, and eventually write it out
  via the Update command.
  This is the default in DIX mode

DIX INTERACTIVE_COMMANDS CREATE CREATE_FILE


  CREATE/FILE filename [/fdl=fdlname] [/log]

   Create a new file. Optionally specify an FDL filename

   Filename must be specified.
   If the FDL filename is specified, the file is created using
   the FDL, otherwise a variable length file is created.
   This is the default in DIX mode

DIX INTERACTIVE_COMMANDS CREATE CREATE_DESCRIPTION


  CREATE/DESCRIPTION name [/qualifiers]

  Create a new description. This can be in the system_library (if you have
  write access), the user_library or in a file.
  Supported qualifiers

  /SYSTEM_LIBRARY  The new description will be placed in the system_library
  /USER_LIBRARY    The new description will be placed in the user_library
                   If you specify nothing, the new description will be in a
                    file in the current directory.
  /TPU             Use the TPU editor for editing
  /EDT             Use the EDT editor for editing
                   If no editor is specified, use the internal editor

DIX INTERACTIVE_COMMANDS COPY

   is an alias for CUT

DIX INTERACTIVE_COMMANDS CUT

   CUT[/qualifiers] [TAG]
   COPY is an alias for the word

  Save current record values to save area (clipboard) or to a symbol.
  TAG is optional. If not specified, the current file is used, otherwise
  the file specified by 'TAG' is used.
  The PASTE command can be used to restore data from the save area.
  See the help about [DIX/HELP] interactive PASTE

  Qualifiers can be

  /SYMBOL=symbolname
     Save the data to a DIX symbol
     You can use the PASTE command to restore the record from this save-area
     or symbol.

 /DCL
     The symbol name is a DCL symbol. There are limitations on the length of
     DCL symbols, and if you exceed them, you will see an error

  /GLOBAL
     The DCL symbol is a global.

  If the file is a VFC file, and the /symbol is present, 2 symbols are created
  1. symbolname     : Containing the record data value
  2. symbolname_VFC : Containing the VFC data

DIX INTERACTIVE_COMMANDS CYCLE

  Skip the rest of the for, repeat, while, loop block and resume execution
  at the corresponding ENDxxx statement to start the next iteration.
  This command does not exit the current block (as the LEAVE command).

  Example:

  nrec = 0
  REPEAT
    read                        !read next record
    if (fieldname=5) cycle      !if a fieldname = 5, skip the rest
    fieldname = fieldname+1     !update the fieldname
    UPDATE                      !and write out to the file
    nrec = nrec + 1             !and count
  UNTIL nrec=10                 !when 10 processed stop

DIX INTERACTIVE_COMMANDS DATE

   DATE [/type=enum_type][/level=n][/global] name[dimensions][=value]
   DATE /INDEX=indextype name         Declare an indexed symbol of type integer
   DATE name[=value]

   Declare a new symbol of type "DATE" and optionally give a value.
   The value must be of type "date"
   See the help about [DIX/INT] interact declaration for the enum_type
   See the help about [DIX/INT] interact symbols indexed_symbols for /INDEX

  Example:
   DATE start_date=f$date("1-JAN-2004")
  See the help about [DIX/HELP] interact declaration

DIX INTERACTIVE_COMMANDS DEASSIGN


   Deassign logicalname[/qualifiers]

  Supported qualifiers are
   Qualifier for the table
     /cluster
     /system
     /group
     /job
     /process
     /table=tablename

   Qualifiers for the mode of the logical
     /kernel
     /executive
     /supervisor
     /user

DIX INTERACTIVE_COMMANDS DECENT


  syntax
    decent [/qualifiers] parameter

   Decent the DCL procedure or DIX procedure
   - Replace all verbs/qualifiers by the full text
   - Uppercase/Lowercase all verbs/quals..
   - Create a nice indentation around if-then-else-endif
   - and lots more, see further help

 Parameter can be
  - A single command to be decented
  - sys$input, sys$command. Dix will ask for a lines to be decented
         until the user types a ^Z. The user may also change the settings 
         with a command starting with a / f.e. /fix=all. /explain is 
         also supported. Processing a file is supported via @filename
          See example below 
  - dclfile, they may contain wildcards, all files matching will be processed
      See also /output and /log and /confirm

  Qualifiers are

DIX INTERACTIVE_COMMANDS DECENT example


  $dix/command decent sys$input.!no fixes no cases  no indent
  DCL-Line:sh ti
  $SHOW TIME         .!all upper
  $/explain
  Settings after Change
   /FIX=NOALL
   /ALLOW=NOALL
   /FORMAT=NOALL
   /WARNING=NOALL
   /SPACES=NOALL
   /LOWER=NOALL
   /UPPER=NOALL
   /COMMENT=NOALL
   /INDENT=(Initial=1,Before=0,After=0,Labels=0,Continuation=0)
   /Twophases/Dcl/Lax_quotes
  DCL-Line:/lower=(all,nolabel)/upper=label/indent=initial=8/expl  !change setting
  Settings after Change                                        !and show
   /ALLOW=NOALL
   /FORMAT=NOALL
   /WARNING=NOALL
   /SPACES=NOALL
   /LOWER=(Verbs,Qualifiers,Lexicals,Keywords,Data,Strings,Filenames,Logicals,-
         Usernames,Input,Symbols)
   /UPPER=(Labels)
   /COMMENT=NOALL
   /INDENT=(Initial=8,Before=0,After=0,Labels=0,Continuation=0)
   /Twophases/Dcl/Lax_quotes
  DCL-Line:sh ti           !try again, now lowercase and at pos 8
  $       show time
  DCL-Line:label:sh ti     !but labels uppercase
  $LABEL: show time
  DCL-LINE:@proc        !will process proc.com in dclmode or proc.dix in dix mode
  ...
  ...                   !output from proc.*
  ...
  DCL-Line:/nodcl.!switch to dix mode
  DIX-Line:sh al
  SHOW ALL              !DIX command (no $ in front)
  Line:^Z
  $

DIX INTERACTIVE_COMMANDS DECENT /auto


 When you specify /auto, dix will read the first line of the file to see if
 there is a $ in front. If so, DIX assumes the input file is a DCL command
 procedure. If the $ is not found it must be a DIX script
 See also the /dcl and /dix qualifiers. There is no default filetype in this
 case. Also the /fix=missing_dollar is ignored.

DIX INTERACTIVE_COMMANDS DECENT /procedure


  /procedure
  /noprocedure

  the argument can be either the name of a DCL procedure or a one-line command.
  DIX will check p1 for characters / space or =
  If any of them is present, the default is /noprocedure so a one-line command
  If none is present the default is /procedure, so a procedure name

  The qualifier can be used to override this default behaviour

  if present
    The parameter will be used as the name of DCL procedure, default .COM
  if negated
    the parameter will be used as a one line DCL command.

DIX INTERACTIVE_COMMANDS DECENT /comment


  /comment=(position=nn, at_end, compress)

  position       Position in the line for the comments

    Comment lines without statements are printed as found
    Comment text after statements are by default printed directly after the
    command.

    If you specify /comment=pos=number, comments will be placed at column 'number'
    If you specify /comment=pos=-number, comments will be placed at -'number' after
     the command line
    If you specify /comment=pos=tab, DIX will insert spaces until a TAB position
     This can also be achieved via /spaces=comment=tab, but that will insert
     a TAB character, and overrule the comment=pos=tab.

  at_end        Specifies that comments will only be placed on the
                last continuation line

  compress      Remove leading spaces from comment

  keep          If the comment is only the comment character ! 
                DIX will remove the ! character also
                if you specify comment=keep the ! will be retained
  align_last    If comment must be printed after the code line,
                DIX will normally print the comment at position 2
                If you specify align_last, the comment is aligned
                with the previous comment 

DIX INTERACTIVE_COMMANDS DECENT /confirm


  If you specify /confirm, DIX will ask you if you want to process the file.
  This may be useful if there is a wildcard in the inputfile

DIX INTERACTIVE_COMMANDS DECENT /dcl

  The input file is a dcl command procedure.
  You can either use /dcl or /dix (input file is dix procedure)
  If neither is specified (or /auto), DIX will look into the file and 
  if the first character is a $, DIX will assume the file is a DCL procedure.
  If you specify /dcl the default input filetype is .com,
  If neither /dcl nor /dix is specified there is no default filetype
  

DIX INTERACTIVE_COMMANDS DECENT /dix

  The input file is a dix command procedure.
  You can either use /dcl or /dix (input file is dix procedure)
  If neither is specified (or /auto), DIX will look into the file and if 
  the first character is a $, DIX will assume the file is a DCL procedure.
  If you specify /dix the default input filetype is .dix
  If neither /dcl nor /dix is specified there is no default filetype
  

DIX INTERACTIVE_COMMANDS DECENT /explain


  /explain          or /
  /explain=all      or //

  DIX will print out the various settings. If you specify /explain=all
  this will be done twice, once after the settings file is processed and
  once after the command line processed.


DIX INTERACTIVE_COMMANDS DECENT /image


  If you specify /image and the command is $ MCR IMAGE ..., DIX will look in the
  image (default filename SYS$SYSTEM:.EXE) for a valid DCL table. If it finds
  one, that table will be used to check (and expand) the command.
  This also works if you have a foreign command definition like
  $ UAF:=$AUTHORIZE  or  $ UAF:=MCR AUTHORIZE. It even understands extra text
  in the symbol like $ SYSMANIO:=$SYSMAN IO

  In the translated command the verb will remain the same.

  This qualifier is not default.

DIX INTERACTIVE_COMMANDS DECENT /indent

  /indent=(token...)

   This sets the values for indentation

   Token can be
   initial=value      Set the initial indentation, value can be tab or a number
   before_then=value  Set the indentation of the if/then/else/endif command 
                         value is a number of TAB
   after_then=value   Set the indentation of lines between then[,else] and endif
                         value is a number of TAB
   label=n            Set the indentation for labels, value may be negative
                         or CODE to align with code or 0 for toplevel
   continuation=n     Set the extra indent for continuation lines, this is
                         added to the current indentation (value may be negative)
   datalines=n        Set extra indent for datalines that contain commands in
                       images. 0=same level as command, >0 deeper, <0 less deep
                       If you do not specify indent=datalines[=value]
                        no indentation is done. You can disable indentation
                        for a specific image in the dix_decent.setup file
   comment            Align comment lines without commands or labels to the code
  The default is init=8,before=1,after=1,labels=0,cont=4

DIX INTERACTIVE_COMMANDS DECENT /init

  /init=filename

   Used to define symbols from a command file.
    e.g. LOGIN.COM or SYS$SYLOGIN.
     Files may be nested.

DIX INTERACTIVE_COMMANDS DECENT /format


  Change the output format

   /format=(tag...)

   tag : keep_lex             Do not break lines in the middle of a lexical function
         blank_before_label   Insert a $! before a label
         remove_blank_comment Remove all $! lines
         qualifier_on_line    Try to break on / (new qualifiers)
         dash_in_comment      Add a - in the comment if the comment is continued
                              on the next line. DCL ignores this, but it 
                              signals that the comment is on the next line
         semicolon            Show a ; between comments on multiple lines in
                              the original source
         quoted_on_line       Do not break lines within a "" string
         header               Insert header line(s) in file, see below
         add_defaults         Show all default qualifiers/parameters too
         identifier=user      If in an acl the uic is something like 
                               identifier=[tcpip$aux,tcpip$ftp] DIX will remove 
                               the group info, so the result will be 
                               identifier=tcpip$ftp 
         identifier=keep      Leave the original idname intact so if you
                               specified id=[1,4] it will not be changed to
                               id=system
         labels               Add the name of the subroutine to all labels
                               found in the subroutine, and also the references

  If header is set, the user can select the format of the header in the
    dix_decent.setup file via the header command. 
   DIX will check if the filename occurs in the comment of first 10 lines.
    If the name is found, DIX assumes all is okay, and does not insert 
    extra lines. If the filename is not found DIX will add one or more
    lines. See the documentation about the setup file for more info
  

DIX INTERACTIVE_COMMANDS DECENT /fix

   /fix=(tag...)

   Fix a number of possible issues with the DCL code

   tag can be

DIX INTERACTIVE_COMMANDS DECENT /fix add_name


  Add the name of the subroutine in the comment after an EXIT or ENDSUBROUTINE
   statement.Also the first label of before a return will be inserted
   in the comment after the return. 
   If the name to be inserted is already present, DIX will not insert it again.

  The exit of the main level can also be appended if /fix=add_name=all is
   used. The name added comes from the /name qualifier. See the help there 

DIX INTERACTIVE_COMMANDS DECENT /fix assign


   Replace the assign statement by the define statement. It also
   removes the optional : in the second argument of assign
   so assign a b: will be define b a

   If /QUEUE or /MERGE is present, the change will not be done

   If a ' is present, the change will not be done (maybe it
   contains /mer or /que) unless you specify /fix=assign=all
        

DIX INTERACTIVE_COMMANDS DECENT /fix backslash

  if you specify /fix=backslash DIX will remove the \ after the verb
  this is sometimes used to prevent symbol substitution as in
   $delete\  x.x;

DIX INTERACTIVE_COMMANDS DECENT /fix brackets


  DIX will remove unnecessary () in keywords and if statements

  keywords
    direct/sel=(size=(min=10)) will be directory/select=size=min=10
    The brackets will not be removed if one of the values contains a '
    since that expression may contain a ,
    Like
     $privs="cmknrl,oper"
     $set proc/priv=('privs')
  If statements
    if (expre) then command to if expre then command
    The brackets will not be removed if expr contains ( or )

  Assignments
    a=(a+b)

DIX INTERACTIVE_COMMANDS DECENT /fix colon


   DIX will replace the = sign by a :
   in sort or search /key=(pos=nn,siz=nn) to pos:nn,siz:nn
   and in protection /prot=rw to /prot:rw

DIX INTERACTIVE_COMMANDS DECENT /fix datalines


  If datalines (in deck part) DIX will look in the image from the previous
  line to see if that image contains a CLD table. If so DIX will try to
  expand the datalines

  Example:
  $ mcr authorize
  SHO US *             !will be replaced by show user *
  mod abx/priv=cmk     !will be replaced by modify abc/privilege=cmkrnl

  $ copy sys$input tt:
  text line 1          !will not be replaced since copy has no CLD table
  text line 2          !(it is in DCL tables)

DIX INTERACTIVE_COMMANDS DECENT /fix deck


  Automatically insert $DECK/$EOD around lines that do not
   start with a $

DIX INTERACTIVE_COMMANDS DECENT /fix directory

   Some directory names are modified

   - If a filename contains an emtpty directory string , DIX will remove it
     so disk:[]file will become disk:file
   - <> are replaced by []
   - 0,0 is replaced by 000000
   - [000000.abc] will be replaced by [abc]

DIX INTERACTIVE_COMMANDS DECENT /fix dots


  Replace operators with no trailing . so .eq will be .eq.

DIX INTERACTIVE_COMMANDS DECENT /fix eoj

 
  Replace EOJ by EXIT

DIX INTERACTIVE_COMMANDS DECENT /fix exclamation


   replace multiple ! with only 1 so command !!!comment will be
                                     command !comment

DIX INTERACTIVE_COMMANDS DECENT /fix exit

 
  Add  $exit to procedure and not yet seen
  the $exit will not be added if the last statement is a return or a
    endsubroutine 

DIX INTERACTIVE_COMMANDS DECENT /fix fao


   replace f$fao("abc") by "abc" but not if there is a ! in the string
    that might be a directive

DIX INTERACTIVE_COMMANDS DECENT /fix filenames

   /fix=filenames
   /fix=filenames=default
   /fix=filenames=all

   DIX will append missing file type for according to the setting
    in the dix_decent.setup file. For example

       @filename   : default type is .COM
       submit file : default type is .COM
       call file   : default type is .COM
       submit xyz/log=file : default type is .LOG
       type file   : Default type is .LIS
       print file  : Default type is .LIS
       run file    : default type is .EXE
       convert/fdl : default type is .FDL
       create/fdl  : default type is .FDL
       set command : default type is .CLD

    If only the name of the file is present, DIX will not add the
     default file type, since the name could be a logical. If any
     other part of the filename is present DIX will add the default file type.

    If you want to add the file type also if the name is the only part
     of the filename, specify /fix=filename=all. Doing this may
     make the output file not correct. DIX will check if the
     name is a defined logical, if so, DIX will not fix the filename

    If you specify /fix=filenames=default, and the command is not one
     of the specified in the .setup file, and the cld entity contains a
     default name, DIX will use that name as default file type

DIX INTERACTIVE_COMMANDS DECENT /fix ifthenelse


  DIX will make two lines of the THEN statement and ELSE statement
  This is the the only action taken if you specify /fix without keywords

DIX INTERACTIVE_COMMANDS DECENT /fix labels


  Force all labels to be printed on a separate line

DIX INTERACTIVE_COMMANDS DECENT /fix leading_blank_lines


  Remove all leading $! lines from the file

DIX INTERACTIVE_COMMANDS DECENT /fix magtape


  Replace show magtape by show device/full

DIX INTERACTIVE_COMMANDS DECENT /fix mcr


  See if a symbol assignment for a foreign command needs
   to be replaced by mcr
   so symb="$image .." replaced by symb="mcr image ..." 

   fix=mcr=never    !never replace the $ by mcr
   fix=mcr=allways  !always replace the $ by mcr
   fix=mcr=system   !only replace the $ by mcr if image is in sys$system

   For /fix=all, the default is fix=mcr=system

DIX INTERACTIVE_COMMANDS DECENT /fix missing_dollars


  If you specify /fix=missing_dollars
  and the input file does not contain any command with a leading dollar
  DIX will insert a $ in front of all lines
  This is ignored unless the /dcl is also present.

DIX INTERACTIVE_COMMANDS DECENT /fix multiple_blanks


  multiple $! lines will be replaced by a single one

DIX INTERACTIVE_COMMANDS DECENT /fix nl


   Replace filenames with [_]nla: and [_]nla0: and [_]nl0: to _nl:
   on places where the parameter is a filename in the CLD
   if /fix=nl=all is specified also the define/assign is checked

DIX INTERACTIVE_COMMANDS DECENT /fix Obsolete


     DIX will replace (some) obsolete commands by the newer commands
           lexical function f$logical by f$trnlnm
           commands SET ACL by SET SECURITY/ACL
                    SET FILE/PROT by SET SECURITY/PROT
                    SET FILE/ACL by SET SECURITY/ACL

DIX INTERACTIVE_COMMANDS DECENT /fix output

   /fix=output

   DIX will process the value of the /output qualifier always as type $outfile
   Some commands have the type defined as quoted_string (tcptrace f.e.).
   With this fix you override that type
   This will not work if the the /output has a userdefined type

DIX INTERACTIVE_COMMANDS DECENT /fix runmcr


 Replace RUN SYS$SYSTEM:IMAGE by MCR IMAGE (only if nothing else on the line)
  and MCR SYS$SYSTEM:IMAGE by MCR IMAGE

DIX INTERACTIVE_COMMANDS DECENT /fix strassign

  Replace the
   symbol:="string" by symbol="string"

  So remove the superfluous :

DIX INTERACTIVE_COMMANDS DECENT /fix string_addition


     Replace
      $a="abc" + -
         "xyz"
     with $a="abcxyz"

     but only if the length of the command will be not too long

DIX INTERACTIVE_COMMANDS DECENT /fix symbols


  symbols             All symbol assignments local and global
  symbols=[no]local   Only local symbol assignments
  symbols=[no]global  Only global symbol assignments
  symbols=both        both local and global assignments
  symbols=[no]all     All symbol assignments even with long verbs/qualifiers

  if you specify /fix=symbols, DIX will try to expand the value in the
  string assigments

  so if you have sw:=set ter/wi=132,
  DIX will expand to sw:=set terminal/width=132
  This only works if
   the asignment is a string assignment (:= or ="") and
   the string starts with a valid verb

  If you do not specify symbols=all the found verb must be shorter or
  equal than the actual verb, so if you have the assignment
   $dd="Openvms/Wri" 
  If the symbols=all is specified (or /fix=all), this statement will
   be replaced by "openvms/write", since openvms is recognized as a valid verb
   (open)
  If the symbols=all is not specified, the statement is not replaced since
   Openvms is longer than the actual verb open
  If you had specified 
   dd:="Openvms/dummy" the statement will never be replaced since this is
  not a valid statement
  If you had specified 
   dd:="Ope/Wri" the statements will always be replaced with "open/write"

DIX INTERACTIVE_COMMANDS DECENT /fix tabs

   Do tab expansion in the comment part(replace them by spacs).
   The tab interval is set via the /tabinterval=nn (default 8)

DIX INTERACTIVE_COMMANDS DECENT /fix trailing_semicolon


  If you specify /fix=trailing_semicolon (or /fix=all), DIX will remove
  trailing ; from filenames.
  This is not done for the delete and the directory command)
  and also not if a version is specified.

  so type a.a; will become type a.a

DIX INTERACTIVE_COMMANDS DECENT /fix ucx


  Replace the name UCX by TCPIP

DIX INTERACTIVE_COMMANDS DECENT /fix Unprintables


  Remove unprintables from source (all except TAB)
   /fix=unprintables=(tag,...)

  DIX will insert statements like ESC[0,8]=28 and replace the escape
   characters by ''esc' or 'esc'
  For the unprintable names see DIX> show character/unprintables
  Tag can be

  top     : Insert the definitions only once at the beginning of the outputfile
  before  : Add the definitions just before the command is printed. This may
             add the definition more than once.
  prefix=intro : By default only the unprintable name is used, but you may
                 prefix the name by any string, possibly to prevent
                 other definitions
               So /fix=unprin=prefix=DIX_ will add the DIX_ESC definition
  remove=(char...)
          : Remove some unprintables from the output file
            char is the name of the unprintable char. This name can be found
            in DIX> show character/unprintable. Only char codes 0..31 can be
            removed. Example /fix=unpr=remove=(nul,ff) will remove the
            Null and the Form Feed characters

  upper   : Normally only characters 00..31 and 128..159 , 127 and 255 will be 
            changed. If you specify /unprint=upper, also chars 160..254 will
            be changed.

  With top all definitions are declared only once (at the beginning of the
   outputfile). With before, each occurrence of an unprintable will result in
   a (new) definition.

  If you specify /fix=unprintables=top, /twophase is also set

  The default for /fix=unprintables is /fix=unprintables=(before,prefix="")

DIX INTERACTIVE_COMMANDS DECENT /fix unrecognized


  Allow case changing of unrecognized commands

DIX INTERACTIVE_COMMANDS DECENT /fix trailing_blank_lines


  Remove all trailing $! lines from the file

DIX INTERACTIVE_COMMANDS DECENT /fix version0


  Replace the filename;0 by filename;

DIX INTERACTIVE_COMMANDS DECENT /fix Full


  All of the above without the filenames.all and nl.all and assign.all

DIX INTERACTIVE_COMMANDS DECENT /fix All


   All means all fixes

DIX INTERACTIVE_COMMANDS DECENT /name


   /name
   /name=name
   If you specified /fix=add_name=all, DIX will append a name in the comment
   of the exit statements of the main level.

   If you do not specify /name, DIX will use #main
   If you specify /name without a value, DIX will insert the 
      name of the procedure (not the type)
   If you specify /name=myname, DIX will use myname

DIX INTERACTIVE_COMMANDS DECENT /length


  /length=n

   output qualifiers and keywords with maximal n characters or many as
   is needed to be unique. THis can be used to keep the length to a reasonable
   value

  example
   $dix/comm dece def a b /tra=con
    Result : $       DEFINE A B/TRANSLATION_ATTRIBUTES=CONCEALED
     Normal complete expansion
   $dix/comm dece/leng=6 def a b /tra=con
    Result : $       DEFINE A B/TRANSL=CONCEALED
     expansion to maximal 6 letters
   $dix/comm dece/leng=1 def a b /tra=con
    Result : $       DEFINE A B/TR=CONCEALED  
    In this case the minimum length to be unique is 2 since there is also
    a /table qualifier


DIX INTERACTIVE_COMMANDS DECENT /log

  If you specify /log DIX will print the name(s) of the file(s) processed.


DIX INTERACTIVE_COMMANDS DECENT /output

  Define the place where the output is printed
  if /output is not present, the output will be to SYS$OUTPUT

  If /output is present, it will be used the define the output filename
   the name is defaulted with the current input file
   The default value for /output=.com_dix
   So if the input parameter is *.com, DIX will create files with .com_dix

  

DIX INTERACTIVE_COMMANDS DECENT /tabinterval

 
  /tabinterval=nn  default /tabinterval=8

  Set the tabsetting for tab expansion

DIX INTERACTIVE_COMMANDS DECENT /width

  /width=nn

  Set the width of the output file. This also determines the place
   where DIX will wrap the command line. By default DIX will not
   wrap unless the output file is on a terminal. In that case the width
   of the terminal will be the width.

DIX INTERACTIVE_COMMANDS DECENT /lowercase

  /lowercase=(token..)

  By default all items are unchanged, but you can select what you want to
  be in lowercase, see also /uppercase

  token can be
   [no]verbs      Lowercase all verbs
   [no]qualifiers Lowercase all qualifiers
   [no]lexicals   Lowercase all lexical functions
   [no]keywords   Lowercase all keywords (.ne.,.. goto etc...)
   [no]labels     Lowercase the labels
   [no]strings    Lowercase all possible strings in lexical functions
   [no]filenames  Lowercase filenames in f$search and f$parse
   [no]logicals   Lowercase logical/tables names in f$trnlnm (if no CASE argument)
   [no]usernames  Lowercase usernames in filenames node"user pwd"::...
   [no]input      Lowercase datalines not recognized as commands for an image
   [no]symbols    Lowercase symbolnames in "" strings like abc in  "ab''abc'cd"
   All            Lowercase all (except in quoted strings)

  If you specify /lowercase without any token, all items are lowercased (=all)
  If you specify a token in /loercase as well as in /uppercase, the 
   text will be changed to lowercase (the uppercase is ignored) 

DIX INTERACTIVE_COMMANDS DECENT /uppercase

  /uppercase=(token..)

  By default all items are unchanged, but you can select what you want to
  be in uppercase, see also /lowercase

  token can be
   [no]verbs      Uppercase all verbs
   [no]qualifiers Uppercase all qualifiers
   [no]lexicals   Uppercase all lexical functions
   [no]keywords   Uppercase all keywords (.ne.,.. goto etc...)
   [no]labels     Uppercase the labels
   [no]strings    Uppercase all possible strings in lexical functions
   [no]filenames  Uppercase filenames in f$search and f$parse
   [no]logicals   Uppercase logical/tables names in f$trnlnm (if no CASE argument)
   [no]usernames  Uppercase usernames in filenames node"user pwd"::...
   [no]input      Uppercase datalines not recognized as commands for an image
   [no]symbols    Lowercase symbolnames in "" strings like abc in  "ab''abc'cd"
   All            Uppercase all (except in quoted strings)
   Other          Uppercase all items not mentioned in /lowercase

  If you specify /uppercase without any token, all items are uppercased (=all)


DIX INTERACTIVE_COMMANDS DECENT /allow

  /allow=(item,item...)
  Item can be

DIX INTERACTIVE_COMMANDS DECENT /allow short


    if you specify allow short, DIX will allow qualifiers that are longer
     then the define ones. For example
    In the help about show entry the qualifier /user_name is mentioned.
     In the CLD file this qualifier is /USER (so a bug in the docs)

    So
     $ DECENT/NOPROCEDURE show entry/user_name=system
    Will not be parsed, But
     $ DECE/NOPROCEDURE/ALLOW show entry/user_name=system
    Will translate to SHOW ENTRY/USER=SYSTEM

DIX INTERACTIVE_COMMANDS DECENT /allow qqalifiers


   if DIX find a command with a qualifier in quotes it will not process
    the line, since this qualifier could initiate a syntax change and
    subsequent qualifiers/parameters could have a different meaning
  If you specify /allow=qqualifiers, DIX will continue parsing the
   command (and hopes the quoted qualifier does not change the sytax)

   f.e.
    $dir /'tag'/pa could mean
      directory/ftp/passive or directory/paged, the /ftp would change the
      syntax so that the /pa would become /passive and not /page
    
    

DIX INTERACTIVE_COMMANDS DECENT /allow quotes


    Will allow DIX to decent a statement if quotes are present

    Example:
    if in a file the following statement is found
      set acl/object=devi/acl'p4' 'p5' 'p6'
     if /allow=quotes is not present you get

      Quote found in ACL'P4' and not allowed via /allow=quotes in: set
          acl/object=devi/acl'p4' 'p5' 'p6'
      And the line will not be changed

     If /allow=quotes is present you will get

       SET ACL/OBJECT_TYPE=DEVICE/acl'p4' 'p5' 'p6'

     DIX has translated/expanded as much as possible

    There is a danger that DIX will expand the wrong text, so this is not the
     default, see the example below

      $tag = "term"
      $show 'tag' /p      !will expand to show 'tag'/permanent !terminal
      $tag = "dev"
      $show 'tag'/p       !will expand to show 'tag'/page      !device

DIX INTERACTIVE_COMMANDS DECENT /allow single_verb


  If you have an image that does the DCL parsing and that has only one verb
  like in
   define verb getuai
    parameter p1
    qualifier account
    qualifier privs

  and in the image you do the DCL parse like
    call lib$dcl_parse('getuai '//commandline,..)
  you may use this in a foreign command like
  $ getuai system/account

  But in the DCL command is no verb and DIX will complain about that
   and cannot parse the line

  If you specify/allow=single_verb, and the image has only one verb
   (getuai in this case), DIX will parse the line according to the
   getuai verb, and does not signal an error. You can also specify a line
   in the dix_decent.setup with image getuai/verb=getuai

DIX INTERACTIVE_COMMANDS DECENT /twophases


  In some procedures the symbol assignments for new verbs will be done
   in a line number after the usage of the changed verb.

  Example:
  $ gosub init
  $ dd /full          !usage of dd
  $exit
  $init:
  $ dd:= dire/vers=1    !definition of dd
  $ return

  By default, DIX will process the lines in order, and will find the
  usage (in line 2) before the definition (line 5), and not understand
  the verb dd.

  If you specify /TWOPHASES, DIX will read the procedure two times
   - The first time to remember the redefined verbs
   - The second time to do the real reformatting.
  and will process the verb dd (as dire/version=1) correctly.

DIX INTERACTIVE_COMMANDS DECENT /setup


   /setup=file
   /setup=dix_decent

  A file containing information about how to process datalines in images
  and how to append filetypes to filenames.
  The defaultfilename is dix_decent, and the default filetype is .setup
  DIX will search for this file in the directory where the DIX executable is.

  
  comment is ignored (all things after a !) and blank lines are ignored
 
  The following lines can occur in the file

DIX INTERACTIVE_COMMANDS DECENT /setup header


  Syntax : header "line1","line2"...

  DIX can insert headerlines in the files if /format=header is specified

  In the lines can be control codes
   supported codes are
   !AS Insert the filename in uppercase
   !as Insert the filename in lowercase
   !UAS Insert the filename in uppercase
   !LAS Insert the filename in lowercase
   !XAS Insert the filename as is
   !%D !n%D !nn%D insert the creation date of the file
   !%I !n%I !nn%I Insert the onwer name
  
  There must be at least a filename control code present 
  If the line does not start with a $!, DIX will insert it
  If no header statement is found it defaults to header="!AS" that
   will generate a single line $!name.type

  Example header "File  : !AS","Author: !%I","Date  : !20%D",""
  
  Will generate a header in the file containing
  $!File  : X.COM
  $!Author: [STUBBF]
  $!Date  : 12-JAN-2020:12:13:14
  $!

  There must be at least one !AS in the header to prevent DIX from
   adding a new header if the file is processed twice

DIX INTERACTIVE_COMMANDS DECENT /setup image

  
  syntax : Image imagename [newimagename] [/qualifiers]

  Imagename is the name of the image
  newimagename is the replacement f.e. latcp does not have the cld 
                                 definitions, but sys$share:lat$shr does
                                 so you can use : image latcp sys$share:lat$shr
                                 And DIX can find the cld tables there
  Qualifiers can be
  /noinput    Image does not expect input so datalines after it must be comment
  /ignore     Ignore all cld tables that may have been found in the image
  /lower      Convert all datalines to lowercase
  /upper      Convert all datalines to uppercase
  /case       COnvert all datalines to the setting of /upper=data or /lower=data
  /[no]indent Indent datalines. The /indent=data=nn decides how the indentation 
                is done.
  /[no]decent replace tabs by space and remove all multiple spaces
  /[no]dcl    Support dcl like input

  /dcl and /indent are default if the image contains cld tables, but you 
   may override with /no... 

  /decent is default if /dcl is present, but may be overruled with /nodecent

  If the image is DCL , imagename is the name of a special dcltable file
  If no DCL definition is found, the DCLtables in P1 space are used

  /verb=verb Some images take the command line and prefix it with its own verb
             f.e. if you specify "dix/command decent f.com", DIX takes the command
             line "/command decent f.com", prefixes it with DIX and then parse it.
             If you specify image dix/verb=dix, DIX can parse these commands, but
             if you do not, you will get a warning "verb is ambiguous"  
    See also the /allow=single_verb, but that only works if there is only one verb

DIX INTERACTIVE_COMMANDS DECENT /setup verb

  Replace the found verb with a new one.
  FOr example: the RMU verb is acually RMUx (in my system RMUJ).
  If you try to decent the RMU commmand, this will come out as RMUJ command.
  If you do not wnt that, you can replace the found verb (RMUJ) by RMU.
  Syntax
   verb foundverb newverb
  FOund verb may contain wildcards. So in order to solve the above problem 
   add a VERB RMU* RMU to the setup file. 
 

DIX INTERACTIVE_COMMANDS DECENT /setup file


  A way to specify which filetype may be added for images in this specific verb

  syntax : file verb/parameter=n type [/qualifiers]    Set type for parameters
           file verb/qualifier=qual type [/quaifiers]  Set type for qualifiers

  Type may be specified with and without the ., so lis and .lis are the same
  
  Qualifiers can be
  /next_qualifier=qual  For parametes folowed by a qualifier like link
                          link a, b/opt, c/lib  See example below
  /p1=parameter         p1 must be parameter
 
  Examples
   file link /parameter=1 obj                 Parameter p1 is a .obj file
   file link /parameter=1/next=option .opt    if next_qual=/option it is .opt
   file link /parameter=1/next=library .olb
   file @/parameter=1 com                     Parameter p1 is a .com
   file @/qualifier=output lis                /output is a .lis
   file set /parameter=2 /p1=command msg      set command , p2 is a .msg
   file set /parameter=2 /p1=message exe      set message , p2 is a .exe
   file fms /parameter=1 flb                  fms,  p1 is a .flb
   file fms /parameter=2 frm                    and p2 is a .frm

  For more examples see the dix_decent.setup delivered in the kit  

DIX INTERACTIVE_COMMANDS DECENT /setup Decent

  
  Syntax

   decent /qualifier....

  You can specify a number of command line qualifier settings.
  These setttings set a default, but can be overruled via the command line.

  You can have multiple decent verbs in the file

  The supported qualifiers are
   /FIX=, /FORMAT=, /WARNING=,   /INDENT=, /SPACES=,
   /UPPERCASE=,     /LOWERCASE=, /COMMENT=.

  f.e. 
  Suppose you have the decent/fix=all in the dix_decent.setup file
  If you do not specify any /fix on the command line, DIX will apply
     all fixes, but you can also specify /fix=noucx to prevent the ucx fix.
   You can even specify /fix=(noall,ucx) the and ucx fix will be the only one

  If you specify /explain=all, you can see what settings are set after the
  .setup file and what after the commandline is processed.


DIX INTERACTIVE_COMMANDS DECENT /signal

   /signal[=token]

 By default DIX will not complain about commands that it cannot parse.
 It will just send the original text to the output file

 If you specify /signal, DIX will print messages to sys$command about 
  the commands that cannot be parsed 

 If you specify /signal=inline, DIX will print the messages in
  the output file at the point they occur.

 If you specify /signal=begin, DIX will print the messages before the
  normal output in the output file

 If you specify /signal=end, DIX will print the messages after the
  normal output in the output file.

 If you specify /signal=file=outfile, DIX will prin t the messages in
   file "outfile"

DIX INTERACTIVE_COMMANDS DECENT /spaces

  /spaces=(tag,tag..)

  determines where DIX will insert spaces

 [no]assign        DIX will surround the [:]=[=] operator with spaces
 [no]comment=end   DIX will insert a space after the comment character !
 [no]comment=begin DIX will insert a space after a ! on a line with no label/command
 [no]operators     DIX will surround the .eq. etc. + / - operators with spaces
 [no]arguments     DIX will add a space after a list of values
                       so write out a,b,c will be write out a, b, c

  All     All of the above

  /spaces without any tag is /spaces=all

  And two more
  comment=tab      DIX will insert a tab before the ! on statement lines
                    /comment=pos=tab will insert spaces until the next tab
                    position. This will be overruled by /spaces=comment=tab
  comment=one      DIX will insert a space before the ! on comment only lines

  comment

DIX INTERACTIVE_COMMANDS DECENT /tables

     /table=(tablespec,tablespec...) !a list of spefications
  or /table=@filename                !a file containing the specifictions
                                     !each line has one specification
                                     !default filename is .lst

  You can specify a different CLD table for specific images.
  Tablespec has the following syntax
    imagename#[cldimagename][#option[#option....]]

  if imagename is DCL or not present (and also no #) the
   cldimagename is used as an alternate DCL tables for all commands

  if imagename is present, the cldimagename is used for commands in the
   imagename

  Example:

  /table=([DCL#]mydcltable,sysgen#sysgentable)

  will use the mydcltables for the normal commands and
    sysgentable for commands in the image sysgen

  You can create a sysgentable via
    $ edit sysgentable.cld  !and add the verbs/param/quals
    $ set command/obj sysgentable.cld
    $ link sysgentable

  The linker will warn you that no transfer address is specified, but you
   can ignore that warning

  The default file specification is SYS$SYSTEM:.EXE

  Options are
    #ignore  : Do not look for cld tables in this image
    #noinput : This image does not expect input
    #decent  : convert data lines to lowercase (if /lower=data) and do spacing
    #lower   : just convert to lower case
    #indent  : indent datalines to current indentation

DIX INTERACTIVE_COMMANDS DECENT /warning

  /warning=(tag[,tag...])

 tag can be
  duplicates : DIX will warn you about then same
                 qualifier being specified more than once.
  obsolete   : DIX will warn you about specific obsolete commands.
  global     : DIX will warn you about global assignments
  quotes     : DIX will warn you about missing ' and "
  unprint    : DIX will warn you if there are unprintable characters in the file
  blank      : DIX will warn you about empty lines
  dots       : DIX will warn you about missing .'s after operators e.g. .EQ
  single_quotes : DIX will warn about 'a' in a "" string
  double_symbols : DIX will warn you if symbols are defined more than once
  unbalenced : DIX will warn you about a () inbalence
  long_command : DIX will warn you if the fist 4 character of a verb, but 
                     there are more unmatched characters
  dash       : DIX will warn you about questionable - useage like .and. -k
  data_command: DIX will warn you for datalines that might be dcl-commands
  empty_data : DIX will warn you for completely empty data lines
  lexicals_in_comment : Warn about lex funtions in comment (except f$verify)
  dubious_assign : Warn for possible wrong assignment changes
  labels     : warn for duplicate label names and for unused and 
                        wrongly used labels (f.e. gosub to SUBROUTINE)
  devices    : Warn for physical devicenames (disk and tape)
  short_file : Warn for filenames with only one character in the name
  build_in   : warn about $status .eq. instead of .eqs. These symbols are strings 
  all        : All of the above

  In order to see the warnings you must specify /signal[=inline] also.
  You can also disable a specific flag via f.e. /warning=(all,nolabels)

DIX INTERACTIVE_COMMANDS DECIMAL

   DECIMAL[/level=n][/global] name[=value]
   DECIMAL/INDEX=indextype name         Declare an indexed symbol of type date

   Declare a new symbol of type "DECIMAL" and optionally give a value.
   The value must be of type "decimal"

   See the help about [DIX/INT] interact symbols indexed_symbols for /INDEX

  Example:
   DECIMAL counter=f$decimal("12345e12")

  See the help about [DIX/HELP] interactive declaration

DIX INTERACTIVE_COMMANDS DECLARATIONS


  Syntax, there are 2 formats

  format 1 for a limited number of data types

    'type'[/type=enum_type] [/level=n][/global][/overwrite] -
         name[['type']*size][dimensions][=value]
          [,name[dimensions][=value]...]

     where type : REAL[*n], CHARACTER, LOGICAL, INTEGER[*n.m] or DATE, DECIMAL

   Format 2, more general

    DECLARE[/'what'] [/type=enum_type] [/level=n][/global][/overwrite] -
         name[*size][dimensions][=value][,name[dimensions][=value]...]

      In this case all 'what' can be any datatype. If you do not
       specify 'what', the value has an undefined type

    name      : The name of the local symbol
    size      : For integer and reals and dates. Set the size to be fixed.
                For integer size is nbyte[.nbits] (0.1 .. 8.0)
                For reals size is nbyte (4,8,16)
                For dates size is nbyte (4,8)
    value     : An expression that returns a value of the correct type
    dimensions: Up to 3 dimensions (d1[,d2[,d3]])
                Each dimension has the format [low:]high[:increment]
                   low  : Upper boundary (default 1)
                   high : High boundary (must be present)
                   increment : Increment. If present, low must be present too
                   example (5:10:2) This results in 5,7,9

  Symbols declared in this way cannot be declared again (unless with
   the /overwrite qualifier), and cannot be assigned
   another value than the declared type. See also the help about
   [DIX interactive] SET STRICT

  You may declare a symbol at a lower level. If you do not specify /level
   the symbol will be declared at the current procedure level.
   The value of level can be positive (the absolute level value)
   or negative (n levels higher). See the examples
   /global is the same as /level=0

  For integer data you can set the enumeration_type. This is equal to
   the functionality of the "fieldnames" of fields. The 'enum_type' may
   be defined before with the ADD TYPE statement, or can be specified
   within quotes. If you want the use a previously defined type (add type)
   you must prefix the name with a # sign. See below

  Example:

  INTEGER a=10   Declare an integer a with value 10
  INTEGER a=20   Will result in an error "symbol A is already defined."
  a=20           Is allowed, change the value to 20 (value must be integer)
  a="XYZ"        Will result in an error "Symbol A has other type than expression"

  DECLARE A/INT=10  Is the same as INTEGER A=10

  DECLARE X         The value X does not have a fixed type
  X=10              Value of x is now 10 (integer)
  X="String"        Value of X is now "String" (character)

  Example with defined types:

  DIX> ADD TYPE DAYS="0=sun,1=mon,2=tue,3=wed,4=thu,5=fri,6=sat"
  DIX> integer/type=#days weekday
  DIX> weekday=wed
  DIX> Show symbol weekday
  WEEKDAY=wed
  DIX> evaluate weekday         !the eval will always return the binary
  3

  Example with direct type:

  DIX> integer/type="0=sun,1=mon,2=tue,3=wed,4=thu,5=fri,6=sat" weekday
  DIX> weekday=wed
  DIX> Show symbol weekday
  WEEKDAY=wed
  DIX> evaluate weekday         !the eval will always return the binary
  3

  Examples for level/global:

  suppose we are at procedure level 3.
   Declare /level=1  symbol    Will declare a symbol at level 1
   declare /level=-2 symbol    Will declare a symbol at level 1
   Declare /global   symbol    Will declare a symbol at level 0

   Declare new                 Will declare at level 3
   Declare/level=-1 new        Will declare at level 2

DIX INTERACTIVE_COMMANDS DECLARE


  DECLARE[/WHATTYPE][/type=enum_type][/OVERWRITE] -
          [/level=n][/global] NAME[*size][DIMENSIONS]=VALUE

  DECLARE/INDEX=indextype/whattype value  Declare a 'whattype' symbol with an
                                          index of type 'indextype'

  This is the more generic form for INTEGER/REAL/DATE.. declarations.
  If you specify WHATTYPE, DIX will define a symbol of the specified
  type. You cannot change the 'type' of the symbol later.
  If you do not specify the "whattype", DIX will define an "unspecified"
  symbol that can change types.

  Size can be specified like nbyte.nbit for integers and nbyte for reals
   DECLARE /int a*0.4   !declare a 4 bit integer

   See the help about [DIX/INT] interact declaration for indextype

  Example:

  DECLARE/LOG  Q=false,A/INTEGER=10,B(10,10)/char="test",K

  This will declare
  1. A Logical value Q with value false
  2. An integer symbol A with value 10
  3. A character table (10,10) with all elements initialized to "test"
  4. A logical value K (undefined)

  Also See the help about declarations for more information

DIX INTERACTIVE_COMMANDS DEFINE

   define logicals
   define keys
   define screenkeys

DIX INTERACTIVE_COMMANDS DEFINE DEFINE_LOGICALS


   Define name logical name equivalence_name[,...]
   The same as the DCL define
   Supported qualifiers

DIX INTERACTIVE_COMMANDS DEFINE DEFINE_LOGICALS qualifiers

  The following qualifiers determine the table
  /CLUSTER
  /SYSTEM
  /GROUP
  /JOB
  /PROCESS
  /TABLE=nnn

  The following qualifiers determine the mode

   /EXECUTIVE
   /SUPERVISOR
   /USER
   /KERNEL

  The logical name can have the following attributes
   /NAME=CONFINE
   /NAME=NO_ALIAS

  Each equivalence string can have a the following attributes
    /CONCEALED
    /TERMINAL

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY


  DEFINE/KEY keyname string[/qualifiers]

   Define keys for the INTERACTIVE mode of DIX.

   See also the RTL Screen Management (SMG) manual about the possible
   keys. Also note that the f6..f14 keys are normally reserved for
   command line editing. You may use those keys when you set the
   terminal to /noline_edit, or if you prefix the key by a ^V.
   Also see the OpenVMS help about define/key.

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY Qualifiers


DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY Qualifiers /SET_STATE

  /SET_STATE=name

  DEFINE/KEY keyname string /SET_STATE=NAME.

  Sets the key driver to state NAME.

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY Qualifiers /IF_STATE

  /IF_STATE=name

  DEFINE/KEY keyname string /IF_STATE=NAME

  If the user enters "keyname", the string "string" will only be returned
  if a previous key has put the key driver in the "NAME" state.
  Name is NOT case sensitive.

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY Qualifiers /TERMINATE


  After the /TERMINATE, the result will be given to DIX.

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY Qualifiers /ECHO


  Echo the translated strings

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/KEY Qualifiers /LOCK_STATE


 DEFINE/KEY keyname string/SET_STATE=NAME/LOCK

  Normally the state is removed after the typing of the next key.
  If you define the key (and the SET_STATE) with the /LOCK, the state
  will remain "NAME" until another state is entered.

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/SKEY

   DEFINE/KEY skey function [/qualifiers]

   Define a key combination for the screen mode of DIX.
   skey     : The keyboard key : Almost all keys can be used for keydefinitions.
   function : The DIX function
   See the help about [DIX/HELP] key_mapping DIX_functions for allowed functions

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/SKEY qualifiers


DIX INTERACTIVE_COMMANDS DEFINE DEFINE/SKEY qualifiers /SET_STATE

  /SET_STATE=name

  The parameter "" must be present but the contents are not used.
  SMGKEY will set a new state (GOLD and BLUE are used by default, but you
  may redefine the states if you redefine all keys)
  State names may not contain a - (hyphen)

  Example:
  DEFINE/SKEY PF1/SET=GOLD ""
  DEFINE/SKEY UPPERCASE_A/IF_STATE=GOLD key_print

  If the user enters PF1-A, the function key_print is executed.

  For a list of allowed functions, see the help about [DIX/HELP] KEY_MAPPING

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/SKEY qualifiers /IF_STATE

 /IF_STATE=NAME

   Specifies a state that must be in effect for the key definition
   to work. The state name is an alphanumeric string. States are
   established with the /SET_STATE qualifier
   State names may not contain a - (hyphen)

  DEFINE/SKEY PF1/SET=GOLD ""
  DEFINE/SKEY F20/IF_STATE=GOLD key_print
  DEFINE/SKEY F20 key_swap_dis

  If the user enters PF1-F20, the function key_print is executed.
  It the user enters F20, the function key_swap_dis is executed.

  For a list of allowed functions, see the help about [DIX/HELP] KEY_MAPPING

DIX INTERACTIVE_COMMANDS DEFINE DEFINE/SKEY qualifiers /CONTEXT_SCREEN

  /CONTEXT_SCREEN=Screen_context

  Define this key only for a specific screen. The default is that the
  key is valid in all screens
   Valid screens are
      DISPLAY_ALL               Display data in all formats
      SELKEY                    Select data for a key value
      EDIT                      Edit description
      SELFILES                  Select one file when multiple files match
      EDITFILES                 Select a file (or add one)
      SELDESCRIPTIONS           Select a description (or add one)
      YESNO                     Yes/No screen
      VIEW                      View all kinds of data
      HELP                      Help screen(s)
      EDITMULTIPLE              Edit multiple lines (in show description)
      EDITLINE                  Edit a single line
      SELFIELD                  Select a field
      SHOWRAW                   Show data in raw format
      SHOWDES                   Show data in description format
      SELDEMO                   The select demo screen
      DISPLAY_SUBF              Display all subfields display

DIX INTERACTIVE_COMMANDS DELETE


  DELETE/KEY name[/state=name]
                  Delete SMG key definitions for interactive mode

  DELETE/SKEY/ALL Delete all (Default) keydefinitions for screen mode
  DELETE/SKEY skey [/STATE=NAME]
                  Delete the key definition for skey (possibly with state NAME)

  DELETE/SYMBOL   See deeper help
  DELETE/SYMBOL/LOG[/all]   Mask   Delete symbol
  DELETE/SYMBOL/LOCAL[/all] Mask   Only delete local symbol

  DELETE/RECORD[/fast][/log]
                       Delete the current record (if the file is indexed or
                       relative and you have opened it with /MODIFY)
                       This will set the record context to the next record
                       If you specify /fast, a fast delete is done

  DELETE/FUNCTION[/log] mask : Delete functions

  DELETE/SEARCH [pattern]/LOG/CONFIRM Delete search patterns

  DELETE/VALUE     pattern[/log]/global/level=n Delete values
  DELETE/TYPE      pattern[/log]/global/level=n Delete types
  DELETE/PARAMETER pattern[/log]/global/level=n Delete parameters

  DELETE/SELECT_file pattern [/log/global/level=n]  Delete select_file patterns
  If none of the above qualifiers is present, DIX will assume you want to
   delete files

  DIX> Delete filemask [/confirm][/log][/reverse]
   filemask   A mask of files to be deleted
   /confirm   Ask before deleting a file
   /log       Show the file deleted
   /reverse   DIX will first make a list of files matching the filemask
              and then start deleting these files in reverse order. This
              should make a difference on large directories.

 A small example on a directory with 1000 files and a size of 115 blocks
 DIX> time delete [.abc]*.*.*
 ELAPSED:    0 00:00:13.97  CPU: 0:00:03.67  BUFIO: 2002  DIRIO: 4898  FAULTS: 8

 DIX> time delete [.abc]*.*.*/reverse
 ELAPSED:    0 00:00:11.25  CPU: 0:00:03.82  BUFIO: 2002  DIRIO: 3892  FAULTS:30

DIX INTERACTIVE_COMMANDS DELETE DELETE_SYMBOL


   DELETE/SYMBOL MASK  Delete the symbols matching MASK

   If the symbol is an indexed-symbol you can delete elements of the symbol
    delete/symbol indsym("A*")  Delete all values of indexed symbol indsym
                                matching A*. If you specify ("*") all values
                                will be deleted, but the indexed symbol
                                will not be deleted (it will have 0 values)
                                See also the /EXACT qualifier below
    delete/symbol indsym        Delete the whole symbol

   Supported qualifiers

   /EXACT    : If the symbol is an indexed symbol, and you specify the
                /exact qualifier, the contents will be used exact, so the
                * and % character in the element selection will not be
                treated as a wildcard character, so the above example will
                delete indsym("A*")
   /LOG      : Display the symbols deleted
   /LEVEL=n  : Delete symbols from level n (0=global,1..depth=absolute level
                                            -1..-depth) is relative level
   /GLOBAL   : Delete global symbols, is the same as /level=0
   /LOCAL    : Delete local symbols, is the same as /LEVEL=DEPTH
   /ALL      : Delete all symbols, is the same as MASK= *

DIX INTERACTIVE_COMMANDS DEBUG


  This command is only allowed in a command procedure.
  The DIX debugger will be started.

  You can also use the command "on control_c debug"

   If you then type a ^c during execution of a command procedure, the
   debugger will be started.

  You can use the command "on error/warning debug"
   If a command returns an error/warning, the debugger will be started

  You can also start a command procedure with /debug

  Example:
   Suppose the script file (examp.dix) contains
      on control_c debug
      k=1
   10:k=k+1
      goto 10
   got_l1:say "Seen ^C"
      goto 10

    DIX> @examp
    ^C
    %DIX-I-DEBUG, Entering debug mode
         6:goto 10              !DIX tells you the current statement
    DixDbg> eval k              !see how we got
    172469
    DixDbg> go                  !keep going
    ^c
    %DIX-I-DEBUG, Entering debug mode
       6:goto 10                !Again this is where we are
    DixDbg> eval k              !ask for k again
    613507
    DixDbg> quit                !skip the test, back to interactive mode

    DIX> @examp/debug          !start in debug mode
    DixDbg>

DIX INTERACTIVE_COMMANDS DEPOSIT


   DEPOSIT fieldnamemask=value.
   DEPOSIT offset=value
   DEPOSIT /symbol symbolname=value

  Modify a field (or symbol if /symbol specified) to the given value.
   for the DEPOSIT/SYMBOL see the deeper help in the /SYMBOL

  DEPOSIT fieldname = value
  DEPOSIT/RAW offset[.bit_offset] = value
  DEPOSIT/VFC Deposit data in VFC buffer or record

  The entered data is first 'unsymbolized' (see substitution)
  and then translated according to the field definition, and deposited in the
  data-record.

  You can modify more than one field in one statement, but all the
  used fields must have the same type.
  If you modify more than one field, the /CONFIRM may be useful.

  DEPOSIT will save the contents of the record before the modification
  You can undo the changes for this DEPOSIT with the UNDO/LAST

  You may also go back to the original record with the UNDO

  The value specified is converted to the binary equivalent. This
  will do what you expect, but there are some extensions
  See the CONVERSION subtopic.

  You may also assign values to fieldnames via the assign (val=expr) command

  The differences are
  deposit
     allows wildcarding of the name (a text match is done)
     the text after the = is interpreted as text, and will be converted
         according the fieldname type.
  assign
     Does not allow wildcarding of the name, but it does support
      wildcarding in the lowest dimension
     The piece after the = is evaluated as an expression, and must
      deliver a result of the same (or compatible) type as the field

  Examples:

  DEPOSIT /word 10=5           !modify the word (16 bits) at offset 10 to 5.
  DEPOSIT *COUNTER*=0          !Modify all fields matching *COUNTER* to 0
                               ! you may undo this with UNDO/LAST
  DEPOSIT *PRIME*{*DAY*}=false !modify all subfields matching *DAY* of
                               !all fields matching *PRIME* to false

  DEPOSIT UAF$Q_LASTLOGIN=1-JAN-2012:12:12
                               !set the lastlogin field (type date) to the date
                               !DIX will convert the string to a date format

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers


DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /BINARY


  Interpret the data in binary
  this is a shorthand for /radix=2

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /BITS

  /BITS=number_of_bits
  For raw mode you can set any bitsize of 1 up to 64.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /BYTE


  Modify data in bytes. Valid only in /RAW mode.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /CONFIRM


  DIX will ask you if the modification should be done. This may be useful
  if you specify a wildcard in the fieldname.

  If conform is set. DIX will ask before every modification
  MODIFY field to value
     [y]/q/a/q :
  You may answer
   Y : Modify this one and keep asking for the next
   N : Do not modify this one and keep asking for the next
   Q : Do not modify this one and stop processing
   A : Modify this one and stop asking (as if confirm was off)

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /DECIMAL


 Interpret the data in radix 10.
  This is only possible for [u]integer fields
  this is equal to /radix=10

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /FORMAT

  /FORMAT=option

  Normally all "character"-like fields will not contain unprintable data.
  These field types are CHARACTER,xSTRING.
  If the data does contain unprintables (hex 0:1f,7f,80:9f or ff) the
  /FORMAT qualifier determines how this data should be displayed.
  The default is the current format setting (set/show format)

   Option can be
    DOT   :All unprintables are replaced by a ".". This encoding is not
            reversible, after an unprintable value is replaced by a ".",
            DIX cannot know what the unprintable value was. This may
            be a problem in the screen mode.
    HEX   :All unprintable data is displayed as %Xdd, a hexadecimal display.
            A % in the data will be displayed as %%. This display is reversible,
            so DIX can reconstruct the original unprintable value.
            If you are in this mode, on input a % must be entered as %%
    PASSALL:DIX will not change the unprintable data. The data is displayed as
            it is. This mode will not work in screen mode, and maybe poorly
            when the output device is a terminal.
    DUMP   :Unprintable bytes are represented by a 2 or 3 letter mnemonic
            like <DEL> or <CR>. A < in the text will be displayed as <<.
            This display is reversible, so DIX can reconstruct the original
            unprintable value.
            If you are in this mode, on input a < must be entered as <<

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /LONG


  Modify data in longwords. This is the default in /RAW mode.
  Valid only in /RAW mode.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /RECOVER

  /RECOVER     (Default)
  /NORECOVER

  If you specify /recover, DIX allows you to roll back the changes made
  in this deposit by using UNDO/LAST

  If you specify /NORECOVER, DIX will not save the previous context, this
  may be useful in a script, when you are sure you will never UNDO the change.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /UNSIGNED

  Integers are converted as unsigned.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /WORD


  Modify data in words (16 bit values). Valid only in /RAW mode.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /QUADWORD


  Modify data in quadwords. Valid only in /RAW mode.

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /HEX


  Interpret the value in hexadecimal.
  This is a shorthand for /radix=16

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /OCTAL


 Interpret the value in octal.
  This is a shorthand for /radix=8

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /RADIX

  /RADIX=nn

  Interpret the data in a given radix. nn must be between 2 and 36
  For /radix=16,8,2 are shorthand defined as /HEX,/OCTAL and /BINARY
  A radix which is not a power of 2 (so not 2,4,8,16,32) can only be
  used on [u]integer fields
  For radix 36 the characters 0..9 and A..Z will be used (so Z=35)

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /RAW

 Display data in raw (non description) mode. In this mode the qualifiers
  /WORD, /BYTE, /LONG, /HEX are significant. The default is the /LONG.
  Offset can be specified as byte_offset[.bit_offset]

DIX INTERACTIVE_COMMANDS DEPOSIT Qualifiers /SYMBOL


  Deposit/symbol[/raw] symbol=value
  Allows you to use the deposit for a symbol.
  Most of the qualifiers defined for the deposit command work here too,
   except /offset, /confirm, /recover, /VFC

  If the /raw is not specified, the value will be converted to
   binary using the datatype of the symbol

  If the /raw is specified, the value will evaluated as an expression
   and the result will be stored in the symbol regardless of type.
   All bits of the symbol will be overwritten unless the source size is
   explicitly specified via /byte,/word,/long,/quad of /bits

   See the following example

   Somewhere in a file we see the binary value of a date
   i.e. in the dump file at location %hex 80 is the dump date
   So: $ DUMP/BLOCK=COUNT=1 SYS$SYSTEM:SYSDUMP.DMP

   Virtual block number 1 (00000001), 512 (0200) bytes

    .....
    FFFFFEFC 00000000 FFFFFEFD BF6FC000 .@o?............ 000070
    00A9B3FE D141FF1D 00B257CF 0D0A8DF4 t...OW2.....A3). 000080  !Offset 80
    .....

   DIX> date ddate                        !make a date type symbol ddate
   DIX> deposit/symbol/raw ddate=%x00B257CF0D0A8DF4   !fill the value
   DIX> say ddate                                 !and show it
   13-DEC-2017 19:14:24.31

DIX INTERACTIVE_COMMANDS DEPOSIT CONVERSION


  Normally the value will be converted to binary, but for some
  field-types more options are available. See below
  (R)BITS fields
    DEPOSIT field=name1,name2,name3 Set bits name1,name2,name3
    DEPOSIT field=+name4            Leave the original value, and add
                                    name4
    DEPOSIT field=-name1            Leave the original value, and clear
                                    name1
  INTEGER*n with n=1,2
    Only normal integer conversion is tried
  INTEGER*4,*8
    First try integer conversion.
    Then try %Xnnnn, the %Onnnn, %Bnnnn, %Dnnnn conversions
         (hex,octal,binary,decimal)
    Then try 'dddd'X, 'dddd'O, 'dddd'B 'ddddd'D conversions
         (hex,octal,binary,decimal)
    Try to convert as date*4,*8
    Try to convert as IDENTIFIER
    Try to convert as UIC
    Try to convert as 'xxxx ASCII
   On VAX INTEGER*8 is only partial supported and is expressed
     as INT*4.INT*4

  VFC
    The format is "DD text"
    The DD are 2 hexadecimal chars. Not all combinations are valid.
    The text field is ignored.
    Only  0..7F  : 0.127 linefeeds
         80..9F  : C0 control codes 00..1f
         E0..EF  : VFU codes 00..0F
     See the OpenVMS manuals about VFC formats.

DIX INTERACTIVE_COMMANDS DEMO


   DEMO [whichdemo [startscreen]]
   DEMO/FILE=demofile
   DEMO/LIST  Show the possible demos

   Jump to demo mode. The parameters are
    whichdemo   : The name of the DEMO, as found in DEMO/LIST (or show demo)
    startscreen : The start screen in the demo, default is MAIN

  Supported qualifiers are

DIX INTERACTIVE_COMMANDS DEMO /SCREENNAME

  /SCREENNAME    (Default)
  /NOSCREENNAME

  Show the name of the screen at the top of the display
  If you specify /noheader, the screenname will not be visible.

DIX INTERACTIVE_COMMANDS DEMO /HEADER

  /HEADER       (Default)
  /NOHEADER

  Display a header line, containing the demo name, and the screen name.

DIX INTERACTIVE_COMMANDS DEMO /UPPERCASE


  All key input will be uppercased.

DIX INTERACTIVE_COMMANDS DIRECTORY


   DIRECTORY filemask [/qualifiers] [,filemask...] [filemask]

  This looks like the normal OpenVMS directory, except that DIX will only
  display the highest version, unless you type ;*

  Filemask is a normal OpenVMS file specification with wildcards (like directory)
  or a library specification: modulemask@librarymask or librarymask(modulemask)

    There are 2 special librarynames
     DIX_SYS : The system-wide library DIX_DES.TLB
     DIX_USR : The user library DIX_USER.TLB

  Directory can also do a fast search (using /fast). In this case DIX will
   try to open the DEVICE:[000000]INDEXF.SYS (like DFU). You must have read
   access to this file.

  If you specify /fast or use a library specification, and you do not
   specify a /[NO]SORT command, DIX will automatically add a sort over the
   whole dev/dir/filename/type/ver[/module]

  All type file files/methods can be mixed.
  DIRECTORY support up to 8 parameters, each as a list.

  DIX will allow you to place a wildcard in the device part. If you do that
   DIX will do a scan of all disk (devices of class DC$_DISK) that are
   mounted and not members of a shadowed disk (so the DSAdd is searched but
   not the members of that shadow set).

   Then a match will be done with the fulldevnam, and if that fails the
   volume label.

  DIX can also show the current open memfiles
   DIX> DIR MEM:mask

 The following qualifiers are supported

DIX INTERACTIVE_COMMANDS DIRECTORY Examples


  DIX> DIRECTORY *.CLD   ! Display all CLD files
  Directory: USER50:[STUBBF.PROGRAMS.DIX.SOURCE]

  DIX_CLD.CLD;332

  Total of 1 file

  DIX> DIRECTORY SYS$LIBRARY:*V*.olb,starlet(*ACC*)
  Directory: SYS$COMMON:[SYSLIB]

  RDBVMSLIB72.OLB;2
  Library: STARLET.MLB;1
   $ACCDEF             $ACCESSDEF          $CHECK_ACCESS       $CHECK_ACCESSDEF
   $CHECK_ACCESS_G     $CHECK_ACCESS_S     $ICC_ACCEPT         $ICC_ACCEPTDEF
   $ICC_ACCEPT_G       $ICC_ACCEPT_S       $MTACCESS           $MTACCESSDEF
   $MTACCESS_G         $MTACCESS_S         $SNDACC             $SNDACCDEF
   $SNDACC_G           $SNDACC_S
  Total of 18 modules
  VAXCCURSE.OLB;1     VAXCRTL.OLB;2       VAXCRTLD.OLB;2      VAXCRTLDX.OLB;2
  VAXCRTLT.OLB;2      VAXCRTLTX.OLB;2     VAXCRTLX.OLB;2
  VMS$VOLATILE_PRIVATE_INTERFACES.OLB;2

  Total of 18 modules, 9 files

  DIX> dir sys$sysdevice:*imagelib*.OLB/fast
  Directory: SYS$SYSDEVICE:[VMS$COMMON.SYSLIB]

  CXML$IMAGELIB_GS.OLB;1                  CXML$IMAGELIB_TS.OLB;1
  IMAGELIB.OLB;1

  Total of 3 files

  DIX> dir *@dix_sys    !display all modules in the DIX_DES.TLB
  Directory: FEKKO$DKA300:[STUBBF.PROGRAMS.DIX]

  Library: DIX_DES.TLB;148
   $AREA     $BUCKET   $DEFAULT  $KEY      $LINE     $PROLOGUE
   *DAF*.DAT           .AUDIT$JOURNAL      .BCK|.SAV           .CRF_CROSS
   .CRF_FILE_NAMES     .CRF_MOD_NAMES      .DIR      ACCOUNTNG           ACMSDDF
   ACMSUDF   ACU_PORTS           ACU_USERS           BSO_APPLICATIE
   BSO_VERSIE          DEMO#CREATE_DES     DEMO#DIX_GENERAL    DEMO#GENERAL_DES
   DEMO#GENERAL_RAW    DEMO#MODIFY         DEMO#SEARCH         DOCDB     FILECAB
   INDEXF    KEYS-*.IND          KEYS-*.VAL          LMF$LURT  MNU_USERS
   MONITOR   NET$PROXY           NETPROXY  NETWORK   PARTITION           PENDING
   PROFILE   QUOTA.SYS           RESERVATIONS        RIGHTSLIST
   SWITCHFILE          SYSUAF    TCPIP$HOST          USERTYPE_MYTYPE
   VIEW#.CRF_CROSS     VIEW#.DIR           VMS$PASSWORD_HISTORY
   VMS$SYSTEM_IMAGES.IDX         VMSMAIL_PROFILE
  Total of 52 modules

  DIX> DIR dsa*:[dir]file.type   !Search all DSA devices for file [dir]file.type

  If some disks have a volume label USERnn,
  DIX> DIR USER*:[dir]file.type   !Search all devices with
                                 !volume label USER* for file [dir]file.type

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers


DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /backup


  If you specify a /before or /since, the date will be checked against
  the backup date

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /before


   /before=date

  Display only files younger than 'date'
  See the info about /create /expired /modified and /backup

  date can be a normal OpenVMS-date (including today, yesterday, tomorrow)
   or one of the keywords created/expired/modified/backup

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /by_owner


  /BY_OWNER=owner

  Select only files with this owner

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /columns

  /COLUMNS=n

  Normally DIX uses the width of the filename to determine the number
  of columns. If you specify /columns=n, DIX will use this value

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /highlight

 
  /highlight=(colourspec,colourspec..)

 You can use colours to highlight certain filetypes
  colourspec is filetype#colourname[#modifier[#modifier...]]
             or filetype:colourname[:modifier[:modifier...]]

 
  the colours WHITE,RED,GREEN,YELLOW,BLUE,MAGENTA,CYAN,BLACK are supported
  modifiers are BOLD, REVERSE, UNDERLINE and BLINKING

  Only one colour can be specified, but multiple modifiers are allowed
  
  The first colourname can also be a modifier so exe:underline is valid

 You can specify upto 16 filetypes

 If you specify /highlight without a value the default is
  /highlight=(dir:yellow,exe:red,com:magenta)

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /created


  If you specify a /before or /since, the date will be checked against
  the creation date

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /date


  /DATE=(keyword[,keyword...])

  Display the date(s) of the file

  Keywords are

  CREATED    Creation date
  MODIFIED   Modification date
  EXPIRED    Expiration date
  BACKUP     Backup date
  ALL        All dates

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /exclude

   /EXCLUDE=(filespec[,...])

   Excludes the specified files. You can use wildcards in
   the directory, name and type. The device part is ignored.

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /expired


  If you specify a /before or /since, the date will be checked against
  the expiration date

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /extent


  /extent
  /extent=full

  Display info about the number of header/extents of the file
  in the format "headers\extents" to differentiate with the size
    "eof/alloc"

  if /extent is given without the full parameter DIX will display the
   number of extents in the format \extents

  if /extent=full is specified, or if the /FHDRS qualifier is also given
   DIX will show both the header count and the number of extents
   in the format headers\extents

  See also the /FHDRS qualifier

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /FHDRS


  Display the number of file headers in the format headers\

 See also the help about /extent

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /FAST


  Directory can also do a fast search (using /fast). In this case DIX will
  try to open the DEVICE:[000000]INDEXF.SYS (like DFU). You must have read
  access to this file

  Directory /fast device:[directory]filenamemask

  By default DIX will sort the resulting files by directory/filename to get
  a nice display (files per directory). But this may take some time (first
  all files must be processed before the first output appears).
  If you specify /nosort DIX will print the files as soon as they are found
  but the display is set to /nohead/notrail, since files are no longer sorted
  by directory. Relative files versions also work, but only if you do not 
  specify /nosort

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /FILEID


  Display the fileid of the file

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /full


  Display full info of a file

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /grand_total


  Display a line containing the grand total (over all directories),
  but no files, and also no directory names

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /header


  Display the headers (one for each new directory)

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /modified


  If you specify a /before or /since, the date will be checked against
  the modification date

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /nice

  If the filename is ODS-5 with ^* escapes, DIX will transform the
  ^* escapes to the real meaning. This transform is done before the
  possible sorting.

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /organization


    Display the file organization

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /output

   /output=filename

  Redirect the output to a file

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /owner

  Display the owner of the file

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /paged


  Display the data one page at the time

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /record_format


    Display the record format

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /screen


  Display the data in screen mode

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /select


  /SELECT=(sel_item[,sel_item...])

  Sel_item can be

    select_file=name            Set the default search pattern from a
                                 select_file definition, see add select
                                 for more help. You can add to or remove from
                                 the select_file by adding additional qualifiers
                                 See the example below

    size=min=blocks             Select on file size (EOF)
    size=max=blocks
    allsize=min=blocks          Select on file size (Allocated)
    allsize=max=blocks
    size=unused[=size]          Select file where alloc-eof>size
                                 size is default the disk cluster size
    version=min=version_number  Select on version number
    version=max=version_number
    organization=org            Org=IDX,REL,SEQ,SYMLINK
    record_format=fmt           fmt=UDF,FIX,VAR,VFC,STREAM,STREAM_LF,STREAM_CR
    headers=min=count           Select on the number of headers
    headers=max=count
    extents=min=count           Select on the number of mapping extents
    extents=max=count
    global_buffers=min=count    Select on global buffer settings
    global_buffers=max=count
    aces=count=min=count        Select on number of ACEs
    aces=count=max=count
    aces=size=min=count         Select on size of ACEs
    aces=size=max=count
    aces=ident=(id1[:access][,id2[:access]..)
                                Select on files that have ACEs with identifier
                                id1,id2.. Any id will match (or). If you also
                                specify aces=all, all IDs must be present.

                                Access can be specified as any combination of
                                RWDEC. All the letters specified must be in
                                the ACE and no more. If you append an *, you
                                select all ACEs that have at least the letters.

    aces=all                    In combination with the above. Match only if
                                all IDs are present in the ACL
    lbn=(start[,end])           Select files that are mapped on LBNs between
                                start and end. If end is not specified, end=start
    journal=(flag,flag..)       Select files with journal attributes
     Flag can be
         journal                Select journal files
         ai                     Select files that have AI journaling enabled
         bi                     Select files that have BI journaling enabled
         ru                     Select files that have RU recovery enabled
        If you do not specify any flag, all above files will be found
    flag=(flag[,flag]..)
      Flag can be
         nobackup               Select files flagged as NOBACKUP
         locked                 Select files flagged as locked
         nomovefile             Select files flagged as movefile disabled
         wbcache                Select files flagged as write back cache
         readverify             Select files flagged as readcheck
         writeverify            Select files flagged as writecheck
         badacl                 Select files flagged as having a bad ACL
         badblock               Select files flagged as containing a bad block
         nocharge               Select files flagged as not charged to quota
         erase                  Select files flagged as erase on delete
         directory              Select files flagged as directory file
         markdelete             Select files flagged as marked for delete

    file=option             (do not) Display parts of the filename
         Option can be [no]node
                       [no]device
                       [no]directory
                       [no]name
                       [no]type
                       [no]version

  Examples for the ACEs:

   /SELECT=ACES=(IDENT=(ID1,BATCH),ALL)
          Select only files that have an ACE with ID1 AND an ACE with BATCH
   /SELECT=ACES=IDENT=(ID1,BATCH)
          Select only files that have an ACE with ID1 OR an ACE with BATCH
   /SELECT=ACES=COUNT=MIN=10
          Select only files that have at least 10 ACEs

   /SELECT=ACES=(IDENT=ID1:RWE)
          Select all files that have an ACE (ID=ID1,ACCESS=R+W+E)
           files that have other access fields enabled are not selected.
           but other ACEs may be present
   /SELECT=ACES=(IDENT=ID1:R*)
          Select all files that have an ACE ID=ID1 with an ACCESS string
           that has at least a READ specified, other access are allowed.

  Example for select_file:

  DIX> Add select_file patt/select=size=(min=10,max=20) !add a select pattern
  DIX> direc/select=select=patt   !show all files between 10 and 20 blocks
  DIX> direc/select=select=patt/by_own=system !add an extra selection
  DIX> direc/select=(select=patt,size=nomin)  !now show files between 0 and 20
                                              ! blocks

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /since

   /since=date

  Display only files older than 'date'
  See the info about /create /expired /modified and /backup

  date can be a normal OpenVMS-date (including today, yesterday, tomorrow)
   or one of the keywords created/expired/modified/backup

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /SIZE

   /SIZE=(keyword[,keyword...])

  Support keywords are

        all         Display used size and allocated size
        allocation  Display only allocated size
        used        Display only used size, default if only /SIZE
        bytes       Display the size not in blocks but in xB (x=K,M,G)
        exact       Display the size in bytes, exact for sequential files
   The normal DCL syntax
     /size=units=bytes
     /size=units=blocks
     /size=units=exact  Are also supported

DIX INTERACTIVE_COMMANDS DIRECTORY qualifiers /sort

  /sort=(field[,field...]])
  Sort the files according to the selected items

  field can be
     ascending             The following sorts will be in ascending order
     descending            The following sorts will be in descending order
     case_blind            Text compares will case blind
     directory             Sort on directory
     file                  Sort on the filename only
     type                  Sort on the file type
     version               Sort on the file version
     date[=created|expired|maodified|backup]   Sort on one of the dates
                              created is default
     id                    Sort on fileid
     owner                 Sort on UIC
     organization          Sort on file organization (SEQ,REL,IDX)
     record_format         Sort on record format
                            (DIX,STREAM,STREAM_LF,STREAM_CR,VAR,VFC,UDF)
     size[=allocated|used] Sort on size, default is used
     headers               Sort on the number of headers
     extents               Sort on the number of extents

    For header/extents you need read access to the index file

  If the /header or /trailer is active (Default), the sort is done
  within each directory. If you specify /noheader/notrailer, the sort
  is done over all files (including the directory)

  If you have specified /fast, you can also specify /nosort to prevent DIX
   from sorting the files (and thus print the files sooner).

   DIX uses a special compare routine for the sort operation and this is
   incompatible with the Hypersort utility.
   If you receive the message %SORT-E-NYI, functionality is not yet implemented
   when using directory/sort make sure that the logical SORTSHR does not
   exist or points to SYS$SHARE:SORTSHR

   Example:
    directory/sort=(ascending,type,descending,date=create) *.*

   Sort first on file type (ascending) and within equal types sort on
      creation date in descending order)

next