in src/generic/modwebsh_ap.c [461:518]
int Web_ConfigPath_AP(Tcl_Interp * interp, int objc, Tcl_Obj * CONST objv[]) {
/* these options should be in sync with the options in Web_Cfg
* not the order or anything, but the actual text strings */
static TCLCONST char *subCmd[] = {
"script",
"server_root",
"document_root",
"interpclass",
NULL
};
enum subCmd
{
SCRIPT,
SERVER_ROOT,
DOCUMENT_ROOT,
INTERPCLASS
};
int index;
if (Tcl_GetIndexFromObj(interp, objv[1], subCmd, "subcommand", 0, &index)
!= TCL_OK) {
/* let the caller handle the web::config command */
Tcl_ResetResult(interp);
return TCL_CONTINUE;
}
WebAssertObjc(objc != 2, 2, NULL);
switch ((enum subCmd) index) {
case SCRIPT: {
request_rec *r;
r = (request_rec *)Tcl_GetAssocData(interp, WEB_AP_ASSOC_DATA, NULL);
Tcl_SetObjResult(interp, Tcl_NewStringObj(r->filename, -1));
break;
}
case SERVER_ROOT: {
Tcl_SetObjResult(interp, Tcl_NewStringObj(ap_server_root, -1));
break;
}
case DOCUMENT_ROOT: {
request_rec *r;
r = (request_rec *)Tcl_GetAssocData(interp, WEB_AP_ASSOC_DATA, NULL);
Tcl_SetObjResult(interp, Tcl_NewStringObj(ap_document_root(r), -1));
break;
}
case INTERPCLASS: {
WebInterp *webInterp;
webInterp = (WebInterp *)Tcl_GetAssocData(interp, WEB_INTERP_ASSOC_DATA, NULL);
Tcl_SetObjResult(interp, Tcl_NewStringObj(webInterp->interpClass->filename, -1));
break;
}
}
return TCL_OK;
}