This OS-independent macrolibrary can be included to 32bit programs written in EuroAssembler.
The library contains macroinstructions which sort data in memory.
sort32 HEAD
ShellSort %MACRO TablePtr,NrOfRecords,RecordSize,CallbackProc
PUSHD %CallbackProc,%RecordSize,%NrOfRecords,%NrOfRecords,%TablePtr
CALL ShellSort32@RT:
ShellSort32@RT: PROC1
PUSHAD
MOV EBP,ESP
%ShellSortTablePtr %SET EBP+36
%ShellSortNrOfRecords %SET EBP+40
%ShellSortRecordNr %SET EBP+44
%ShellSortRecordSize %SET EBP+48
%ShellSortCallbackProc %SET EBP+52
.10: SARD [%ShellSortNrOfRecords],1
JNG .90:
MOV ECX,[%ShellSortRecordNr]
SUB ECX,[%ShellSortNrOfRecords]
MOV EBX,1
.20: MOV ESI,EBX
.30: MOV EDI,ESI
ADD EDI,[%ShellSortNrOfRecords]
PUSH ESI,EDI
MOV EAX,ESI
DEC EAX
MULD [%ShellSortRecordSize]
ADD EAX,[%ShellSortTablePtr]
MOV ESI,EAX
MOV EAX,EDI
DEC EAX
MULD [%ShellSortRecordSize]
ADD EAX,[%ShellSortTablePtr]
MOV EDI,EAX
MOV EDX,[%ShellSortNrOfRecords]
CALL [%ShellSortCallbackProc]
POP EDI,ESI
JNC .40:
SUB ESI,[%ShellSortNrOfRecords]
JA .30:
.40: INC EBX
CMP EBX,ECX
JNA .20:
JMP .10:
.90: POPAD
RET 5*4
ENDPROC1 ShellSort32@RT:
%ENDMACRO ShellSort
ENDHEAD sort32