182 lines
3.8 KiB
RPGLE
182 lines
3.8 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 TAPE0200 buffer.
|
|
//
|
|
// Currently:
|
|
// - TAPE0200 header
|
|
//
|
|
//=====================================================================
|
|
|
|
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);
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
// Initialize result
|
|
//---------------------------------------------------------------
|
|
|
|
clear MediaDefinition;
|
|
|
|
|
|
//---------------------------------------------------------------
|
|
// Copy 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;
|
|
|
|
|
|
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;
|