If OPTIONS=NOSUMMARY is Set and a Copy to NULL with a SCRATCHPOOL of NODATATRANSFER is specified, then the File Copied messages are suppressed.
On MCP 6.3 the DENSITY Mnemonics (such as BPI800,BPI1250..) have been deimplemented.
When a File with a Segmented Header, in which the last Header Segment was less than a Sector, was copied from CDImage to CDImage, an Assert Dump at 63277000 would occur, and the Copy would fail. The File could be copied from the CDImage to Disk sucessfully.
Use LTITLE in FetchImageDirectory to provide access to CD Images with Long Filenames.
When MULTIVOLUME was set, the Volume Library was not updated and a TapeLabel Notice was not sent to SUPERVISOR.
CopyWrite would set the TASKVALUE to 1 when either some error occurred in the copy to CD Image, or when some of the files were not copied. To allow WFL Jobs to distinguish between these cases CopyWrite will set the TASKVALUE to 3 when an error occurs in the process of copying files to a CD Image, and to 1 if some of the files were not copied.
If FETCHVIRTUALHEADERS received an IOERRORTYPE result of NODISKHEADER, it would return an error, and not return any more headers.
A Flex FILES IN CDIMAGE which indirectly uses that procedure would only return the files up to that Missing Header.
FETCHVIRTUALHEADERS will now ignore any NODISKHEADER results and return whatever headers that there are.
A Missing Header can occur when a file has been recorded in the Tape/CD Directory, but has been removed before it can be copied.
When an exception occurs in a COPY&CATALOG or COPY&BACKUP due to some unexpected condition in the Catalog, the File Entries in the Catalog Block may be displayed, before the error message.
Example: Catalog Block: (USER)FILENAME ON FAMILYNAME
[0]1:0*28/Nov/2019@18:53:02.330[48"C0B46985C02D"]
Key: [<file entry>]<cycle><version><*=resident><timestamp>
The <file entry> is the index of the entry in the Catalog Block, not the GENERATION, as they are unsorted.
A COPY&CATALOG of a File which was not Resident and which had a Long File Name and for which there was no matching Catalog Entry, could fail with a message "Not Entered in Catalog (Resident Entry not Resident)".
WFL prevents the use of the LIBMAINTDIR attribute when the destination volume has KIND = CD. CopyWrite can create LIBMAINTDIR directories for CD Images, but was prevented from doing so when that syntax restriction was introduced. To bypass this restriction, LOCATECAPABLE=ON may be specified on the destination volume, and this wil result in a LIBMAINTDIR being produced. A SERIALNO must be specified on the destination volume when a LIBMAINTDIR is requested. Example: Copy F/= TO V(CD,HOSTNAME=LOCAL,
LOCATECAPABLE=ON,SERIALNO="TST001");Target=1 will create a CD Image called V and a LIBMAINTDIR called LIBMAINTDIR/V/<yyyymmdd>/TST001
A LIBMAINTDIR can be created for an existing CD Image by copying to a NULL CD. Example: Copy F/= FROM V(CD,HOSTNAME=LOCAL)
TO NULL(CD,LOCATECAPABLE=ON,SERIALNO="TST002");Target=1 will copy and discard the files from V and create a LIBMAINTDIR called LIBMAINTDIR/V/<yyyymmdd>/TST002
Embedded matching [] are allowed in Instructions. A WFL instruction which included a Task reference such as [T], failed because the ] was interpreted as the end of the instruction.
To allow any character in an Instruction, an encoding in the form %#xx encodes a character in hex (xx) in instructions. For example, the instruction %#4AT%#5A is translated to [T].
This instruction is supported in CopyWrite Self Extracting Archives.
Set the ArgIsAHostF flag to indicate that the field at Word 37 of an Archive Backup Record should be interpreted as a HOSTNAME instead of an OWNER. See PLE-19198545.
Allow a case sensitive title in PARSECONTROLCARD of T_Make. Previously, a {Copy as "*image.png"} would create a file called *"IMAGE.PNG" in the Archive.
When creating a CD or DVD to be burnt, the DENSITY is used by the MCP Burn function to request either a CD (CD700) or DVD (DVD4700). CopyWrite now passes the DENSITY specified on the destination volume to the Burn function.
The U *METALOGIC/COPYWRITE BURN <filename> : <options> now accepts the options CD and DVD to select the respective media. Eg. U *METALOGIC/COPYWRITE BURN F : CDCOPIES=1,DVD
Set the TASKVALUE to 1 if No Files were copied on a remote connection.
If the COPYWRITEPROTOCOL MAGUS configuration variable was not set, the copy to a remote host failed.
Modify the Self Extracting Archive format due to changes in the codefile format on MCP 57.
FLEX can be used to generate a list of files to be copied by using a <flex specification> in a file list.
<flex specification> ::= flex:<pd request> |
flex:@<filetitle>
For example:
COPY "flex:(NFT)=DO= ON NUCLEUS WHERE SYMBOLFILE" TO FRED(CD,HOSTNAME=LOCAL);TARGET=1;
The <flex specification> only generates file names. The FAMILYNAME of the file title does not change the <source volume>.
Any number of <flex spcifications> may appear in a COPY statement.
The flex:@<filename> may be used to store the <pd request> in an external <filetitle>. This may be used to avoid the limitations imposed by the syntax of a filename in a copy statement.
For Example:
FILE LoadSources: (*)= IN "E:\MCP56HMP15\Build\CDs\MCP56HMP15Release.mcp" ON DISK AT PC
WHERE SYMBOLFILE
WFL: T(FILE MCP(LFILENAME="E:\MCP56HMP15\Build\CDs\MCP56HMP15Release.mcp")); COPY&COMPARE
"flex:@LoadSources" FROM MCP(CD,HOSTNAME=PC,LOCKEDFILE)[T];TARGET=1;
In this example, Flex scans a Library/Maintenance CD Volume Image located on a PC, and selects all SYMBOLFILEs. This creates a list of filenames, which are then copied from the same <source volume>.
A <pd request> can be tested in FLEX like this,
U FLEX FILES <pd request>
If COMPRESSIONREQUESTED is set when creating a Self Extracting Archive, the Archive is compressed and that compressed archive file is copied into another Self Extracting Archive, with the default instructions INFLATE %4\RUN %4. This is used by the {$Compress} directive in Make when creating a COLDSTART Archive. The COLDSTART Archive is marked as PU, since it runs without a USERCODE and otherwise it would not be allowed to extract the files. The inflated archive however, is not marked as PU. The syntax of the $Compress directive has been extended,
{ $Compress } { $Compress [ <instructions> ] }
For the COLDSTART Archive, the instructions are set as,
{ $Compress [ INFLATE %4\MP %4 +PU\RUN %4 ] }
If FILE INFLATE(NOTE="<instructions>") is label equated to a COPY which has COMPRESSIONREQUESTED and LOCKEDFILE, the <instructions> are applied to the compressed archive. This is how the $Compress directive transfers the <instructions>.
Only transfer the PRODUCT,RELEASEID,NOTE and FORMID of a Self-Contained Application and not a Self-Extracting Archive, the Code Base of which is common to all Archives.
The PRODUCT,RELEASEID,NOTE and FORMID of a Self-Extracting Archive or a Self-Contained Application are set from the base codefile.
The CYCLE and VERSION of a Self-Extracting Archive or a Self-Contained Application are set from the base codefile.
The Destination VolumeId of a COPY may be used as a FileID which is Label-Equated to the COPY statement to specify the actual File Title of the Volume. When COMPRESSIONREQUESTED was set, or SCRATCHPOOL=LMCD was specified, the Label-Equated TITLE was not being used for the embedded Volume.
If COMPRESSIONREQUESTED is set on the Destination Volume when creating a Self Extracting Archive, the Self Extracting Archive is compressed into a File which has an INFLATE %4\RUN %4 Instruction applied, and the compressed File is then copied into another Self Extracting Archive with the same name.
Example:
COPY *COPYWRITE/LIBRARY/NEWTAPE TO FRED(CD,HOSTNAME=LOCAL,LOCKEDFILE, COMPRESSIONREQUESTED)
RUN $FRED will extract the compressed Archive, Inflate it and then RUN it to extract the files orginally copied.
The FAMILYOWNER may be used to specify the USERCODE which the Compressed Archive will have when it is inflated.
The SCRATCHPOOL may be specified to WRAP or copy to LMCD the Self Extracting Archive which contains the compressed Archive.
The ZIP and LMZIP Transform ignored the Label Equation of the Volume TITLE.
If SCRATCHPOOL = METARELEASE is set when copying files to a Kind = CD volume, the copy behaves the same as SCRATCHPOOL = ZIP, except that no default file suffixes (such as .con, .mcp or .txt) are appended. The actual filename can be specified using the AS syntax.
Previously the STATION for the Utility Terminal was unconditionally set to the ORGUNIT. Now it is only set if STATION has not been assigned (value 0).
Preliminary changes to allow reading and writing of AES encrypted Library/Maintenance CD Volumes.
FetchForeignHeaders will no longer pass a header marked as Missing (LMBMISSF) to the caller.
Previously, if a Files (*)= on a Disk Farm encountered a Capsule marked as Missing, or the Capsule itself was missing, the directory was abandoned. Now, the missing Capsule is ignored, and the directory returns the list of files for which Capsules exist.
FLEX can be used to scan either a Library/Maintenance CD Image or a Wrapped Container resident on a Windows Disk, by specifying the Path to the File. For example, FILES (*)= IN "C:\containers\test.con" ON DISK AT H
It can also be used to scan a Disk Farm. For example, FILES (*)= ON VOLID AT H.
However, there was no way to scan a Disk Farm which was associated with a particular <source host>, or which had a SERIALNO. This capability has now been implemented.
One way is to specify the Path to the Disk Farm.
FILES (*)= IN "C:\ASeriesBackups\HOSTNAME\VOL[SERIAL]" ON DISK AT H
However, this means that the full Path to the Disk Farm on the Windows File Server is known.
To avoid this, a pseudo drive called DiskFarm: may be used, and this corresponds to the DLROOT configured for the Disk Farm, which is by default C:\ASeriesBackup.
FILES (*)= IN "DiskFarm:HOSTNAME\VOL[SERIAL]" On DISK AT H
If a COPY&BACKUP command is requested without a SERIALNO, and the COPYWRITE_COPYCATSN configuration variable is defined, then CopyWrite will generate the next SERIALNO in the sequence. This capability was already available with a COPY&CATALOG.
Copying a Library/Maintenance DVD Volume failed because the output volume file attributes were not FLEXIBLE.
Copy *VOLUME crunches the output volume.
The status of a a Copy *VOLUME can be requested by ?HI.
REINSTALL and STATUS utility commands may be executed by non privileged users.
CopyWrite can extract files from a WinZip Archive encrypted using AES128 or AES256 Keys.
The SECURITYGUARD attribute is used to specify the password. For example,
COPY *= FROM WZAES128(CD,HOSTNAME=LOCAL,LOCKEDFILE, SECURITYGUARD="password");TARGET=1
If the Password is longer than 17 bytes, then multiple 17 character FileIds may be used, for example SECURITYGUARD="pass"/"word" is the same as in the example above.
A Container with a Long FileName and FILEKIND of DATA was not recognized as CONTAINERDATA, so it was given to IMAGEIOH, which rejected the Copy.
CopyWrite can be used to download files from web sites using an http URL.
COPY 'http://192.61.3.5/aseries/CONTAINER/054.1A/ALGOL.EXE' AS ALGOLEXE FROM DISK(HOSTNAME=URL) TO NUCLEUS(PACK,SERIALNO="MD5")
- If an AS <filename> is not used, then the resource is copied with the last filename in the path of the URL, in this example, the file would have been *"ALGOL.EXE". - The HOSTNAME=URL is required to indicate that the HOSTNAME is specified as part of the URL,rather than the HOSTNAME attribute. - The optional SERIALNO on the <destination volume> indicates the hash algorithm to be used to check the file contents. It may be specified as MD5 or SHA1. The computed hash value is stored in the RELEASEID attribute of the copied file. - The MimeType returned by the Http Server is stored in the FORMID attribute of the copied file. - A USERCODE="<usercode>/<password>" may be specified on a <source volume> where a web site requires basic authentication. - There may be multiple files in each <source part> and multiple sources. - A ?<mixno>HI on the FILE/TRANSFER/SERVICES task will display the current status of the transfer. - If a directory on a web server contains multiple files, then a simple filename can be specified in the source file list, and the <source volume> label equated with an LFILENAME which gives the URL prefix. - CopyWrite will copy whatever resource the URL refers to, whether it is a file, a web page or anything else.
In this example CopyWrite is used to download and extract the files in a Unisys IC.
COPY 'http://192.61.3.5/aseries/CONTAINER/054.1A/ALGOL.EXE' AS ALGOLEXE FROM DISK(HOSTNAME=URL); COPY *"_winzip_" AS ALGOLZIP FROM ALGOLEXE(CD,HOSTNAME=LOCAL,LOCKEDFILE); COPY *"ALGOL.CON" AS ALGOLCON FROM ALGOLZIP(CD,HOSTNAME=LOCAL,LOCKEDFILE); COPY (ICXFER)541/ALGOL/3/= as (ICXFER)= FROM ALGOLCON(CD,HOSTNAME=LOCAL,LOCKEDFILE);
Add HASH Command to utility to generate a Message Digest for a Stream File.
HASH <stream filename> : MD4|MD5|SHA1|SHA256
If the Convert AS command has a FILEKIND of WIDEST specified, then the widest text record in the source file determines the MAXRECSIZE of the destination file. The maximum source text length is 255 bytes.
If no other option is specified, then the Convert AS command will determine the carriage control delimiter by scanning for the first CR or LF. If no delimiter is found, then a CR is used by default, in the character set determined by scanning the text.
Reinstate COPY capability from CDROM images inadvertently broken by 540.17.
CopyWrite will call IMAGEIOH to handle a COPY from an Image which it doesn't directly support.
A COPY&COMPARE will no longer terminate when a Long FileName is encountered.
Previously a COPY&COMPARE would terminate with a Header Error if the Target File was Not Resident. Now, the File being Copied is considered a Better Version than the Non Resident File, even if the Non-Resident File has a later Cycle, Version and TimeStamp.
A ZIP of a very large STREAM File using SCRATCHPOOL=ZIP created a corrupted volume.
An attempt to output an MCP message using MCPMESSAGESEARCHER failed on the latest MCPs because of an invalid pointer reference.
The End of Tape Directory was not detected in a Library/Maintenance Capsule created by SCRATCHPOOL=LMZIP.
COPYWRITE/ZIP/INTERFACE implements the ZipStream function which can be used by a program to create a Windows .zip Archive. The ZipStream function is also exported by SL ZIPIOH.
The ZipStream function streams the data for a .zip archive to an output function without needing a physical output file. See *COPYWRITE/EXAMPLES/ZIPSTREAM.
Copywrite can be used to copy native MCP files to Zip Archives. As each file is copied, it is encapsulated in a Library/Maintenance CD Image called a Capsule, which is given a .mcp file extension.
The SCRATCHPOOL=LMZIP attribute is used to select this function.
Example:
COPY *= TO zipvolume(CD,HOSTNAME=LOCAL,SCRATCHPOOL=LMZIP)
Remove When(5) waiting for Station Assignment. If Assignment is Denied, Output is displayed to the ODT.
Improved File Copied messaged when creating a ZIP Archive.
If OPTIONS=NOSUMMARY is set on a CopyWrite COPY, then all File Copied messages are suppressed.
Copywrite can be used to create Zip Archives which are compatible with Windows 2000 Zip Utilities such as WinZip.
Example:
COPY test/= TO zipvolume(CD,HOSTNAME=LOCAL,SCRATCHPOOL=ZIP)
If the files are Text, they are converted to Windows Text Format and given a .txt extension, just like the WINDOWSNT Transform. CONTAINERDATA files are given a .con extension, and PROMBURNERDATA an extension of .mcp.
The files are compressed using the Deflate of Meta_Zip, and copied into the Zipped Archive.
By Default, the TITLE is converted to NTFS format, so that the Path information is available in the Zip Archive.
The TITLE can be converted into a long name by setting SINGLEUNIT.
Implementation of Self Contained Applications. A Self Contained Application is an application codefile which contains other files needed for the application. Those other files can be accessed using a Virtual IOH.
A Self Contained Application is created in the same way as a Self Extracting Archive, except that the File EXE should be Label Equated to the Application Codefile. If this is not done, then a Self Extracting Archive is created.
The COPY&GO feature of CopyWrite used to use the Library/Maintenance FTAM Transform attribute DOCUMENTTYPE to indicate a file which was to be initiated. Since MCP54HMP13 no longer supports the FTAM attributes, a new mechanism has been implemented.
A COPY&GO Library/Maintenance statement allows an action to be associated with a File or Directory in a COPY Statement by using the FTPSITE Transform attribute.
The simplest form of COPY&GO is either a START or RUN of a file copied to a remote host.
Example:
COPY WFLTEST(FTPSITE="START") TO NUCLEUS(PACK,HOSTNAME=BLUEGUM);TARGET=1
If FTPSITE is neither START or RUN, then it is interpreted as a WFL Statement.
The WFL Statement is preprocessed to interpret substitution strings as documented for Self Extracting Archives.
Example:
COPY WFLTEST(FTPSITE="START %2 ON %3") TO NUCLEUS(PACK,HOSTNAME=BLUEGUM);TARGET=1 is equivalent to the example above
In addition, single quotes are translated to double quotes.
Example:
COPY WFLTEST(FTPSITE="START %2 ON %3('%9')") TO NUCLEUS(PACK,HOSTNAME=BLUEGUM);TARGET=1
Disable REWIND of BLPack Tape. Set RowAllocated Bits in Disk File Header for a file from a BLPack Tape for correct FileLength calculation in Flex.
Use Family Substitution for DISK if No Family in FetchTapeHeaders.
A FetchForeignHeaders failed if there was a Directory but no File because DSONERROR was set and so Library/Maintenance terminated the Copy.
FetchForeignHeaders returns the File and the Directory when a Directory is specified making it consistent with the Flex Files command.
Remove use of DUPLICATED attribute, deimplemented in 5.3. Suppress 'No Status Available' message when copying to Disk Farm.
To avoid a ForgetCheck Dump on MCP 5.2, a call is made by MAGUS to NO_KANGAROO_ABOVE_HERE. This had the side effect of disabling Software Interrupts, which were used to report the Copy status. CopyWrite now checks the EXCEPTIONEVENT periodically and reports the Copy status if it has Happened.
When an Area boundary occurred within a BLPack Data Record, the Write was split but the Data Pointer was not updated to the Area boundary, resulting in a section of the previous Area's data being written to the start of the next Area.
Use the Magus ConvertDiskFileHeader to convert Version 2 and older Headers.
If OPTIONS=NOSUMMARY is applied to a Copy from a BLPack Tape, any attribute warnings are suppressed.
If the Library BLPACKSELECTOR with the entrypoint SELECTFILE is Label Equated to CopyWrite, it will be used to decide which files should be copied from a BLPack Tape.
CopyWrite ignores Incomplete Files, which may occur when the End of Tape is reached, but the last file has not been completely copied, and for other reasons unknown.
Silent running is selected by OPTIONS=NOSUMMARY, and when set both File Copied and File Not Copied messages are suppressed.
File Attribute Block versions 4 and 6 are supported by CopyWrite.
If an unsupported version is encountered, the Copy is terminated unless OPTIONS=DEBUG is set, in which case an AX is required to continue.
The file information for a BLPack Headers Dump has been improved.
For the BLPack utilities, if <filename> ON TAPE is specified, the archive is opened with KIND=TAPE.
The BLPACK EXTRACT <archive name> FILE <file range> AS <filename> command has been implemented.
<archive name> ::= <file title> | <filename> ON TAPE
<file range> ::= <file#> | <file#> - <file#>
This command extracts the specified files from either an ALIGNED180 or a STREAM BLPack Archive and creates an ALIGNED180 Archive.
Reduces the amount of Save Core when copying files from a BLPack Tape.
If OPTIONS=DEBUG is set, the quantity of Save Core being used be CopyWrite when copying files from a BLPack Tape is displayed at the end of each file copied.
A FileName with a name which contained a fullstop was not correctly extracted from the File Attribute Block.
A Job Summary giving selected statistics for the Copy is displayed at the completion of the Copy.
At the start of the Copy a check is made that the destination Family is online.
After a BLPack File has been copied, the Direct Buffer used for I/O is deallocated.
If the COMPRESSIONREQUESTED attribute is set on the <destination volume> when copying from a BLPack Volume, then the files copied are CRUNCHED whether or not the original file was CRUNCHED.
A COPY&VERIFY command from a BLPack volume calls a function which checks that the physical size of the file copied matches the original file described in the File Attribute Block (FAB).
A ?HI command issued to a COPY command from a BLPack volume reports information about the current file being processed.
A LIBMAINTDIR which contained entries for files which were not copied caused a fault.
An ADD&BACKUP to a Disk Farm with a LIBMAINTDIR and LIBMAINTAPPEND=TOEND updated the Volume Library with the current date instead of retaining the Volume Library CreationDate.
A LIBMAINTDIRECTORY can be recreated from a Disk Farm using a COPY statement like this,
COPY *= FROM <volume name>(PACK,HOSTNAME=<hostname>, SERIALNO=<serialno>) TO NULL(CD,LIBMAINTDIR,SERIALNO=<serialno>, SCRATCHPOOL=NODATATRANSFER, FAMILYOWNER=<hostname>)
The FAMILYOWNER attribute may be used to specify the HostName which is stored into the recreated LIBMAINTDIRECTORY.
This use of FAMILYOWNER is incompatible with the &CATALOG option which uses the FAMILYOWNER as the Catalog FamilyName.
If an ADD statement specifies LIBMAINTDIR or LIBMAINTAPPEND=TOEND then a LIBMAINTDIRECTORY file must be present.
A COPY statement with LIBMAINTDIR specified creates a new LIBMAINTDIRECTORY.
If LIBMAINTDIR is specified and a File is released using the COPY from NULL syntax, the Released Flag ([33:1] in LMDFStatX) is set for the File Entry.
If LIBMAINTDIR is specified and an ADD&COMPARE replaces some files, the corresponding entry in the LIBMAINTDIRECTORY is modified to match the new file.
If LIBMAINTAPPEND=TOEND is specified, the files added are entered into the LIBMAINTDIRECTORY.
A LIBMAINTDIRECTORY can be recreated from a Disk Farm using a COPY statement like this,
COPY *= FROM <volume name>(PACK,HOSTNAME=<hostname>, SERIALNO=<serialno>) TO NULL(CD,LIBMAINTDIR,SERIALNO=<serialno>, SCRATCHPOOL=NODATATRANSFER);
If the <serialno> exists in the Volume Library and has a valid Creation Date, the LIBMAINTDIR title is constructed using the Volume attributes.
If a LIBMAINTDIRECTORY is recreated from a Disk Farm which has released files, the File Entry is marked as Released and the File Attributes are set from the Released File Information stored in the Disk Farm.
A LIBMAINTDIRECTORY can be analyzed using the File Analysis utility which comes with CopyWrite for NT.
When Copying from CD to NULL display Released File information if it exists.
Copying from a Disk Farm which has Released Files to a CD Image on the MCP System has been corrected.
A COPY AS from a Disk Farm to a CD Image on the MCP System has been implemented.
If a Released File is encountered when copying to a CD Image on an MCP System a message about the released file is displayed.
Set the TaskValue to 1 if any error occurs when merging Disk Farms.
Avoid family Substitution when creating a LIBMAINTDIR.
Add the CatalogFamily as the FamilyOwner in a Volume Log Record.
Set the TCP/IP Bridge DialogCheckInterval to 1 minute, and the BlockedTimeOut to 5 minutes.
The TCP/IP Bridge now writes a message in segments which have a maximum size of ACTUALMAXRECSIZE bytes.
If an INSUFFICIENTBUFFERS condition is signalled when writing to a TCP/IP Subfile in the Bridge, a message is displayed and it waits for the OUTPUTEVENT for the Port to happen, and then continues writing the messages.
After sending a TapeLabel Notice to Supervisor, CopyWrite Logs a Volume Directory Add Record to the System Sumlog.
If a Copy to NULL is performed, and LIBMAINTDIR is specified, a SERIALNO must be assigned to the <destination volume>. If the SERIALNO is found in the Volume Library, the LIBMAINTDIR is created using the Volume Name, SerialNo and Creation Date of the Volume Library entry. If not found, a message is displayed and the LIBMAINTDIR is created for a volume called NULL.
If a LIBMAINTDIR is being created by copying to NULL, then the Data for all files is copied from the <source volume>, and discarded, thus checking the integrity of the <source volume>. When copying from a <source volume> which is a Disk Farm at a Remote Host, such a Copy could cause significant network traffic, just to recreate a LIBMAINTDIR.
If the SCRATCHPOOL = NODATATRANSFER is specified on the <destination volume>, then only the Disk File Headers are transferred, and the Data is skipped.
If there is a mismatch between the Version of CopyWrite and the Version of ExtractArchive a warning message is displayed.
A COPY *= FROM NULL TO ...Disk Farm releases all files in the Disk Farm and deletes the Disk Farm directory from the NT File System.
A COPY <file list> FROM NULL TO ... Disk Farm replaces each selected file capsule with a Released Capsule, and the space is returned to the NT File System.
The COPY&GO between A-Series and between A-Series and Windows now waits for the Job or CodeFile to complete, before terminating. Any messages generated are displayed.
The capability to initiate a third party copy between Disk Farms on an NT system has been implemented.
The general syntax is,
COPY <file list> FROM <source>(PACK,HOSTNAME=<hostname>), <file list> FROM <source>(PACK,HOSTNAME=<hostname>) TO <destination>(PACK,HOSTNAME=<hostname>)
The <hostname> for the <source> and <destination> must be the same. This capability is used by MergeTape to merge Disk Farms.
The &CATALOG modifier may be used to add an Archive Reference.
The &BACKUP modifier may be used to add a Catalog Reference.
The LIBMAINTDIR may be used to create a LibMaintDir.
If the protocol version of the CopyWrites performing a file transfer between A-Series Hosts are incompatible, an AX is required to continue the Copy.
If a version mismatch occurs between an A-Series and an NT System, the Copy is terminated.
If a FAMILYOWNER of DISK is specified when doing a COPY&CATALOG, a family called DISK is assumed, and No Family Substitution occurs.
After a Volume is added to the Volume Library by CopyWrite it checks if a DUPLICATE FAMILY condition could occur, and if so it terminates the Copy and deletes the Volume.
An attempt to Copy a file which has been released from a Disk Farm displays information about the released file, and skips the file.
If the File CDIMAGEHARDLINK is Label Equated with a FAMILYNAME when creating a CD Image, a reference to the CD Image is created on that FAMILYNAME.
This is used by FAMILYMANAGER to allow CD Images to be located on families other than that specified by FLEX_CWIMAGE.
Adds support for remote printing to CopyWrite on NT.
A virtual server is defined like this,
PS CONFIG CPNTA SERVER="REMOTEPRINTSERVER ( DESTINATION='SITE', TYPE=CD,SCRIPT=PRINT,HOSTNAME=CPNTA, PATH=*ASERIESPRINT ON C) IN SL COPYWRITE"
Files printed to this Virtual Server are copied into a CD Image C:\ASERIESPRINT\<date>\<usercode>\<jobno>_<taskno>.mcp, and the VBScript called Print.vbs is executed. The script converts each file in the CD Image to a .txt file.
If the TYPE=WRAP is specified, a Wrapped container is created.
A site can create VBScripts to perform special processing of an Image or Wrapped Container. The Script is provided with a Selector Object, which gives access to the Files and their Headers in the Image, a Script Object which provides attributes which describe the local environment, and an Info Object which provides access to the Print Attributes in the Info Array of the Virtual Server.
When copying files from a CD Image, if the <source volume> is not resident and a SERIALNO is specified, CopyWrite uses the SERIALNO to find the <familyname> in the Volume Library, and then searches for an image called <source family>/<familyname>. This matches the FLEX FamilyManager naming conventions. The search which was previously done using the current path, is now done on the family specified by the FLEX_CWIMAGE Configuration Variable. This may be overridden by specifying the FAMILYOWNER as another FamilyName.
Example: Copy F from DEV(CD,SERIALNO="CI1234",LockedFile,HostName=LOCAL) Copy F from DEV(CD,SERIALNO="CI1234",LockedFile,HostName=LOCAL, FamilyOwner = DISK)
The search is done using the FamilyName specified without Family Substitution.
If SilentRunning (Options=NOSUMMARY) is specified with a COPY&COMPARE, and the file being copied is not a better version than the resident file, the informative message is suppressed.
If the OriginFamily is available, it is included in the File Copied message.
When copying files to a Disk Farm and creating a LIBMAINTDIR, the Last FileNo was correct in the LibMaintDir control record but not set in the Volume Record.
A Block in a Self Extracting Archive is defined to be the Compiler AreaSize of 504 Sectors. The default BLOCKSIZE is the greater of 1 and the number of Blocks in an Area of *METALOGIC/COPYWRITE/ EXTRACTARCHIVE. A BLOCKSIZE of 1 limits the absolute size of an archive to 15000 Areas * a 504 Sector Block per Area, and would create an archive with a segmented header, which is not loadable during a ColdStart by SYSTEM/LOADER. The BLOCKSIZE attribute can be used to increase the number of Blocks Per Area to avoid these limitations. For example, a BLOCKSIZE of 100 will result in an archive with an AreaSize of 50400 Sectors (100 * 504 Sectors), giving an archive size of about 130GB.
For Example,
COPY *= TO EXE(CD,HOSTNAME=LOCAL,LOCKEDFILE,BLOCKSIZE = 5)
The BLOCKSIZE attribute has been added to the Package and Archive
Directives in a CopyWrite MakeFile.
{$Package BlockSize=5}
The MP attribute may now be set in the Package and Archive
Directives in a CopyWrite MakeFile.
{Package MP +PU +IDENTITY CopyWrite, BlockSize = 5}
This patch also corrects a problem introduced in 470.85 which made the Compare option inactive when doing a COPY&COMPARE to a remote host.
When the LIBMAINTJOLIET transform is used, FileKind CONTAINERDATA and WRAPPEDDATA files are given a .con extension, FileKind PROMBURNERDATA files are given a .mcp extension and all other FileKinds are given a .txt extension, provided that no other extension has been specified.
A USERCODE.Instruction in an External File List was not executed correctly because the Transform.NOTE attribute was enclosed in quotes.
Implement the MakeLoad command to create a list of the target files in a Make file, suitable for use as an external file list in a Copy statement.
Prevent ambiguity between [ as a Directive and [ as part of a COPY [FTP] statement in a MAKE File.
Files may be copied from a remote Disk Farm to a Self Extracting Archive. An external file list, such as '@LISTNAME', which contains instructions may be specified.
A Keyed Library/Maintenance CD in which a directory block was split on the null of a key entry was not handled correctly.
Files could not be reloaded from a CD Image with the error message
FILE000.LASTRECORD NOT ENOUGH ROOM IN DISK FILE HEADER.
This has now been fixed.
A large WFL statement with about 17000 filenames resulted in some limits being exceeded.
The source FamilyName is now appended to the FileTitle which is stored in a LIBMAINTDIR.
The WFL Statement passed to LMGUTS was corrupted when copying files from a 4.9 system to an earlier MCP, such as 4.6, which does not support the LMNEWF format and COPYLONGLISTF option.
If the TARGET attribute is label equated to a COPY statement, and it is not 0, then the COPY is assumed to be for CopyWrite, no matter what protocol has been specified in the WFL statement. This feature is intended for communication between other Metalogic software and CopyWrite.
If a file with a long filename was copied as another filename, any file identifiers greater than 17 characters were truncated.
When a COPY&BACKUP of a long filename with greater than 12 levels was done, the file was copied but the Backup References were not updated.
If a file with a long filename, and hence a version 8 header, was copied to a system which did not have LONGFILENAMES set, the header was rejected, and the Copy terminated. CopyWrite now displays messages explaining the problem, and continues copying files.
Implements the VLUPDATE <libmaindivir title> command in CopyWrite Utility. If a Volume is deleted from the Volume Library, and then added again, the FAMILY CREATION DATE is set to UNKNOWN. An attempt to load a file using a backup reference which refers to this volume will fail because the FAMILY CREATION DATE is used to build the title of the LIBMAINTDIR file. The LIBMAINTDIR file stores the name of the Disk Farm Host on which the volume resides. This command opens the LIBMAINTDIR file, and uses the BOTTIMESTAMP as the CREATION DATE to update the Volume Library entry.
On 4.9 the NEWWFL flag in LMGUTS is only set if LMNEWF and COPYLONGLISTF are set. COPYLONGLISTF is not used on MCP 4.8 and adds nothing on MCP 4.9. This change caused a Bounds Error in LMGUTS at 60250280.
If there was no valid key for a file with a LICENSEKEY when copying from a Wrapped Container, the Copy was abandoned, instead of just the file being skipped.
The Volume Information is also kept for a COPY&BACKUP to DISK which is DSED.
When a SERIALNO is specified on a COPY to a Disk Farm, the SERIALNO is used to create the Path as for a COPY&BACKUP and COPY&CATALOG.
If a COPY&BACKUP copies some files to a DISK, then the Volume Information is kept, and if a LIBMAINTDIR is requested, only those files copied are stored.
When doing a COPY&BACKUP or COPY&CATALOG, if the Volume with the SERIALNO is already in the Volume Library, but is marked as SCRATCH, or has the FamilyName "S C R A T C H", CopyWrite will Volume Delete the Volume and use it for the Copy.
The LIBMAINTDIR utility command has been added. Utility commands may be executed under CANDE by
U *METALOGIC/COPYWRITE <command>
The LIBMAINTDIR command syntax is,
LIBMAINTDIR <title> HOSTNAME
will display the HostName stored in LIBMAINTDIR given by the <title>.
LIBMAINTDIR <title> HOSTNAME <hostname>
will set the HostName in the LIBMAINTDIR given by <title> to the <hostname> specified.
The entrypoints LibMaintDirFileName, FindLibMaintDirHostName and ChangeLibMaintDirHostName are exported from CopyWrite.
A LIBMAINTDIRECTORY is created if the LIBMAINTDIR attribute is set and a SERIALNO is specified.
By default the file is called LIBMAINTDIR/<tapename>/<date>/<serial> under the Usercode of the Task performing the Copy, and it is stored on the DL LIBMAINTDIR Family.
The title may be changed by Label Equating FILE LIBMAINTDIR on the Copy Statement.
The CARDLIST command of CopyWrite Utility can be used to create an External File List from a Pseudo Reader Data Deck.
The syntax is,
CARDLIST <filetitle>
The INTNAME of the Input File is CARD.
The FILELIST command of CopyWrite Utility can be used to create an External File List.
The syntax is,
FILELIST <filetitle> = <source>,<source>...
<source> ::= <title> | <title> <instructions>
<title> ::= <filetitle> | <filetitle> AS <filetitle>
<instructions> ::= [ <instruction list> ]
The External File List can be used in a local or remote COPY statement. For example,
COPY '@FRED' TO IMAGE(CD,HOSTNAME=LOCAL)
A COPY&BACKUP failed with a filename which had a long FileId, on a system which had SYSOPS LONGFILENAMES set.
When doing a COPY&BACKUP a Volume is marked as DESTROYED at the start of the Copy, and if the Copy is CompletedOK, the DESTROYED flag is cleared. On 4.8 the VOLUME DESTROYED statement does not work for Packs, see UCF # 94628242. If CopyWrite detects that the DESTROYED flag has not been set when it should have been set it issues a WARNING message.
Display the <file#> when copying from a CD Image to NULL.
Fixes a problem when recovering files from a CD Image with a large number of files.
On MCPs before 4.9, the Origin Family List was not provided by LMGUTS for NFT. To avoid this an MCP patch was developed which provided the Origin Family List if NFTFamDirF [39:1] was set. On 4.9 CALL_LIBMAINT was introduced and this is indicated by the CallBitF [39:1] being set. This conflict resulted in CopyWrite faulting on 4.9. NFS 77966442 was accepted as 'Implement ORIGIN for NFT Transfers', but it is not in the base release of 4.9. For the transition to 4.9, the NFTFamDirF bit is only set for MCPs before 4.9.
For image files created by Flex MERGETAPE, COPYWRITE was not supplying the full multi-level title of the image in the Tapelabel notice sent to Supervisor. This meant that the image familyname was not visible from a TP interrogation and has now been fixed.
This patch corrects a problem when copying files from a CD-ROM Image when the Copy is performed with a Family set to "." and there is no famil
When creating a Joliet hybrid CD Image, the file Recording Date and Time was being set to the current date and time, instead of the Creation Timestamp of the original file.
Flex Files <pattern> MT <unit> on a non Library/Maintenance tape calls CopyWrite to return the Disk File Headers.
BLPack Tapes have AUTOUNLOAD=OFF set by default. This can be changed in the <source volume> attributes of the COPY statement.
Wait for a BLPack Tape to be available or terminate after 60 seconds. The TAPEDIR process is terminated if it becomes SUSPENDED, and the OPEN of the BLPack Tape is delayed by the rewinding of the Tape after the MCP FETCHTAPEDIRECTORY has determined it is not a Library/ Maintenance Tape.
FetchImageHeaders tries to return a Tape Directory for a BLPack Tape if the TapeUnit specifies a non Library/Maintenance Tape Unit.
On 4.8, WFL disallows ADD&BACKUP to a destination volume with a KIND = CDROM. A COPY&BACKUP is allowed. To allow an ADD&BACKUP, a synonym is provided for KIND = CDROM.
If the destination volume is KIND = DISK and DENSITY = SUPER, or any CDROM attribute is set, such as CDCOPIES = 1, CDLOADER or PACKETWRITE, then the destination volume is treated as though it were KIND = CDROM.
If the syntax for a COPY statement is rejected by CopyWrite, and is therefore considered to be a local WFL Copy request, the reason for the rejection is reported.
Improve message from Status utility when CopyWrite is installed, but not linked to the current SL'ed MAGUS.
Added SCSI <filename>,.. command to parse SCSI Command and Response Descriptions and generate Delphi Pascal classes for building the commands and interpreting the responses.
CopyWrite failed to copy a file from a tape when LIBMAINTDIR was specified.
The TapeLabelNotice sent after a COPY&CATALOG from CD-ROM Images now has a KIND of CDR, to distinguish between CD-ROM Images and CD-ROM volumes.
If OPTIONS=NOSUMMARY is set on the COPY statement, then general information messages are not displayed.
In the case where a catalog block was present, but it was marked as Not Catalogued, CopyWrite would CATALOG ADD the file, and then update the backup references. However, if there were no resident entry, the CATALOG ADD failed. CopyWrite now checks if there is a resident entry, and if not, it recreates the non resident entry.
This case can be reproduced by Copy&Backup to Image. Copy A from the Image (without &Backup). Remove A. Copy&Catalog A from Image.
Added Build <filename>,.. command to parse request definitions and generate Algol and Delphi Pascal modules for packing and unpacking messages.
The title of a Self Extracting Archive may be label equated using the volume name, in the same way as a CD-ROM Image.
For example, in WFL
T(FILE F(FILENAME=FRED));
COPY = TO F(CD,HOSTNAME=LOCAL,LOCKEDFILE)[T]
The SI_ODTCOMMANDS attribute in Flex returns the commands in Simple Install format and in ODT command format.
The MAKE command is implemented.
MAKE <filename> : <make options>
This command may be used with a MakeFile to create software and system images. See COPYWRITE/MAKEFILE/COLDSTART for an example.
The BURN command is implemented.
BURN <filename> : <burn options> This command calls the MCP to burn a CD-ROM Image.
Running METALOGIC/COPYWRITE without a parameter displays the syntax for these commands.
If the MULTIVOLUME attribute is set when creating a Self Extracting Archive, then any Self Extracting Archive which is extracted is executed. This avoids the need for a RUN %4 instruction which creates an infinite run loop if the archive is executed.
Prolog instructions are available for Self Extracting Archives. If the file PROLOG is label equated to the Copy statement which creates a Self Extracting Archive, then the NOTES file attribute should contain instructions, which are stored within the archive, and which are executed before the files are extracted from the archive.
Some additional instructions for Self Extracting Archives are available.
%9 Returns the HOSTNAME
%10 Returns the GROUPNAME
REQUIRES <filename> suspends execution until the <filename> is available, or the waiting entry is OKed or DSed.
The record of an external file may be continued across multiple logical records by appending the continuation character (\) to the end of a line.
For example,
A, \
B
is the same as writing
A,B
The syntax for a record of an external file is given below,
<record> ::= <filename> <as filename> <text>
<as filename> ::= <empty> | , <as filename>
<text> ::= <empty> | [ <ebcdic characters> ]
<comment> ::= % <ebcdic characters>
<continuation character> ::= \
Instructions may now be applied to the files in a self extracting archive by using an external file and setting the text to the instructions to be associated with the file.
For example, the external file E, A,B [TD\WM]
Copy "@E" to Fred(Cd,HostName=Local,LockedFile); Run $Fred
This will extract the file called B, and issue the ODT instructions TD and then WM.
The command separator is a back slash. Note that if the last character on a line is a backslash, then it will be interpreted by the file loader as a continuation record.
For example,
A [TD/ /WM]
The first backslash is the command delimiter, the second is the continuation character.
Due to some changes in 4.8 WFLSUPPORT, the way in which CopyWrite is invoked has changed.
A COPY statement which specifies a HOSTNAME=LOCAL is always passed to CopyWrite. If the HOSTNAME is not specified as LOCAL, then the request is a remote transfer, which may or may not be handled by CopyWrite, depending on the COPYWRITEPROTOCOL configuration.
The COPY "@<filename>" syntax implements a feature whereby an external file contains the names of the files to be copied. The "@<filename>" can be part of a list of filenames or other external references, as in COPY A/=,"@B"...
The file which contains the list of filenames can be any filekind, and each record contains the name of a file to be copied, or an external reference.
A file can be copied AS another filename by following the filename by a comma and the as filename. A comment is started with a % and blank lines are ignored.
Neither a family name nor a hostname may be specified.
For example,
A % Copy the file A
A,B % Copy the file A as B
A/"=" % Copy the directory A/=
A/"=",B/"=" % Copy the directory A/= as B/=
'@FRED' % Copy the files listed in FRED
"@FRED" % Copy the files listed in FRED
Any local copy request, indicated by a HOSTNAME=LOCAL, which is not handled by CopyWrite is now passed to LIBRARY/MAINTENANCE. This allows the "@<filename>" syntax to be used for Disk, Tape and CD copies not normally handled by CopyWrite.
For example,
COPY "@filename" to fred(tape,hostname=local)
This patch corrects an Assert Dump when copying a file from a CD Image at a remote host.
A file may be copied by specifying a file number. The file number is specified by a # followed by an integer, and must be enclosed in single quotes.
For example, COPY '#1' FROM TEST(CD,HOSTNAME=LOCAL,LOCKEDFILE)
This syntax may be used for copying files from TAPE or CD, as well as CD Images and Wrapped Containers.
FetchImageDirectory loads an origin family list if present in a Tape Directory.
The NFTFamDirF bit is set to request Origin Family Names when creating CD Images. This requires an MCP patch (NFS 77966442).
CopyWrite supports the Long List WFL statement format internally, to allow selection of options which are not normally available to NFT.
The &SKIPEXCLUSIVE option is now set in FetchForeignHeaders, which is used by Flex when scanning files at a foreign host. Since files which are opened exclusive are skipped, those files are never able to be selected.
Check for a bad archive on a family before attempting to create a new archive. Improve message if unable to create an archive.
Improve message if the CopyWrite Environment cannot be installed, or access is denied because MP SERVICE COPYWRITE has not been done.
Implement FetchForeignHeaders for use by Flex AT <hostname> command.
Implement IPC Virtual File for accessing programs on Windows NT.
Includes a mechanism for WFL to do I/O using the IOHSTRING attribute.
Implement configuration variables for modifying timeouts.
COPYWRITE_MAXREADERWAIT - This is the maximum time in seconds that the destination volume host will wait for data to be returned from the remote source volume host. This includes the time taken to mount the source volume at the remote source volume host. COPYWRITE_MAXWRITERWAIT - This is the maximum time in seconds that the source volume host will wait for the data to be written to the remote destination volume host. This includes the time taken to mount the destination volume. COPYWRITE_MAXACKWAIT - This is the maximum time in seconds that the source volume host will wait for the data to be acknowledged by the remote destination volume host.
The COPYWRITE_MAXTAPEDATAACKWAIT has been deimplemented.
Prevent DUP FILE with COPY&COMPARE by rejecting System Files.
Change the previous change so that if a file called PLE_17681630 is Label Equated, the CD_HideJOLIETFromMCPF option is reset. Therefore the default behaviour of CopyWrite is to hide the JOLIET partition from the MCP. No version with the previous patch was distributed.
If a file called PLE_17681630 is Label Equated, the CD_HideJOLIETFromMCPF option is set when generating a hybrid CD-ROM Image. This option appends a 47"21" byte to the JOLIET Escape Sequences in the Secondary Volume Descriptor. The MCP does not recognize such an Escape Sequence as JOLIET, but it does not prevent Windows 2000/NT from recognizing the Volume. This option avoids a problem caused by PLE 17681630, in which a volume was recognized by the MCP as both Library/Maintenance and JOLIET.
Fixes a problem where a COPY AS failed when the source files had Level 6 Headers. Headers are converted to the current MCP Header Level.
Implement the MAGUS configuration variable COPYWRITE_MAXTAPEDATAACKWAIT to allow the timeout for waiting for a Tape to be mounted, or a reel switch, to be specified.
If a SERIALNO is specified in the <destination volume> attribute list, it is stored in the CD Image, and is used by 4.8 and later MCPs.
CopyWrite delinks from Magus after retrieving configuration variables.
Improve the message displayed when a COPY&CATALOG cannot find the generation being copied, and a resident generation exists.
When doing a COPY&BACKUP to a CD Image and the file being backed up was not Catalogued, CopyWrite could not alter the backup references. Now, if a file being backed up is not Catalogued, CopyWrite will CATALOG ADD the file.
Implements COPY&CATALOG from a CD at a remote host to NULL or a CD Image at the local host, updating the backup references on the local host.
For example,
COPY&CATALOG[FTAM]*=FROM TEST(CD,HOSTNAME=RED,SERIALNO="123456") TO NULL(CD,FAMILYOWNER=TESTDATA)
A new configuration variable called COPYWRITE_OPTIONS may be defined in the MAGUS configuration file. The variable contains a comma separated list of option names.
COPYWRITE_OPTIONS=<option name>,<option name>... These option names are defined,
TELLUSWHY - If CopyWrite rejects a WFL Copy statement and this option is set, the reason is displayed. IGNOREDSS - If CopyWrite rejects a WFL Copy statement and this option is set, the Copy is abandoned. If not set, the statement is passed to FILECOPIER.The options may be interrogated or changed using the OPTIONS command of *METALOGIC/COPYWRITE utility.
Although a file which is open EXCLUSIVE can be replaced or removed, a COPY&COMPARE considers it a better version than the file being copied, and does not replace it.
On 4.8 Field Test release, a COPY statement to a remote HOSTNAME with a KIND=CD is disallowed by WFL. This syntax is used by CopyWrite for copying to and from CD images and self extracting archives. To avoid this problem, the attribute pair KIND=DISK,DENSITY=SUPER is now treated as a synonym for KIND=CD. For example, COPY TEST/= TO FRED(DISK,DENSITY=SUPER,HOSTNAME=LOCAL) creates a CD image called FRED
If a COPY&COMPARE encountered a LOCKEDFILE, a DUP FILE occurred and the OF or DS terminated the copy. Now, a LOCKEDFILE is considered a better version than the file being copied, and it is skipped and the copy continues.
If no files were copied in a COPY&COMPARE, the copy task was not shut down immediately. This has been fixed.
An attempt to COPY&CATALOG to NULL failed for a non-resident file which had archive references but no catalog references. The catalog references are now created in this case.
A COPY <file list> TO SEARCH(CD,HOSTNAME=LOCAL,SCRATCHPOOL=SEARCH); TASKSTRING="Find UnCased .target.:File F", created the disk file F containing the search results with unprintable characters after the text.
COPYWRITE/BRIDGE now checks for a *ANYUSER/<IPAddress>, *ANYUSER/<hostname> and *ANYUSER/<domainname> entry in the UserDataFile when a remote user attempts to connect