*** tcl8.4.6/generic/tclCmdIL.c Thu Jul 17 13:29:19 2003 --- tclCmdIL.c Fri Aug 27 04:48:36 2004 *************** *** 3255,3261 **** int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument values. */ { ! int i, index, unique; Tcl_Obj *resultPtr; int length; Tcl_Obj *cmdPtr, **listObjPtrs; --- 3255,3261 ---- int objc; /* Number of arguments. */ Tcl_Obj *CONST objv[]; /* Argument values. */ { ! int i, index, unique, indices; Tcl_Obj *resultPtr; int length; Tcl_Obj *cmdPtr, **listObjPtrs; *************** *** 3266,3272 **** * comparison function */ static CONST char *switches[] = { "-ascii", "-command", "-decreasing", "-dictionary", "-increasing", ! "-index", "-integer", "-real", "-unique", (char *) NULL }; resultPtr = Tcl_GetObjResult(interp); --- 3266,3272 ---- * comparison function */ static CONST char *switches[] = { "-ascii", "-command", "-decreasing", "-dictionary", "-increasing", ! "-index", "-integer", "-real", "-unique", "-indices", (char *) NULL }; resultPtr = Tcl_GetObjResult(interp); *************** *** 3286,3291 **** --- 3286,3292 ---- sortInfo.resultCode = TCL_OK; cmdPtr = NULL; unique = 0; + indices = 0; for (i = 1; i < objc-1; i++) { if (Tcl_GetIndexFromObj(interp, objv[i], switches, "option", 0, &index) != TCL_OK) { *************** *** 3337,3342 **** --- 3338,3346 ---- case 8: /* -unique */ unique = 1; break; + case 9: /* -indices */ + indices = 1; + break; } } if (sortInfo.sortMode == SORTMODE_COMMAND) { *************** *** 3383,3398 **** Tcl_ResetResult(interp); resultPtr = Tcl_GetObjResult(interp); if (unique) { ! for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){ ! if (elementPtr->count == 0) { ! Tcl_ListObjAppendElement(interp, resultPtr, elementPtr->objPtr); } } } else { ! for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){ ! Tcl_ListObjAppendElement(interp, resultPtr, elementPtr->objPtr); } } } --- 3387,3418 ---- Tcl_ResetResult(interp); resultPtr = Tcl_GetObjResult(interp); if (unique) { ! if (indices) { ! for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){ ! if (elementPtr->count == 0) { ! Tcl_ListObjAppendElement(interp, resultPtr, ! Tcl_NewIntObj(elementPtr - &elementArray[0])); ! } ! } ! } else { ! for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){ ! if (elementPtr->count == 0) { ! Tcl_ListObjAppendElement(interp, resultPtr, elementPtr->objPtr); + } } } } else { ! if (indices) { ! for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){ ! Tcl_ListObjAppendElement(interp, resultPtr, ! Tcl_NewIntObj(elementPtr - &elementArray[0])); ! } ! } else { ! for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){ ! Tcl_ListObjAppendElement(interp, resultPtr, elementPtr->objPtr); + } } } }