/*================( Quick sort at position )================*/ QSortAtPos: Procedure Expose stem. Arg left, right, sPos, sLen If Datatype( fromX, "NUM" ) = 0 | fromX < 1 Then fromX = 1 If Datatype( toX, "NUM" ) = 0 | toX > stem.0 Then toX = stem.0 If right > left Then Do i = left j = right k = (left+right)%2 If DataType( sPos, 'NUM' ) = 0 ! sPos < 1 Then sPos = 1 If DataType( sLen, 'NUM' ) = 0 ! sLen < 1 Then sLen = Length( stem.k ) - sPos + 1 x = Substr( stem.k, sPos, sLen ) Do Until i > j Do While Substr( stem.i, sPos, sLen ) << x; i = i + 1; End Do While Substr( stem.j, sPos, sLen ) >> x; j = j - 1; End If i <= j Then Do xchg = stem.i stem.i = stem.j stem.j = xchg i = i + 1 j = j - 1 End End y = QSort( left, j, sPos, sLen ) y = QSort( i,right, sPos, sLen ) End Return right - left /*** End QSortAtPos ***/