Mercurial > pidgin.yaz
comparison plugins/tcl/tcl_cmds.c @ 13845:d0ff520f87da
[gaim-migrate @ 16301]
This is tcl /cmd support. It doesn't currently let tcl plugins return error
message (I couldn't ever get that to work). But other than that it works.
Ethan please look over this when you get a chance.
committer: Tailor Script <tailor@pidgin.im>
author | Etan Reisner <pidgin@unreliablesource.net> |
---|---|
date | Wed, 21 Jun 2006 04:57:27 +0000 |
parents | 597beb5c9de1 |
children |
comparison
equal
deleted
inserted
replaced
13844:597beb5c9de1 | 13845:d0ff520f87da |
---|---|
539 } | 539 } |
540 | 540 |
541 return TCL_OK; | 541 return TCL_OK; |
542 } | 542 } |
543 | 543 |
544 int tcl_cmd_cmd(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | |
545 { | |
546 const char *cmds[] = { "register", "unregister", NULL }; | |
547 enum { CMD_CMD_REGISTER, CMD_CMD_UNREGISTER } cmd; | |
548 struct tcl_cmd_handler *handler; | |
549 Tcl_Obj *result = Tcl_GetObjResult(interp); | |
550 GaimCmdId id; | |
551 int error; | |
552 | |
553 if (objc < 2) { | |
554 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); | |
555 return TCL_ERROR; | |
556 } | |
557 | |
558 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) | |
559 return error; | |
560 | |
561 switch (cmd) { | |
562 case CMD_CMD_REGISTER: | |
563 if (objc != 9) { | |
564 Tcl_WrongNumArgs(interp, 2, objv, "cmd arglist priority flags prpl_id proc helpstr"); | |
565 return TCL_ERROR; | |
566 } | |
567 handler = g_new0(struct tcl_cmd_handler, 1); | |
568 handler->cmd = objv[2]; | |
569 handler->args = Tcl_GetString(objv[3]); | |
570 handler->nargs = strlen(handler->args); | |
571 if ((error = Tcl_GetIntFromObj(interp, objv[4], | |
572 &handler->priority)) != TCL_OK) { | |
573 g_free(handler); | |
574 return error; | |
575 } | |
576 if ((error = Tcl_GetIntFromObj(interp, objv[5], | |
577 &handler->flags)) != TCL_OK) { | |
578 g_free(handler); | |
579 return error; | |
580 } | |
581 handler->prpl_id = Tcl_GetString(objv[6]); | |
582 handler->proc = objv[7]; | |
583 handler->helpstr = Tcl_GetString(objv[8]); | |
584 handler->interp = interp; | |
585 if ((id = tcl_cmd_register(handler)) == 0) { | |
586 tcl_cmd_handler_free(handler); | |
587 Tcl_SetIntObj(result, 0); | |
588 } else { | |
589 handler->id = id; | |
590 Tcl_SetIntObj(result, id); | |
591 } | |
592 break; | |
593 case CMD_CMD_UNREGISTER: | |
594 if (objc != 3) { | |
595 Tcl_WrongNumArgs(interp, 2, objv, "id"); | |
596 return TCL_ERROR; | |
597 } | |
598 if ((error = Tcl_GetIntFromObj(interp, objv[2], | |
599 (int *)&id)) != TCL_OK) | |
600 return error; | |
601 tcl_cmd_unregister(id, interp); | |
602 break; | |
603 } | |
604 | |
605 return TCL_OK; | |
606 } | |
607 | |
544 int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 608 int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
545 { | 609 { |
546 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem; | 610 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem; |
547 const char *cmds[] = { "account", "displayname", "handle", "list", NULL }; | 611 const char *cmds[] = { "account", "displayname", "handle", "list", NULL }; |
548 enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd; | 612 enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd; |