erstes Mediafiel im Parser

This commit is contained in:
2026-08-22 16:25:16 +02:00
parent f2ae46c427
commit 2012610615
+79 -62
View File
@@ -1,26 +1,24 @@
**FREE
//========================================================================
//
// Media Definition Parser
//
//
//
//
//
//==========================================================================
**free
//========================================================================
//
// Media Definition Parser
//
//
//
//
//
//==========================================================================
ctl-opt
option(*srcstmt:*nodebugio) nomain ;
ctl-opt
option(*srcstmt:*nodebugio) nomain;
/COPY './meddfn_h.rpgle'
/COPY './meddfnap_h.rpgle'
/COPY './meddfn_h.rpgle'
/COPY './meddfnap_h.rpgle'
// /COPY GOSCH1/MEDDFN,MEDDFN_H
// /COPY GOSCH1/MEDDFN,MEDDFNAP_H
// /COPY GOSCH1/MEDDFN,MEDDFN_H
// /COPY GOSCH1/MEDDFN,MEDDFNAP_H
dcl-pr MD_ParseRetrieveBuffer;
dcl-pr MD_ParseRetrieveBuffer;
ReceiverBuffer
char(32767) const
@@ -28,22 +26,21 @@ dcl-pr MD_ParseRetrieveBuffer;
MediaDefinition
likeds(MD_MediaDefinition_T);
end-pr;
end-pr;
//=====================================================================
//
// MD_ParseRetrieveBuffer
//
// Parses a retrieved TAPE0200 buffer.
//
// Currently supported:
// - TAPE0200 header
// - TAPE0200 device definitions
//
//=====================================================================
//=====================================================================
//
// MD_ParseRetrieveBuffer
//
// Parses a retrieved TAPE0200 buffer.
//
// Currently supported:
// - TAPE0200 header
// - TAPE0200 device definitions
//
//=====================================================================
dcl-proc MD_ParseRetrieveBuffer;
dcl-proc MD_ParseRetrieveBuffer;
dcl-pi *n;
@@ -53,27 +50,28 @@ dcl-proc MD_ParseRetrieveBuffer;
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
//---------------------------------------------------------------
@@ -84,7 +82,6 @@ dcl-proc MD_ParseRetrieveBuffer;
1 :
%size(Header));
//---------------------------------------------------------------
// Header -> Media Definition
//---------------------------------------------------------------
@@ -104,7 +101,6 @@ dcl-proc MD_ParseRetrieveBuffer;
MediaDefinition.SaveFormat =
Header.SaveFormat;
//---------------------------------------------------------------
// Device Definitions
//---------------------------------------------------------------
@@ -121,7 +117,6 @@ dcl-proc MD_ParseRetrieveBuffer;
DeviceOffset + 1 :
%size(Device));
//------------------------------------------------------------
// Device -> Media Definition
//------------------------------------------------------------
@@ -132,6 +127,40 @@ dcl-proc MD_ParseRetrieveBuffer;
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
@@ -141,34 +170,26 @@ dcl-proc MD_ParseRetrieveBuffer;
DeviceOffset +=
Device.OffsetToNextDeviceDefinition;
endif;
endfor;
end-proc;
//=====================================================================
//
// MD_RetrieveMediaDefinition
//
// Retrieves a TAPE0200 media definition from IBM i.
//
//=====================================================================
end-proc;
//=====================================================================
//
// MD_RetrieveMediaDefinition
//
// Retrieves a TAPE0200 media definition from IBM i.
//
//=====================================================================
dcl-proc MD_RetrieveMediaDefinition export;
dcl-proc MD_RetrieveMediaDefinition export;
dcl-pi *n;
MediaDefinition
likeds(MD_MediaDefinition_T);
end-pi;
dcl-ds QualifiedObject
likeds(MD_QualifiedObjectName_T);
@@ -190,7 +211,6 @@ dcl-proc MD_RetrieveMediaDefinition export;
QualifiedObject.LibraryName =
MediaDefinition.LibraryName;
//---------------------------------------------------------------
// Initialize receiver buffer and error structure
//---------------------------------------------------------------
@@ -220,10 +240,7 @@ dcl-proc MD_RetrieveMediaDefinition export;
if ApiError.BytesAvailable > 0;
// zunchst nur Fehler zurckgeben/anzeigen
endif;
// MD_CheckApiError(ApiError);
end-proc;
end-proc;