Files
MEDDFN/meddfnprs.rpgle
T
2026-08-17 16:22:27 +02:00

187 lines
3.9 KiB
RPGLE

**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 MEDDFN buffer.
//
// Currently supported:
// TAPE0200 header
//
//=====================================================================
dcl-proc MD_ParseRetrieveBuffer;
dcl-pi *n;
ReceiverBuffer
char(32767) const
options(*varsize);
MediaDefinition
likeds(MD_MediaDefinition_T);
end-pi;
dcl-ds HeaderBuffer
char(%size(MD_Tape0200Header_T));
dcl-ds Header
likeds(MD_Tape0200Header_T)
overlay(HeaderBuffer);
//---------------------------------------------------------------
// Initialize result
//---------------------------------------------------------------
clear MediaDefinition;
//---------------------------------------------------------------
// Copy TAPE0200 header
//---------------------------------------------------------------
HeaderBuffer =
%subst(
ReceiverBuffer :
1 :
%size(MD_Tape0200Header_T));
//---------------------------------------------------------------
// Header -> Media Definition
//---------------------------------------------------------------
MediaDefinition.MaximumParallelResources =
Header.MaximumParallelDeviceResources;
MediaDefinition.MinimumParallelResources =
Header.MinimumParallelDeviceResources;
MediaDefinition.NumberOfDevices =
Header.NumberOfDeviceDefinitions;
MediaDefinition.DeviceAllocation =
Header.DeviceAllocation;
MediaDefinition.SaveFormat =
Header.SaveFormat;
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;
// zunchst nur Fehler zurckgeben/anzeigen
endif;
// MD_CheckApiError(ApiError);
end-proc;