Posted to tcl by patthoyts at Mon May 12 08:44:08 GMT 2008view raw
- typedef struct Ensemble {
- const char *name;
- Tcl_ObjCmdProc *command;
- struct Ensemble *ensemble;
- } Ensemble;
- static Ensemble Ftd2xxEnsemble[] = {
- { "open", OpenCmd, NULL },
- { "list", ListCmd, NULL },
- { "purge", PurgeCmd, NULL },
- { "reset", ResetCmd, NULL },
- { NULL, NULL, NULL }
- };
- static int
- EnsembleCmd(ClientData clientData, Tcl_Interp *interp,
- int objc, Tcl_Obj *const objv[])
- {
- Ensemble *ensemble = Ftd2xxEnsemble;
- int option = 1, index;
- while (option < objc) {
- if (Tcl_GetIndexFromObjStruct(interp, objv[option], ensemble,
- sizeof(ensemble[0]), "command", 0, &index) != TCL_OK)
- {
- return TCL_ERROR;
- }
- if (ensemble[index].command) {
- return ensemble[index].command(clientData, interp, objc, objv);
- }
- ensemble = ensemble[index].ensemble;
- ++option;
- }
- Tcl_WrongNumArgs(interp, option, objv, "option ?arg arg ...?");
- return TCL_ERROR;
- }