Fehlerverarbeitung initial

This commit is contained in:
2026-09-13 16:51:29 +02:00
parent 7a2671ea24
commit feaaa1b845
4 changed files with 338 additions and 99 deletions
+17
View File
@@ -64,6 +64,23 @@ dcl-s MD_DeviceAllocateMinimum int(10) inz(2) const;
dcl-s MD_SaveFormatAuto int(10) inz(-2) const;
dcl-s MD_SaveFormatSerial int(10) inz(-1) const;
dcl-s MD_SaveFormatParallel int(10) inz(0) const;
//=====================================================================
// Error Information
//
// Returned by all public MEDDFN procedures.
//=====================================================================
dcl-ds MD_Error_T qualified template;
HasError ind;
MessageID char(7);
MessageData char(128);
end-ds;
dcl-s MD_VOLUME_ID_LENGTH int(5) inz(6) const;
//=====================================================================
+18 -7
View File
@@ -14,18 +14,29 @@ dcl-pr MD_CreateMediaDefinition;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
dcl-pr MD_DeleteMediaDefinition;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
end-pr;
Error
likeds(MD_Error_T);
dcl-pr MD_RetrieveMediaDefinition;
end-pr;
MediaDefinition
likeds(MD_MediaDefinition_T);
end-pr;
dcl-pr MD_RetrieveMediaDefinition;
MediaDefinition
likeds(MD_MediaDefinition_T);
Error
likeds(MD_Error_T);
end-pr;
+264 -65
View File
@@ -81,6 +81,9 @@ dcl-pr MD_CreateMediaDefinition ;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -89,6 +92,9 @@ dcl-pr MD_DeleteMediaDefinition ;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -97,6 +103,9 @@ dcl-pr MD_RetrieveMediaDefinition ;
MediaDefinition
likeds(MD_MediaDefinition_T);
Error
likeds(MD_Error_T);
end-pr;
@@ -106,11 +115,28 @@ end-pr;
//
//=====================================================================
dcl-pr MD_SetError;
Error
likeds(MD_Error_T);
MessageID
char(7) const;
MessageData
char(128) const;
end-pr;
dcl-pr MD_ValidateCreate;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -119,6 +145,9 @@ dcl-pr MD_ValidateDelete;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -127,6 +156,9 @@ dcl-pr MD_ValidateRetrieve;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -135,6 +167,9 @@ dcl-pr MD_CheckApiError;
ApiError
likeds(MD_APIError_T) const;
Error
likeds(MD_Error_T);
end-pr;
dcl-pr MD_SendMessage;
@@ -181,6 +216,9 @@ dcl-pr MD_CheckDuplicateDevices;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -189,6 +227,9 @@ dcl-pr MD_CheckDuplicateSequences;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pr;
@@ -207,6 +248,9 @@ dcl-proc MD_CreateMediaDefinition export;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
@@ -232,7 +276,21 @@ dcl-proc MD_CreateMediaDefinition export;
// Validate
//--------------------------------------------------------------
MD_ValidateCreate(MediaDefinition);
clear Error;
MD_ValidateCreate(
MediaDefinition :
Error);
if Error.HasError;
MD_SendEscape(
Error.MessageID :
Error.MessageData);
return;
endif;
//--------------------------------------------------------------
@@ -303,7 +361,19 @@ dcl-proc MD_CreateMediaDefinition export;
// dump(a);
MD_CheckApiError(ApiError);
MD_CheckApiError(
ApiError :
Error);
if Error.HasError;
MD_SendEscape(
Error.MessageID :
Error.MessageData);
return;
endif;
end-proc;
@@ -321,6 +391,9 @@ dcl-proc MD_DeleteMediaDefinition export;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
@@ -334,7 +407,21 @@ dcl-proc MD_DeleteMediaDefinition export;
MD_ValidateDelete(MediaDefinition);
clear Error;
MD_ValidateDelete(
MediaDefinition :
Error);
if Error.HasError;
MD_SendEscape(
Error.MessageID :
Error.MessageData);
return;
endif;
QualifiedObject.ObjectName =
@@ -355,7 +442,19 @@ dcl-proc MD_DeleteMediaDefinition export;
ApiError);
MD_CheckApiError(ApiError);
MD_CheckApiError(
ApiError :
Error);
if Error.HasError;
MD_SendEscape(
Error.MessageID :
Error.MessageData);
return;
endif;
end-proc;
@@ -373,6 +472,9 @@ dcl-proc MD_RetrieveMediaDefinition export;
MediaDefinition
likeds(MD_MediaDefinition_T);
Error
likeds(MD_Error_T);
end-pi;
@@ -392,7 +494,21 @@ dcl-proc MD_RetrieveMediaDefinition export;
dcl-s ApiReceiverLength int(10);
MD_ValidateRetrieve(MediaDefinition);
clear Error;
MD_ValidateRetrieve(
MediaDefinition :
Error);
if Error.HasError;
MD_SendEscape(
Error.MessageID :
Error.MessageData);
return;
endif;
QualifiedObject.ObjectName =
@@ -422,19 +538,60 @@ dcl-proc MD_RetrieveMediaDefinition export;
ApiError);
MD_CheckApiError(ApiError);
MD_CheckApiError(
ApiError :
Error);
// TODO:
// Parser folgt mit MEDDFNPRS
if Error.HasError;
// MD_ParseRetrieveBuffer(
MD_SendEscape(
Error.MessageID :
Error.MessageData);
// Receiver.Data :
return;
// MediaDefinition);
endif;
MD_ParseRetrieveBuffer(
Receiver.Data :
MediaDefinition);
end-proc;
//=====================================================================
//
// MD_SetError
//
// Stores the first error for the public procedure.
//
//=====================================================================
dcl-proc MD_SetError;
dcl-pi *n;
Error
likeds(MD_Error_T);
MessageID
char(7) const;
MessageData
char(128) const;
end-pi;
if not Error.HasError;
Error.HasError = *on;
Error.MessageID = MessageID;
Error.MessageData = MessageData;
endif;
end-proc;
//=====================================================================
//
// MD_ValidateCreate
@@ -448,6 +605,9 @@ dcl-proc MD_ValidateCreate;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
@@ -462,9 +622,10 @@ dcl-proc MD_ValidateCreate;
if %trim(MediaDefinition.MediaDefinitionName) = '';
MD_SendEscape(
'MDF0001' :
*blanks);
MD_SetError(
Error :
'MDF0001' :
*blanks);
endif;
@@ -475,9 +636,10 @@ dcl-proc MD_ValidateCreate;
if %trim(MediaDefinition.LibraryName) = '';
MD_SendEscape(
'MDF0002' :
*blanks);
MD_SetError(
Error :
'MDF0002' :
*blanks);
endif;
@@ -490,9 +652,10 @@ dcl-proc MD_ValidateCreate;
or MediaDefinition.NumberOfDevices >
MD_MaxDeviceDefinitions;
MD_SendEscape(
'MDF0003' :
*blanks);
MD_SetError(
Error :
'MDF0003' :
*blanks);
endif;
@@ -514,9 +677,10 @@ dcl-proc MD_ValidateCreate;
other;
MD_SendEscape(
'MDF0004' :
*blanks);
MD_SetError(
Error :
'MDF0004' :
*blanks);
endsl;
@@ -538,9 +702,10 @@ dcl-proc MD_ValidateCreate;
other;
MD_SendEscape(
'MDF0005' :
*blanks);
MD_SetError(
Error :
'MDF0005' :
*blanks);
endsl;
@@ -551,18 +716,20 @@ dcl-proc MD_ValidateCreate;
if MediaDefinition.MaximumParallelResources < 0;
MD_SendEscape(
'MDF0012' :
*blanks);
MD_SetError(
Error :
'MDF0012' :
*blanks);
endif;
if MediaDefinition.MinimumParallelResources < 0;
MD_SendEscape(
'MDF0013' :
*blanks);
MD_SetError(
Error :
'MDF0013' :
*blanks);
endif;
@@ -570,9 +737,10 @@ dcl-proc MD_ValidateCreate;
if MediaDefinition.MinimumParallelResources >
MediaDefinition.MaximumParallelResources;
MD_SendEscape(
'MDF0014' :
*blanks);
MD_SetError(
Error :
'MDF0014' :
*blanks);
endif;
@@ -587,9 +755,10 @@ dcl-proc MD_ValidateCreate;
if %trim(
MediaDefinition.Device(DeviceIndex).DeviceName) = '';
MD_SendEscape(
'MDF0006' :
*blanks);
MD_SetError(
Error :
'MDF0006' :
*blanks);
endif;
@@ -597,9 +766,10 @@ dcl-proc MD_ValidateCreate;
if MediaDefinition.Device(DeviceIndex)
.NumberOfMediaFiles < 1;
MD_SendEscape(
'MDF0017' :
MediaDefinition.Device(DeviceIndex).DeviceName);
MD_SetError(
Error :
'MDF0017' :
MediaDefinition.Device(DeviceIndex).DeviceName);
endif;
@@ -616,7 +786,8 @@ dcl-proc MD_ValidateCreate;
.MediaFile(MediaFileIndex)
.SequenceNumber <= 0;
MD_SendEscape(
MD_SetError(
Error :
'MDF0009' :
*blanks);
@@ -631,7 +802,8 @@ dcl-proc MD_ValidateCreate;
.NumberOfVolumeIdentifiers >
MD_MaxVolumeIdentifiers;
MD_SendEscape(
MD_SetError(
Error :
'MDF0010' :
*blanks);
@@ -653,9 +825,10 @@ dcl-proc MD_ValidateCreate;
.VolumeIdentifier(VolumeIndex)
.VolumeIdentifier) = '';
MD_SendEscape(
'MDF0011' :
*blanks);
MD_SetError(
Error :
'MDF0011' :
*blanks);
endif;
@@ -669,9 +842,13 @@ dcl-proc MD_ValidateCreate;
// Duplicate Checks
//--------------------------------------------------------------
MD_CheckDuplicateDevices(MediaDefinition);
MD_CheckDuplicateDevices(
MediaDefinition :
Error);
MD_CheckDuplicateSequences(MediaDefinition);
MD_CheckDuplicateSequences(
MediaDefinition :
Error);
end-proc;
@@ -690,23 +867,28 @@ dcl-proc MD_ValidateDelete;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
if %trim(MediaDefinition.MediaDefinitionName) = '';
MD_SendEscape(
'MDF0001' :
*blanks);
MD_SetError(
Error :
'MDF0001' :
*blanks);
endif;
if %trim(MediaDefinition.LibraryName) = '';
MD_SendEscape(
'MDF0002' :
*blanks);
MD_SetError(
Error :
'MDF0002' :
*blanks);
endif;
@@ -726,23 +908,28 @@ dcl-proc MD_ValidateRetrieve;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
if %trim(MediaDefinition.MediaDefinitionName) = '';
MD_SendEscape(
'MDF0001' :
*blanks);
MD_SetError(
Error :
'MDF0001' :
*blanks);
endif;
if %trim(MediaDefinition.LibraryName) = '';
MD_SendEscape(
'MDF0002' :
*blanks);
MD_SetError(
Error :
'MDF0002' :
*blanks);
endif;
@@ -763,6 +950,9 @@ dcl-proc MD_CheckApiError;
ApiError
likeds(MD_APIError_T) const;
Error
likeds(MD_Error_T);
end-pi;
@@ -779,9 +969,10 @@ dcl-proc MD_CheckApiError;
// Forward IBM message
//---------------------------------------------------------------
MD_SendEscape(
ApiError.MessageId :
'');
MD_SetError(
Error :
ApiError.MessageId :
'');
end-proc;
@@ -908,6 +1099,9 @@ dcl-proc MD_CheckDuplicateDevices;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
@@ -927,7 +1121,8 @@ dcl-proc MD_CheckDuplicateDevices;
%trim(
MediaDefinition.Device(DeviceIndex2).DeviceName);
MD_SendEscape(
MD_SetError(
Error :
'MDF0007' :
MediaDefinition.Device(DeviceIndex1).DeviceName);
@@ -952,6 +1147,9 @@ dcl-proc MD_CheckDuplicateSequences;
MediaDefinition
likeds(MD_MediaDefinition_T) const;
Error
likeds(MD_Error_T);
end-pi;
@@ -981,7 +1179,8 @@ dcl-proc MD_CheckDuplicateSequences;
.MediaFile(MediaFileIndex2)
.SequenceNumber;
MD_SendEscape(
MD_SetError(
Error :
'MDF0019' :
%char(
MediaDefinition.Device(DeviceIndex)
+15 -3
View File
@@ -43,6 +43,9 @@ dcl-ds MediaDefinition
dcl-ds OriginalDefinition
likeds(MD_MediaDefinition_T);
dcl-ds Error
likeds(MD_Error_T);
dcl-s DeviceIndex int(10);
dcl-s MediaIndex int(10);
dcl-s VolumeIndex int(10);
@@ -79,8 +82,11 @@ dsply 'Deleting existing MEDDFN...';
monitor;
clear Error;
MD_DeleteMediaDefinition(
MediaDefinition);
MediaDefinition :
Error);
dsply 'Delete completed';
@@ -97,8 +103,11 @@ endmon;
dsply 'Creating MEDDFN...';
clear Error;
MD_CreateMediaDefinition(
MediaDefinition);
MediaDefinition :
Error);
dsply 'Create completed';
@@ -116,8 +125,11 @@ OriginalDefinition = MediaDefinition;
dsply 'Retrieving MEDDFN...';
clear Error;
MD_RetrieveMediaDefinition(
MediaDefinition);
MediaDefinition :
Error);
dsply 'Retrieve completed';