Reorganize MEDDFN project structure
This commit is contained in:
+998
@@ -0,0 +1,998 @@
|
||||
**FREE
|
||||
//=====================================================================
|
||||
//
|
||||
// Program.......: MEDDFNSRV
|
||||
//
|
||||
// Description...: Media Definition Service Procedures
|
||||
//
|
||||
// Serviceprogramm erstellen mit :
|
||||
// CRTSRVPGM SRVPGM(GOSCH/MEDDFNSRV)
|
||||
// MODULE(GOSCH/MEDDFNSRV
|
||||
// GOSCH/MEDDFNBLD)
|
||||
// EXPORT(*SRCFILE)
|
||||
// SRCFILE(GOSCH/MEDDFN)
|
||||
// SRCMBR(MEDDFNSRVB)
|
||||
// TGTRLS(*CURRENT)
|
||||
// TEXT('MEDDFN Service Program')
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
ctl-opt
|
||||
option(*srcstmt:*nodebugio)
|
||||
nomain;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Includes
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
/copy GOSCH/MEDDFN,MEDDFN_H
|
||||
/copy GOSCH/MEDDFN,MEDDFNAP_H
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Builder Prototype
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-pr MD_BuildCreateBuffer;
|
||||
|
||||
BuilderContext
|
||||
likeds(MD_BuilderContext_T);
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Parser Prototype
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-pr MD_ParseRetrieveBuffer;
|
||||
|
||||
ReceiverBuffer
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Export Prototypes
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-pr MD_CreateMediaDefinition ;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_DeleteMediaDefinition ;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_RetrieveMediaDefinition ;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// Internal Prototypes
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-pr MD_ValidateCreate;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_ValidateDelete;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_ValidateRetrieve;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_CheckApiError;
|
||||
|
||||
ApiError
|
||||
likeds(MD_APIError_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
dcl-pr MD_SendMessage;
|
||||
|
||||
MessageId
|
||||
char(7) const;
|
||||
|
||||
MessageType
|
||||
char(10) const;
|
||||
|
||||
MessageData
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
|
||||
dcl-pr MD_SendEscape;
|
||||
|
||||
MessageId
|
||||
char(7) const;
|
||||
|
||||
MessageData
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_SendDiagnostic;
|
||||
|
||||
MessageId
|
||||
char(7) const;
|
||||
|
||||
MessageData
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
end-pr;
|
||||
|
||||
dcl-pr MD_CheckDuplicateDevices;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
dcl-pr MD_CheckDuplicateSequences;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pr;
|
||||
|
||||
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_CreateMediaDefinition
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_CreateMediaDefinition export;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-ds BuilderContext
|
||||
likeds(MD_BuilderContext_T);
|
||||
|
||||
|
||||
|
||||
dcl-ds QualifiedObject
|
||||
likeds(MD_QualifiedObjectName_T);
|
||||
|
||||
|
||||
|
||||
dcl-ds ApiError
|
||||
likeds(MD_APIError_T);
|
||||
|
||||
|
||||
|
||||
dcl-s ReplaceExisting char(1);
|
||||
dcl-s ApiInputLength int(10);
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Validate
|
||||
//--------------------------------------------------------------
|
||||
|
||||
MD_ValidateCreate(MediaDefinition);
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Build API Buffer
|
||||
//--------------------------------------------------------------
|
||||
|
||||
MD_BuildCreateBuffer(
|
||||
BuilderContext :
|
||||
MediaDefinition);
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Qualified Object
|
||||
//--------------------------------------------------------------
|
||||
|
||||
QualifiedObject.ObjectName =
|
||||
MediaDefinition.MediaDefinitionName;
|
||||
|
||||
QualifiedObject.LibraryName =
|
||||
MediaDefinition.LibraryName;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Replace Existing
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if MediaDefinition.Replace;
|
||||
ReplaceExisting = '1';
|
||||
else;
|
||||
ReplaceExisting = '0';
|
||||
endif;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Error Structure
|
||||
//--------------------------------------------------------------
|
||||
|
||||
clear ApiError;
|
||||
|
||||
ApiError.BytesProvided =
|
||||
%size(ApiError);
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// IBM API
|
||||
//--------------------------------------------------------------
|
||||
|
||||
ApiInputLength = BuilderContext.BufferLength;
|
||||
|
||||
|
||||
QSRCRTMD(
|
||||
|
||||
QualifiedObject :
|
||||
|
||||
BuilderContext.Buffer :
|
||||
|
||||
ApiInputLength :
|
||||
|
||||
'TAPE0200' :
|
||||
|
||||
MD_PublicUse :
|
||||
|
||||
MediaDefinition.TextDescription :
|
||||
|
||||
ReplaceExisting :
|
||||
|
||||
ApiError);
|
||||
|
||||
// dump(a);
|
||||
|
||||
MD_CheckApiError(ApiError);
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_DeleteMediaDefinition
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_DeleteMediaDefinition export;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-ds QualifiedObject
|
||||
likeds(MD_QualifiedObjectName_T);
|
||||
|
||||
|
||||
|
||||
dcl-ds ApiError
|
||||
likeds(MD_APIError_T);
|
||||
|
||||
|
||||
|
||||
MD_ValidateDelete(MediaDefinition);
|
||||
|
||||
|
||||
QualifiedObject.ObjectName =
|
||||
MediaDefinition.MediaDefinitionName;
|
||||
|
||||
QualifiedObject.LibraryName =
|
||||
MediaDefinition.LibraryName;
|
||||
|
||||
|
||||
clear ApiError;
|
||||
|
||||
ApiError.BytesProvided =
|
||||
%size(ApiError);
|
||||
|
||||
|
||||
QSRDLTMD(
|
||||
QualifiedObject :
|
||||
ApiError);
|
||||
|
||||
|
||||
MD_CheckApiError(ApiError);
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_RetrieveMediaDefinition
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_RetrieveMediaDefinition export;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T);
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-ds QualifiedObject
|
||||
likeds(MD_QualifiedObjectName_T);
|
||||
|
||||
|
||||
|
||||
dcl-ds ApiError
|
||||
likeds(MD_APIError_T);
|
||||
|
||||
|
||||
|
||||
dcl-ds Receiver
|
||||
likeds(MD_ApiReceiverBuffer_T);
|
||||
|
||||
dcl-s ApiReceiverLength int(10);
|
||||
|
||||
|
||||
MD_ValidateRetrieve(MediaDefinition);
|
||||
|
||||
|
||||
QualifiedObject.ObjectName =
|
||||
MediaDefinition.MediaDefinitionName;
|
||||
|
||||
QualifiedObject.LibraryName =
|
||||
MediaDefinition.LibraryName;
|
||||
|
||||
|
||||
clear ApiError;
|
||||
|
||||
ApiError.BytesProvided =
|
||||
%size(ApiError);
|
||||
|
||||
ApiReceiverLength = %size(Receiver);
|
||||
|
||||
QSRRTVMD(
|
||||
|
||||
QualifiedObject :
|
||||
|
||||
Receiver :
|
||||
|
||||
ApiReceiverLength :
|
||||
|
||||
'TAPE0200' :
|
||||
|
||||
ApiError);
|
||||
|
||||
|
||||
MD_CheckApiError(ApiError);
|
||||
|
||||
// TODO:
|
||||
// Parser folgt mit MEDDFNPRS
|
||||
|
||||
// MD_ParseRetrieveBuffer(
|
||||
|
||||
// Receiver.Data :
|
||||
|
||||
// MediaDefinition);
|
||||
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_ValidateCreate
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_ValidateCreate;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-s DeviceIndex int(10);
|
||||
dcl-s MediaFileIndex int(10);
|
||||
dcl-s VolumeIndex int(10);
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Media Definition Name
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if %trim(MediaDefinition.MediaDefinitionName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0001' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Library
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if %trim(MediaDefinition.LibraryName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0002' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Number of Devices
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if MediaDefinition.NumberOfDevices < 1
|
||||
or MediaDefinition.NumberOfDevices >
|
||||
MD_MaxDeviceDefinitions;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0003' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Device Allocation
|
||||
//--------------------------------------------------------------
|
||||
|
||||
select;
|
||||
|
||||
when MediaDefinition.DeviceAllocation =
|
||||
MD_DeviceAllocateAll;
|
||||
|
||||
when MediaDefinition.DeviceAllocation =
|
||||
MD_DeviceAllocateOne;
|
||||
|
||||
when MediaDefinition.DeviceAllocation =
|
||||
MD_DeviceAllocateMinimum;
|
||||
|
||||
other;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0004' :
|
||||
*blanks);
|
||||
|
||||
endsl;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Save Format
|
||||
//--------------------------------------------------------------
|
||||
|
||||
select;
|
||||
|
||||
when MediaDefinition.SaveFormat =
|
||||
MD_SaveFormatAuto;
|
||||
|
||||
when MediaDefinition.SaveFormat =
|
||||
MD_SaveFormatSerial;
|
||||
|
||||
when MediaDefinition.SaveFormat =
|
||||
MD_SaveFormatParallel;
|
||||
|
||||
other;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0005' :
|
||||
*blanks);
|
||||
|
||||
endsl;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Parallel Resources
|
||||
//--------------------------------------------------------------
|
||||
|
||||
if MediaDefinition.MaximumParallelResources < 0;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0012' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if MediaDefinition.MinimumParallelResources < 0;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0013' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if MediaDefinition.MinimumParallelResources >
|
||||
MediaDefinition.MaximumParallelResources;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0014' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Devices
|
||||
//--------------------------------------------------------------
|
||||
|
||||
for DeviceIndex = 1
|
||||
to MediaDefinition.NumberOfDevices;
|
||||
|
||||
if %trim(
|
||||
MediaDefinition.Device(DeviceIndex).DeviceName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0006' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if MediaDefinition.Device(DeviceIndex)
|
||||
.NumberOfMediaFiles < 1;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0017' :
|
||||
MediaDefinition.Device(DeviceIndex).DeviceName);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//-----------------------------------------------------------
|
||||
// Media Files
|
||||
//-----------------------------------------------------------
|
||||
|
||||
for MediaFileIndex = 1
|
||||
to MediaDefinition.Device(DeviceIndex)
|
||||
.NumberOfMediaFiles;
|
||||
|
||||
if MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex)
|
||||
.SequenceNumber <= 0;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0009' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex)
|
||||
.NumberOfVolumeIdentifiers < 0
|
||||
or MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex)
|
||||
.NumberOfVolumeIdentifiers >
|
||||
MD_MaxVolumeIdentifiers;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0010' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
//--------------------------------------------------------
|
||||
// Volume IDs
|
||||
//--------------------------------------------------------
|
||||
|
||||
for VolumeIndex = 1
|
||||
to MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex)
|
||||
.NumberOfVolumeIdentifiers;
|
||||
|
||||
if %trim(
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex)
|
||||
.VolumeIdentifier(VolumeIndex)
|
||||
.VolumeIdentifier) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0011' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
endfor;
|
||||
|
||||
endfor;
|
||||
|
||||
endfor;
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Duplicate Checks
|
||||
//--------------------------------------------------------------
|
||||
|
||||
MD_CheckDuplicateDevices(MediaDefinition);
|
||||
|
||||
MD_CheckDuplicateSequences(MediaDefinition);
|
||||
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_ValidateDelete
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_ValidateDelete;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
if %trim(MediaDefinition.MediaDefinitionName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0001' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if %trim(MediaDefinition.LibraryName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0002' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_ValidateRetrieve
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_ValidateRetrieve;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
if %trim(MediaDefinition.MediaDefinitionName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0001' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
if %trim(MediaDefinition.LibraryName) = '';
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0002' :
|
||||
*blanks);
|
||||
|
||||
endif;
|
||||
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_CheckApiError
|
||||
//
|
||||
// Checks the standard IBM API error code structure.
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_CheckApiError;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
ApiError
|
||||
likeds(MD_APIError_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// No API error
|
||||
//---------------------------------------------------------------
|
||||
|
||||
if ApiError.BytesAvailable = 0;
|
||||
return;
|
||||
endif;
|
||||
|
||||
|
||||
//---------------------------------------------------------------
|
||||
// Forward IBM message
|
||||
//---------------------------------------------------------------
|
||||
|
||||
MD_SendEscape(
|
||||
ApiError.MessageId :
|
||||
'');
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_SendEscape
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_SendEscape;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MessageId
|
||||
char(7) const;
|
||||
|
||||
MessageData
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
end-pi;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MD_SendMessage(
|
||||
MessageId :
|
||||
MD_MessageTypeEscape :
|
||||
MessageData);
|
||||
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_SendDiagnostic
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_SendDiagnostic;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MessageId
|
||||
char(7) const;
|
||||
|
||||
MessageData
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
MD_SendMessage(
|
||||
MessageId :
|
||||
MD_MessageTypeDiagnostic :
|
||||
MessageData);
|
||||
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_SendMessage
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_SendMessage;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MessageId
|
||||
char(7) const;
|
||||
|
||||
MessageType
|
||||
char(10) const;
|
||||
|
||||
MessageData
|
||||
char(32767) const
|
||||
options(*varsize);
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-s MessageKey char(4);
|
||||
dcl-s CallStackEntry char(10) inz('*');
|
||||
dcl-s CallStackCounter int(10) inz(0);
|
||||
dcl-s MessageDataLength int(10);
|
||||
dcl-s ApiMessageData char(32767);
|
||||
dcl-ds ApiError likeds(MD_APIError_T);
|
||||
|
||||
clear ApiError;
|
||||
ApiError.BytesProvided = %size(ApiError);
|
||||
|
||||
MessageDataLength = %len(MessageData);
|
||||
ApiMessageData = MessageData;
|
||||
|
||||
QMHSNDPM(
|
||||
MessageId :
|
||||
MD_MessageFile :
|
||||
ApiMessageData :
|
||||
MessageDataLength :
|
||||
MessageType :
|
||||
CallStackEntry :
|
||||
CallStackCounter :
|
||||
MessageKey :
|
||||
ApiError);
|
||||
|
||||
// Keine weitere Fehlerbehandlung hier.
|
||||
// MD_SendMessage ist die unterste Schicht der Message-Infrastruktur.
|
||||
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_CheckDuplicateDevices
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_CheckDuplicateDevices;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-s DeviceIndex1 int(10);
|
||||
dcl-s DeviceIndex2 int(10);
|
||||
|
||||
|
||||
for DeviceIndex1 = 1
|
||||
to MediaDefinition.NumberOfDevices - 1;
|
||||
|
||||
for DeviceIndex2 = DeviceIndex1 + 1
|
||||
to MediaDefinition.NumberOfDevices;
|
||||
|
||||
if %trim(
|
||||
MediaDefinition.Device(DeviceIndex1).DeviceName)
|
||||
=
|
||||
%trim(
|
||||
MediaDefinition.Device(DeviceIndex2).DeviceName);
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0007' :
|
||||
MediaDefinition.Device(DeviceIndex1).DeviceName);
|
||||
|
||||
endif;
|
||||
|
||||
endfor;
|
||||
|
||||
endfor;
|
||||
|
||||
end-proc;
|
||||
|
||||
//=====================================================================
|
||||
//
|
||||
// MD_CheckDuplicateSequences
|
||||
//
|
||||
//=====================================================================
|
||||
|
||||
dcl-proc MD_CheckDuplicateSequences;
|
||||
|
||||
dcl-pi *n;
|
||||
|
||||
MediaDefinition
|
||||
likeds(MD_MediaDefinition_T) const;
|
||||
|
||||
end-pi;
|
||||
|
||||
|
||||
dcl-s DeviceIndex int(10);
|
||||
dcl-s MediaFileIndex1 int(10);
|
||||
dcl-s MediaFileIndex2 int(10);
|
||||
|
||||
|
||||
for DeviceIndex = 1
|
||||
to MediaDefinition.NumberOfDevices;
|
||||
|
||||
for MediaFileIndex1 = 1
|
||||
to MediaDefinition.Device(DeviceIndex)
|
||||
.NumberOfMediaFiles - 1;
|
||||
|
||||
for MediaFileIndex2 = MediaFileIndex1 + 1
|
||||
to MediaDefinition.Device(DeviceIndex)
|
||||
.NumberOfMediaFiles;
|
||||
|
||||
if MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex1)
|
||||
.SequenceNumber
|
||||
|
||||
=
|
||||
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex2)
|
||||
.SequenceNumber;
|
||||
|
||||
MD_SendEscape(
|
||||
'MDF0019' :
|
||||
%char(
|
||||
MediaDefinition.Device(DeviceIndex)
|
||||
.MediaFile(MediaFileIndex1)
|
||||
.SequenceNumber));
|
||||
|
||||
endif;
|
||||
|
||||
endfor;
|
||||
|
||||
endfor;
|
||||
|
||||
endfor;
|
||||
|
||||
end-proc;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user