// Sort API d SortFile pr ExtPgm('QLGSORT') d RequestControlBlock... d 80a d InputDataBuffer... d 1a d OutputDataBuffer... d 1a d LengthOfOutputBuffer... d 10u 0 d LengthOfReturnedData... d 10u 0 d ErrorCode 256a d ReturnedRecordsFeedback... d 20a d ReturnedRecordsFeedbackLen... d 10u 0 // Request Control Block layout d RequestControlBlockDS... d ds Qualified d LenOfControlBlock... d 10u 0 Inz(%Size(RequestControlBlockDS)) d TypeOfRequest 10u 0 Inz(1) d Reserved1 10u 0 Inz d Options 10u 0 Inz(4) d RecordLength 10u 0 Inz(0) Use file rec length d RecordCount 10u 0 Inz(0) d OffsetToKeyList... d 10u 0 Inz(77) d NumberOfKeys 10u 0 Inz(2) d OffsetToNatLangInfo... d 10u 0 Inz d OffsetToInputFileList... d 10u 0 Inz d NumberOfInputFiles... d 10u 0 Inz(1) d OffsetToOutputFileList... d 10u 0 Inz d NumberOfOutputFiles... d 10u 0 Inz(1) d LengthOfKey 10u 0 Inz(0) d LengthOfNatLangInfo... d 10u 0 Inz(0) d LengthOfInputFileEntry... d 10u 0 Inz(30) d LengthOfOutputFileEntry... d 10u 0 Inz(30) d OffsetToNullByteMap... d 10u 0 Inz(0) d OffsetToVarRecInfo... d 10u 0 Inz(0) d Reserved2 10u 0 Inz d KeyListEntries... d LikeDS(KeyListEntriesDS) Dim(2) d InputFileList... d LikeDS(InputFileListDS) d OutputFileList... d LikeDS(OutputFileListDS) // Key list entries d KeyListEntriesDS... d ds Template Qualified d KeyStartPos 10u 0 d KeySize 10u 0 d KeyDataType 10u 0 d KeySortOrder 10u 0 d* KeyOrdinalPos 10u 0 // Input file list d InputFileListDS... d ds Template Qualified d FileName 20a d MemberName 10a d VarLenRec 10u 0 d NullCapable 10u 0 // Output file list d OutputFileListDS... d ds Template Qualified d FileName 20a d MemberName 10a d VarLenRec 10u 0 d NullCapable 10u 0 // Additional sort API parameters d InputDataBuffer... d s 1a d OutputDataBuffer... d s 1a d LengthOfOutputDataBuffer... d s 10u 0 Inz(0) d LengthOfReturnedData... d s 10u 0 Inz(0) // Returned records feedback area d ReturnedRecordsFeedback... d ds Qualified d BytesAvailable... d 10u 0 Inz(8) d BytesReturned 10u 0 Inz d OffsetToRecordArray... d 10u 0 Inz d NumberOfOutputFiles... d 10u 0 Inz d ReturnedRecords... d 10u 0 Inz d ReturnedRecordsFeedbackLen... d s 10u 0 /Free // File type key field RequestControlBlockDS.KeyListEntries(1).KeyStartPos = 13; RequestControlBlockDS.KeyListEntries(1).KeySize = 1; RequestControlBlockDS.KeyListEntries(1).KeyDataType = 6; RequestControlBlockDS.KeyListEntries(1).KeySortOrder = 1; // RequestControlBlockDS.KeyListEntries(1).KeyOrdinalPos = 1; // File name key field RequestControlBlockDS.KeyListEntries(2).KeyStartPos = 61; RequestControlBlockDS.KeyListEntries(2).KeySize = 128; RequestControlBlockDS.KeyListEntries(2).KeyDataType = 6; RequestControlBlockDS.KeyListEntries(2).KeySortOrder = 1; // RequestControlBlockDS.KeyListEntries(2).KeyOrdinalPos = 2; RequestControlBlockDS.LengthOfKey = %Size(KeyListEntriesDS) * %Elem(RequestControlBlockDS.KeyListEntries); // Input file name RequestControlBlockDS.InputFileList.FileName = ImageControlDS.DirListLib + ImageControlDS.DirListTbl; RequestControlBlockDS.InputFileList.MemberName = ImageControlDS.DirListMbr; RequestControlBlockDS.InputFileList.VarLenRec = 0; RequestControlBlockDS.InputFileList.NullCapable = 0; // Output file name RequestControlBlockDS.OutputFileList.FileName = ImageControlDS.SortLib + ImageControlDS.SortTable; RequestControlBlockDS.OutputFileList.MemberName = ImageControlDS.SortMember; RequestControlBlockDS.OutputFileList.VarLenRec = 0; RequestControlBlockDS.OutputFileList.NullCapable = 0; // Sort the image work file RequestControlBlockDS.OffsetToInputFileList = 80 + RequestControlBlockDS.LengthOfKey; RequestControlBlockDS.OffsetToOutputFileList = 80 + RequestControlBlockDS.LengthOfKey + %Size(InputFileListDS); apiError.BytesProvided = 0; SortFile(RequestControlBlockDS :InputDataBuffer :OutputDataBuffer :LengthOfOutputDataBuffer :LengthOfReturnedData :apiError :ReturnedRecordsFeedback :ReturnedRecordsFeedbackLen);