1002 lines
18 KiB
RPGLE
1002 lines
18 KiB
RPGLE
**FREE
|
|
//=====================================================================
|
|
//
|
|
// Program.......: MEDDFNSRV
|
|
//
|
|
// Description...: Media Definition Service Procedures
|
|
//
|
|
// Serviceprogramm erstellen mit :
|
|
// CRTSRVPGM SRVPGM(GOSCH1/MEDDFNSRV)
|
|
// MODULE(GOSCH1/MEDDFNSRV
|
|
// GOSCH1/MEDDFNBLD)
|
|
// EXPORT(*SRCFILE)
|
|
// SRCFILE(GOSCH1/MEDDFN)
|
|
// SRCMBR(MEDDFNSRVB)
|
|
// TGTRLS(*CURRENT)
|
|
// TEXT('MEDDFN Service Program')
|
|
//
|
|
//=====================================================================
|
|
|
|
ctl-opt
|
|
option(*srcstmt:*nodebugio)
|
|
nomain;
|
|
|
|
|
|
//=====================================================================
|
|
//
|
|
// Includes
|
|
//
|
|
//=====================================================================
|
|
|
|
/COPY './meddfn_h.rpgle'
|
|
/COPY './meddfnap_h.rpgle'
|
|
|
|
// /copy GOSCH1/MEDDFN,MEDDFN_H
|
|
// /copy GOSCH1/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;
|
|
|
|
|