LPARAMETER nCount, nSetSize * Parameter checking omitted *!* * The array for results must be private *!* DIMENSION aResult[1, nSetSize] PRIVATE nRecCount * Create a cursor to hold results cFieldList = "" FOR nItem = 1 TO nSetSize cFieldList = cFieldList + "Item" + TRANSFORM(nItem) + " N(4)," ENDFOR cFieldList = LEFT(cFieldList, LEN(cFieldList)-1) CREATE CURSOR Results (&cFieldList) nRecCount = 0 GetNextValue(nCount, nSetSize, 1, 1) RETURN nRecCount PROCEDURE GetNextValue LPARAMETERS nCount, nSetSize, nStartPos, nResultPos * Parameter checking omitted LOCAL nPos, nOldRecCount FOR nPos = nStartPos TO nCount-nSetSize+nResultPos nOldRecCount = nRecCount * Drill down first IF nResultPos<nSetSize GetNextValue(nCount, nSetSize, nPos+1, nResultPos+1) ENDIF * Save results IF nResultPos=nSetSize nRecCount = nRecCount + 1 APPEND BLANK IN Results ENDIF GO nOldRecCount + 1 SCAN REST REPLACE ("Item"+TRANSFORM(nResultPos)) WITH nPos IN Results ENDSCAN ENDFOR RETURNTamar