rem: if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 1,
add: if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0,
context: NsTclDriverObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv){    Tcl_DString ds;    Driver *drvPtr;    char *fullname;    static CONST char *opts[] = {        "list", "query", NULL    };    enum {        DListIdx, DQueryIdx    } opt;    if (objc < 2) {        Tcl_WrongNumArgs(interp, 1, objv, "option ?args?");        return TCL_ERROR;    }    if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 1,                (int *) &opt) != TCL_OK) {        return TCL_ERROR;    }    switch (opt) {    case DListIdx:	drvPtr = firstDrvPtr;	while (drvPtr != NULL) {	    Tcl_AppendElement(interp, drvPtr->fullname);	    drvPtr = drvPtr->nextPtr;	}	break;    case DQueryIdx:        if (objc != 3) {            Tcl_WrongNumArgs(interp, 2, objv, "driver");            return TCL_ERROR;	}	fullname = Tcl_GetString(objv[2]);	drvPtr = firstDrvPtr;	while (drvPtr != NULL) {	    if (STREQ(fullname, drvPtr->fullname)) {		break;	    }	    drvPtr = drvPtr->nextPtr;	}	if (drvPtr == NULL) {	    Tcl_AppendResult(interp, "no such driver: ", fullname, NULL);	    return TCL_ERROR;	}	Tcl_DStringInit(&ds);    	Ns_MutexLock(&drvPtr->lock);    	while (drvPtr->flags & DRIVER_QUERY) {	    Ns_CondWait(&drvPtr->cond, &drvPtr->lock);    	}    	drvPtr->queryPtr = &ds;    	drvPtr->flags |= DRIVER_QUERY;    	TriggerDriver(drvPtr);    	while (drvPtr->flags & DRIVER_QUERY) {	    Ns_CondWait(&drvPtr->cond, &drvPtr->lock);    	}    	Ns_MutexUnlock(&drvPtr->lock);	Tcl_DStringResult(interp, &ds);	break;    }    return TCL_OK;}