erstes Mediafiel im Parser

This commit is contained in:
2026-08-22 16:25:16 +02:00
parent f2ae46c427
commit 2012610615
+246 -229
View File
@@ -1,229 +1,246 @@
**FREE **free
//======================================================================== //========================================================================
// //
// Media Definition Parser // Media Definition Parser
// //
// //
// //
// //
// //
//========================================================================== //==========================================================================
ctl-opt ctl-opt
option(*srcstmt:*nodebugio) nomain ; option(*srcstmt:*nodebugio) nomain;
/COPY './meddfn_h.rpgle' /COPY './meddfn_h.rpgle'
/COPY './meddfnap_h.rpgle' /COPY './meddfnap_h.rpgle'
// /COPY GOSCH1/MEDDFN,MEDDFN_H // /COPY GOSCH1/MEDDFN,MEDDFN_H
// /COPY GOSCH1/MEDDFN,MEDDFNAP_H // /COPY GOSCH1/MEDDFN,MEDDFNAP_H
dcl-pr MD_ParseRetrieveBuffer;
dcl-pr MD_ParseRetrieveBuffer; ReceiverBuffer
char(32767) const
ReceiverBuffer options(*varsize);
char(32767) const
options(*varsize); MediaDefinition
likeds(MD_MediaDefinition_T);
MediaDefinition end-pr;
likeds(MD_MediaDefinition_T);
//=====================================================================
end-pr; //
// MD_ParseRetrieveBuffer
//===================================================================== //
// // Parses a retrieved TAPE0200 buffer.
// MD_ParseRetrieveBuffer //
// // Currently supported:
// Parses a retrieved TAPE0200 buffer. // - TAPE0200 header
// // - TAPE0200 device definitions
// Currently supported: //
// - TAPE0200 header //=====================================================================
// - TAPE0200 device definitions
// dcl-proc MD_ParseRetrieveBuffer;
//=====================================================================
dcl-pi *n;
dcl-proc MD_ParseRetrieveBuffer;
ReceiverBuffer
dcl-pi *n; char(32767) const
options(*varsize);
ReceiverBuffer
char(32767) const MediaDefinition
options(*varsize); likeds(MD_MediaDefinition_T);
end-pi;
MediaDefinition
likeds(MD_MediaDefinition_T); dcl-ds Header
likeds(MD_Tape0200Header_T);
end-pi;
dcl-ds Device
likeds(MD_Tape0200DeviceDefinition_T);
dcl-ds Header
likeds(MD_Tape0200Header_T); dcl-ds MediaFile
likeds(MD_Tape0200MediaFileDefinition_T);
dcl-ds Device
likeds(MD_Tape0200DeviceDefinition_T); dcl-s MediaOffset int(10);
dcl-s DeviceOffset int(10); dcl-s DeviceOffset int(10);
dcl-s DeviceIndex int(10); dcl-s DeviceIndex int(10);
//---------------------------------------------------------------
//--------------------------------------------------------------- // Initialize result
// Initialize result //---------------------------------------------------------------
//---------------------------------------------------------------
clear MediaDefinition;
clear MediaDefinition;
//---------------------------------------------------------------
// TAPE0200 Header
//--------------------------------------------------------------- //---------------------------------------------------------------
// TAPE0200 Header
//--------------------------------------------------------------- Header =
%subst(
Header = ReceiverBuffer :
%subst( 1 :
ReceiverBuffer : %size(Header));
1 :
%size(Header)); //---------------------------------------------------------------
// Header -> Media Definition
//---------------------------------------------------------------
//---------------------------------------------------------------
// Header -> Media Definition MediaDefinition.MaximumParallelResources =
//--------------------------------------------------------------- Header.MaximumParallelDeviceResources;
MediaDefinition.MaximumParallelResources = MediaDefinition.MinimumParallelResources =
Header.MaximumParallelDeviceResources; Header.MinimumParallelDeviceResources;
MediaDefinition.MinimumParallelResources = MediaDefinition.NumberOfDevices =
Header.MinimumParallelDeviceResources; Header.NumberOfDeviceDefinitions;
MediaDefinition.NumberOfDevices = MediaDefinition.DeviceAllocation =
Header.NumberOfDeviceDefinitions; Header.DeviceAllocation;
MediaDefinition.DeviceAllocation = MediaDefinition.SaveFormat =
Header.DeviceAllocation; Header.SaveFormat;
MediaDefinition.SaveFormat = //---------------------------------------------------------------
Header.SaveFormat; // Device Definitions
//---------------------------------------------------------------
//--------------------------------------------------------------- DeviceOffset =
// Device Definitions Header.OffsetToFirstDeviceDefinition;
//---------------------------------------------------------------
for DeviceIndex = 1
DeviceOffset = to Header.NumberOfDeviceDefinitions;
Header.OffsetToFirstDeviceDefinition;
Device =
for DeviceIndex = 1 %subst(
to Header.NumberOfDeviceDefinitions; ReceiverBuffer :
DeviceOffset + 1 :
Device = %size(Device));
%subst(
ReceiverBuffer : //------------------------------------------------------------
DeviceOffset + 1 : // Device -> Media Definition
%size(Device)); //------------------------------------------------------------
MediaDefinition.Device(DeviceIndex).DeviceName =
//------------------------------------------------------------ Device.DeviceName;
// Device -> Media Definition
//------------------------------------------------------------ MediaDefinition.Device(DeviceIndex).NumberOfMediaFiles =
Device.NumberOfMediaFileDefinitions;
MediaDefinition.Device(DeviceIndex).DeviceName =
Device.DeviceName; //---------------------------------------------------------------
// First Media File
MediaDefinition.Device(DeviceIndex).NumberOfMediaFiles = //---------------------------------------------------------------
Device.NumberOfMediaFileDefinitions;
if Device.NumberOfMediaFileDefinitions > 0;
//------------------------------------------------------------ MediaOffset =
// Next device Device.OffsetToFirstMediaFileDefinition;
//------------------------------------------------------------
MediaFile =
if Device.OffsetToNextDeviceDefinition > 0; %subst(
ReceiverBuffer :
DeviceOffset += MediaOffset + 1 :
Device.OffsetToNextDeviceDefinition; %size(MediaFile));
endif; //------------------------------------------------------------
// Media File -> Media Definition
endfor; //------------------------------------------------------------
MediaDefinition.Device(DeviceIndex)
end-proc; .MediaFile(1)
.SequenceNumber =
MediaFile.SequenceNumber;
//===================================================================== MediaDefinition.Device(DeviceIndex)
// .MediaFile(1)
// MD_RetrieveMediaDefinition .StartingPositionInFile =
// MediaFile.StartingPositionInFile;
// Retrieves a TAPE0200 media definition from IBM i.
// MediaDefinition.Device(DeviceIndex)
//===================================================================== .MediaFile(1)
.NumberOfVolumeIdentifiers =
dcl-proc MD_RetrieveMediaDefinition export; MediaFile.NumberOfVolumeIdentifiers;
endif;
dcl-pi *n;
//------------------------------------------------------------
MediaDefinition // Next device
likeds(MD_MediaDefinition_T); //------------------------------------------------------------
end-pi; if Device.OffsetToNextDeviceDefinition > 0;
DeviceOffset +=
dcl-ds QualifiedObject Device.OffsetToNextDeviceDefinition;
likeds(MD_QualifiedObjectName_T); endif;
endfor;
dcl-ds Receiver end-proc;
likeds(MD_ApiReceiverBuffer_T);
//=====================================================================
dcl-ds ApiError //
likeds(MD_APIError_T); // MD_RetrieveMediaDefinition
//
dcl-s ReceiverLength int(10); // Retrieves a TAPE0200 media definition from IBM i.
//
//--------------------------------------------------------------- //=====================================================================
// Qualified media definition name
//--------------------------------------------------------------- dcl-proc MD_RetrieveMediaDefinition export;
QualifiedObject.ObjectName = dcl-pi *n;
MediaDefinition.MediaDefinitionName;
MediaDefinition
QualifiedObject.LibraryName = likeds(MD_MediaDefinition_T);
MediaDefinition.LibraryName; end-pi;
dcl-ds QualifiedObject
//--------------------------------------------------------------- likeds(MD_QualifiedObjectName_T);
// Initialize receiver buffer and error structure
//--------------------------------------------------------------- dcl-ds Receiver
likeds(MD_ApiReceiverBuffer_T);
clear Receiver;
clear ApiError; dcl-ds ApiError
likeds(MD_APIError_T);
ApiError.BytesProvided =
%size(ApiError); dcl-s ReceiverLength int(10);
ReceiverLength = %size(Receiver.Data); //---------------------------------------------------------------
//--------------------------------------------------------------- // Qualified media definition name
// Retrieve TAPE0200 definition //---------------------------------------------------------------
//---------------------------------------------------------------
QualifiedObject.ObjectName =
QSRRTVMD( MediaDefinition.MediaDefinitionName;
QualifiedObject :
Receiver.Data : QualifiedObject.LibraryName =
ReceiverLength : MediaDefinition.LibraryName;
'TAPE0200' :
ApiError); //---------------------------------------------------------------
// Initialize receiver buffer and error structure
//--------------------------------------------------------------- //---------------------------------------------------------------
// Check API error
//--------------------------------------------------------------- clear Receiver;
clear ApiError;
if ApiError.BytesAvailable > 0;
ApiError.BytesProvided =
// zunchst nur Fehler zurckgeben/anzeigen %size(ApiError);
endif; ReceiverLength = %size(Receiver.Data);
//---------------------------------------------------------------
// MD_CheckApiError(ApiError); // Retrieve TAPE0200 definition
//---------------------------------------------------------------
end-proc; QSRRTVMD(
QualifiedObject :
Receiver.Data :
ReceiverLength :
'TAPE0200' :
ApiError);
//---------------------------------------------------------------
// Check API error
//---------------------------------------------------------------
if ApiError.BytesAvailable > 0;
// zunchst nur Fehler zurckgeben/anzeigen
endif;
// MD_CheckApiError(ApiError);
end-proc;