erstes Mediafiel im Parser
This commit is contained in:
+246
-229
@@ -1,229 +1,246 @@
|
||||
**FREE
|
||||
//========================================================================
|
||||
//
|
||||
// Media Definition Parser
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
ctl-opt
|
||||
option(*srcstmt:*nodebugio) nomain ;
|
||||
|
||||
/COPY './meddfn_h.rpgle'
|
||||
/COPY './meddfnap_h.rpgle'
|
||||
|
||||
// /COPY GOSCH1/MEDDFN,MEDDFN_H
|
||||
// /COPY GOSCH1/MEDDFN,MEDDFNAP_H
|
||||
|
||||
|
||||
|
||||
dcl-pr MD_ParseRetrieveBuffer;
|
||||
|
||||
ReceiverBuffer
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
end-pr;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_ParseRetrieveBuffer
|
||||
//
|
||||
// Parses a retrieved TAPE0200 buffer.
|
||||
//
|
||||
// Currently supported:
|
||||
// - TAPE0200 header
|
||||
// - TAPE0200 device definitions
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_ParseRetrieveBuffer;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
ReceiverBuffer
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-ds Header
|
||||
likeds(MD_Tape0200Header_T);
|
||||
|
||||
dcl-ds Device
|
||||
likeds(MD_Tape0200DeviceDefinition_T);
|
||||
|
||||
dcl-s DeviceOffset int(10);
|
||||
dcl-s DeviceIndex int(10);
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Initialize result
|
||||
//---------------------------------------------------------------
|
||||
|
||||
clear MediaDefinition;
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// TAPE0200 Header
|
||||
//---------------------------------------------------------------
|
||||
|
||||
Header =
|
||||
%subst(
|
||||
ReceiverBuffer :
|
||||
1 :
|
||||
%size(Header));
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Header -> Media Definition
|
||||
//---------------------------------------------------------------
|
||||
|
||||
MediaDefinition.MaximumParallelResources =
|
||||
Header.MaximumParallelDeviceResources;
|
||||
|
||||
MediaDefinition.MinimumParallelResources =
|
||||
Header.MinimumParallelDeviceResources;
|
||||
|
||||
MediaDefinition.NumberOfDevices =
|
||||
Header.NumberOfDeviceDefinitions;
|
||||
|
||||
MediaDefinition.DeviceAllocation =
|
||||
Header.DeviceAllocation;
|
||||
|
||||
MediaDefinition.SaveFormat =
|
||||
Header.SaveFormat;
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Device Definitions
|
||||
//---------------------------------------------------------------
|
||||
|
||||
DeviceOffset =
|
||||
Header.OffsetToFirstDeviceDefinition;
|
||||
|
||||
for DeviceIndex = 1
|
||||
to Header.NumberOfDeviceDefinitions;
|
||||
|
||||
Device =
|
||||
%subst(
|
||||
ReceiverBuffer :
|
||||
DeviceOffset + 1 :
|
||||
%size(Device));
|
||||
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Device -> Media Definition
|
||||
//------------------------------------------------------------
|
||||
|
||||
MediaDefinition.Device(DeviceIndex).DeviceName =
|
||||
Device.DeviceName;
|
||||
|
||||
MediaDefinition.Device(DeviceIndex).NumberOfMediaFiles =
|
||||
Device.NumberOfMediaFileDefinitions;
|
||||
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Next device
|
||||
//------------------------------------------------------------
|
||||
|
||||
if Device.OffsetToNextDeviceDefinition > 0;
|
||||
|
||||
DeviceOffset +=
|
||||
Device.OffsetToNextDeviceDefinition;
|
||||
|
||||
endif;
|
||||
|
||||
endfor;
|
||||
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// 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;
|
||||
**free
|
||||
//========================================================================
|
||||
//
|
||||
// Media Definition Parser
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//==========================================================================
|
||||
|
||||
ctl-opt
|
||||
option(*srcstmt:*nodebugio) nomain;
|
||||
|
||||
/COPY './meddfn_h.rpgle'
|
||||
/COPY './meddfnap_h.rpgle'
|
||||
|
||||
// /COPY GOSCH1/MEDDFN,MEDDFN_H
|
||||
// /COPY GOSCH1/MEDDFN,MEDDFNAP_H
|
||||
|
||||
dcl-pr MD_ParseRetrieveBuffer;
|
||||
|
||||
ReceiverBuffer
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
end-pr;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_ParseRetrieveBuffer
|
||||
//
|
||||
// Parses a retrieved TAPE0200 buffer.
|
||||
//
|
||||
// Currently supported:
|
||||
// - TAPE0200 header
|
||||
// - TAPE0200 device definitions
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_ParseRetrieveBuffer;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
ReceiverBuffer
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
end-pi;
|
||||
|
||||
dcl-ds Header
|
||||
likeds(MD_Tape0200Header_T);
|
||||
|
||||
dcl-ds Device
|
||||
likeds(MD_Tape0200DeviceDefinition_T);
|
||||
|
||||
dcl-ds MediaFile
|
||||
likeds(MD_Tape0200MediaFileDefinition_T);
|
||||
|
||||
dcl-s MediaOffset int(10);
|
||||
|
||||
dcl-s DeviceOffset int(10);
|
||||
dcl-s DeviceIndex int(10);
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Initialize result
|
||||
//---------------------------------------------------------------
|
||||
|
||||
clear MediaDefinition;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// TAPE0200 Header
|
||||
//---------------------------------------------------------------
|
||||
|
||||
Header =
|
||||
%subst(
|
||||
ReceiverBuffer :
|
||||
1 :
|
||||
%size(Header));
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Header -> Media Definition
|
||||
//---------------------------------------------------------------
|
||||
|
||||
MediaDefinition.MaximumParallelResources =
|
||||
Header.MaximumParallelDeviceResources;
|
||||
|
||||
MediaDefinition.MinimumParallelResources =
|
||||
Header.MinimumParallelDeviceResources;
|
||||
|
||||
MediaDefinition.NumberOfDevices =
|
||||
Header.NumberOfDeviceDefinitions;
|
||||
|
||||
MediaDefinition.DeviceAllocation =
|
||||
Header.DeviceAllocation;
|
||||
|
||||
MediaDefinition.SaveFormat =
|
||||
Header.SaveFormat;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Device Definitions
|
||||
//---------------------------------------------------------------
|
||||
|
||||
DeviceOffset =
|
||||
Header.OffsetToFirstDeviceDefinition;
|
||||
|
||||
for DeviceIndex = 1
|
||||
to Header.NumberOfDeviceDefinitions;
|
||||
|
||||
Device =
|
||||
%subst(
|
||||
ReceiverBuffer :
|
||||
DeviceOffset + 1 :
|
||||
%size(Device));
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Device -> Media Definition
|
||||
//------------------------------------------------------------
|
||||
|
||||
MediaDefinition.Device(DeviceIndex).DeviceName =
|
||||
Device.DeviceName;
|
||||
|
||||
MediaDefinition.Device(DeviceIndex).NumberOfMediaFiles =
|
||||
Device.NumberOfMediaFileDefinitions;
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// First Media File
|
||||
//---------------------------------------------------------------
|
||||
|
||||
if Device.NumberOfMediaFileDefinitions > 0;
|
||||
|
||||
MediaOffset =
|
||||
Device.OffsetToFirstMediaFileDefinition;
|
||||
|
||||
MediaFile =
|
||||
%subst(
|
||||
ReceiverBuffer :
|
||||
MediaOffset + 1 :
|
||||
%size(MediaFile));
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Media File -> Media Definition
|
||||
//------------------------------------------------------------
|
||||
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(1)
|
||||
.SequenceNumber =
|
||||
MediaFile.SequenceNumber;
|
||||
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(1)
|
||||
.StartingPositionInFile =
|
||||
MediaFile.StartingPositionInFile;
|
||||
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(1)
|
||||
.NumberOfVolumeIdentifiers =
|
||||
MediaFile.NumberOfVolumeIdentifiers;
|
||||
endif;
|
||||
|
||||
//------------------------------------------------------------
|
||||
// Next device
|
||||
//------------------------------------------------------------
|
||||
|
||||
if Device.OffsetToNextDeviceDefinition > 0;
|
||||
|
||||
DeviceOffset +=
|
||||
Device.OffsetToNextDeviceDefinition;
|
||||
endif;
|
||||
endfor;
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// 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;
|
||||
Reference in New Issue
Block a user