rem: char           *tag, *endtag, *string;
add: char           *string;
context: RegisterCmd(ClientData arg, Tcl_Interp *interp, int argc,		    char **argv, int isproc){    NsInterp       *itPtr = arg;    NsServer	   *servPtr = itPtr->servPtr;    char           *tag, *endtag, *string;    Tcl_HashEntry  *hPtr;    int             new;    Tag         *tagPtr;        if (argc != 4 && argc != 3) {	Tcl_AppendResult(interp, "wrong # args: should be \"",			 argv[0], " tag ?endtag? proc\"", NULL);	return TCL_ERROR;    }    tag = argv[1];    string = argv[argc-1];    endtag = (argc == 3 ? NULL : argv[2]);    Ns_MutexLock(&servPtr->adp.taglock);    hPtr = Tcl_CreateHashEntry(&servPtr->adp.tags, tag, &new);    if (new) {    	tagPtr = ns_malloc(sizeof(Tag));    	tagPtr->tag = ns_strdup(tag);    	tagPtr->endtag = endtag ? ns_strdup(endtag) : NULL;    	tagPtr->string = ns_strdup(string);    	tagPtr->isproc = isproc;    	Tcl_SetHashValue(hPtr, (void *) tagPtr);    }    Ns_MutexUnlock(&servPtr->adp.taglock);    if (!new) {	Tcl_AppendResult(interp, "ADP tag \"", tag, "\" already registered.",			 NULL);	return TCL_ERROR;    }    return TCL_OK;}