CopyWrite Interface Active X Server

Overview

The CopyWriteInterface ActiveX Server implements a set of Automation Objects which provide access to A-Series Volumes on Windows NT/2000. 

The Automation Objects have Methods and Properties which may be used to do things with those Volumes, in a Scripting Language such as VBScript.

An A-Series Volume on Windows NT may be an A-Series Virtual Disk, or a Library/Maintenance CD-Image in a File, or an MCP Wrapped Container or  a CopyWrite Distributed Disk Farm.

The Automation Objects are implemented in the library CopyWriteInterface.dll, which is installed when CopyWrite is installed on Windows. They are defined in the Registery, in HKEY_CLASSES_ROOT with a ProgId of CopyWriteInterface.<name>X. For example, CopyWriteInterface.MCPSupportX.

This example shows an A-Series Virtual Disk being checked for BigFiles,

Option Explicit
'  *****  BigFiles Report on Disk004.asd *****
Dim Selector,File,FileSystem,Report,ReportFileName,Reason
Sub Spout(Text)
  Report.WriteLine(Text)
End Sub 'Spout
Sub NotePad(FileName)
  Dim Shell  
  Set Shell = CreateObject("WScript.Shell")
  Shell.Run ("%windir%\notepad " & FileName)
End Sub 'NotePad
'  ***** Create the Report File *****
ReportFileName="C:\Temp\BigFilesReport.txt"
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set Report = FileSystem.CreateTextFile(ReportFileName, TRUE) 
'  ***** Select the A-Series Disk Volume *****
Set Selector=CreateObject("CopyWriteInterface.SelectorX")
If Not Selector.SelectVolume("C:\Disk004.asd",Reason) then
  Spout(Reason)
End If
Spout("There are " & Selector.FileCount & " Files on the Disk")
'  ***** Select the Big Files *****
For Each File In Selector 
  If (File.NumberOfSectors > 10000) then
    Spout(File.FileName & " " & File.NumberOfSectors & " Sectors")
  End If
Next
Spout("End of Report")
'  ***** Print the Report *****
Report.Close
NotePad(ReportFileName)

If this script is in a file called C:\Temp\BigFilesReport.vbs and the MicroSoft Scripting Host is installed, then double clicking on the file will produce a report of the big files in the A-Series Virtual Disk called C:\Disk004.asd.

Concepts

The Automation Objects are implemented in the CopyWriteInterface ActiveX In-Process Server, or in other words a Library (DLL), which is loaded into the address space of the program which wants to use one of the Objects.

Each of the Objects provides Methods and Properties for handling some particular A-Series Object, such as a StandardFormName or a Tape Directory or a Disk File Header or an A-Series Disk Volume. To do this, they must be created and associated with an actual thing.

To explain this further,  let there be an A-Series Virtual Disk in a file called C:\Disk000.asd.

The Object which represents an A-Series Disk and other A-Series Volumes has been named SelectorX, because it is used to select an A-Series Volume.

In VBScript the SelectorX Object is created like this,

  	Set Selector=CreateObject("CopyWriteInterface.SelectorX")

The Object now exists, referenced by the variable called Selector, but it needs to be associated with an actual thing, which is done using a method provided by the Object.

 		If Not Selector.SelectVolume("C:\Disk004.asd",Reason) then		
			Spout(Reason)	
		End If

The SelectVolume method of the SelectorX Object is used to associate an actual thing with the Object. The SelectVolume method is passed a FileName, which is used to locate a Volume on the Windows NT Disk. This Object can manage an A-Series Disk Volume, a Library/Maintenance CD-ROM Image, an MCP Wrapped Container and other volume types. If the selected file does not represent a type of volume which the Object can manage, the method returns FALSE and a Reason.

Once the SelectorX has been initialized, the Properties which it implements may be used to examine the Volume. For example, the FileCount property.

  	Spout("There are " & Selector.FileCount & " Files on the Disk")

The SelectorX Object implements a Collection of DiskFileHeaderX Objects, which can be simply manipulated using a VBScript For Statement.

  For Each File In Selector 
    If (File.NumberOfSectors > 10000) then
      Spout(File.FileName & " " & File.NumberOfSectors & " Sectors")
    End If
  Next

The word 'File' is a variable, declared in a Dim Statement, which can contain a DiskFileHeaderX Object. The DiskFileHeaderX object was created and associated with the actual object  by the SelectorX Object. The actual object is the Disk File Header of the current file.

So, some Objects are created explicitly in the Script using the CreateObject() method, and other Objects are provided as a Property of another Object.

A Scripting Host may also create objects and make them available to a VBScript. For example, the CopyWrite Remote ODT Handler provides a Spout() method to a Script which implements an ODT Command, so that a response can be sent back to the ODT.

Typically, one Object will be created in a particular context, and then provide Properties, which might be simple scalar values, strings or other Object references.

This document describes the Objects and their Methods and Properties, which are provided by the CopyWriteInterface ActiveX Server.

SelectorX Object

The SelectorX Object represents an A-Series Volume.

An A-Series Volume may be,

The examples below assume that the Selector has been created using the 'Set Selector=CreateObject("CopyWriteInterface.SelectorX")' Statement.

In VBScript, a statement is split across a record boundary by terminating the record with a <blank>_. 

Methods
Method Description Example
FUNCTION
   SelectVolume(Const FileName : String;
    Var Reason : String) : Boolean;
Loads the A-Series Volume (CD Image, Wrapped Container or A-Series Disk) given by the FileName. If any error, returns FALSE and a reason. VBScript:
If Not Selector.SelectVolume(  _
       "C:\Disk000.asd",  _
        Reason) then
  Spout(Reason)
End If
JScript:
var Volume,Reason,FileList,Header;
Volume=new ActiveXObject("CopyWriteInterface.SelectorX");
if (Volume.SelectVolume("C:\\Disk000.asd", Reason))
{
  FileList=new Enumerator(Volume);
  for (;!FileList.atEnd();FileList.moveNext())
  {
    Header=FileList.item();
    spout(Header.FileName);
  }
}
else
  spout(Reason);
FUNCTION
   SelectDiskFarm(Const Directory : String;
   Var Reason : String) : Boolean;
Loads the A-Series Disk Farm given by the Directory. If any error, returns FALSE and a reason. If Not Selector.SelectDiskFarm(  _
     "C:\ASeriesBackup\DEV-A", _
      Reason) then
  Spout(Reason)
End If
FUNCTION
   ConvertToText(FileNo : Integer
   Const FileName : String;
    TextOnly : Boolean;
   Var Reason : String) : Boolean;
Converts the File given by FileNo into ASCII Text in a file with the given FileName. If TextOnly is TRUE, then any Sequence Number and MarkID fields are ignored. If any error occurs, the function returns FALSE and a Reason. If Not Selector.ConvertToText(  _
        FileNo,   _
        C:\Temp\" & File.FlatName&".txt", _
       FALSE, _
         Reason) then
  Spout(Reason)
End If
FUNCTION
   ConvertToImage(FileNo : Integer
    Const FileName : String;
    Var Reason : String) : Boolean;
Converts the File given by FileNo into a Binary Image. If any error occurs, the function returns FALSE and a Reason. If Not Selector.ConvertToImage(  _
        FileNo,   _
         "C:\Temp\" & File.FlatName&".bin", _
          Reason) then
  Spout(Reason)
End If
FUNCTION
    SelectCoreImage(FileNo : Integer;
   Var Reason : String) : SelectorX;
If FileNo is an A-Series Volume, then it is copied and then a Selector Object is created. This method is used to provide a Selector Object for A-Series Volumes which are inside other A-Series Volumes. For example, a Wrapped Container in an A-Series Virtual Disk. If Not Selector.SelectDiskFarm _
                                  "C:\ASeriesBackup\FCD",Reason) then
  Spout(Reason)
End If
For Each File In Selector
  If (File.FileKindMnemonic = "PROMBURNERDATA") then
    Set CDImage=Selector.SelectCoreImage(File.FileNo,Reason)
    For Each F In CDImage
      Spout(F.FileName)
    Next
  End If
Next
FUNCTION
     ExtractAsCDImage(
      Const VolumeName : String;
       Var Reason : String) : Boolean;
This function builds a list of the FileNos which are marked as Selected, and extracts them into a new Library/Maintenance CD-ROM Image. If Not Selector.SelectDiskFarm(  _
    "C:\ASeriesBackup\CopyWrite27102003",
      Reason) then
  Spout(Reason)
End If
Selector.ClearSelected
For Each File In Selector
  Selector.Selected(File.FileNo)=Not File.ItsATextFileKind
Next
If Not Selector.ExtractAsCDImage(  _
   "C:\Temp\Test.mcp",   _
    Reason) then
  Spout(Reason)
End If 
FUNCTION
     ExtractAsWrappedFile(
       Const VolumeName : String;
    Var Reason : String) : Boolean;
This function builds a list of the FileNos which are marked as Selected, and extracts them into a new Wrapped File. If Not Selector.ExtractAsWrappedFile(   _
  "C:\Temp\Test.con",  _
   Reason) then
  Spout(Reason)
End If 
FUNCTION
     ExtractAsDiskFarm(
     Const VolumePath : String;
    Var Reason : String) : Boolean;
This function builds a list of the FileNos which are marked as Selected, and extracts them into a new Disk Farm . If Not Selector.ExtractAsDiskFarm(  _
   "C:\ASeriesBackup\TestVol",  _
    Reason) then
  Spout(Reason)
End If
FUNCTION
     ExtractToDirectory(
    Const Directory : String;
      Var Reason : String) : Boolean;
This function builds a list of the FileNos which are marked as Selected, and extracts them into the given Directory. The files are extracted into the sub directories given by each level of the Title. For example, extracting a file called *SYSTEM/INSTALLS/"Readme.txt" into the Directory C:\Temp, would create a file called C:\Temp\SYSTEM\INSTALLS\ReadMe.txt. Only files with FILESTRUCTURE=STREAM may be extracted using this function. For Each File In Selector 
  If (File.FileName = "(TEST)OBO/""AUTOEXEC.TXT""") then
    Spout(File.FileName)
    Selector.Selected(File.FileNo)=TRUE
    If Not Selector.ExtractToDirectory("C:\Temp",Reason) then
       Spout(Reason)
    End If
  End If
Next
PROCEDURE ClearSelected; This procedure clears the list of Selected files. Selector.ClearSelected
For Each File In Selector
  Selector.Selected (File.FileNo)=File.ItsAPrinterBackupFileKind
Next
PROCEDURE SelectAllFiles; This procedure marks all files as being Selected. Selector.SelectAllFiles
FUNCTION
     CombineIntoCDImage(
     Selectors : Array of SelectorX;
     Const CombinedFileName : String;
    Const VolumeIdentifier : String;
       Const SerialNo : String;
       MultiVolume : Boolean;
      ImageSizeInMegaBytes : Integer;
      Var Reason : String) : Boolean;
This function combines files that are in each of the volumes in the array of selected volumes into a Library/Maintenance CD-ROM file image. If the FileSelection is active for a volume, then only the selected files from that volume are copied to the combined volume.

Dim Selector(1) 
Set Selector(0)=    _
         CreateObject("CopyWriteInterface.SelectorX")
If Not Selector(0).SelectVolume(   _
      "C:\Disk002.asd",Reason) then
  Spout(Reason)
End If
For Each File In Selector(0)
  Selector(0).Selected(File.FileNo)=(File.NumberOfSectors = 0)
Next
Set Selector(1)=   _
    CreateObject("CopyWriteInterface.SelectorX")
If Not Selector(1).SelectVolume(  _
   "C:\Disk003.asd",Reason) then
  Spout(Reason)
End If
For Each File In Selector(1)
  Selector(1).Selected(File.FileNo)=(File.NumberOfSectors = 0)
Next
If Not Selector(0).CombineIntoCDImage(  _
   Selector,"C:\Temp\J.mcp",  _
                                          "FRED","SN0001",  _ 

    FALSE,0,Reason) then
   Spout(Reason)
End If

FUNCTION
     CombineIntoWrappedFile(
     Selectors : Array of SelectorX;
      Const CombinedFileName : String;
       Var Reason : String) : Boolean;
This function combines files that are in each of the volumes in the array of selected volumes into an MCP Wrapped Container. If the FileSelection is active for a volume, then only the selected files from that volume are copied to the combined volume.

If Not Selector(0).CombineIntoWrappedFile(  _
      Selector,  _   "C:\Temp\J.con",  

    Reason) then
  Spout(Reason)
End If

FUNCTION
     CombineIntoDiskFarm(
       Selectors : Array of SelectorX;
      Const CombinedPath : String;
       Var Reason : String) : Boolean;
This function combines files that are in each of the volumes in the array of selected volumes into a CopyWrite Disk Farm. If the FileSelection is active for a volume, then only the selected files from that volume are copied to the combined volume in the Disk Farm. If Not Selector(0).CombineIntoDiskFarm(  _
   Selector,  _
     "C:\ASeriesBackup\Combo",  _
      Reason) then
  Spout(Reason)
End If
FUNCTION
BuildMissingCapsule(
       FarmPath : String;
       FileNo : Integer;
       Var Reason : String) : Boolean;
This function builds a Missing Capsule in a Disk Farm. The FarmPath gives the Path to the Disk Farm, where normally there should be a Capsule for the given FileNo. If the Capsule is not there, a new Capsule is created using the Title of the FileNo from the Tape Directory and it is marked as Missing. This function is provided for manual recovery of a corrupted Disk Farm.  Set Selector=CreateObject("CopyWriteInterface.SelectorX")
If Not Selector.BuildMissingCapsule( _
     "C:\ASeriesBackup\A1", _
            1,_
        Reason) then
    Spout(Reason)
Else
    Spout("Created Missing Capsule")
End If

These Properties are defined for the SelectorX Object.

Properties
Property Description Example
TapeDirectory : TapeDirectoryX; Returns a reference to a TapeDirectoryX Object. For an A-Series Virtual Disk, the Tape Directory is created from the Flat Directory. Set TDir=Selector.TapeDirectory
Spout(TDir.FileName(1))
Header[Index:Integer]:DiskFileHeaderX; Returns a reference to a DiskFileHeaderX Object for the specified FileNo. The FileNo is in the range 1..Selector.FileCount-1. FileNo 0, the TapeDirectory, is counted but is not available. Spout(Selector.Header(1).FlatName)
FileCount : Integer; Returns the number of files in the Tape Directory. The TapeDirectory has a File 0, which is the TapeDirectory itself, and then files. A FileCount of 2 means there is the Tape Directory (File 0) and 1 File. For T=1 To Selector.FileCount-1 Step 1
  Spout(Selector.Header(T).FileName)
Next

Selected[Index:Integer]:Boolean; (Read/Write) A Selected flag is associated with each file in the volume. The flag can be set or tested using this property. methods, such as Extract, use this flag to create a list of selected files upon which they act. All the Selected flags can be reset using the ClearSelected method.  Selector.ClearSelected
For T=1 To Selector.FileCount-1 Step 1
  Selector.Selected(T)=Selector.Header(T).Crunched
Next
Spout("There are " & Selector.nSelected & " Crunched Files")
nSelected : Integer; This property returns a count of the number of files which are currently marked as Selected. Spout("There are " & Selector.nSelected &   _
       " Selected Files")
FileSelectionActive :Boolean; (Read/Write) This flag is set whenever the Selected property is accessed. If this flag is set, then only those files which are marked as Selected are included in operations such as extracting files. If the flag is reset, all files are selected by default. Selector.FileSelectionActive=TRUE
ItsUnSelected :Boolean; Is TRUE if no volume has been selected. <none>
ItsACDImage :Boolean; Is TRUE if the volume is a Library/Maintenance CD-ROM Image file. <none>
ItsACDUnit :Boolean; Is TRUE if the volume is a mounted Library/Maintenance CD-ROM volume. <none>
ItsInCore :Boolean; Is TRUE if the volume was extracted into a core image from another volume. <none>
ItsADiskFarm :Boolean; Is TRUE if the volume is a CopyWrite Disk Farm. <none>
ItsWrapped :Boolean; Is TRUE if the volume is a Wrapped File or Container. <none>
ItsBLPack :Boolean; Is TRUE if the volume is a BLPack archive. <none>
ItsAnASeriesDisk :Boolean; Is TRUE if the volume is an A-Series virtual disk. <none>
ASeriesDisk :ASeriesDiskX; A reference to an ASeriesDiskX object, if ItsAnASeriesDisk is TRUE. If Not Selector.ItsAnASeriesDisk then
  Spout("Not an A-Series Disk")
End If
Set ASeriesDisk=Selector.ASeriesDisk
Set Label=ASeriesDisk.DiskLabel
Spout(Label.LabelID)

 

MCP Support X Object

4The MCPSupportX Object provides Methods and Properties which act on A-Series Data Types.4

Methods
Method Description Example
FUNCTION
     Mnemonic(Const AttName : String;
   AttValue : Integer) : String;
Given an A-Series File Attribute Name and an Integer Value, this function returns the Mnemonic for the value, or else an empty string. Spout(MCP.Mnemonic("FILESTRUCTURE",1))
FUNCTION
     Value(Const AttName : String;
     Const MnemName : String) : Integer;
Given an A-Series File Attribute Name and a Mnemonic Value, this function returns the Integer Value for the Mnemonic, or -1. Spout(MCP.Value("FILESTRUCTURE","STREAM"))

These Properties are defined.

Properties
Property Description Example
<none> <none> <none>

ASeries Disk X Object

The ASeriesDiskX Object provides Methods and Properties which act on A-Series Data Types.

Methods
Method Description Example
<none> <none> <none>

These Properties are defined.

Properties
Property Description Example
PackName:String; The name of the Pack. Set Disk=CreateObject("CopyWriteInterface.SelectorX")
If Not Disk.SelectVolume(Unit.Path&"\"&  _
            File.Name,Reason) then
  Spout(Reason)
Else
  If Disk.ItsAnASeriesDisk then
     Set ASeriesDisk=Disk.ASeriesDisk
     Spout(ASeriesDisk.PackName)
  End If
End If
SerialNo:String; The serial number of the Pack. Set ASeriesDisk=Disk.ASeriesDisk
With ASeriesDisk
   Spout(.SerialNo)
End With
Owner:String; The Owner of the Pack. Set ASeriesDisk=Disk.ASeriesDisk
Spout(ASeriesDisk.Owner)
DiskLabel:String; A DiskLabelX Object. If Not Selector.ItsAnASeriesDisk then
  Spout("Not an A-Series Disk")
End If
Set ASeriesDisk=Selector.ASeriesDisk
Set Label=ASeriesDisk.DiskLabel
HasMCPInfo:String; Returns TRUE if this is a CM'ed Pack and therefore has an MCPInfo structure. If ASeriesDisk.HasMCPInfo then
   Spout(ASeriesDisk.PackName & " has MCP Info")
End If
MCPInfo:MCPInfoX; Returns a reference to an MCPInfoX Object. If ASeriesDisk.HasMCPInfo then
   Set MCPInfo=ASeriesDisk.MCPInfo
   Spout(MCPInfo.MCPFileName)
End If

 

DiskFile Header X Object

The DiskFileHeaderX Object provides Methods and Properties for accessing an A-Series Disk File Header.

The Reference to the DiskFileHeaderX Object can be obtained using the Header property of a SelectorX Object.

If a file has been marked as missing by Library/Maintenance, or it has been released and is marked as RIP, the Missing Attribute is TRUE and no Header Attributes other than FileNo and WhyNoHeader are defined.

Methods
method Description Example
<none> <none> <none>

These Properties are always defined.

Properties
Property Description Example
Missing : Boolean; Returns TRUE if the File is Missing. A File may be Missing because it was not copied by Library/Maintenance, or because the Disk Farm has been corrupted, perhaps because the Capsule for the File is missing or damaged.. Set TDir=Selector.TapeDirectory
If Selector.Missing Then
  Spout("Missing:"&Selector.WhyNoHeader & _
    ". File " &TDir.FileName(Selector.FileNo))
WhyNoHeader : String; Returns the reason why the Header is Missing. Spout(Selector.WhyNoHeader)

These Properties are defined if the File is not Missing.

Properties
Property Description Example
FileName : String; Returns the Display Form FileName. Spout(Selector.Header(1).FileName)
FileKind:Integer; FILEKIND Attribute. Spout(Selector.Header(1).FileKind)
FileKindMnemonic:String; Returns the Mnemonic for the FILEKIND attribute. This returns the same value as
MCPSupportX.Mnemonic ("FILEKIND",FileKind). 
Spout(Selector.Header(7).FileKindMnemonic)

CreationTimeStamp:TDateTime; This timestamp combines the CREATIONDATE and CREATIONTIME file attributes. It is the date and time the physical file was opened for creation. Spout(Selector.Header(7).CreationTimeStamp)
TimeStamp:TDateTime; This TIMESTAMP is used on a Cataloging system to note whether the data or attributes of a file have been changed since it was last backed up.  Spout(Selector.Header(7).TimeStamp)
AccessTimeStamp:TDateTime; This timestamp combines the ACCESSDATE and ACCESSTIME file attributes. It is the date and time the physical file was last altered, executed or read. (Previously known as USEDATE and LASTACCESSDATE) Spout(Selector.Header(7).AccessTimeStamp)
Cycle:Integer; The CYCLE Attribute.  Spout(Selector.Header(7).Cycle)
Version:Integer; The VERSION Attribute.  Spout(Selector.Header(7).Version)
ReleaseID:StandardFormNameX; The RELEASID Attribute is returned as a reference to a StandardFormNameX Object. For Each File In Selector
  Set SFN=File.ReleaseID
  SFN.ConvertEBCDICToASCII
  Spout(SFN.ToASeriesDisplay)
Next
NumberOfSectors:Integer; The TOTALSECTORS Attribute. This is calculated by EOFSectors+REAL(EOFLastBits>0). Spout(Selector.Header(7).NumberOfSectors)
HeaderVersion:Integer; The version number of the Disk File Header. Only version 6 and above are supported.  Spout(Selector.Header(7).HeaderVersion)
FileStructure:Integer; The FILESTRUCTURE Attribute.  Spout(MCP.Mnemonic("FILESTRUCTURE",  _
                                     File.FileStructure))
Crunched:Boolean; The CRUNCHED Attribute.  Selector.Selected(File.FileNo)=File.Crunched
Catalogued:Boolean; Set to TRUE if the Header is marked as being Catalogued.  If File.Catalogued then
  Spout(File.FileName & " is Cataloged")
End If
Title:StandardFormNameX; The TITLE Attribute is returned as a reference to a StandardFormNameX Object. For Each File In Selector
  Set SFN=File.Title
  SFN.ConvertEBCDICToASCII
  Spout(SFN.ToASeriesDisplay)
Next
Product:StandardFormNameX; The PRODUCT Attribute is returned as a reference to a StandardFormNameX Object. For Each File In Selector
  Set SFN=File.Product
  SFN.ConvertEBCDICToASCII
  Spout(SFN.ToASeriesDisplay)
Next
AlterTimeStamp:TDateTime; This timestamp combines the ALTERDATE and ALTERTIME file attributes. It is the last date and time that the file was closed after the data in the file was altered.  Spout(Selector.Header(7).AlterTimeStamp)
Owner:String; The OWNER Attribute.  Spout("Owner is " &Selector.Header(1).Owner)
Units:Integer; The UNITS Attribute.  Spout(MCP.Mnemonic("UNITS",File.Units))
FileType:Integer; The FILETYPE Attribute.  Spout(File.FileType)
SecurityUse:Integer; The SECURITYUSE Attribute.  Spout(MCP.Mnemonic("SECURITYUSE",  _
                                     File.SecurityUse))
SecurityType:Integer; The SECURITYTYPE Attribute.  Spout(MCP.Mnemonic("SECURITYTYPE",  _
                                     File.SecurityType))
SectorSize:Integer; The SECTORSIZE Attribute.  Spout(File.SectorSize)
SaveFactor:Integer; The SAVEFACTOR Attribute.  Spout(File.SaveFactor)
RowTail:Integer; The RowTail.  Spout(File.RowTail)
RowSize:Integer; The Row Size in Sectors.  Spout(File.RowSize)
RecordType:Integer; The RecordType.  Spout(File.RecordType)
RecordFormat:Integer; The RecordFormat.  Spout(File.RecordFormat)
ReadTZ:Integer; The READTZ Attribute.  Spout(File.ReadTZ)
FlatName : String; Returns a flat filename, which is a single level name, starting with the usercode and each level separated by an underscore. It is used to create a flat filename when saving a file to the Windows file system. FileName=File.FlatName & ".txt"
Spout(FileName)
FileNo:Integer; The File Number of this Header in the Tape Directory. It is in the range 1..FileCount-1, where the FileCount is given by the Object which provides the Header.  Spout("<" & File.FileNo & "> " & FileName)
)
Missing:Boolean; If the FileHeader is marked as Missing by Library/Maintenance, or the file has been released and is marked as RIP, this attribute returns TRUE. 
If Missing is TRUE, accessing any Header Attribute other than FileNo, will result in the script faulting. 
If File.Missing then
  Spout("<"& File.FileNo &"> is Missing")
End If
ItsATextFileKind:Boolean; This property returns TRUE if the File is a Text FileKind. A Text FileKind is defined to be a CANDE File defined by a FileRecFormat entry, except for DATA. Selector.Selected(File.FileNo)=File.ItsATextFileKind
ItsAPrinterBackupFileKind:Boolean; This property returns TRUE if the File is a PrinterBackup FileKind. Selector.Selected(File.FileNo)=File.ItsAPrinterbackupFileKind
LastRecord:Integer; The LASTRECORD Attribute. Spout(File.LastRecord)
BlockStructure:Integer; The BLOCKSTRUCTURE Attribute. Spout(MCP.Mnemonic("BLOCKSTRUCTURE",  _
                                    File.BlockStructure))
AreaLength:Integer; The AREALENGTH Attribute. Spout(File.AreaLength)
LastRow:Integer; The row number of the last row in the file. This is calculated by ROUNDUP(NumberOfSectors, RowSize)-1. Spout(File.LastRow)
LastRowSize:Integer; The size in sectors of the last row. Spout(File.LastRowSize)
LastAllocatedRow:Integer; The row number of the last allocated row in the file.  Spout(File.LastAllocatedRow)
NumberOfUnAllocatedRowsBeforeLastRow
:Integer;
The number of unallocated rows which are before the last row. Spout(File.NumberOfUnAllocatedRowsBeforeLastRow)
NumberOfAllocatedRows:Integer; The number of rows which are allocated. Spout(File.NumberOfAllocatedRows)
FirstRowIndex:Integer; The row number of the first row in the file. Spout(File.LastRow)
NumberOfOptionalAttributes:Integer; The number of optional attributes in the Header. Spout(File.NumberOfOptionalAttributes)
FrameSize:Integer; The FRAMESIZE Attribute. Spout(File.FrameSize)
LibMaintRecords:Integer; The number of Library/Maintenance 900 Word Blocks that contain the data of the file. The distribution of the blocks into Rows, depends on the Row attributes. Spout(File.LibMaintRecords)
AccessTZ:Integer; AccessTZ Attribute. <none>
AlterTZ:Integer; AlterTZ Attribute. <none>
AttModifyTZ:Integer; AttModifyTZ Attribute. <none>
BackupTZ:Integer; BacupTZ Attribute. <none>
BlockLength:Integer; BlockLength Attribute. <none>
BlockSize:Integer; BlockSize Attribute. <none>
CCSVersion:Integer; CCSVersion Attribute. <none>
CheckEOF:Integer; CheckEOF Attribute. <none>
CopyDestTZ:Integer; CopyDestTZ Attribute. <none>
CopyNumber:Integer; CopyNumber Attribute. <none>
CopySourceTZ:Integer; CopySourceTZ Attribute. <none>
CreationTZ:Integer; CreationTZ Attribute. <none>
EOFLastBits:Integer; EOFLastBits Attribute. <none>
EOFSector:Integer; EOFSector Attribute. <none>
ExecuteTZ:Integer; ExecuteTZ Attribute. <none>
ExtMode:Integer; ExtMode Attribute. <none>
FileFamilyIndex:Integer; FileFamilyIndex Attribute. <none>
FileLength:Integer; FileLength Attribute. <none>
FileOrganization:Integer; FileOrganization Attribute. <none>
FileStructureSource:Integer; FileStructureSource Attribute. <none>
FlatHdrLength:Integer; FlatHdrLength Attribute. <none>
Genealogy:Integer; Genealogy Attribute. <none>
HdrLength:Integer; HdrLength Attribute. <none>
LabelType:Integer; LabelType Attribute. <none>
Location:Integer; Location Attribute. <none>
MaxRecSize:Integer; MaxRecSize Attribute. <none>
MaxRecSizeInBytes:Integer; The MAXRECSIZE attribute expressed as a number of bytes. <none>
NFTFileKind:Integer; NFTFileKind Attribute. <none>
NFTRec:Integer; NFTRec Attribute. <none>
NumberOfRows:Integer; Number of Rows. <none>
OrigHeaderVersion:Integer; Original Header Version. <none>
PhysicalModeSize:Integer; Physical Mode Size. <none>
PrinterKind:Integer; PrinterKind Attribute. <none>
SizeMode:Integer; The SIZEMODE file attribute. <none>
SizeOffset:Integer; The SIZEOFFSET file attribute. <none>
Size2:Integer; The SIZE2 file attribute. <none>
TrainID:Integer; The TrainID. <none>
Alignment:Integer; The ALIGNMENT attribute. <none>
APLFile:Boolean; The APLFile attribute. <none>
Banner:Boolean; The BANNER print file attribute. <none>
Cataloged:Boolean; Set if the header is marked as cataloged. <none>
CCSVersionSet:Boolean; Set if the CCSVersion attribute is valid. <none>
ClearAreas:Boolean; The CLEARAREAS file attribute. <none>
Duplicated:Boolean; The DUPLICATED file attribute. <none>
EOFScrubbed:Boolean; EOFScrubbed. <none>
LockedFile:Boolean; The LOCKEDFILE file attribute. <none>
Permanency:Boolean; Permanency attribute. <none>
PrivilegedFile:Boolean; The PrivilegedFile attribute. <none>
Protection:Boolean; The PROTECTION file attribute. <none>
SensitiveData:Boolean; The SENSITIVEDATA file attribute. <none>
Single:Boolean; The Single attribute. <none>
SystemFile:Boolean; If the header is marked as a system file, which cannot be removed. <none>
ToBeCrunched:Boolean; The ToBeCrunched attribute. <none>
WroteLastRow:Boolean; Set if the last row that can be allocated has been written. <none>
AlignFile:StandardFormNameX; The ALIGNFILE printer file attribute. <none>
FormID:StandardFormNameX; The FORMID printer file attribute. <none>
Identity:StandardFormNameX; The IDENTITY file attribute. <none>
Note:StandardFormNameX; The NOTE file attribute. <none>
PageComp:StandardFormNameX; The PAGECOMP printer file attribute. <none>
SecurityGuard:StandardFormNameX; The SECURITYGUARD file attribute. <none>
MixedCaseID:StandardFormNameX; The MixedCaseID attribute. <none>
TransInput:StandardFormNameX; The TransInput attribute. <none>
TransLib:StandardFormNameX; The TransLib attribute. <none>
TransName:StandardFormNameX; The TransName attribute. <none>
LicenseKey:LicenseKeyX; The LICENSEKEY file attribute. <none>
HasLicenseKey:Boolean; Set if there is a LicenseKey attribute present in the Header. <none>
ActiveRow[RowIndex:Integer]:Boolean; Set if the given row is active. The RowIndex is in the Range 0..NumberOfRows-1. <none>
AllocatedRow[RowIndex:Integer]:Boolean; Set if the given row has been allocated. <none>
DeletedRow[RowIndex:Integer]:Boolean; Set if the given row has been deleted. <none>
DMReadLock[RowIndex:Integer]:Boolean; Set if the  DMSII ReadLock flag has been set for the row specified by the RowIndex. <none>
DMWriteLock[RowIndex:Integer]:Boolean; Set if the DMSII WriteLock flag has been set for the row specified by the RowIndex. <none>
IndexWasSet[RowIndex:Integer]:Boolean; Set if a FAMILYINDEX has been explicitly set for the row given by the RowIndex. <none>
RowFamilyIndex[RowIndex:Integer]:Integer; The FAMILYINDEX where the row with the specified RowIndex should reside.. <none>
DMLockBits[RowIndex:Integer]:Integer; The combined DMSII Read and Write lock bits. <none>
RowSizeInSectors[RowIndex:Integer]:Integer; The size in sectors of the row specified by the RowIndex. <none>
SegAddress[RowIndex:Integer]:Double; The segment address of the start of the row specified by the RowIndex. <none>
AttModifyTimeStamp:TDateTime; This timestamp combines the ATTMODIFYDATE and ATTMODIFYTIME file attributes. It is the last date and time a file attribute of this physical file was explicitly modified.  Spout(Header.AttModifyTimeStamp)
BackupTimeStamp:TDateTime; This timestamp combines the BACKUPDATE and BACKUPTIME file attributes. It is the last date and time this file was copied using either a COPY or ARCHIVE WFL statement, or was marked as backed up by the MCP procedure MARK_FILE_BACKED_UP. Spout(Header.BackupTimeStamp)
CopyDestTimeStamp:TDateTime; This timestamp combines the COPYDESTDATE and COPYDESTTIME file attributes. It is the date and time the file was copied to Disk. Spout(Header.CopyDestTimeStamp)
CopySourceTimeStamp:TDateTime; This timestamp combines the COPYSOURCEDATE and the COPYSOURCETIME file attributes. It is the last date and time the physical file was copied from Disk by a COPY or ADD WFL statement which did not specify the &BACKUP option.  Spout(Header.CopySourceTimeStamp)
ExecuteTimeStamp:TDateTime; This timestamp combines the EXECUTEDATE and EXECUTETIME file attributes. It is the last date and time this physical file was run as a program or a library. Spout(Header.ExecuteTimeStamp)
ReadTimeStamp:TDateTime; This timestamp combines the READDATE and READTIME file attributes. It is the last date and time that the file was closed after records were read from the file. Spout(Header.ReadTimeStamp)

TapeDirectory X Object

The TapeDirectoryX Object provides Methods and Properties for accessing an A-Series Tape Directory.

Methods
Method Description Example
FUNCTION
     LoadFromFarm(Const FileName : String;
                              Var Reason : String) : Boolean;
Usually the TapeDirectory Object is provided after a Volume has been mounted. However, a Disk Farm TapeDirectory is an NT File, and this method allows it to be directly loaded. If any error occurs the function returns FALSE and a Reason. Dim DiskFarm
Set DiskFarm=CreateObject(  _
           "CopyWriteInterface.TapeDirectoryX")
If Not DiskFarm.LoadFromFarm(  _
          "C:\ASeriesBackup\ARC[ARC001]\File000.dir",  _
          Reason) then
  Spout(Reason)
Else
  For T=1 To DiskFarm.FileCount-1 Step 1
    Spout(DiskFarm.FileName(T))
  Next
End If

These Properties are defined.

Properties
Property Description Example
FileCount:Integer; The number of files in the Tape Directory. File 0 is included in the count. The FileNo is in the range 1..FileCount-1. For T=1 To DiskFarm.FileCount-1 Step 1
  Spout(DiskFarm.FileName(T))
Next
FileTitle[FileNo:Integer]:StandardFormNameX; This property returns a reference to a StandardFormNameX object which contains the Title of the file entry selected by the FileNo index. Dim sfn
For T=1 To DiskFarm.FileCount-1 Step 1
  Set sfn=DiskFarm.FileTitle(T)
  sfn.ConvertEBCDICToASCII
  Spout(sfn.ToASeriesDisplay)
Next
FileName[FileNo:Integer]:String; Returns the Display Form Title in ASCII of the file entry selected by the FileNo. For T=1 To DiskFarm.FileCount-1 Step 1
  Spout(DiskFarm.FileName(T))
Next
Jam:Boolean; Set to TRUE if the jam bit is set in the TapeDirectory Control Word. If TDir.Jam then
  Spout("Jam Format")
End If
HasFamilyList:Boolean; Set to TRUE if the TapeDirectory has an associated Origin Family List. If TDir.HasFamilyList then
  Spout("Has a Family List")
End If
FamilyName[FileNo:Integer]:String; Returns the origin FamilyName in ASCII of the file entry selected by the FileNo, if the Tape Directory has an Origin Family List. For T=1 To DiskFarm.FileCount-1 Step 1
  Spout(DiskFarm.FileName(T))
Next

Standard Form Name X Object

The StandardFormNameX Object provides Methods and Properties for manipulating an MCP StandardFormName.

For historical reasons, some information is returned using a Method, where one might expect it to be returned using a Property.

Methods
Method Description Example
FUNCTION
  ToASeriesDisplay : String;
Returns a Display Form Title in the current character set. Therefore, this function is usually preceded by a call to ConvertEBCDICToASCII. Set sfn=DiskFarm.FileTitle(T)
sfn.ConvertEBCDICToASCII
Spout(sfn.ToASeriesDisplay)
FUNCTION
  ToHexDisplay : String;
Returns a Hex string of the standard form filename. Spout(sfn.ToHexDisplay)
PROCEDURE
  ConvertEBCDICToASCII;
This procedure converts the usercode, fileids and familyname from EBCDIC to ASCII. It becomes an ASCII standard form name. sfn.ConvertEBCDICToASCII
PROCEDURE
  ConvertASCIIToEBCDIC;
This procedure converts the usercode, fileids and familyname from ASCII to EBCDIC. It becomes a standard MCP EBCDIC standard form name. sfn.ConvertASCIIToEBCDIC
PROCEDURE
    ConvertToUpperCase;
This procedure converts all ids to upper case. sfn.ConvertToUpperCase
FUNCTION
       FileID(Index : Integer) : String;
This function returns the fileid specified by the index. The index must be in the range 1..FileIDs.
FUNCTION UserCode : String; If the filename has a (USERCODE) then it is returned otherwise it returns empty.
FUNCTION FileName : String; Returns a display form filename, without any usercode, familyname or hostname..
FUNCTION UnquotedFileName : String; Returns a display form filename as FileName, however, the fileids are not enclosed within quotes if they have non filesystem characters.
FUNCTION FamilyName : String; Returns the familyname, if an ON familyname part is present, otherwise empty.
FUNCTION HostName : String; Returns the hostname, if an AT hostname part is present, otherwise empty.
FUNCTION
    SetUserCode(Const UserCode : String;
    Var Reason : String) : Boolean;
This function sets the usercode to the specified value, which may be empty. If any error occurs, the function returns FALSE and a Reason. If Not sfn.SetUserCode("USER",Reason) then
  Spout(Reason)
End If
FUNCTION
    SetFamilyName(Const FamilyName : String;
       Var Reason : String) : Boolean;
This function sets the familyname to the specified value, which may be empty. If any error occurs, the function returns FALSE and a Reason. If Not sfn.SetFamilyName("FAMILY",Reason) then
  Spout(Reason)
End If
FUNCTION
    SetHostName(Const HostName : String;
    Var Reason : String) : Boolean;
This function sets the hostname to the specified value, which may be empty. If any error occurs, the function returns FALSE and a Reason. If Not sfn.SetHostName("HOST",Reason) then
  Spout(Reason)
End If
FUNCTION
 SetFileID(Index : Integer;
  Const FileID : String:
  Add : Boolean:
   Var Reason : String) : Boolean;
This function sets the FileID given by the Index to the specified value. The Index is in the range 1..FileIDs. If Add is TRUE, the FileID is inserted at the specified Index and the number of FileIDs is increased by 1, otherwise it replaces the FileID at that Index. If any error occurs the function returns FALSE and a Reason. If Not sfn.SetFileId(1,"PREFIX",TRUE,Reason) then
  Spout(Reason)
End If

FUNCTION
       TakeFileIDs(nFileIDs : Integer;
  Var Reason : String) : Boolean;
This function retains the first nFileIDs and discards the rest from the standard form name. If any error occurs, the function returns FALSE and a Reason.
FUNCTION
       DropFileIDs(nFileIDs : Integer;
   Var Reason : String) : Boolean;
This function drops the first nFileIDs and keeps the rest of the standard form name. If any error occurs, the function returns FALSE and a Reason.
FUNCTION
   AppendFileIDs(sfn : StandardFormNameX;
   Var Reason : String) : Boolean;
Appends the FileIDs in the standard form name passed as a parameter, to the current standard form name. If any error occurs the function returns FALSE and a Reason. The result of this example is A/B/C/D/E. Set sfn1=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn1.ParseTitle("A/B",FALSE,Reason) then
  Spout(Reason)
End If
Set sfn2=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn2.ParseTitle("C/D/E",FALSE,Reason) then
  Spout(Reason)
End If
If Not sfn1.AppendFileIDs(sfn2,Reason) then
  Spout(Reason)
End If
Spout(sfn1.ToASeriesDisplay)
FUNCTION
    Compare(sfn : StandardFormNameX) : Integer;
Compares the current standard form name to the standard form name passed as a parameter. It returns -1, 0 or 1 depending on whether the current name is less than, equal to, or greater than the parameter name. The result of this example is -1, since A/B < A/B/C. Set sfn1=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn1.ParseTitle("A/B",FALSE,Reason) then
Spout(Reason)
End If
Set sfn2=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn2.ParseTitle("A/B/C",FALSE,Reason) then
Spout(Reason)
End If
Spout(sfn1.Compare(sfn2))
FUNCTION
  ContainsPath(sfn : TStandardFormNameX)
       : Boolean;
If the current standard form name contains the path specified in the sfn parameter, the function returns TRUE. In this example, A/B contains A/B/C. Set sfn1=CreateObject(
         "CopyWriteInterface.StandardFormNameX")
If Not sfn1.ParseTitle("A/B",FALSE,Reason) then
Spout(Reason)
End If
Set sfn2=CreateObject(
    "CopyWriteInterface.StandardFormNameX")
If Not sfn2.ParseTitle("A/B/C",FALSE,Reason) then
Spout(Reason)
End If
If sfn1.ContainsPath(sfn2) then
    Spout(sfn1.ToASeriesDisplay & " contains " & 
                                                      sfn2.ToASeriesDisplay)
Else
   Spout(sfn1.ToASeriesDisplay & " does not contain " & 
                                                      sfn2.ToASeriesDisplay)
End If
FUNCTION
       MakeUsercodeAFileID(Var Reason : String) : Boolean;
This function changes the usercode into the first FileID of the title. If any error occurs, it returns FALSE and a Reason. The result of this example, is USER/A/B Set sfn=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn.ParseTitle("(USER)A/B",FALSE,Reason) then
  Spout(Reason)
End If
If Not sfn.MakeUserCodeAFileID(Reason) then
  Spout(Reason)
End If
Spout(sfn.ToASeriesDisplay)
PROCEDURE
   ClearAsOverField;
This procedure clears the AsOver field of the standard form name. This field is not normally exposed outside the MCP.
PROCEDURE
       ClearSingleQuoteNameField;
This procedure clears the SingleQuoteNameField, Bit [3:1] of the Qualification Byte.
FUNCTION
    GetFileNumber(Var FileNumber : Integer;
   Var Reason : String) : Boolean;
This function extracts the File Number from a standard form name which specifies a file number as #<integer> or '#<integer>'. If any error occurs, it returns FALSE and a Reason.
FUNCTION
       ConvertToUserCodeForm(Var Reason : String) : Boolean;
This function converts the standard form name to the UserCode Form of a title, in which a usercoded file begins with the keyword *USERCODE. If any error occurs, the function returns FALSE and a Reason. The result of this example is *USERCODE/USER/A/B. Set sfn=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn.ParseTitle("(USER)A/B",FALSE,Reason) then
   Spout(Reason)
End If
If Not sfn.ConvertToUsercodeForm(Reason) then
   Spout(Reason)
End If
Spout(sfn.ToASeriesDisplay)

FUNCTION
       ConvertFromUserCodeForm(Var Reason : String) : Boolean;
This function converts the standard form name from the UserCode Form of a title. If any error occurs, it returns FALSE and a Reason. The result of this example is (USER)A/B. Set sfn=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn.ParseTitle("*USERCODE/USER/A/B",FALSE,Reason) then
Spout(Reason)
End If
If Not sfn.ConvertFromUsercodeForm(Reason) then
  Spout(Reason)
End If
Spout(sfn.ToASeriesDisplay)
PROCEDURE Reset; Resets the standard form name to undefined.
FUNCTION
  Verify(Var Reason : String) : Boolean;
This function always returns FALSE.
PROCEDURE
  Clone(SFN : StandardFormNameX);
This procedure makes the current standard form name a clone of the standard form name passed as a parameter. Set sfn1=CreateObject("CopyWriteInterface.StandardFormNameX")
If Not sfn1.ParseTitle("A/B",FALSE,Reason) then
  Spout(Reason)
End If
Set sfn2=CreateObject("CopyWriteInterface.StandardFormNameX")
sfn2.Clone(sfn1)
Spout(sfn2.ToASeriesDisplay)

These Properties are defined.

Properties
Property Description Example
HasUserCode:Boolean; Set to TRUE if there is a (USERCODE). <none>
HasAsterisk:Boolean; Set if the filename starts with a *, indicating no usercode. <none>
HasUserCodeOrAsterisk:Boolean Set if the filename starts with either a (USERCODE) or a *. <none>
HasNoUsercodeOrAsterisk:Boolean; Set if the filename has neither a (USERCODE) or an asterisk. <none>
HasFamilyName:Boolean; Set if the filename has an ON <familyname> part. <none>
HasHostName:Boolean; Set if the filename has an AT <hostname> part. <none>
HasSingleQuoteName:Boolean; Set if the filename has a single quote name, which indicates a vendor specific filename. <none>
TotalIDs:Integer; The total number of identifiers, including any usercode, familyname and hostname. <none>
FileIDs:Integer; The number of fileids in the filename. This does not include any usercode, familyname or hostname. <none>
ItsADirectory:Boolean; Set to TRUE if the filename is in the form FILENAME/=. <none>
ItsAFileNumber:Boolean; Set to TRUE if the filename is a single fileid in the form #<integer> or '#<integer>'. <none>
ItsAFileList:Boolean; Set to TRUE if the filename has a single quote name and the first character is an '@'. THis syntax is used to specify an external list of names. It comes from the CTOS syntax for the same thing. <none>
SearchSystemFiles:Boolean; Set to TRUE if the standard form name is the special form which selects a search of only the system files. <none>
SearchUsercodeFiles:Boolean; Set to TRUE if the standard form name is the special form which selects a search of only the usercoded files. <none>
SpecialForm:Boolean; Set to TRUE if the standard form name is one of the special forms which are used to search only the usercoded or system files. <none>
FirstFileID:String; Returns the first fileid of the filename or else empty. <none>
LastFileID:String; Returns the last fileid of the filename. <none>
TotalLength:Integer; The number of bytes in the standard form name. <none>
TotalLengthInWords:Integer; The number of 48-Bit Words required to contain the standard form name. <none>

Registry X Object

The RegisteryX Object provides Methods and Properties for accessing the Windows Registry.

Methods
Method Description Example
FUNCTION
     OpenKey(Const Key : String;
                     CanCreate : Boolean) : Boolean;
Opens a Registry Key which exists within the current Root Key Directory. If CanCreate is TRUE, and the Key does not exist, it is created. Const NT_ProductOptions_Key = 
              "\SYSTEM\CurrentControlSet\Control\ProductOptions"
If Not Registry.OpenKey(NT_ProductOptions_Key,
                                       FALSE) then
  Spout("Invalid Key " & NT_ProductOptions_Key)
End If
PROCEDURE CloseKey; Closes the current key. <none>
FUNCTION
     ReadString(Const Name : String) : String;
Returns the String value associated with the data item given by the name. Const NT_CurrentVersion_Key = 
        "\SOFTWARE\Microsoft\Windows NT\CurrentVersion"
If Not Registry.OpenKey(NT_CurrentVersion_Key,
                                        FALSE) then
  Spout("Invalid Key " & NT_CurrentVersion_Key)
End If
Spout("System: " & Registry.ReadString("ProductName")&
             ", " & Registry.ReadString("CurrentType"))
FUNCTION
     ReadBool(Const Name : String) : Boolean;
Returns the Boolean value associated with the data item given by the name. <none>
FUNCTION
     ReadInteger(Const Name : String) : Integer;
Returns the Integer value associated with the data item given by the name. Const NT_CPM_Key = 
   "\HARDWARE\Description\System\CentralProcessor\0"
If Not Registry.OpenKey(NT_CPM_Key,FALSE) then
    Spout("Invalid Key " & NT_CPM_Key)
End If
Spout("CPM 0: "&
    Cint(Registry.ReadInteger("~MHz")) & " MHz")

These Properties are defined.

Properties
Property Description Example
RootKey:Integer; (Read/Write) Sets the Root Key. Const HKEY_LOCAL_MACHINE = 2
Set Registry=CreateObject("CopyWriteInterface.RegistryX")
Registry.RootKey=HKEY_LOCAL_MACHINE

Configuration X Object

The ConfigurationX Object provides Methods and Properties for accessing the CopyWrite Configuration on Windows NT.

Methods
Method Description Example
<none> <none> <none>

These Properties are defined.

Properties
Property Description Example
ScriptEngine : String; Returns the name of the Script Engine to be used by the ODT Service. The default is VBScript. Set Config=CreateObject("CopyWriteInterface.ConfigurationX")
Spout(Config.ScriptEngine)
ScriptName:String The name of the directory which contains the scripts to be used by the ODT Service. Spout(Config.ScriptName)
SepComp:Boolean; Reserved for future use. <none>
ScriptFileKind:String; The .extension used for scripts which will be executed by the ODT service. The default is .odt. Spout(Config.ScriptFileKind)
DLRoot:String; The full path of the Disk Farm directory. The default value is C:\ASeriesBackup. It can be modified using the Metalogic | CopyWrite | Disk Farm | Configuration utility. Spout(Config.DLRoot)
DLImages:String; The full path of the CD-ROM Images. The default value is C:\ASeriesImages. It can be modified using the Metalogic | CopyWrite | Image Files | Configuration utility. Spout(Config.DLImages)
Compression:Boolean; If this is TRUE, when a directory is created for a new volume in  the Disk farm, it is marked as compressed, and all files stored in the directory are compressed by the NT file system. It can be modified using the Disk Farm configuration utility. If Config.Compression then
  Spout("Compression is Set")
End If
SharedByAll:Boolean; If this is TRUE, the volumes in the Disk Farm are not separated by HOSTNAME.
If this is FALSE, the HOSTNAME of the originating host is used as the directory level before the volume directory. Another host can access the files, but must set the FAMILYOWNER attribute.
If Config.SharedByAll then
  Spout("SharedByAll is Set")
End If

License Key Object

The LicenseKeyX Object provides Methods and Properties for accessing the LicenseKey attribute of a Disk File Header or in a Tape Directory entry.

Methods
Method Description Example
<none> <none> <none>

These Properties are defined.

Properties
Property Description Example
KeyType :Integer; Specifies the type of LicenseKey.
0 - Null
1 - KeysFile
2 - LicenseKey
<none>
ItsNull:Boolean; Returns TRUE if the KeyType is Null. <none>
ItsAKeysFile:Boolean; Returns TRUE if the KeyType is KeysFile. This type of entry occurs in a Tape Directory to indicate a Keys File. <none>
ItsALicenseKey:Boolean; Returns TRUE if the KeyType is LicenseKey. This type of entry occurs in a Disk File Header and in a Tape Directory. <none>
KeyName:String; The name of the Key. <none>
KeyValue:String; The value of the Key. <none>
HexDisplay:String; The key entry as Hex characters. <none>

DiskLabel X Object

The DiskLabelX Object provides Methods and Properties for accessing the Disk Label of an A-Series Virtual Disk. The DiskLabelX Object may be provided through the DiskLabel property of an A-Series Disk, or the Load method can be used with an NT filename.

Methods
Method Description Example
     Load(Const FileName : String;
              Var Reason : String) : Boolean;
Usually the DiskLabelX Object is provided by the DiskLabel property of an ASeriesDiskX Object. However, a DiskLabelX can be directly loaded from an NT Filename using this method. If any error occurs the function returns FALSE and a Reason. <not tested>

These Properties are defined.

Properties
Property Description Example
FileName:String; Returns the Windows NT title of the file which contains the Disk Label. Set Selector=CreateObject( _
                      "CopyWriteInterface.SelectorX")
If Not Selector.SelectVolume(  _
                            "C:\Disk005.asd",Reason) then
  Spout(Reason)
End If
Spout("There are " & Selector.FileCount & _
          " Files on the Disk")
If Not Selector.ItsAnASeriesDisk then
  Spout("Not an A-Series Disk")
End If
Set ASeriesDisk=Selector.ASeriesDisk
Set Label=ASeriesDisk.DiskLabel
Spout(Label.FileName)
LabelID:String; A string which describes the Disk Label. Spout(Label.LabelID)
Vol1:String; The VOL1 Label identifying the Disk. Spout(Label.Vol1)
Vol2:String; The VOL2 Label. Spout(Label.Vol2)
SerialNo:String; The numeric SerialNo as a string of digits. Spout(Label.SerialNo)
PackName:String; The NAME of the Pack given when it was RC'ed. Spout(Label.PackName)
InterchangeCode:String; The Interchange code of the pack. Spout(Label.InterChangeCode)
NativeModePack:Boolean; Set to TRUE if the InterchangeCode indicates a NativeMode Pack. If Label.NativeModePack then
  Spout("NativeMode")
End If
Owner:String; The OWNER of the Pack given when it was RC'ed. Spout(Label.Owner)
CreationDate:String; The Julian CreationDate as a string of digits. For example, 03358 Spout(Label.CreationDate)
DirectoryAddress:String; The segment address of the Flat Directory. Spout(Label.DirectoryAddress)
BasePack:Boolean; Set to TRUE if the Pack has a Directory and therefore can be a Base Pack. If Label.BasePack then
  Spout("BasePack")
End If
MasterAvailableTableAddress:Integer; The sector address of the Master Available Table. Spout(Label.MasterAvailableTableAddress)
DirectoryVersion : Integer; The version of the Directory. <none>
BasePackSerialNo:String; The SerialNo of the base Pack as a number. Spout(Label.BasePackSerialNo)
BasePackCreationTime:Double; The Time the Base Pack was created.  Spout(Label.BasePackCreationTime)
BasePackCreationDate:Integer; The Date the Base Pack was created. Spout(Label.BasePackCreationDate)
BasePackCreationTimeStamp:TDateTime; The combined Creation Date and Time of the Base Pack as a Date type. Spout(Label.BasePackCreationTimeStamp)
BasePackCreationSite:Integer; The SiteID where the Base Pack was created. Spout(Label.BasePackCreationSite)
TR_Machine:Boolean; Set if the TR_MCHT flag is set in the SiteId field of the Disk label. If Label.TR_Machine then
  Spout("TR Machine")
End If
FamilyIndex:Integer; The FamilyIndex of this Pack. Spout(Label.FamilyIndex)
nMembers:Integer; The number of Pack Member Volumes in the Family. Spout(Label.nMembers)
ValidMember[Index:Integer]:Boolean; Returns TRUE if the information for the specified FamilyIndex is valid. For T=1 To Label.nMembers Step 1
  If Label.ValidMember(T) then
    Spout("Member # " & T)
  End If
Next
MemberIsVXX1[Index:Integer]:Boolean; Set to TRUE if the VXX1 flag is set for the given FamilyIndex. If Label.MemberIsVXX1(T) then
  Spout("Is VXX1")
End If
MemberHasDirectory[Index:Integer]:Boolean; Set to TRUE if the specified FamilyIndex has a Flat Directory. If Label.MemberHasDirectory(T) then
  Spout("Has Directory")
End If
MemberIsVSS2[Index:Integer]:Boolean; Set to TRUE if the VSS2 flag is set for the given FamilyIndex. If Label.MemberIsVSS2(T) then
  Spout("Is VSS2")
End If
MemberTableType[Index:Integer]:Integer; Returns the TableType entry for the given FamilyIndex.
DiskTableV = 1;
CapacityTableV = 2;
Spout(Label.MemberTableType(T))
MemberTableIndex[Index:Integer]:Boolean; Returns the TableIndex for the given FamilyIndex. If the TableType is a CapacityTableV, then this is the index of the entry in the Capacity Table, which give the values for the  MemberCapacityInSectors property. Spout(Label.MemberTableIndex(T))
MemberSerialNo[Index:Integer]:Boolean; Returns the numeric SerialNo for the given FamilyIndex. Spout(Label.MemberSerialNo(T))
MemberCapacityInSectors[Index:Integer]:Double; If the TableType indicates a CapacityTable, this returns the Disk Capacity in Sectors of the Pack with the given FamilyIndex, otherwise 0. Spout(Label.MemberCapacityInSectors(T))

MemberCapacityInBytes[Index:Integer]:Double; If the TableType indicates a CapacityTable, this returns the Disk Capacity in Bytes of the Pack with the given FamilyIndex, otherwise 0. Spout(Label.MemberCapacityInBytes(T))

HasFlatHeader:Boolean; Returns TRUE if the Pack has a Flat Directory. If Label.HasFlatDirectory then
  Spout("Has FlatDirectory")
End If 
FlatHeader:DiskFileHeaderX; Returns a reference to a DiskFileHeaderX Object describing the Flat Directory Disk File Header. If Label.HasFlatDirectory then
  Set Hdr=Label.FlatHeader
  Spout(Hdr.FileName)
End If 
UnSafe:Boolean; Returns TRUE if the Disk Label is currently opened for update by some process. Since this is most likely the A-Series Emulator, extracting files may be unsafe. If Not Label.UnSafe then
  Spout("Safe to Extract Files")
End If

MCP Info X Object

The MCPInfoX Object provides Methods and Properties for accessing the MCPInfo in a CM'ed A-Series Disk. The MCPInfoX Object is provided through the MCPInfo property of an ASeriesDiskX Object.

Methods
Method Description Example
<none> <none> <none>

These Properties are defined.

Properties
Property Description Example
IsValid:Boolean; Returns TRUE if the MCPInfo is valid, otherwise FALSE, and the values of other properties are undefined. Set ASeriesDisk=Selector.ASeriesDisk
If ASeriesDisk.HasMCPInfo then
  Set MCPInfo=ASeriesDisk.MCPInfo
  If MCPInfo.IsValid then
    Spout("MCPInfo is Valid")
    Spout(MCPInfo.MCPFileName)
  End If
End If
SizeInBytes:Integer; The size in bytes of the MCPInfo data structure. Spout(MCPInfo.SizeInBytes)
TodaysDate:Integer; TodaysDate. For example, 103363 Spout(MCPInfo.TodaysDate)
Cycle:Integer; The cycle of the MCPInfo Structure. Version for 4.8 is Cycle 5. Spout(MCPInfo.Cycle)
LMBlockSize:Integer; Library/Maintenance BlockSize. Spout(MCPInfo.LMBlockSize)
SystemSerialNo:Integer; System Serial Number. Spout(MCPInfo.SystemSerialNo)
LogFileSeqNo:Integer; The next LogFile Sequence Number to be used when the log is transferred, either by a TL or when it is full. Spout(MCPInfo.LogFileSeqNo)
DumpDiskSize:Integer; The size of the DumpDisk file in Sectors. Spout(MCPInfo.DumpDiskSize)
LastMixNo:Integer; The last mixnumber allocated. Spout(MCPInfo.LastMixNo)
OpenOption:Boolean; Open Option If MCPInfo.OpenOption then
  Spout("*Open")
End If
TerminateOption:Boolean; Terminate Option <none>
NoCheck:Boolean; NoCheck Option <none>
LPBDOnlyOption:Boolean; LPBDOnly Option <none>
AutoRMOption:Boolean; AutoRM  Option <none>
DiagnosticsOption:Boolean; Diagnsotics Option <none>
Option7:Boolean; MCP Option(7) <none>
AutoRecoveryOption:Boolean; AutoRecovery Option <none>
DupSupervisorOption:Boolean; DupSupervisor Option <none>
DupIntrinsicsOption:Boolean; DupIntrinsics Option <none>
TransWarningsOption:Boolean; TransWarnings Option <none>
AutoDCOption:Boolean; AutoDC Option <none>
NoDumpOption:Boolean; NoDump Option <none>
AutoRunningOption:Boolean; AutoRunning Option <none>
CrunchOption:Boolean; Crunch Option <none>
BackupByJobNrOption:Boolean; BackupByJobNr Option. <none>
PDToDiskOption:Boolean; PDToDisk Option. <none>
NoFetchOption:Boolean; NoFetch Option. <none>
ResourceCheckOption:Boolean; ResourceCheck Option <none>
DRTRRestrictOption:Boolean; DRTRRestrict Option <none>
DirDebugOption:Boolean; DirDebug Option <none>
CatalogingOption:Boolean; Cataloging Option If MCPInfo.CatalogingOption then
  Spout("*Cataloging")
End If
OKTimeAndDateOption:Boolean; OKTimeAndDate Option <none>
MoreBackupFilesOption:Boolean; MoreBackupFiles Option <none>
SerialNumberOption:Boolean; SerialNumber Option <none>
ArchivingOption:Boolean; Archiving Option <none>
CDRUnitNumberOption:Boolean; CRDUnitNumber Option <none>
Option30:Boolean; MCP Option(30) <none>
MoreTasksOption:Boolean; MoreTasks Option <none>
KeyedIOIIOption:Boolean; KeyedIOII Option <none>
MirroringOption:Boolean; Mirroring Option <none>
DiagnosticDumpOption:Boolean; DiagnosticDump Option <none>
AuditOption:Boolean; Audit Option <none>
EOTStatisticsOption:Boolean; EOTStatistics Option <none>
StrictSchedOption:Boolean; StrictSched Option <none>
NetRecoveryOption:Boolean; NetRecovery Option <none>
GraphDebugOption:Boolean; GraphDebug Option <none>
ISCDebugOption:Boolean; ISCDebug Option <none>
IODiagnosticsOption:Boolean; IODiagnostics Option <none>
PortDebugOption:Boolean; PortDebug Option <none>
UseCatDefaultOption:Boolean; UseCatDefault Option <none>
CatTestOption:Boolean; CatTest Option <none>
MCPTestOption:Boolean; MCPTest Option If MCPInfo.MCPTestOption then
  Spout("*MCPTest")
End If
SystemDirRowSize:Integer; SystemDirectory RowSize Spout(MCPInfo.SystemDirRowSize)
CompilerTarget:Integer; CompilerTarget Spout(MCPInfo.CompilerTarget)
ASDFactor:Integer; ASD Factor Spout(MCPInfo.ASDFactor)
PrimaryTarget:Integer; Primary Target Spout(MCPInfo.PrimaryTarget)
MCPLevel:Integer; MCP Level (4) Spout(MCPInfo.MCPLevel)
MCPMark:Integer; MCP Mark (8) Spout(MCPInfo.MCPMark)
MCPCycle:Integer; MCP Cycle (189) Spout(MCPInfo.MCPCycle)
CatalogLevel:Integer; Catalog Level. Spout(MCPInfo.CatalogLevel)
ASDOlaySize:Integer; ASDOlaySize. Spout(MCPInfo.ASDOlaySize)
MaxMixNumber:Integer; Max MixNumber. Spout(MCPInfo.MaxMixNumber)
MaxStackNumber:Integer; Max Stack Number. Spout(MCPInfo.MaxStackNumber)
stdMCPFileName:StandardFormX; A reference to a standard form object which contains the MCP title. Set Std=MCPInfo.stdMCPFileName
Std.ConvertEBCDICToASCII
Spout(Std.ToASeriesDisplay)
MCPFileName:String; The MCP title as an ASCII MCP display form name. Spout(MCPInfo.MCPFileName)
DCPPrefix:String; The DataComInfo prefix as an ASCII display form name. Spout(MCPInfo.DCPPrefix)
Convention:String; The Convention set by the ODT SYSOPS CONVENTION=<convention name>. See MultiLingual manual. Spout(MCPInfo.Convention)
MaxCompleted:Integer; Maximum number of Completed entries retained by Controller. Spout(MCPInfo.MaxCompleted)
MaxMessages:Integer; Maximum number of Messages retianed by Controller. Spout(MCPInfo.MaxMessages)
stdIntrinsics:StandardFormNameX; A reference to a standard form object which contains the Intrinsics Title. Set Std=MCPInfo.stdIntrinsics
Std.ConvertEBCDICToASCII
Spout(Std.ToASeriesDisplay)
Intrinsics:String; The Intrinsics Title as an ASCII display form name. Spout(MCPInfo.Intrinsics)
stdSupervisor:StandardFormNameX; A reference to a standard form object which contains the Supervisor title.  Set Std=MCPInfo.stdSupervisor
Std.ConvertEBCDICToASCII
Spout(Std.ToASeriesDisplay)
Supervisor:String; The Supervisor title as an ASCII display form name. This field has been superseded by the AI table. Spout(MCPInfo.Supervisor)
MemSize:Integer; Memory Size. Spout(MCPInfo.MemSize)
FastCacheSize:Integer; Fast Cache Size. Spout(MCPInfo.FastCacheSize)
HeaderCacheSize:Integer; Header Cache Size. Spout(MCPInfo.HeaderCacheSize)
D1StackCacheSize:Integer; D1 Stack Cache Size. Spout(MCPInfo.D1StackCacheSize)
D1StackCacheTimeLimit:Integer; D1 Stack Cache Time Limit. Spout("TimeLimit="& _
              MCPInfo.D1StackCacheTimeLimit)
UserDataCacheSize:Integer; UserData Cache Size. Spout(MCPInfo.UserDataCacheSize)
Language:String; The system language. Spout(MCPInfo.Language)
HostUserCode:String; The HostUserCode set by the HU command. Spout(MCPInfo.HostUsercode)
TZName:String; The TimeZone name. Spout(MCPInfo.TZName)
stdConfigurationFile:StandardFormNameX; A reference to a standard form object which contains the Configuration File  title. Set Std=MCPInfo.stdConfigurationFile
Std.ConvertEBCDICToASCII
Spout(Std.ToASeriesDisplay)
ConfigurationFile:String; The Configuration File title as an ASCII display form name. Set by the ODT CF Command. Spout(MCPInfo.ConfigurationFile)
stdDumpHistoryFile:StandardFormNameX; A reference to a standard form object which contains the DumpHistory File title. Set Std=MCPInfo.stdDumpHistoryFile
Std.ConvertEBCDICToASCII
Spout(Std.ToASeriesDisplay)
DumpHistoryFile:String; The DumpHistory File title as an ASCII display form name. Set by the ODT MDT command. Spout(MCPInfo.DumpHistoryFile)
Country:String; The Country set by the ODT SYSOPS COUNTRY=<country name> command. 1..17 alphanumeric characters unchecked. Spout(MCPInfo.Country)
SLTable:SLTableX; A reference to an SLTableX object which contains the MCP System Library (SL) Function Table. Set SLTable=MCPInfo.SLTable
Spout(SLTable.SLTableSizeInWords)

SLTableX Object

The SLTableX Object provides Methods and Procedures for accessing the MCP Function Table of System Libraries, which is maintained using the ODT SL Command.

This object is provided as a property of the MCPInfoX Object. It implements a collection of SLEntryX Objects. 

Methods
Method Description Example
FUNCTION 
    IndexOf(Const FunctionName : String) : Integer
Searches for the given FunctionName and returns the index of the SL entry in the SL Table, otherwise -1 if not found. Set SLTable=MCPInfo.SLTable
T=SLTable.IndexOf("COPYWRITE")
If (T>=0) then
   Spout(SLTable.SLEntry(T).SL)
Else
   Spout("Not Found")
End If

These Properties are defined.

Properties
Property Description Example
SLTableSizeInWords:Integer; The size of the SL table in words after all segments have been reassembled. Set Selector=CreateObject("CopyWriteInterface.SelectorX")
If Not Selector.SelectVolume("C:\Disk005.asd",Reason) then
  Spout(Reason)
End If
Set ASeriesDisk=Selector.ASeriesDisk
If ASeriesDisk.HasMCPInfo then
  Spout(ASeriesDisk.PackName & " has MCP Info")
  Set MCPInfo=ASeriesDisk.MCPInfo
  If MCPInfo.IsValid then
     Set SLTable=MCPInfo.SLTable
     Spout(SLTable.SLTableSizeInWords)
     For Each SL IN SLTable 
        Spout(SL.SL)
     Next
  End If
End If
Count:Integer; The number of SL entries in the SL Table. Set SLTable=MCPInfo.SLTable
Spout(SLTable.Count)
SLEntry[Index : Integer] : SLEntryX; Returns the SLEntryX Object with the given index, which must be in the range 0..Count-1. Set SLTable=MCPInfo.SLTable
For T=0 To SLTable.Count-1 Step 1 
  Set SL=SLTable.SLEntry(T)
  Spout(SL.SL)
Next

SLEntryX Object

The SLEntryX Object provides  Properties for accessing an entry in the MCP System Library (SL) Table.  An SLEntryX Object is obtained from the SLTableX Collection.

Methods
Method Description Example
<none> <none> <none>

These Properties are defined.

Properties
Property Description Example
SizeInWords :Integer; The size of the entry in Words. Set SLTable=MCPInfo.SLTable
For Each SL IN SLTable 
   Spout(SL.SizeInWords)
Next
FunctionName:String; The SL <functionname>  Spout(SL.FunctionName)
FileName:String; The filename of the SL <functionname> = <filename> entry,  as an ASCII Display Form Name. Spout(SL.FileName)
Title:StandardFormNameX; A reference to a standard form object which contains the SL entry filename. Set Std=SL.Title
Std.ConvertEBCDICToASCII
Spout(Std.ToASeriesDisplay)
DontKangaroo:Boolean; The DontKangaroo flag is an internal attribute for certain MCP Libraries. <none>
SystemFile:Boolean; The SYSTEMFILE attribute of the SL entry. <none>
DontSoftInt:Boolean; The DontSoftInt flag is an internal attribute for certain MCP Libraries. <none>
Pending:Boolean; The Pending flag is an internal attribute used when SL entries are being changed. <none>
MCPInit:Boolean; The MCPINIT attribute of the SL entry. <none>
Trusted:Boolean; The TRUSTED attribute of the SL entry. If SL.Trusted then
    Spout("Trusted")
End If
OneOnly:Boolean; The ONEONLY attribute of the SL Entry. <none>
MCPLib:Boolean; The MCPLib flag is an internal attribute for certain MCP Libraries. <none>
LinkClass:Boolean; The LINKCLASS attribute of the SL entry. Spout(SL.LinkClass)
SL:String; Recreates the command string which defined this SL entry.For Example, SL GENERALSUPPORT = *SYSTEM/GENERALSUPPORT ON DISK:TRUSTED,LINKCLASS=3
Set SL=SLTable.SLEntry(I)
With SL
   Spout(.SL)
End With
Attributes:String; A string describing the attributes which are set in this SL entry, including both MCP internal and regular attributes. For Example, DontSoftInt, Trusted, LinkClass=3 I=SLTable.IndexOf("GENERALSUPPORT")
Set SL=SLTable.SLEntry(I)
Spout(SL.Attributes)

PrintInfoX Object

The PrintInfoX Object provides Methods and Procedures for accessing the Print System Info Array provided to Virtual Servers.

This object is provided to a Script which is invoked by the CopyWrite AutoPrint feature, and is called INFO. 

The Load method is used by AutoPrint to pass the Info Array to the Object, but it  may also be used by any program which can obtain a Print System Info array. 

Methods
Method Description Example
FUNCTION 
    Load(Var Info : OleVariant;
             Var Reason : String) : Boolean;
This method is used by AutoPrint to pass the Print System Info array to the PrintInfoX Object. It may be used by any program which can obtain an Info Array. Info is a Variant Array of varByte.The StringToVariantByteArray function in StringSupport may be used to provide the Info array.

These Properties are defined.

Properties
Property Description Example
Tr_UpCase:Boolean; Transform to Upper Case. <none>
Tr_Align:Boolean; Currently printing alignment pattern. <none>
Tr_Suppress:Boolean; Suppress Carriage Control. <none>
Tr_Double:Boolean; Print Double Spaced. <none>
Tr_TrimBlank:Boolean; Blank trimming was done for the file. <none>
Tr_DataType:Boolean; Type of Info provided.
  Tr_PFileV = 0  Printing a File
  Tr_PHdrV = 1  Printing a Header
  Tr_PBannerV = 2  Printing a Banner
  Tr_PTrailerV = 3 Printing a Trailer
  Tr_PSummaryV = 4 Printing Job Summary
  Tr_PControlV = 5 Aligning Device
  Tr_PFontV = 6  Downloading a Font
<none>
Tr_FirstCall:Boolean; First Call for this entity. <none>
Tr_LastCall:Boolean; LatCall for this entity. <none>
Tr_SaveAfterPrint:Boolean; Save the file after printing. <none>
Tr_Alignment:Boolean; Alignment attribute. <none>
Tr_Banner:Boolean; Banner attribute. <none>
Tr_Checkpoint:Boolean; Checkpoint attribute. <none>
Tr_FileXForm:Boolean; File Transform. <none>
Tr_Header:Integer; Header Print Modifier. <none>
Tr_Trailer:Integer; Trailer Print Modifier. <none>
Tr_Priority:Integer; PrintPriority Modifier. <none>
Tr_DevKind:Integer; Device Kind
  Tr_LPV = 1  Line Printer
  Tr_IPV = 2 Image Printer
  Tr_DCV = 3 Datacom Printer
<none>
Tr_FileKind:Integer; FileKind of input file. <none>
Tr_LineSize:Integer; Size of Line. <none>
Tr_PageSize:Integer; Size of Page. <none>
Tr_BlockSize:Integer; Size of Block. <none>
Tr_UserCode:String; Usercod of Request. <none>
Tr_Name:String; Name. <none>
Tr_AccessCode:String; AccessCode. <none>
Tr_ChargeCode:String; ChargeCode attribute <none>
Tr_StationName:String; StationName attribute. <none>
Tr_Note:String; Note attribute. Spout("Note is " & Info.Tr_Note)
Tr_FormID:String; FormID attribute. <none>
Tr_RequestNote:String; RequestNote attribute. <none>
Tr_Language:String; Language attribute. <none>
Tr_RequestNum:Integer; Print System request number. <none>
Tr_UserName:String; User Name. <none>
Tr_UserLib:Integer; Name of the User Library. <none>
Tr_UserString:Integer; The String for a User Library. <none>
Tr_UserLibAccess:Integer; The LibAccess attribute for the User Library. <none>
Tr_PhysUnit:Double; Physical Unit Number. <none>
Tr_LastCom:Integer; The Last Command Code. <none>
Tr_RecSize:Integer; Record Size in Bytes. <none>
Tr_AlignFile:String; AlignFile Name. <none>
Tr_TrainID:Integer; TrainID attribute. <none>
Tr_InfoLevel:Integer; Version level of Info array. <none>
Tr_CallType:Integer; Type of Call.
  Ct_BeginRequestV = 1
  Ct_EndRequestV = 2
  Ct_BeginV = 3
  Ct_EndV = 4
  Ct_MiddleV = 5
<none>
Tr_PrintCopies:Double; Number of copies to be printed. <none>
Tr_PrinterKind:Integer; Kind of Printer. <none>
Tr_Heading:String; Heading. <none>
Tr_Length:Integer; Length in Words of the Info Array. <none>
<none>