Initial import of MEDDFN
This commit is contained in:
@@ -0,0 +1,216 @@
|
|||||||
|
**FREE
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Project.....: MEDDFN
|
||||||
|
//
|
||||||
|
// Member......: MEDDFN_H
|
||||||
|
//
|
||||||
|
// Description.: Common project definitions.
|
||||||
|
//
|
||||||
|
// This member contains project wide definitions that are
|
||||||
|
// independent from IBM APIs.
|
||||||
|
//
|
||||||
|
// IBM API prototypes and API structures are located in
|
||||||
|
// MEDDFNAPI_H.
|
||||||
|
//
|
||||||
|
// Author......: Eckhard Gosch
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Project Information
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-s MD_ProjectName varchar(16) inz('MEDDFN') const;
|
||||||
|
dcl-s MD_Version varchar(10) inz('1.0.0') const;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Project Limits
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-s MD_MaxDeviceDefinitions int(10) inz(32) const;
|
||||||
|
dcl-s MD_MaxMediaDefinitions int(10) inz(32) const;
|
||||||
|
dcl-s MD_MaxVolumeIdentifiers int(10) inz(75) const;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Public Authority
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-s MD_PublicUse char(10) inz('*USE') const;
|
||||||
|
dcl-s MD_PublicChange char(10) inz('*CHANGE') const;
|
||||||
|
dcl-s MD_PublicAll char(10) inz('*ALL') const;
|
||||||
|
dcl-s MD_PublicExclude char(10) inz('*EXCLUDE') const;
|
||||||
|
dcl-s MD_PublicLibCrtAut char(10) inz('*LIBCRTAUT') const;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Device Allocation
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-s MD_DeviceAllocateAll int(10) inz(0) const;
|
||||||
|
dcl-s MD_DeviceAllocateOne int(10) inz(1) const;
|
||||||
|
dcl-s MD_DeviceAllocateMinimum int(10) inz(2) const;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Save Format
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-s MD_SaveFormatAuto int(10) inz(-2) const;
|
||||||
|
dcl-s MD_SaveFormatSerial int(10) inz(-1) const;
|
||||||
|
dcl-s MD_SaveFormatParallel int(10) inz(0) const;
|
||||||
|
dcl-s MD_VOLUME_ID_LENGTH int(5) inz(6) const;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Volume Identifier
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_VolumeIdentifier_T qualified template;
|
||||||
|
|
||||||
|
VolumeIdentifier char(6);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Media File Definition
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
// dcl-ds MD_MediaFileDefinition_T qualified template;
|
||||||
|
//
|
||||||
|
// SequenceNumber int(10);
|
||||||
|
//
|
||||||
|
// StartingPosition char(32);
|
||||||
|
//
|
||||||
|
// VolumeIdentifierCount int(10);
|
||||||
|
//
|
||||||
|
// end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Device Definition
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
//dcl-ds MD_DeviceDefinition_T qualified template;
|
||||||
|
//
|
||||||
|
// DeviceName char(10);
|
||||||
|
//
|
||||||
|
// MediaDefinitionCount int(10);
|
||||||
|
//
|
||||||
|
//end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Builder Context
|
||||||
|
//
|
||||||
|
// Used internally by MEDDFNBLD.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_BuilderContext_T qualified template;
|
||||||
|
|
||||||
|
Buffer char(32767);
|
||||||
|
|
||||||
|
BufferLength int(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Device Definition
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Device_T qualified template;
|
||||||
|
|
||||||
|
DeviceName char(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Media File Definition
|
||||||
|
//
|
||||||
|
// One media file belongs to exactly one tape device.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_MediaFile_T qualified template;
|
||||||
|
|
||||||
|
SequenceNumber int(10);
|
||||||
|
|
||||||
|
StartingPositionInFile char(32);
|
||||||
|
|
||||||
|
NumberOfVolumeIdentifiers int(10);
|
||||||
|
|
||||||
|
VolumeIdentifier likeds(MD_VolumeIdentifier_T)
|
||||||
|
dim(75);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Media Device
|
||||||
|
//
|
||||||
|
// One device contains one or more media files.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_MediaDevice_T qualified template;
|
||||||
|
|
||||||
|
DeviceName char(10);
|
||||||
|
|
||||||
|
NumberOfMediaFiles int(10);
|
||||||
|
|
||||||
|
MediaFile likeds(MD_MediaFile_T)
|
||||||
|
dim(32);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Media Definition
|
||||||
|
//
|
||||||
|
// Business object.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_MediaDefinition_T qualified template;
|
||||||
|
|
||||||
|
MediaDefinitionName char(10);
|
||||||
|
|
||||||
|
LibraryName char(10);
|
||||||
|
|
||||||
|
TextDescription char(50);
|
||||||
|
|
||||||
|
Replace ind;
|
||||||
|
|
||||||
|
DeviceAllocation int(10);
|
||||||
|
|
||||||
|
SaveFormat int(10);
|
||||||
|
|
||||||
|
MaximumParallelResources int(10);
|
||||||
|
|
||||||
|
MinimumParallelResources int(10);
|
||||||
|
|
||||||
|
NumberOfDevices int(10);
|
||||||
|
|
||||||
|
Device likeds(MD_MediaDevice_T)
|
||||||
|
dim(32);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
@@ -0,0 +1,583 @@
|
|||||||
|
**FREE
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Project.....: MEDDFN
|
||||||
|
//
|
||||||
|
// Member......: MEDDFNAPI_H
|
||||||
|
//
|
||||||
|
// Description.: IBM API definitions.
|
||||||
|
//
|
||||||
|
// This member contains ONLY IBM API related definitions.
|
||||||
|
//
|
||||||
|
// Included:
|
||||||
|
//
|
||||||
|
// - IBM API Prototypes
|
||||||
|
// - IBM API Data Structures
|
||||||
|
// - API Error Code
|
||||||
|
// - Qualified Object Name
|
||||||
|
// - TAPE0100 Structures
|
||||||
|
// - TAPE0200 Structures
|
||||||
|
//
|
||||||
|
// No business logic is implemented in this member.
|
||||||
|
//
|
||||||
|
// IBM Release.: IBM i V7R5
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 2.0 IBM API Error Code Structure
|
||||||
|
//
|
||||||
|
// IBM Standard Error Code
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_APIError_T qualified template;
|
||||||
|
|
||||||
|
BytesProvided int(10);
|
||||||
|
|
||||||
|
BytesAvailable int(10);
|
||||||
|
|
||||||
|
MessageID char(7);
|
||||||
|
|
||||||
|
Reserved char(1);
|
||||||
|
|
||||||
|
MessageData char(128);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 3.0 Qualified Object Name
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_QualifiedObjectName_T qualified template;
|
||||||
|
|
||||||
|
ObjectName char(10);
|
||||||
|
|
||||||
|
LibraryName char(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// API Receiver Buffer
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_ApiReceiverBuffer_T qualified template;
|
||||||
|
|
||||||
|
Data
|
||||||
|
char(32767);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Message Constants
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-s MD_MessageFile
|
||||||
|
char(20)
|
||||||
|
inz('MEDDFNMSG GOSCH')
|
||||||
|
const;
|
||||||
|
|
||||||
|
dcl-s MD_MessageTypeEscape
|
||||||
|
char(10)
|
||||||
|
inz('*ESCAPE')
|
||||||
|
const;
|
||||||
|
|
||||||
|
dcl-s MD_MessageTypeDiagnostic
|
||||||
|
char(10)
|
||||||
|
inz('*DIAG')
|
||||||
|
const;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 4.0 IBM API Prototypes
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 4.1 Create Media Definition
|
||||||
|
//
|
||||||
|
// API........: QSRCRTMD
|
||||||
|
//
|
||||||
|
// Service Program : QSRLIB01
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr QSRCRTMD extpgm('QSRCRTMD');
|
||||||
|
|
||||||
|
QualifiedName likeds(MD_QualifiedObjectName_T) const;
|
||||||
|
|
||||||
|
InputData char(32767)
|
||||||
|
const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
LengthOfData int(10) ;
|
||||||
|
|
||||||
|
FormatName char(8) const;
|
||||||
|
|
||||||
|
PublicAuthority char(10) const;
|
||||||
|
|
||||||
|
TextDescription char(50) const;
|
||||||
|
|
||||||
|
Replace char(1);
|
||||||
|
|
||||||
|
ErrorCode likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 4.2 Retrieve Media Definition
|
||||||
|
//
|
||||||
|
// API........: QSRRTVMD
|
||||||
|
//
|
||||||
|
// Service Program : QSRLIB01
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr QSRRTVMD extpgm('QSRRTVMD');
|
||||||
|
|
||||||
|
QualifiedName likeds(MD_QualifiedObjectName_T) const;
|
||||||
|
|
||||||
|
ReceiverVariable char(32767)
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
LengthOfReceiverVariable int(10) ;
|
||||||
|
|
||||||
|
FormatName char(8) const;
|
||||||
|
|
||||||
|
ErrorCode likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 4.3 Delete Media Definition
|
||||||
|
//
|
||||||
|
// API........: QSRDLTMD
|
||||||
|
//
|
||||||
|
// Service Program : QSRLIB01
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr QSRDLTMD extpgm('QSRDLTMD');
|
||||||
|
|
||||||
|
QualifiedName likeds(MD_QualifiedObjectName_T) const;
|
||||||
|
|
||||||
|
ErrorCode likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Send Program Message
|
||||||
|
//
|
||||||
|
// API........: QMHSNDPM
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr QMHSNDPM extpgm('QMHSNDPM');
|
||||||
|
|
||||||
|
MessageId char(7) const;
|
||||||
|
|
||||||
|
QualifiedMessageFile char(20) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767)
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
MessageDataLength int(10);
|
||||||
|
|
||||||
|
MessageType char(10) const;
|
||||||
|
|
||||||
|
CallStackEntry char(10) const;
|
||||||
|
|
||||||
|
CallStackCounter int(10);
|
||||||
|
|
||||||
|
MessageKey char(4);
|
||||||
|
|
||||||
|
ErrorCode
|
||||||
|
likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 5.1 TAPE0100 Header Structure
|
||||||
|
//
|
||||||
|
// IBM API......: QSRCRTMD / QSRRTVMD
|
||||||
|
//
|
||||||
|
// IBM Size.....: 24 Bytes
|
||||||
|
//
|
||||||
|
// Offset
|
||||||
|
//
|
||||||
|
// 0 Reserved
|
||||||
|
// 4 Reserved
|
||||||
|
// 8 Maximum Parallel Device Resources
|
||||||
|
// 12 Minimum Parallel Device Resources
|
||||||
|
// 16 Offset to First Device Definition
|
||||||
|
// 20 Number of Device Definitions
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Tape0100Header_T qualified template;
|
||||||
|
|
||||||
|
Reserved1 int(10);
|
||||||
|
|
||||||
|
Reserved2 int(10);
|
||||||
|
|
||||||
|
MaximumParallelDeviceResources int(10);
|
||||||
|
|
||||||
|
MinimumParallelDeviceResources int(10);
|
||||||
|
|
||||||
|
OffsetToFirstDeviceDefinition int(10);
|
||||||
|
|
||||||
|
NumberOfDeviceDefinitions int(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 6.0 TAPE0200 Structures
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 6.1 TAPE0200 Header Structure
|
||||||
|
//
|
||||||
|
// IBM API......: QSRCRTMD / QSRRTVMD
|
||||||
|
//
|
||||||
|
// IBM Size.....: 36 Bytes
|
||||||
|
//
|
||||||
|
// Offset
|
||||||
|
//
|
||||||
|
// 0 Reserved
|
||||||
|
// 4 Reserved
|
||||||
|
// 8 Maximum Parallel Device Resources
|
||||||
|
// 12 Minimum Parallel Device Resources
|
||||||
|
// 16 Offset to First Device Definition
|
||||||
|
// 20 Number of Device Definitions
|
||||||
|
// 24 Length of Header
|
||||||
|
// 28 Device Allocation
|
||||||
|
// 32 Save Format
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Tape0200Header_T qualified template;
|
||||||
|
|
||||||
|
Reserved1 int(10);
|
||||||
|
|
||||||
|
Reserved2 int(10);
|
||||||
|
|
||||||
|
MaximumParallelDeviceResources int(10);
|
||||||
|
|
||||||
|
MinimumParallelDeviceResources int(10);
|
||||||
|
|
||||||
|
OffsetToFirstDeviceDefinition int(10);
|
||||||
|
|
||||||
|
NumberOfDeviceDefinitions int(10);
|
||||||
|
|
||||||
|
LengthOfHeader int(10);
|
||||||
|
|
||||||
|
DeviceAllocation int(10);
|
||||||
|
|
||||||
|
SaveFormat int(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Expected IBM Structure Sizes
|
||||||
|
//
|
||||||
|
// %SIZE(MD_Tape0100Header_T) = 24
|
||||||
|
//
|
||||||
|
// %SIZE(MD_Tape0200Header_T) = 36
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 6.2 TAPE0100 Device Definition Structure
|
||||||
|
//
|
||||||
|
// IBM API......: QSRCRTMD / QSRRTVMD
|
||||||
|
//
|
||||||
|
// IBM Size.....: 24 Bytes
|
||||||
|
//
|
||||||
|
// Offset
|
||||||
|
//
|
||||||
|
// 0 Offset to Next Device Definition
|
||||||
|
// 4 Device Name
|
||||||
|
// 14 Reserved
|
||||||
|
// 16 Offset to First Media File Definition
|
||||||
|
// 20 Number of Media File Definitions
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Tape0100DeviceDefinition_T qualified template;
|
||||||
|
|
||||||
|
OffsetToNextDeviceDefinition int(10);
|
||||||
|
|
||||||
|
DeviceName char(10);
|
||||||
|
|
||||||
|
Reserved char(2);
|
||||||
|
|
||||||
|
OffsetToFirstMediaFileDefinition int(10);
|
||||||
|
|
||||||
|
NumberOfMediaFileDefinitions int(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 6.3 TAPE0200 Device Definition Structure
|
||||||
|
//
|
||||||
|
// IBM API......: QSRCRTMD / QSRRTVMD
|
||||||
|
//
|
||||||
|
// IBM Size.....: 28 Bytes
|
||||||
|
//
|
||||||
|
// Offset
|
||||||
|
//
|
||||||
|
// 0 Offset to Next Device Definition
|
||||||
|
// 4 Device Name
|
||||||
|
// 14 Reserved
|
||||||
|
// 16 Offset to First Media File Definition
|
||||||
|
// 20 Number of Media File Definitions
|
||||||
|
// 24 Length of Device Definition
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Tape0200DeviceDefinition_T qualified template;
|
||||||
|
|
||||||
|
OffsetToNextDeviceDefinition int(10);
|
||||||
|
|
||||||
|
DeviceName char(10);
|
||||||
|
|
||||||
|
Reserved char(2);
|
||||||
|
|
||||||
|
OffsetToFirstMediaFileDefinition int(10);
|
||||||
|
|
||||||
|
NumberOfMediaFileDefinitions int(10);
|
||||||
|
|
||||||
|
LengthOfDeviceDefinition int(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Expected IBM Structure Sizes
|
||||||
|
//
|
||||||
|
// %SIZE(MD_Tape0100DeviceDefinition_T) = 24
|
||||||
|
//
|
||||||
|
// %SIZE(MD_Tape0200DeviceDefinition_T) = 28
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Notes
|
||||||
|
//
|
||||||
|
// One device definition describes exactly one tape device.
|
||||||
|
//
|
||||||
|
// Each device contains one or more media file definitions.
|
||||||
|
//
|
||||||
|
// The OffsetToNextDeviceDefinition field is an absolute byte offset
|
||||||
|
// from the beginning of the complete API input buffer.
|
||||||
|
//
|
||||||
|
// OffsetToFirstMediaFileDefinition is relative to the beginning of the
|
||||||
|
// current device definition.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 6.4 TAPE0100 Media File Definition Structure
|
||||||
|
//
|
||||||
|
// IBM API......: QSRCRTMD / QSRRTVMD
|
||||||
|
//
|
||||||
|
// IBM Size.....: 24 Bytes
|
||||||
|
//
|
||||||
|
// Offset
|
||||||
|
//
|
||||||
|
// 0 Offset to Next Media File Definition
|
||||||
|
// 4 Sequence Number
|
||||||
|
// 8 Offset to Volume Identifier Array
|
||||||
|
// 12 Number of Volume Identifiers
|
||||||
|
// 16 Length of Volume Identifier
|
||||||
|
// 20 Starting Volume Array Element
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Tape0100MediaFileDefinition_T qualified template;
|
||||||
|
|
||||||
|
OffsetToNextMediaFileDefinition int(10);
|
||||||
|
|
||||||
|
SequenceNumber int(10);
|
||||||
|
|
||||||
|
OffsetToVolumeIdentifierArray int(10);
|
||||||
|
|
||||||
|
NumberOfVolumeIdentifiers int(10);
|
||||||
|
|
||||||
|
LengthOfVolumeIdentifier int(10);
|
||||||
|
|
||||||
|
StartingVolumeArrayElement int(10);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// 6.5 TAPE0200 Media File Definition Structure
|
||||||
|
//
|
||||||
|
// IBM API......: QSRCRTMD / QSRRTVMD
|
||||||
|
//
|
||||||
|
// IBM Size.....: 60 Bytes
|
||||||
|
//
|
||||||
|
// Offset
|
||||||
|
//
|
||||||
|
// 0 Offset to Next Media File Definition
|
||||||
|
// 4 Sequence Number
|
||||||
|
// 8 Offset to Volume Identifier Array
|
||||||
|
// 12 Number of Volume Identifiers
|
||||||
|
// 16 Length of Volume Identifier
|
||||||
|
// 20 Starting Volume Array Element
|
||||||
|
// 24 Length of Media File Definition
|
||||||
|
// 28 Starting Position In File
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-ds MD_Tape0200MediaFileDefinition_T qualified template;
|
||||||
|
|
||||||
|
OffsetToNextMediaFileDefinition int(10);
|
||||||
|
|
||||||
|
SequenceNumber int(10);
|
||||||
|
|
||||||
|
OffsetToVolumeIdentifierArray int(10);
|
||||||
|
|
||||||
|
NumberOfVolumeIdentifiers int(10);
|
||||||
|
|
||||||
|
LengthOfVolumeIdentifier int(10);
|
||||||
|
|
||||||
|
StartingVolumeArrayElement int(10);
|
||||||
|
|
||||||
|
LengthOfMediaFileDefinition int(10);
|
||||||
|
|
||||||
|
StartingPositionInFile char(32);
|
||||||
|
|
||||||
|
end-ds;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Expected IBM Structure Sizes
|
||||||
|
//
|
||||||
|
// %SIZE(MD_Tape0100MediaFileDefinition_T) = 24
|
||||||
|
//
|
||||||
|
// %SIZE(MD_Tape0200MediaFileDefinition_T) = 60
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Notes
|
||||||
|
//
|
||||||
|
// OffsetToNextMediaFileDefinition
|
||||||
|
//
|
||||||
|
// Absolute byte offset from the beginning of the complete API buffer.
|
||||||
|
//
|
||||||
|
// OffsetToVolumeIdentifierArray
|
||||||
|
//
|
||||||
|
// Absolute byte offset from the beginning of the complete API buffer.
|
||||||
|
//
|
||||||
|
// NumberOfVolumeIdentifiers
|
||||||
|
//
|
||||||
|
// 0 = Use currently mounted volume.
|
||||||
|
//
|
||||||
|
// >0 = Volume identifiers follow immediately after this structure.
|
||||||
|
//
|
||||||
|
// LengthOfVolumeIdentifier
|
||||||
|
//
|
||||||
|
// IBM currently supports 0..6 bytes.
|
||||||
|
//
|
||||||
|
// StartingPositionInFile
|
||||||
|
//
|
||||||
|
// 32 hexadecimal characters.
|
||||||
|
//
|
||||||
|
// Default:
|
||||||
|
//
|
||||||
|
// 00000000000000000000000000000000
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MEDDFNAPI_H completed.
|
||||||
|
//
|
||||||
|
// This member intentionally contains:
|
||||||
|
//
|
||||||
|
// IBM API prototypes
|
||||||
|
// IBM API data structures
|
||||||
|
// IBM object definitions
|
||||||
|
//
|
||||||
|
// This member intentionally does NOT contain:
|
||||||
|
//
|
||||||
|
// Business logic
|
||||||
|
// Builder logic
|
||||||
|
// Validation
|
||||||
|
// Helper procedures
|
||||||
|
// Message handling
|
||||||
|
//
|
||||||
|
// All implementation belongs to MEDDFNSRV.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,625 @@
|
|||||||
|
**FREE
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Project......: MEDDFN
|
||||||
|
//
|
||||||
|
// Member.......: MEDDFNBLD
|
||||||
|
//
|
||||||
|
// Description..: Media Definition Buffer Builder
|
||||||
|
//
|
||||||
|
// Builds IBM API request buffers.
|
||||||
|
//
|
||||||
|
// IBM Release..: IBM i V7R5
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// IMPORTANT:
|
||||||
|
//
|
||||||
|
// All offsets in the TAPE0200 create buffer are ABSOLUTE offsets
|
||||||
|
// from the beginning of the API input buffer.
|
||||||
|
//
|
||||||
|
// This includes:
|
||||||
|
//
|
||||||
|
// OffsetToFirstDeviceDefinition
|
||||||
|
// OffsetToNextDeviceDefinition
|
||||||
|
// OffsetToFirstMediaFileDefinition
|
||||||
|
// OffsetToNextMediaFileDefinition
|
||||||
|
// OffsetToVolumeIdentifierArray
|
||||||
|
//
|
||||||
|
// Verified against IBM QSRCRTMD on IBM i 7.5.
|
||||||
|
//
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
ctl-opt
|
||||||
|
option(*srcstmt:*nodebugio) nomain ;
|
||||||
|
|
||||||
|
/COPY GOSCH/MEDDFN,MEDDFN_H
|
||||||
|
/COPY GOSCH/MEDDFN,MEDDFNAP_H
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Internal Prototypes
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_InitializeBuilder;
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_AppendStructure;
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
Data char(32767) const options(*varsize);
|
||||||
|
DataLength int(10) const;
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
dcl-pr MD_AppendBytes;
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
Data char(32767) const options(*varsize);
|
||||||
|
DataLength int(10) const;
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_BuildTape0200Device;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDevice likeds(MD_MediaDevice_T) const;
|
||||||
|
|
||||||
|
IsLastDevice ind const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Volume Builder
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_BuildTape0200VolumeArray;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaFile likeds(MD_MediaFile_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Media Builder
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_BuildTape0200Media;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDevice likeds(MD_MediaDevice_T) const;
|
||||||
|
|
||||||
|
MediaIndex int(10) const;
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Header Builder
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_BuildTape0200Header;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDefinition likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Exported Procedures
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_BuildCreateBuffer
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Builds a complete TAPE0200 create buffer.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_BuildCreateBuffer export;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDefinition likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
dcl-s DeviceIndex int(10);
|
||||||
|
|
||||||
|
MD_InitializeBuilder(BuilderContext);
|
||||||
|
|
||||||
|
MD_BuildTape0200Header(
|
||||||
|
BuilderContext :
|
||||||
|
MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
for DeviceIndex = 1 to MediaDefinition.NumberOfDevices;
|
||||||
|
|
||||||
|
|
||||||
|
MD_BuildTape0200Device(
|
||||||
|
BuilderContext :
|
||||||
|
MediaDefinition.Device(DeviceIndex) :
|
||||||
|
DeviceIndex = MediaDefinition.NumberOfDevices);
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
// Internal Procedures
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_InitializeBuilder
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_InitializeBuilder;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
clear BuilderContext;
|
||||||
|
|
||||||
|
BuilderContext.BufferLength = 0;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_AppendStructure
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_AppendStructure;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
Data char(32767) const options(*varsize);
|
||||||
|
|
||||||
|
DataLength int(10) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
%subst(
|
||||||
|
BuilderContext.Buffer :
|
||||||
|
BuilderContext.BufferLength + 1 :
|
||||||
|
DataLength) = %subst(Data : 1 : DataLength);
|
||||||
|
|
||||||
|
BuilderContext.BufferLength += DataLength;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_AppendBytes
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_AppendBytes;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
Data char(32767) const options(*varsize);
|
||||||
|
|
||||||
|
DataLength int(10) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
%subst(
|
||||||
|
BuilderContext.Buffer :
|
||||||
|
BuilderContext.BufferLength + 1 :
|
||||||
|
DataLength) = %subst(Data : 1 : DataLength);
|
||||||
|
|
||||||
|
BuilderContext.BufferLength += DataLength;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_BuildTape0200Header
|
||||||
|
//
|
||||||
|
// Builds the TAPE0200 header.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_BuildTape0200Header;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDefinition likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
dcl-ds Header0200
|
||||||
|
likeds(MD_Tape0200Header_T)
|
||||||
|
inz;
|
||||||
|
|
||||||
|
|
||||||
|
Header0200.Reserved1 = 0;
|
||||||
|
|
||||||
|
Header0200.Reserved2 = 0;
|
||||||
|
|
||||||
|
Header0200.MaximumParallelDeviceResources =
|
||||||
|
MediaDefinition.MaximumParallelResources;
|
||||||
|
|
||||||
|
Header0200.MinimumParallelDeviceResources =
|
||||||
|
MediaDefinition.MinimumParallelResources;
|
||||||
|
|
||||||
|
Header0200.OffsetToFirstDeviceDefinition =
|
||||||
|
%size(MD_Tape0200Header_T);
|
||||||
|
|
||||||
|
Header0200.NumberOfDeviceDefinitions =
|
||||||
|
MediaDefinition.NumberOfDevices;
|
||||||
|
|
||||||
|
Header0200.LengthOfHeader =
|
||||||
|
%size(MD_Tape0200Header_T);
|
||||||
|
|
||||||
|
Header0200.DeviceAllocation =
|
||||||
|
MediaDefinition.DeviceAllocation;
|
||||||
|
|
||||||
|
Header0200.SaveFormat =
|
||||||
|
MediaDefinition.SaveFormat;
|
||||||
|
|
||||||
|
|
||||||
|
MD_AppendStructure(
|
||||||
|
BuilderContext :
|
||||||
|
Header0200 :
|
||||||
|
%size(Header0200));
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_BuildTape0200Device
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Builds one TAPE0200 Device Definition and appends it to the
|
||||||
|
// builder buffer.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_BuildTape0200Device;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDevice likeds(MD_MediaDevice_T) const;
|
||||||
|
|
||||||
|
IsLastDevice ind const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds Device0200
|
||||||
|
likeds(MD_Tape0200DeviceDefinition_T)
|
||||||
|
inz;
|
||||||
|
|
||||||
|
dcl-s MediaIndex int(10);
|
||||||
|
dcl-s NextDeviceOffset int(10);
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Calculate offset to next device definition
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
if IsLastDevice;
|
||||||
|
|
||||||
|
NextDeviceOffset = 0;
|
||||||
|
|
||||||
|
else;
|
||||||
|
|
||||||
|
NextDeviceOffset =
|
||||||
|
%size(MD_Tape0200DeviceDefinition_T);
|
||||||
|
|
||||||
|
for MediaIndex = 1
|
||||||
|
to MediaDevice.NumberOfMediaFiles;
|
||||||
|
|
||||||
|
NextDeviceOffset +=
|
||||||
|
%size(MD_Tape0200MediaFileDefinition_T);
|
||||||
|
|
||||||
|
NextDeviceOffset +=
|
||||||
|
MD_AlignLength(
|
||||||
|
MediaDevice.MediaFile(MediaIndex)
|
||||||
|
.NumberOfVolumeIdentifiers
|
||||||
|
* MD_VOLUME_ID_LENGTH);
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Device structure
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
// Device0200.OffsetToNextDeviceDefinition =
|
||||||
|
// NextDeviceOffset;
|
||||||
|
|
||||||
|
Device0200.OffsetToNextDeviceDefinition =
|
||||||
|
BuilderContext.BufferLength + NextDeviceOffset;
|
||||||
|
|
||||||
|
Device0200.DeviceName =
|
||||||
|
MediaDevice.DeviceName;
|
||||||
|
|
||||||
|
Device0200.Reserved = x'0000';
|
||||||
|
|
||||||
|
Device0200.OffsetToFirstMediaFileDefinition =
|
||||||
|
BuilderContext.BufferLength
|
||||||
|
+ %size(MD_Tape0200DeviceDefinition_T);
|
||||||
|
|
||||||
|
Device0200.NumberOfMediaFileDefinitions =
|
||||||
|
MediaDevice.NumberOfMediaFiles;
|
||||||
|
|
||||||
|
Device0200.LengthOfDeviceDefinition =
|
||||||
|
%size(MD_Tape0200DeviceDefinition_T);
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Append device structure
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
MD_AppendStructure(
|
||||||
|
BuilderContext :
|
||||||
|
Device0200 :
|
||||||
|
%size(Device0200));
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Append all media definitions
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
for MediaIndex = 1
|
||||||
|
to MediaDevice.NumberOfMediaFiles;
|
||||||
|
|
||||||
|
MD_BuildTape0200Media(
|
||||||
|
BuilderContext :
|
||||||
|
MediaDevice :
|
||||||
|
MediaIndex);
|
||||||
|
|
||||||
|
MD_BuildTape0200VolumeArray(
|
||||||
|
BuilderContext :
|
||||||
|
MediaDevice.MediaFile(MediaIndex));
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_BuildTape0200Media
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Builds one TAPE0200 Media Definition and appends it to the
|
||||||
|
// builder buffer.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_BuildTape0200Media;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDevice likeds(MD_MediaDevice_T) const;
|
||||||
|
|
||||||
|
MediaIndex int(10) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds Media0200
|
||||||
|
likeds(MD_Tape0200MediaFileDefinition_T)
|
||||||
|
inz;
|
||||||
|
|
||||||
|
dcl-ds MediaFile likeds(MD_MediaFile_T) inz;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MediaFile = MediaDevice.MediaFile(MediaIndex);
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Sequence Number
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
Media0200.SequenceNumber =
|
||||||
|
MediaFile.SequenceNumber;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Starting Position in File
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
Media0200.StartingPositionInFile = *ALL'0';
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
// StartingPositionInFile is currently initialized to *ALL'0'.
|
||||||
|
// The business object does not yet expose all valid API options.
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Volume Information
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
Media0200.NumberOfVolumeIdentifiers =
|
||||||
|
MediaFile.NumberOfVolumeIdentifiers;
|
||||||
|
|
||||||
|
|
||||||
|
if MediaFile.NumberOfVolumeIdentifiers > 0;
|
||||||
|
|
||||||
|
Media0200.OffsetToVolumeIdentifierArray =
|
||||||
|
BuilderContext.BufferLength
|
||||||
|
+ %size(MD_Tape0200MediaFileDefinition_T);
|
||||||
|
|
||||||
|
Media0200.LengthOfVolumeIdentifier =
|
||||||
|
MD_VOLUME_ID_LENGTH;
|
||||||
|
|
||||||
|
Media0200.StartingVolumeArrayElement = 1;
|
||||||
|
|
||||||
|
else;
|
||||||
|
|
||||||
|
Media0200.OffsetToVolumeIdentifierArray =
|
||||||
|
0;
|
||||||
|
|
||||||
|
Media0200.LengthOfVolumeIdentifier =
|
||||||
|
0;
|
||||||
|
|
||||||
|
Media0200.StartingVolumeArrayElement =
|
||||||
|
0;
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Structure Length
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
Media0200.LengthOfMediaFileDefinition =
|
||||||
|
%size(MD_Tape0200MediaFileDefinition_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if MediaIndex < MediaDevice.NumberOfMediaFiles;
|
||||||
|
|
||||||
|
Media0200.OffsetToNextMediaFileDefinition =
|
||||||
|
BuilderContext.BufferLength
|
||||||
|
+ %size(MD_Tape0200MediaFileDefinition_T)
|
||||||
|
+ (MD_AlignLength(
|
||||||
|
MediaFile.NumberOfVolumeIdentifiers
|
||||||
|
* MD_VOLUME_ID_LENGTH));
|
||||||
|
|
||||||
|
else;
|
||||||
|
|
||||||
|
Media0200.OffsetToNextMediaFileDefinition = 0;
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Append structure to builder buffer
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
MD_AppendStructure(
|
||||||
|
BuilderContext :
|
||||||
|
Media0200 :
|
||||||
|
%size(Media0200));
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_BuildTape0200VolumeArray
|
||||||
|
//
|
||||||
|
// Description:
|
||||||
|
// Appends all Volume Identifiers to the builder buffer.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_BuildTape0200VolumeArray;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
BuilderContext likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaFile likeds(MD_MediaFile_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-s VolumeIndex int(10);
|
||||||
|
dcl-s Padding int(10) inz(0);
|
||||||
|
dcl-s Pad char(4) inz(x'00000000');
|
||||||
|
dcl-s VolumeBytes int(10) inz(0);
|
||||||
|
|
||||||
|
for VolumeIndex = 1
|
||||||
|
to MediaFile.NumberOfVolumeIdentifiers;
|
||||||
|
|
||||||
|
MD_AppendBytes(
|
||||||
|
|
||||||
|
BuilderContext :
|
||||||
|
|
||||||
|
MediaFile.VolumeIdentifier(
|
||||||
|
VolumeIndex).VolumeIdentifier :
|
||||||
|
MD_VOLUME_ID_LENGTH
|
||||||
|
);
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
|
||||||
|
VolumeBytes =
|
||||||
|
MediaFile.NumberOfVolumeIdentifiers
|
||||||
|
* MD_VOLUME_ID_LENGTH;
|
||||||
|
|
||||||
|
Padding =
|
||||||
|
MD_AlignLength(VolumeBytes)
|
||||||
|
- VolumeBytes;
|
||||||
|
|
||||||
|
if Padding > 0;
|
||||||
|
|
||||||
|
MD_AppendBytes(
|
||||||
|
BuilderContext :
|
||||||
|
Pad :
|
||||||
|
Padding);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
dcl-proc MD_AlignLength;
|
||||||
|
|
||||||
|
dcl-pi *n int(10);
|
||||||
|
|
||||||
|
Length int(10) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
dcl-s Result int(10);
|
||||||
|
|
||||||
|
Result = Length;
|
||||||
|
|
||||||
|
if %rem(Result : 4) <> 0;
|
||||||
|
Result += 4 - %rem(Result : 4);
|
||||||
|
endif;
|
||||||
|
|
||||||
|
return Result;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
**FREE
|
||||||
|
//========================================================================
|
||||||
|
//
|
||||||
|
// Media Definition Parser
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
ctl-opt
|
||||||
|
option(*srcstmt:*nodebugio) nomain ;
|
||||||
|
|
||||||
|
/COPY GOSCH/MEDDFN,MEDDFN_H
|
||||||
|
/COPY GOSCH/MEDDFN,MEDDFNAP_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_RetrieveMediaDefinition
|
||||||
|
//
|
||||||
|
// Retrieves a TAPE0200 media definition from IBM i.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_RetrieveMediaDefinition export;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T);
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds QualifiedObject
|
||||||
|
likeds(MD_QualifiedObjectName_T);
|
||||||
|
|
||||||
|
dcl-ds Receiver
|
||||||
|
likeds(MD_ApiReceiverBuffer_T);
|
||||||
|
|
||||||
|
dcl-ds ApiError
|
||||||
|
likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
dcl-s ReceiverLength int(10);
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Qualified media definition name
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
QualifiedObject.ObjectName =
|
||||||
|
MediaDefinition.MediaDefinitionName;
|
||||||
|
|
||||||
|
QualifiedObject.LibraryName =
|
||||||
|
MediaDefinition.LibraryName;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Initialize receiver buffer and error structure
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
clear Receiver;
|
||||||
|
clear ApiError;
|
||||||
|
|
||||||
|
ApiError.BytesProvided =
|
||||||
|
%size(ApiError);
|
||||||
|
|
||||||
|
ReceiverLength = %size(Receiver.Data);
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Retrieve TAPE0200 definition
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
QSRRTVMD(
|
||||||
|
QualifiedObject :
|
||||||
|
Receiver.Data :
|
||||||
|
ReceiverLength :
|
||||||
|
'TAPE0200' :
|
||||||
|
ApiError);
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Check API error
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
if ApiError.BytesAvailable > 0;
|
||||||
|
|
||||||
|
// zunächst nur Fehler zurückgeben/anzeigen
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
// MD_CheckApiError(ApiError);
|
||||||
|
|
||||||
|
|
||||||
|
end-proc;
|
||||||
@@ -0,0 +1,998 @@
|
|||||||
|
**FREE
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Program.......: MEDDFNSRV
|
||||||
|
//
|
||||||
|
// Description...: Media Definition Service Procedures
|
||||||
|
//
|
||||||
|
// Serviceprogramm erstellen mit :
|
||||||
|
// CRTSRVPGM SRVPGM(GOSCH/MEDDFNSRV)
|
||||||
|
// MODULE(GOSCH/MEDDFNSRV
|
||||||
|
// GOSCH/MEDDFNBLD)
|
||||||
|
// EXPORT(*SRCFILE)
|
||||||
|
// SRCFILE(GOSCH/MEDDFN)
|
||||||
|
// SRCMBR(MEDDFNSRVB)
|
||||||
|
// TGTRLS(*CURRENT)
|
||||||
|
// TEXT('MEDDFN Service Program')
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
ctl-opt
|
||||||
|
option(*srcstmt:*nodebugio)
|
||||||
|
nomain;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Includes
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
/copy GOSCH/MEDDFN,MEDDFN_H
|
||||||
|
/copy GOSCH/MEDDFN,MEDDFNAP_H
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Builder Prototype
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_BuildCreateBuffer;
|
||||||
|
|
||||||
|
BuilderContext
|
||||||
|
likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Parser Prototype
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_ParseRetrieveBuffer;
|
||||||
|
|
||||||
|
ReceiverBuffer
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Export Prototypes
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_CreateMediaDefinition ;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_DeleteMediaDefinition ;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_RetrieveMediaDefinition ;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Internal Prototypes
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-pr MD_ValidateCreate;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_ValidateDelete;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_ValidateRetrieve;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_CheckApiError;
|
||||||
|
|
||||||
|
ApiError
|
||||||
|
likeds(MD_APIError_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
dcl-pr MD_SendMessage;
|
||||||
|
|
||||||
|
MessageId
|
||||||
|
char(7) const;
|
||||||
|
|
||||||
|
MessageType
|
||||||
|
char(10) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_SendEscape;
|
||||||
|
|
||||||
|
MessageId
|
||||||
|
char(7) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_SendDiagnostic;
|
||||||
|
|
||||||
|
MessageId
|
||||||
|
char(7) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
dcl-pr MD_CheckDuplicateDevices;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr MD_CheckDuplicateSequences;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_CreateMediaDefinition
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_CreateMediaDefinition export;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds BuilderContext
|
||||||
|
likeds(MD_BuilderContext_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds QualifiedObject
|
||||||
|
likeds(MD_QualifiedObjectName_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds ApiError
|
||||||
|
likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-s ReplaceExisting char(1);
|
||||||
|
dcl-s ApiInputLength int(10);
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Validate
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
MD_ValidateCreate(MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Build API Buffer
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
MD_BuildCreateBuffer(
|
||||||
|
BuilderContext :
|
||||||
|
MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Qualified Object
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
QualifiedObject.ObjectName =
|
||||||
|
MediaDefinition.MediaDefinitionName;
|
||||||
|
|
||||||
|
QualifiedObject.LibraryName =
|
||||||
|
MediaDefinition.LibraryName;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Replace Existing
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
if MediaDefinition.Replace;
|
||||||
|
ReplaceExisting = '1';
|
||||||
|
else;
|
||||||
|
ReplaceExisting = '0';
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Error Structure
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
clear ApiError;
|
||||||
|
|
||||||
|
ApiError.BytesProvided =
|
||||||
|
%size(ApiError);
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// IBM API
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
ApiInputLength = BuilderContext.BufferLength;
|
||||||
|
|
||||||
|
|
||||||
|
QSRCRTMD(
|
||||||
|
|
||||||
|
QualifiedObject :
|
||||||
|
|
||||||
|
BuilderContext.Buffer :
|
||||||
|
|
||||||
|
ApiInputLength :
|
||||||
|
|
||||||
|
'TAPE0200' :
|
||||||
|
|
||||||
|
MD_PublicUse :
|
||||||
|
|
||||||
|
MediaDefinition.TextDescription :
|
||||||
|
|
||||||
|
ReplaceExisting :
|
||||||
|
|
||||||
|
ApiError);
|
||||||
|
|
||||||
|
// dump(a);
|
||||||
|
|
||||||
|
MD_CheckApiError(ApiError);
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_DeleteMediaDefinition
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_DeleteMediaDefinition export;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds QualifiedObject
|
||||||
|
likeds(MD_QualifiedObjectName_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds ApiError
|
||||||
|
likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MD_ValidateDelete(MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
QualifiedObject.ObjectName =
|
||||||
|
MediaDefinition.MediaDefinitionName;
|
||||||
|
|
||||||
|
QualifiedObject.LibraryName =
|
||||||
|
MediaDefinition.LibraryName;
|
||||||
|
|
||||||
|
|
||||||
|
clear ApiError;
|
||||||
|
|
||||||
|
ApiError.BytesProvided =
|
||||||
|
%size(ApiError);
|
||||||
|
|
||||||
|
|
||||||
|
QSRDLTMD(
|
||||||
|
QualifiedObject :
|
||||||
|
ApiError);
|
||||||
|
|
||||||
|
|
||||||
|
MD_CheckApiError(ApiError);
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_RetrieveMediaDefinition
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_RetrieveMediaDefinition export;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T);
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds QualifiedObject
|
||||||
|
likeds(MD_QualifiedObjectName_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds ApiError
|
||||||
|
likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-ds Receiver
|
||||||
|
likeds(MD_ApiReceiverBuffer_T);
|
||||||
|
|
||||||
|
dcl-s ApiReceiverLength int(10);
|
||||||
|
|
||||||
|
|
||||||
|
MD_ValidateRetrieve(MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
QualifiedObject.ObjectName =
|
||||||
|
MediaDefinition.MediaDefinitionName;
|
||||||
|
|
||||||
|
QualifiedObject.LibraryName =
|
||||||
|
MediaDefinition.LibraryName;
|
||||||
|
|
||||||
|
|
||||||
|
clear ApiError;
|
||||||
|
|
||||||
|
ApiError.BytesProvided =
|
||||||
|
%size(ApiError);
|
||||||
|
|
||||||
|
ApiReceiverLength = %size(Receiver);
|
||||||
|
|
||||||
|
QSRRTVMD(
|
||||||
|
|
||||||
|
QualifiedObject :
|
||||||
|
|
||||||
|
Receiver :
|
||||||
|
|
||||||
|
ApiReceiverLength :
|
||||||
|
|
||||||
|
'TAPE0200' :
|
||||||
|
|
||||||
|
ApiError);
|
||||||
|
|
||||||
|
|
||||||
|
MD_CheckApiError(ApiError);
|
||||||
|
|
||||||
|
// TODO:
|
||||||
|
// Parser folgt mit MEDDFNPRS
|
||||||
|
|
||||||
|
// MD_ParseRetrieveBuffer(
|
||||||
|
|
||||||
|
// Receiver.Data :
|
||||||
|
|
||||||
|
// MediaDefinition);
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_ValidateCreate
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_ValidateCreate;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-s DeviceIndex int(10);
|
||||||
|
dcl-s MediaFileIndex int(10);
|
||||||
|
dcl-s VolumeIndex int(10);
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Media Definition Name
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
if %trim(MediaDefinition.MediaDefinitionName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0001' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Library
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
if %trim(MediaDefinition.LibraryName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0002' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Number of Devices
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
if MediaDefinition.NumberOfDevices < 1
|
||||||
|
or MediaDefinition.NumberOfDevices >
|
||||||
|
MD_MaxDeviceDefinitions;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0003' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Device Allocation
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
select;
|
||||||
|
|
||||||
|
when MediaDefinition.DeviceAllocation =
|
||||||
|
MD_DeviceAllocateAll;
|
||||||
|
|
||||||
|
when MediaDefinition.DeviceAllocation =
|
||||||
|
MD_DeviceAllocateOne;
|
||||||
|
|
||||||
|
when MediaDefinition.DeviceAllocation =
|
||||||
|
MD_DeviceAllocateMinimum;
|
||||||
|
|
||||||
|
other;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0004' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endsl;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Save Format
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
select;
|
||||||
|
|
||||||
|
when MediaDefinition.SaveFormat =
|
||||||
|
MD_SaveFormatAuto;
|
||||||
|
|
||||||
|
when MediaDefinition.SaveFormat =
|
||||||
|
MD_SaveFormatSerial;
|
||||||
|
|
||||||
|
when MediaDefinition.SaveFormat =
|
||||||
|
MD_SaveFormatParallel;
|
||||||
|
|
||||||
|
other;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0005' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endsl;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Parallel Resources
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
if MediaDefinition.MaximumParallelResources < 0;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0012' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
if MediaDefinition.MinimumParallelResources < 0;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0013' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
if MediaDefinition.MinimumParallelResources >
|
||||||
|
MediaDefinition.MaximumParallelResources;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0014' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Devices
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
for DeviceIndex = 1
|
||||||
|
to MediaDefinition.NumberOfDevices;
|
||||||
|
|
||||||
|
if %trim(
|
||||||
|
MediaDefinition.Device(DeviceIndex).DeviceName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0006' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
if MediaDefinition.Device(DeviceIndex)
|
||||||
|
.NumberOfMediaFiles < 1;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0017' :
|
||||||
|
MediaDefinition.Device(DeviceIndex).DeviceName);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Media Files
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
|
for MediaFileIndex = 1
|
||||||
|
to MediaDefinition.Device(DeviceIndex)
|
||||||
|
.NumberOfMediaFiles;
|
||||||
|
|
||||||
|
if MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex)
|
||||||
|
.SequenceNumber <= 0;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0009' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
if MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex)
|
||||||
|
.NumberOfVolumeIdentifiers < 0
|
||||||
|
or MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex)
|
||||||
|
.NumberOfVolumeIdentifiers >
|
||||||
|
MD_MaxVolumeIdentifiers;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0010' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//--------------------------------------------------------
|
||||||
|
// Volume IDs
|
||||||
|
//--------------------------------------------------------
|
||||||
|
|
||||||
|
for VolumeIndex = 1
|
||||||
|
to MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex)
|
||||||
|
.NumberOfVolumeIdentifiers;
|
||||||
|
|
||||||
|
if %trim(
|
||||||
|
MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex)
|
||||||
|
.VolumeIdentifier(VolumeIndex)
|
||||||
|
.VolumeIdentifier) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0011' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Duplicate Checks
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
MD_CheckDuplicateDevices(MediaDefinition);
|
||||||
|
|
||||||
|
MD_CheckDuplicateSequences(MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_ValidateDelete
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_ValidateDelete;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
if %trim(MediaDefinition.MediaDefinitionName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0001' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
if %trim(MediaDefinition.LibraryName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0002' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_ValidateRetrieve
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_ValidateRetrieve;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
if %trim(MediaDefinition.MediaDefinitionName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0001' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
if %trim(MediaDefinition.LibraryName) = '';
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0002' :
|
||||||
|
*blanks);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_CheckApiError
|
||||||
|
//
|
||||||
|
// Checks the standard IBM API error code structure.
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_CheckApiError;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
ApiError
|
||||||
|
likeds(MD_APIError_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// No API error
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
if ApiError.BytesAvailable = 0;
|
||||||
|
return;
|
||||||
|
endif;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Forward IBM message
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
ApiError.MessageId :
|
||||||
|
'');
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_SendEscape
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_SendEscape;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MessageId
|
||||||
|
char(7) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MD_SendMessage(
|
||||||
|
MessageId :
|
||||||
|
MD_MessageTypeEscape :
|
||||||
|
MessageData);
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_SendDiagnostic
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_SendDiagnostic;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MessageId
|
||||||
|
char(7) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
MD_SendMessage(
|
||||||
|
MessageId :
|
||||||
|
MD_MessageTypeDiagnostic :
|
||||||
|
MessageData);
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_SendMessage
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_SendMessage;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MessageId
|
||||||
|
char(7) const;
|
||||||
|
|
||||||
|
MessageType
|
||||||
|
char(10) const;
|
||||||
|
|
||||||
|
MessageData
|
||||||
|
char(32767) const
|
||||||
|
options(*varsize);
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-s MessageKey char(4);
|
||||||
|
dcl-s CallStackEntry char(10) inz('*');
|
||||||
|
dcl-s CallStackCounter int(10) inz(0);
|
||||||
|
dcl-s MessageDataLength int(10);
|
||||||
|
dcl-s ApiMessageData char(32767);
|
||||||
|
dcl-ds ApiError likeds(MD_APIError_T);
|
||||||
|
|
||||||
|
clear ApiError;
|
||||||
|
ApiError.BytesProvided = %size(ApiError);
|
||||||
|
|
||||||
|
MessageDataLength = %len(MessageData);
|
||||||
|
ApiMessageData = MessageData;
|
||||||
|
|
||||||
|
QMHSNDPM(
|
||||||
|
MessageId :
|
||||||
|
MD_MessageFile :
|
||||||
|
ApiMessageData :
|
||||||
|
MessageDataLength :
|
||||||
|
MessageType :
|
||||||
|
CallStackEntry :
|
||||||
|
CallStackCounter :
|
||||||
|
MessageKey :
|
||||||
|
ApiError);
|
||||||
|
|
||||||
|
// Keine weitere Fehlerbehandlung hier.
|
||||||
|
// MD_SendMessage ist die unterste Schicht der Message-Infrastruktur.
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_CheckDuplicateDevices
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_CheckDuplicateDevices;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-s DeviceIndex1 int(10);
|
||||||
|
dcl-s DeviceIndex2 int(10);
|
||||||
|
|
||||||
|
|
||||||
|
for DeviceIndex1 = 1
|
||||||
|
to MediaDefinition.NumberOfDevices - 1;
|
||||||
|
|
||||||
|
for DeviceIndex2 = DeviceIndex1 + 1
|
||||||
|
to MediaDefinition.NumberOfDevices;
|
||||||
|
|
||||||
|
if %trim(
|
||||||
|
MediaDefinition.Device(DeviceIndex1).DeviceName)
|
||||||
|
=
|
||||||
|
%trim(
|
||||||
|
MediaDefinition.Device(DeviceIndex2).DeviceName);
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0007' :
|
||||||
|
MediaDefinition.Device(DeviceIndex1).DeviceName);
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// MD_CheckDuplicateSequences
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc MD_CheckDuplicateSequences;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
|
||||||
|
MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T) const;
|
||||||
|
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
dcl-s DeviceIndex int(10);
|
||||||
|
dcl-s MediaFileIndex1 int(10);
|
||||||
|
dcl-s MediaFileIndex2 int(10);
|
||||||
|
|
||||||
|
|
||||||
|
for DeviceIndex = 1
|
||||||
|
to MediaDefinition.NumberOfDevices;
|
||||||
|
|
||||||
|
for MediaFileIndex1 = 1
|
||||||
|
to MediaDefinition.Device(DeviceIndex)
|
||||||
|
.NumberOfMediaFiles - 1;
|
||||||
|
|
||||||
|
for MediaFileIndex2 = MediaFileIndex1 + 1
|
||||||
|
to MediaDefinition.Device(DeviceIndex)
|
||||||
|
.NumberOfMediaFiles;
|
||||||
|
|
||||||
|
if MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex1)
|
||||||
|
.SequenceNumber
|
||||||
|
|
||||||
|
=
|
||||||
|
|
||||||
|
MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex2)
|
||||||
|
.SequenceNumber;
|
||||||
|
|
||||||
|
MD_SendEscape(
|
||||||
|
'MDF0019' :
|
||||||
|
%char(
|
||||||
|
MediaDefinition.Device(DeviceIndex)
|
||||||
|
.MediaFile(MediaFileIndex1)
|
||||||
|
.SequenceNumber));
|
||||||
|
|
||||||
|
endif;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
endfor;
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,218 @@
|
|||||||
|
**FREE
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// Program......: MEDDFNTSTP
|
||||||
|
//
|
||||||
|
// Description..: MEDDFN Builder Test Program
|
||||||
|
// Erstellen mit :
|
||||||
|
// CRTPGM PGM(GOSCH/MEDDFNTSTP)
|
||||||
|
// MODULE(GOSCH/MEDDFNTSTP)
|
||||||
|
// BNDSRVPGM(GOSCH/MEDDFNSRV)
|
||||||
|
// ACTGRP(*NEW)
|
||||||
|
// TGTRLS(*CURRENT)
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
ctl-opt
|
||||||
|
// dftactgrp(*no)
|
||||||
|
// actgrp(*new)
|
||||||
|
option(*srcstmt:*nodebugio);
|
||||||
|
|
||||||
|
/copy GOSCH/MEDDFN,MEDDFN_H
|
||||||
|
/copy GOSCH/MEDDFN,MEDDFNPR
|
||||||
|
|
||||||
|
dcl-ds MediaDefinition
|
||||||
|
likeds(MD_MediaDefinition_T);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
dcl-pr BuildTestDefinition;
|
||||||
|
end-pr;
|
||||||
|
|
||||||
|
BuildTestDefinition();
|
||||||
|
|
||||||
|
monitor;
|
||||||
|
|
||||||
|
MD_DeleteMediaDefinition(
|
||||||
|
MediaDefinition);
|
||||||
|
|
||||||
|
on-error;
|
||||||
|
|
||||||
|
endmon;
|
||||||
|
|
||||||
|
|
||||||
|
MD_CreateMediaDefinition(
|
||||||
|
MediaDefinition);
|
||||||
|
|
||||||
|
|
||||||
|
*inlr = *on;
|
||||||
|
return;
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// BuildTestDefinition
|
||||||
|
//
|
||||||
|
// Builds a simple test media definition:
|
||||||
|
//
|
||||||
|
// 1 Device
|
||||||
|
// 1 Media File
|
||||||
|
// VOL001
|
||||||
|
// VOL002
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc BuildTestDefinition;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
|
||||||
|
clear MediaDefinition;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// General
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
MediaDefinition.MediaDefinitionName = 'TEST0200X';
|
||||||
|
MediaDefinition.LibraryName = 'GOSCH';
|
||||||
|
MediaDefinition.TextDescription = 'Test MEDDFN';
|
||||||
|
|
||||||
|
MediaDefinition.MaximumParallelResources = 2;
|
||||||
|
MediaDefinition.MinimumParallelResources = 2;
|
||||||
|
|
||||||
|
MediaDefinition.DeviceAllocation = MD_DeviceAllocateAll;
|
||||||
|
MediaDefinition.SaveFormat = MD_SaveFormatParallel;
|
||||||
|
|
||||||
|
MediaDefinition.NumberOfDevices = 2;
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Device 1 / Resource 1
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
MediaDefinition.Device(1).DeviceName = 'TAPMLBBRMS';
|
||||||
|
|
||||||
|
MediaDefinition.Device(1).NumberOfMediaFiles = 1;
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.SequenceNumber = 0;
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.StartingPositionInFile = *ALL'0';
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.NumberOfVolumeIdentifiers = 1;
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.VolumeIdentifier(1)
|
||||||
|
.VolumeIdentifier = 'DAK066';
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Device 2 / Resource 2
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
|
||||||
|
MediaDefinition.Device(2).DeviceName = 'TAPMLBBRMS';
|
||||||
|
|
||||||
|
MediaDefinition.Device(2).NumberOfMediaFiles = 1;
|
||||||
|
|
||||||
|
MediaDefinition.Device(2)
|
||||||
|
.MediaFile(1)
|
||||||
|
.SequenceNumber = 0;
|
||||||
|
|
||||||
|
MediaDefinition.Device(2)
|
||||||
|
.MediaFile(1)
|
||||||
|
.StartingPositionInFile = *ALL'0';
|
||||||
|
|
||||||
|
MediaDefinition.Device(2)
|
||||||
|
.MediaFile(1)
|
||||||
|
.NumberOfVolumeIdentifiers = 1;
|
||||||
|
|
||||||
|
MediaDefinition.Device(2)
|
||||||
|
.MediaFile(1)
|
||||||
|
.VolumeIdentifier(1)
|
||||||
|
.VolumeIdentifier = 'DAK079';
|
||||||
|
|
||||||
|
end-proc;
|
||||||
|
|
||||||
|
|
||||||
|
//=====================================================================
|
||||||
|
//
|
||||||
|
// BuildTestDefinition
|
||||||
|
//
|
||||||
|
//=====================================================================
|
||||||
|
|
||||||
|
dcl-proc BuildTestDefinitionOld;
|
||||||
|
|
||||||
|
dcl-pi *n;
|
||||||
|
end-pi;
|
||||||
|
|
||||||
|
clear MediaDefinition;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Media Definition
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
MediaDefinition.MediaDefinitionName = 'TEST0200';
|
||||||
|
MediaDefinition.LibraryName = 'QTEMP';
|
||||||
|
MediaDefinition.TextDescription = 'MEDDFN Test';
|
||||||
|
|
||||||
|
MediaDefinition.Replace = *on;
|
||||||
|
|
||||||
|
MediaDefinition.DeviceAllocation = MD_DeviceAllocateAll;
|
||||||
|
MediaDefinition.SaveFormat = MD_SaveFormatParallel;
|
||||||
|
|
||||||
|
MediaDefinition.MaximumParallelResources = 1;
|
||||||
|
MediaDefinition.MinimumParallelResources = 1;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Device
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
MediaDefinition.NumberOfDevices = 1;
|
||||||
|
|
||||||
|
MediaDefinition.Device(1).DeviceName =
|
||||||
|
'TAPMLBBRMS';
|
||||||
|
|
||||||
|
MediaDefinition.Device(1).NumberOfMediaFiles = 1;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Media File
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.SequenceNumber = 0;
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.StartingPositionInFile = *ALLX'00';
|
||||||
|
// .StartingPositionInFile = '*FIRST';
|
||||||
|
|
||||||
|
MediaDefinition.Device(1)
|
||||||
|
.MediaFile(1)
|
||||||
|
.NumberOfVolumeIdentifiers = 0;
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Volume IDs
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
// MediaDefinition.Device(1)
|
||||||
|
// .MediaFile(1)
|
||||||
|
// .VolumeIdentifier(1)
|
||||||
|
// .VolumeIdentifier = 'VOL001';
|
||||||
|
|
||||||
|
// MediaDefinition.Device(1)
|
||||||
|
// .MediaFile(1)
|
||||||
|
// .VolumeIdentifier(2)
|
||||||
|
// .VolumeIdentifier = 'VOL002';
|
||||||
|
|
||||||
|
end-proc;
|
||||||
Reference in New Issue
Block a user