Mercurial > pidgin
comparison libpurple/plugins/tcl/tcl_cmds.c @ 20166:3287445c05a8
The second in a series of Tcl-fixing patches from venks on
irc.freenode.net.
This replaces erroneous result returns (which used Tcl_Set*Obj on the
result retrieved by Tcl_GetObjResult) with Tcl_SetObjResult and new
objects.
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Wed, 19 Sep 2007 02:38:09 +0000 |
parents | 506f0f7f4f21 |
children | 5b6d6ea542b8 |
comparison
equal
deleted
inserted
replaced
20165:506f0f7f4f21 | 20166:3287445c05a8 |
---|---|
53 for (cur = purple_accounts_get_all(); cur != NULL; cur = g_list_next(cur)) { | 53 for (cur = purple_accounts_get_all(); cur != NULL; cur = g_list_next(cur)) { |
54 if (account == cur->data) | 54 if (account == cur->data) |
55 return account; | 55 return account; |
56 } | 56 } |
57 if (interp != NULL) | 57 if (interp != NULL) |
58 Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid account", -1); | 58 Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid account", -1)); |
59 return NULL; | 59 return NULL; |
60 } | 60 } |
61 | 61 |
62 static PurpleConversation *tcl_validate_conversation(Tcl_Obj *obj, Tcl_Interp *interp) | 62 static PurpleConversation *tcl_validate_conversation(Tcl_Obj *obj, Tcl_Interp *interp) |
63 { | 63 { |
72 for (cur = purple_get_conversations(); cur != NULL; cur = g_list_next(cur)) { | 72 for (cur = purple_get_conversations(); cur != NULL; cur = g_list_next(cur)) { |
73 if (convo == cur->data) | 73 if (convo == cur->data) |
74 return convo; | 74 return convo; |
75 } | 75 } |
76 if (interp != NULL) | 76 if (interp != NULL) |
77 Tcl_SetStringObj(Tcl_GetObjResult(interp), "invalid conversation", -1); | 77 Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid conversation", -1)); |
78 return NULL; | 78 return NULL; |
79 } | 79 } |
80 | 80 |
81 static PurpleConnection *tcl_validate_gc(Tcl_Obj *obj, Tcl_Interp *interp) | 81 static PurpleConnection *tcl_validate_gc(Tcl_Obj *obj, Tcl_Interp *interp) |
82 { | 82 { |
95 return NULL; | 95 return NULL; |
96 } | 96 } |
97 | 97 |
98 int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 98 int tcl_cmd_account(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
99 { | 99 { |
100 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem; | 100 Tcl_Obj *result, *list, *elem; |
101 const char *cmds[] = { "alias", "connect", "connection", "disconnect", | 101 const char *cmds[] = { "alias", "connect", "connection", "disconnect", |
102 "enabled", "find", "handle", "isconnected", | 102 "enabled", "find", "handle", "isconnected", |
103 "list", "presence", "protocol", "status", | 103 "list", "presence", "protocol", "status", |
104 "status_type", "status_types", "username", | 104 "status_type", "status_types", "username", |
105 NULL }; | 105 NULL }; |
137 return TCL_ERROR; | 137 return TCL_ERROR; |
138 } | 138 } |
139 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 139 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
140 return TCL_ERROR; | 140 return TCL_ERROR; |
141 alias = purple_account_get_alias(account); | 141 alias = purple_account_get_alias(account); |
142 Tcl_SetStringObj(result, alias ? (char *)alias : "", -1); | 142 Tcl_SetObjResult(interp, Tcl_NewStringObj(alias ? (char *)alias : "", -1)); |
143 break; | 143 break; |
144 case CMD_ACCOUNT_CONNECT: | 144 case CMD_ACCOUNT_CONNECT: |
145 if (objc != 3) { | 145 if (objc != 3) { |
146 Tcl_WrongNumArgs(interp, 2, objv, "account"); | 146 Tcl_WrongNumArgs(interp, 2, objv, "account"); |
147 return TCL_ERROR; | 147 return TCL_ERROR; |
162 | 162 |
163 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 163 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
164 return TCL_ERROR; | 164 return TCL_ERROR; |
165 Tcl_SetObjResult(interp, | 165 Tcl_SetObjResult(interp, |
166 purple_tcl_ref_new(PurpleTclRefConnection, | 166 purple_tcl_ref_new(PurpleTclRefConnection, |
167 purple_account_get_connection(account))); | 167 purple_account_get_connection(account))); |
168 break; | 168 break; |
169 case CMD_ACCOUNT_DISCONNECT: | 169 case CMD_ACCOUNT_DISCONNECT: |
170 if (objc != 3) { | 170 if (objc != 3) { |
171 Tcl_WrongNumArgs(interp, 2, objv, "account"); | 171 Tcl_WrongNumArgs(interp, 2, objv, "account"); |
172 return TCL_ERROR; | 172 return TCL_ERROR; |
181 return TCL_ERROR; | 181 return TCL_ERROR; |
182 } | 182 } |
183 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 183 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
184 return TCL_ERROR; | 184 return TCL_ERROR; |
185 if (objc == 3) { | 185 if (objc == 3) { |
186 Tcl_SetBooleanObj(result, | 186 Tcl_SetObjResult(interp, |
187 purple_account_get_enabled(account, | 187 Tcl_NewBooleanObj( |
188 purple_core_get_ui())); | 188 purple_account_get_enabled(account, |
189 purple_core_get_ui()))); | |
189 } else { | 190 } else { |
190 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &b)) != TCL_OK) | 191 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &b)) != TCL_OK) |
191 return TCL_ERROR; | 192 return TCL_ERROR; |
192 purple_account_set_enabled(account, purple_core_get_ui(), b); | 193 purple_account_set_enabled(account, purple_core_get_ui(), b); |
193 } | 194 } |
216 Tcl_WrongNumArgs(interp, 2, objv, "account"); | 217 Tcl_WrongNumArgs(interp, 2, objv, "account"); |
217 return TCL_ERROR; | 218 return TCL_ERROR; |
218 } | 219 } |
219 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 220 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
220 return TCL_ERROR; | 221 return TCL_ERROR; |
221 Tcl_SetBooleanObj(result, purple_account_is_connected(account)); | 222 Tcl_SetObjResult(interp, |
223 Tcl_NewBooleanObj( | |
224 purple_account_is_connected(account))); | |
222 break; | 225 break; |
223 case CMD_ACCOUNT_LIST: | 226 case CMD_ACCOUNT_LIST: |
224 listopt = CMD_ACCOUNTLIST_ALL; | 227 listopt = CMD_ACCOUNTLIST_ALL; |
225 if (objc > 3) { | 228 if (objc > 3) { |
226 Tcl_WrongNumArgs(interp, 2, objv, "?option?"); | 229 Tcl_WrongNumArgs(interp, 2, objv, "?option?"); |
255 Tcl_WrongNumArgs(interp, 2, objv, "account"); | 258 Tcl_WrongNumArgs(interp, 2, objv, "account"); |
256 return TCL_ERROR; | 259 return TCL_ERROR; |
257 } | 260 } |
258 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 261 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
259 return TCL_ERROR; | 262 return TCL_ERROR; |
260 Tcl_SetStringObj(result, (char *)purple_account_get_protocol_id(account), -1); | 263 Tcl_SetObjResult(interp, Tcl_NewStringObj((char *)purple_account_get_protocol_id(account), -1)); |
261 break; | 264 break; |
262 case CMD_ACCOUNT_STATUS: | 265 case CMD_ACCOUNT_STATUS: |
263 if (objc < 3) { | 266 if (objc < 3) { |
264 Tcl_WrongNumArgs(interp, 2, objv, "account ?status_id name value ...?"); | 267 Tcl_WrongNumArgs(interp, 2, objv, "account ?status_id name value ...?"); |
265 return TCL_ERROR; | 268 return TCL_ERROR; |
271 purple_tcl_ref_new(PurpleTclRefStatus, | 274 purple_tcl_ref_new(PurpleTclRefStatus, |
272 purple_account_get_active_status(account))); | 275 purple_account_get_active_status(account))); |
273 } else { | 276 } else { |
274 GList *l = NULL; | 277 GList *l = NULL; |
275 if (objc % 2) { | 278 if (objc % 2) { |
276 Tcl_SetStringObj(result, "name without value setting status", -1); | 279 Tcl_SetObjResult(interp, Tcl_NewStringObj("name without value setting status", -1)); |
277 return TCL_ERROR; | 280 return TCL_ERROR; |
278 } | 281 } |
279 status = purple_account_get_status(account, Tcl_GetString(objv[3])); | 282 status = purple_account_get_status(account, Tcl_GetString(objv[3])); |
280 if (status == NULL) { | 283 if (status == NULL) { |
281 Tcl_SetStringObj(result, "invalid status for account", -1); | 284 Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid status for account", -1)); |
282 return TCL_ERROR; | 285 return TCL_ERROR; |
283 } | 286 } |
284 for (i = 4; i < objc; i += 2) { | 287 for (i = 4; i < objc; i += 2) { |
285 attr_id = Tcl_GetString(objv[i]); | 288 attr_id = Tcl_GetString(objv[i]); |
286 value = purple_status_get_attr_value(status, attr_id); | 289 value = purple_status_get_attr_value(status, attr_id); |
287 if (value == NULL) { | 290 if (value == NULL) { |
288 Tcl_SetStringObj(result, "invalid attribute for account", -1); | 291 Tcl_SetObjResult(interp, Tcl_NewStringObj("invalid attribute for account", -1)); |
289 return TCL_ERROR; | 292 return TCL_ERROR; |
290 } | 293 } |
291 switch (purple_value_get_type(value)) { | 294 switch (purple_value_get_type(value)) { |
292 case PURPLE_TYPE_BOOLEAN: | 295 case PURPLE_TYPE_BOOLEAN: |
293 error = Tcl_GetBooleanFromObj(interp, objv[i + 1], &b); | 296 error = Tcl_GetBooleanFromObj(interp, objv[i + 1], &b); |
306 case PURPLE_TYPE_STRING: | 309 case PURPLE_TYPE_STRING: |
307 l = g_list_append(l, attr_id); | 310 l = g_list_append(l, attr_id); |
308 l = g_list_append(l, Tcl_GetString(objv[i + 1])); | 311 l = g_list_append(l, Tcl_GetString(objv[i + 1])); |
309 break; | 312 break; |
310 default: | 313 default: |
311 Tcl_SetStringObj(result, "unknown PurpleValue type", -1); | 314 Tcl_SetObjResult(interp, Tcl_NewStringObj("unknown PurpleValue type", -1)); |
312 return TCL_ERROR; | 315 return TCL_ERROR; |
313 } | 316 } |
314 } | 317 } |
315 purple_account_set_status_list(account, Tcl_GetString(objv[3]), TRUE, l); | 318 purple_account_set_status_list(account, Tcl_GetString(objv[3]), TRUE, l); |
316 g_list_free(l); | 319 g_list_free(l); |
327 status_type = purple_account_get_status_type(account, | 330 status_type = purple_account_get_status_type(account, |
328 Tcl_GetString(objv[3])); | 331 Tcl_GetString(objv[3])); |
329 } else { | 332 } else { |
330 PurpleStatusPrimitive primitive; | 333 PurpleStatusPrimitive primitive; |
331 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) { | 334 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) { |
332 Tcl_SetStringObj(result, "bad option \"", -1); | 335 result = Tcl_NewStringObj("bad option \"", -1); |
333 Tcl_AppendObjToObj(result, objv[3]); | 336 Tcl_AppendObjToObj(result, objv[3]); |
334 Tcl_AppendToObj(result, | 337 Tcl_AppendToObj(result, "\": should be -primitive", -1); |
335 "\": should be -primitive", -1); | 338 Tcl_SetObjResult(interp,result); |
336 return TCL_ERROR; | 339 return TCL_ERROR; |
337 } | 340 } |
338 primitive = purple_primitive_get_type_from_id(Tcl_GetString(objv[4])); | 341 primitive = purple_primitive_get_type_from_id(Tcl_GetString(objv[4])); |
339 status_type = purple_account_get_status_type_with_primitive(account, | 342 status_type = purple_account_get_status_type_with_primitive(account, |
340 primitive); | 343 primitive); |
341 } | 344 } |
342 if (status_type == NULL) { | 345 if (status_type == NULL) { |
343 Tcl_SetStringObj(result, "status type not found", -1); | 346 Tcl_SetObjResult(interp, Tcl_NewStringObj("status type not found", -1)); |
344 return TCL_ERROR; | 347 return TCL_ERROR; |
345 } | 348 } |
346 Tcl_SetObjResult(interp, | 349 Tcl_SetObjResult(interp, |
347 purple_tcl_ref_new(PurpleTclRefStatusType, | 350 purple_tcl_ref_new(PurpleTclRefStatusType, |
348 status_type)); | 351 status_type)); |
368 Tcl_WrongNumArgs(interp, 2, objv, "account"); | 371 Tcl_WrongNumArgs(interp, 2, objv, "account"); |
369 return TCL_ERROR; | 372 return TCL_ERROR; |
370 } | 373 } |
371 if ((account = tcl_validate_account(objv[2], interp)) == NULL) | 374 if ((account = tcl_validate_account(objv[2], interp)) == NULL) |
372 return TCL_ERROR; | 375 return TCL_ERROR; |
373 Tcl_SetStringObj(result, (char *)purple_account_get_username(account), -1); | 376 Tcl_SetObjResult(interp, |
377 Tcl_NewStringObj((char *)purple_account_get_username(account), -1)); | |
374 break; | 378 break; |
375 } | 379 } |
376 | 380 |
377 return TCL_OK; | 381 return TCL_OK; |
378 } | 382 } |
383 PurpleAccount *account; | 387 PurpleAccount *account; |
384 char *name; | 388 char *name; |
385 char *type; | 389 char *type; |
386 | 390 |
387 if (count < 3) { | 391 if (count < 3) { |
388 Tcl_SetStringObj(Tcl_GetObjResult(interp), "list too short", -1); | 392 Tcl_SetObjResult(interp, |
393 Tcl_NewStringObj("list too short", -1)); | |
389 return NULL; | 394 return NULL; |
390 } | 395 } |
391 | 396 |
392 type = Tcl_GetString(elems[0]); | 397 type = Tcl_GetString(elems[0]); |
393 name = Tcl_GetString(elems[1]); | 398 name = Tcl_GetString(elems[1]); |
420 return TCL_ERROR; | 425 return TCL_ERROR; |
421 } | 426 } |
422 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) | 427 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) |
423 return error; | 428 return error; |
424 | 429 |
425 result = Tcl_GetObjResult(interp); | |
426 | |
427 switch (cmd) { | 430 switch (cmd) { |
428 case CMD_BUDDY_ALIAS: | 431 case CMD_BUDDY_ALIAS: |
429 if (objc != 3) { | 432 if (objc != 3) { |
430 Tcl_WrongNumArgs(interp, 2, objv, "buddy"); | 433 Tcl_WrongNumArgs(interp, 2, objv, "buddy"); |
431 return TCL_ERROR; | 434 return TCL_ERROR; |
433 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK) | 436 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK) |
434 return error; | 437 return error; |
435 if ((node = tcl_list_to_buddy(interp, count, elems)) == NULL) | 438 if ((node = tcl_list_to_buddy(interp, count, elems)) == NULL) |
436 return TCL_ERROR; | 439 return TCL_ERROR; |
437 if (node->type == PURPLE_BLIST_CHAT_NODE) | 440 if (node->type == PURPLE_BLIST_CHAT_NODE) |
438 Tcl_SetStringObj(result, ((PurpleChat *)node)->alias, -1); | 441 Tcl_SetObjResult(interp, |
442 Tcl_NewStringObj(((PurpleChat *)node)->alias, -1)); | |
439 else if (node->type == PURPLE_BLIST_BUDDY_NODE) | 443 else if (node->type == PURPLE_BLIST_BUDDY_NODE) |
440 Tcl_SetStringObj(result, (char *)purple_buddy_get_alias((PurpleBuddy *)node), -1); | 444 Tcl_SetObjResult(interp, |
445 Tcl_NewStringObj((char *)purple_buddy_get_alias((PurpleBuddy *)node), -1)); | |
441 return TCL_OK; | 446 return TCL_OK; |
442 break; | 447 break; |
443 case CMD_BUDDY_HANDLE: | 448 case CMD_BUDDY_HANDLE: |
444 if (objc != 2) { | 449 if (objc != 2) { |
445 Tcl_WrongNumArgs(interp, 2, objv, ""); | 450 Tcl_WrongNumArgs(interp, 2, objv, ""); |
456 } | 461 } |
457 if (objc == 3) { | 462 if (objc == 3) { |
458 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK) | 463 if ((error = Tcl_ListObjGetElements(interp, objv[2], &count, &elems)) != TCL_OK) |
459 return error; | 464 return error; |
460 if (count < 3) { | 465 if (count < 3) { |
461 Tcl_SetStringObj(result, "buddy too short", -1); | 466 Tcl_SetObjResult(interp, |
467 Tcl_NewStringObj("buddy too short", -1)); | |
462 return TCL_ERROR; | 468 return TCL_ERROR; |
463 } | 469 } |
464 if (strcmp("buddy", Tcl_GetString(elems[0]))) { | 470 if (strcmp("buddy", Tcl_GetString(elems[0]))) { |
465 Tcl_SetStringObj(result, "invalid buddy", -1); | 471 Tcl_SetObjResult(interp, |
472 Tcl_NewStringObj("invalid buddy", -1)); | |
466 return TCL_ERROR; | 473 return TCL_ERROR; |
467 } | 474 } |
468 if ((account = tcl_validate_account(elems[2], interp)) == NULL) | 475 if ((account = tcl_validate_account(elems[2], interp)) == NULL) |
469 return TCL_ERROR; | 476 return TCL_ERROR; |
470 serv_get_info(purple_account_get_connection(account), Tcl_GetString(elems[1])); | 477 serv_get_info(purple_account_get_connection(account), Tcl_GetString(elems[1])); |
477 case CMD_BUDDY_LIST: | 484 case CMD_BUDDY_LIST: |
478 if (objc == 3) { | 485 if (objc == 3) { |
479 if (!strcmp("-all", Tcl_GetString(objv[2]))) { | 486 if (!strcmp("-all", Tcl_GetString(objv[2]))) { |
480 all = 1; | 487 all = 1; |
481 } else { | 488 } else { |
482 Tcl_SetStringObj(result, "", -1); | 489 result = Tcl_NewStringObj("",-1); |
483 Tcl_AppendStringsToObj(result, "unknown option: ", Tcl_GetString(objv[2]), NULL); | 490 Tcl_AppendStringsToObj(result, "unknown option: ", Tcl_GetString(objv[2]), NULL); |
491 Tcl_SetObjResult(interp,result); | |
484 return TCL_ERROR; | 492 return TCL_ERROR; |
485 } | 493 } |
486 } | 494 } |
487 list = Tcl_NewListObj(0, NULL); | 495 list = Tcl_NewListObj(0, NULL); |
488 blist = purple_get_blist(); | 496 blist = purple_get_blist(); |
549 int tcl_cmd_cmd(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 557 int tcl_cmd_cmd(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
550 { | 558 { |
551 const char *cmds[] = { "do", "help", "list", "register", "unregister", NULL }; | 559 const char *cmds[] = { "do", "help", "list", "register", "unregister", NULL }; |
552 enum { CMD_CMD_DO, CMD_CMD_HELP, CMD_CMD_LIST, CMD_CMD_REGISTER, CMD_CMD_UNREGISTER } cmd; | 560 enum { CMD_CMD_DO, CMD_CMD_HELP, CMD_CMD_LIST, CMD_CMD_REGISTER, CMD_CMD_UNREGISTER } cmd; |
553 struct tcl_cmd_handler *handler; | 561 struct tcl_cmd_handler *handler; |
554 Tcl_Obj *list, *elem, *result = Tcl_GetObjResult(interp); | 562 Tcl_Obj *list, *elem; |
555 PurpleConversation *convo; | 563 PurpleConversation *convo; |
556 PurpleCmdId id; | 564 PurpleCmdId id; |
557 PurpleCmdStatus status; | 565 PurpleCmdStatus status; |
558 int error; | 566 int error; |
559 GList *l, *cur; | 567 GList *l, *cur; |
577 return TCL_ERROR; | 585 return TCL_ERROR; |
578 escaped = g_markup_escape_text(Tcl_GetString(objv[3]), -1); | 586 escaped = g_markup_escape_text(Tcl_GetString(objv[3]), -1); |
579 status = purple_cmd_do_command(convo, Tcl_GetString(objv[3]), | 587 status = purple_cmd_do_command(convo, Tcl_GetString(objv[3]), |
580 escaped, &errstr); | 588 escaped, &errstr); |
581 g_free(escaped); | 589 g_free(escaped); |
582 Tcl_SetStringObj(result, errstr ? (char *)errstr : "", -1); | 590 Tcl_SetObjResult(interp, |
591 Tcl_NewStringObj(errstr ? (char *)errstr : "", -1)); | |
583 g_free(errstr); | 592 g_free(errstr); |
584 if (status != PURPLE_CMD_STATUS_OK) { | 593 if (status != PURPLE_CMD_STATUS_OK) { |
585 return TCL_ERROR; | 594 return TCL_ERROR; |
586 } | 595 } |
587 break; | 596 break; |
642 handler->proc = objv[7]; | 651 handler->proc = objv[7]; |
643 handler->helpstr = Tcl_GetString(objv[8]); | 652 handler->helpstr = Tcl_GetString(objv[8]); |
644 handler->interp = interp; | 653 handler->interp = interp; |
645 if ((id = tcl_cmd_register(handler)) == 0) { | 654 if ((id = tcl_cmd_register(handler)) == 0) { |
646 tcl_cmd_handler_free(handler); | 655 tcl_cmd_handler_free(handler); |
647 Tcl_SetIntObj(result, 0); | 656 Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); |
648 } else { | 657 } else { |
649 handler->id = id; | 658 handler->id = id; |
650 Tcl_SetIntObj(result, id); | 659 Tcl_SetObjResult(interp, Tcl_NewIntObj(id)); |
651 } | 660 } |
652 break; | 661 break; |
653 case CMD_CMD_UNREGISTER: | 662 case CMD_CMD_UNREGISTER: |
654 if (objc != 3) { | 663 if (objc != 3) { |
655 Tcl_WrongNumArgs(interp, 2, objv, "id"); | 664 Tcl_WrongNumArgs(interp, 2, objv, "id"); |
665 return TCL_OK; | 674 return TCL_OK; |
666 } | 675 } |
667 | 676 |
668 int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 677 int tcl_cmd_connection(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
669 { | 678 { |
670 Tcl_Obj *result = Tcl_GetObjResult(interp), *list, *elem; | 679 Tcl_Obj *list, *elem; |
671 const char *cmds[] = { "account", "displayname", "handle", "list", NULL }; | 680 const char *cmds[] = { "account", "displayname", "handle", "list", NULL }; |
672 enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd; | 681 enum { CMD_CONN_ACCOUNT, CMD_CONN_DISPLAYNAME, CMD_CONN_HANDLE, CMD_CONN_LIST } cmd; |
673 int error; | 682 int error; |
674 GList *cur; | 683 GList *cur; |
675 PurpleConnection *gc; | 684 PurpleConnection *gc; |
699 Tcl_WrongNumArgs(interp, 2, objv, "gc"); | 708 Tcl_WrongNumArgs(interp, 2, objv, "gc"); |
700 return TCL_ERROR; | 709 return TCL_ERROR; |
701 } | 710 } |
702 if ((gc = tcl_validate_gc(objv[2], interp)) == NULL) | 711 if ((gc = tcl_validate_gc(objv[2], interp)) == NULL) |
703 return TCL_ERROR; | 712 return TCL_ERROR; |
704 Tcl_SetStringObj(result, (char *)purple_connection_get_display_name(gc), -1); | 713 Tcl_SetObjResult(interp, |
714 Tcl_NewStringObj(purple_connection_get_display_name(gc), -1)); | |
705 break; | 715 break; |
706 case CMD_CONN_HANDLE: | 716 case CMD_CONN_HANDLE: |
707 if (objc != 2) { | 717 if (objc != 2) { |
708 Tcl_WrongNumArgs(interp, 2, objv, ""); | 718 Tcl_WrongNumArgs(interp, 2, objv, ""); |
709 return TCL_ERROR; | 719 return TCL_ERROR; |
728 return TCL_OK; | 738 return TCL_OK; |
729 } | 739 } |
730 | 740 |
731 int tcl_cmd_conversation(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 741 int tcl_cmd_conversation(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
732 { | 742 { |
733 Tcl_Obj *list, *elem, *result = Tcl_GetObjResult(interp); | 743 Tcl_Obj *list, *elem; |
734 const char *cmds[] = { "find", "handle", "list", "new", "write", "name", "title", "send", NULL }; | 744 const char *cmds[] = { "find", "handle", "list", "new", "write", "name", "title", "send", NULL }; |
735 enum { CMD_CONV_FIND, CMD_CONV_HANDLE, CMD_CONV_LIST, CMD_CONV_NEW, CMD_CONV_WRITE , CMD_CONV_NAME, CMD_CONV_TITLE, CMD_CONV_SEND } cmd; | 745 enum { CMD_CONV_FIND, CMD_CONV_HANDLE, CMD_CONV_LIST, CMD_CONV_NEW, CMD_CONV_WRITE , CMD_CONV_NAME, CMD_CONV_TITLE, CMD_CONV_SEND } cmd; |
736 const char *styles[] = { "send", "recv", "system", NULL }; | 746 const char *styles[] = { "send", "recv", "system", NULL }; |
737 enum { CMD_CONV_WRITE_SEND, CMD_CONV_WRITE_RECV, CMD_CONV_WRITE_SYSTEM } style; | 747 enum { CMD_CONV_WRITE_SEND, CMD_CONV_WRITE_RECV, CMD_CONV_WRITE_SYSTEM } style; |
738 const char *newopts[] = { "-chat", "-im" }; | 748 const char *newopts[] = { "-chat", "-im" }; |
852 return TCL_ERROR; | 862 return TCL_ERROR; |
853 } | 863 } |
854 | 864 |
855 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL) | 865 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL) |
856 return TCL_ERROR; | 866 return TCL_ERROR; |
857 Tcl_SetStringObj(result, (char *)purple_conversation_get_name(convo), -1); | 867 Tcl_SetObjResult(interp, |
868 Tcl_NewStringObj((char *)purple_conversation_get_name(convo), -1)); | |
858 break; | 869 break; |
859 case CMD_CONV_TITLE: | 870 case CMD_CONV_TITLE: |
860 if (objc != 3) { | 871 if (objc != 3) { |
861 Tcl_WrongNumArgs(interp, 2, objv, "conversation"); | 872 Tcl_WrongNumArgs(interp, 2, objv, "conversation"); |
862 return TCL_ERROR; | 873 return TCL_ERROR; |
863 } | 874 } |
864 | 875 |
865 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL) | 876 if ((convo = tcl_validate_conversation(objv[2], interp)) == NULL) |
866 return TCL_ERROR; | 877 return TCL_ERROR; |
867 Tcl_SetStringObj(result, (char *)purple_conversation_get_title(convo), -1); | 878 Tcl_SetObjResult(interp, |
879 Tcl_NewStringObj((char *)purple_conversation_get_title(convo), -1)); | |
868 break; | 880 break; |
869 case CMD_CONV_SEND: | 881 case CMD_CONV_SEND: |
870 if (objc != 4) { | 882 if (objc != 4) { |
871 Tcl_WrongNumArgs(interp, 2, objv, "conversation message"); | 883 Tcl_WrongNumArgs(interp, 2, objv, "conversation message"); |
872 return TCL_ERROR; | 884 return TCL_ERROR; |
1005 return TCL_OK; | 1017 return TCL_OK; |
1006 } | 1018 } |
1007 | 1019 |
1008 int tcl_cmd_prefs(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 1020 int tcl_cmd_prefs(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
1009 { | 1021 { |
1010 Tcl_Obj *result, *list, *elem, **elems; | 1022 Tcl_Obj *list, *elem, **elems; |
1011 const char *cmds[] = { "get", "set", "type", NULL }; | 1023 const char *cmds[] = { "get", "set", "type", NULL }; |
1012 enum { CMD_PREFS_GET, CMD_PREFS_SET, CMD_PREFS_TYPE } cmd; | 1024 enum { CMD_PREFS_GET, CMD_PREFS_SET, CMD_PREFS_TYPE } cmd; |
1013 /* char *types[] = { "none", "boolean", "int", "string", "stringlist", NULL }; */ | 1025 /* char *types[] = { "none", "boolean", "int", "string", "stringlist", NULL }; */ |
1014 /* enum { TCL_PREFS_NONE, TCL_PREFS_BOOL, TCL_PREFS_INT, TCL_PREFS_STRING, TCL_PREFS_STRINGLIST } type; */ | 1026 /* enum { TCL_PREFS_NONE, TCL_PREFS_BOOL, TCL_PREFS_INT, TCL_PREFS_STRING, TCL_PREFS_STRINGLIST } type; */ |
1015 PurplePrefType preftype; | 1027 PurplePrefType preftype; |
1022 } | 1034 } |
1023 | 1035 |
1024 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) | 1036 if ((error = Tcl_GetIndexFromObj(interp, objv[1], cmds, "subcommand", 0, (int *)&cmd)) != TCL_OK) |
1025 return error; | 1037 return error; |
1026 | 1038 |
1027 result = Tcl_GetObjResult(interp); | |
1028 switch (cmd) { | 1039 switch (cmd) { |
1029 case CMD_PREFS_GET: | 1040 case CMD_PREFS_GET: |
1030 if (objc != 3) { | 1041 if (objc != 3) { |
1031 Tcl_WrongNumArgs(interp, 1, objv, "path"); | 1042 Tcl_WrongNumArgs(interp, 1, objv, "path"); |
1032 return TCL_ERROR; | 1043 return TCL_ERROR; |
1033 } | 1044 } |
1034 preftype = purple_prefs_get_type(Tcl_GetString(objv[2])); | 1045 preftype = purple_prefs_get_type(Tcl_GetString(objv[2])); |
1035 switch (preftype) { | 1046 switch (preftype) { |
1036 case PURPLE_PREF_NONE: | 1047 case PURPLE_PREF_NONE: |
1037 Tcl_SetStringObj(result, "pref type none", -1); | 1048 Tcl_SetObjResult(interp, |
1049 Tcl_NewStringObj("pref type none", -1)); | |
1038 return TCL_ERROR; | 1050 return TCL_ERROR; |
1039 break; | 1051 break; |
1040 case PURPLE_PREF_BOOLEAN: | 1052 case PURPLE_PREF_BOOLEAN: |
1041 Tcl_SetBooleanObj(result, purple_prefs_get_bool(Tcl_GetString(objv[2]))); | 1053 Tcl_SetObjResult(interp, |
1054 Tcl_NewBooleanObj( | |
1055 purple_prefs_get_bool(Tcl_GetString(objv[2])))); | |
1042 break; | 1056 break; |
1043 case PURPLE_PREF_INT: | 1057 case PURPLE_PREF_INT: |
1044 Tcl_SetIntObj(result, purple_prefs_get_int(Tcl_GetString(objv[2]))); | 1058 Tcl_SetObjResult(interp, Tcl_NewIntObj(purple_prefs_get_int(Tcl_GetString(objv[2])))); |
1045 break; | 1059 break; |
1046 case PURPLE_PREF_STRING: | 1060 case PURPLE_PREF_STRING: |
1047 Tcl_SetStringObj(result, (char *)purple_prefs_get_string(Tcl_GetString(objv[2])), -1); | 1061 Tcl_SetObjResult(interp, |
1062 Tcl_NewStringObj((char *)purple_prefs_get_string(Tcl_GetString(objv[2])), -1)); | |
1048 break; | 1063 break; |
1049 case PURPLE_PREF_STRING_LIST: | 1064 case PURPLE_PREF_STRING_LIST: |
1050 cur = purple_prefs_get_string_list(Tcl_GetString(objv[2])); | 1065 cur = purple_prefs_get_string_list(Tcl_GetString(objv[2])); |
1051 list = Tcl_NewListObj(0, NULL); | 1066 list = Tcl_NewListObj(0, NULL); |
1052 while (cur != NULL) { | 1067 while (cur != NULL) { |
1056 } | 1071 } |
1057 Tcl_SetObjResult(interp, list); | 1072 Tcl_SetObjResult(interp, list); |
1058 break; | 1073 break; |
1059 default: | 1074 default: |
1060 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype); | 1075 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype); |
1061 Tcl_SetStringObj(result, "unknown pref type", -1); | 1076 Tcl_SetObjResult(interp, |
1077 Tcl_NewStringObj("unknown pref type", -1)); | |
1062 return TCL_ERROR; | 1078 return TCL_ERROR; |
1063 } | 1079 } |
1064 break; | 1080 break; |
1065 case CMD_PREFS_SET: | 1081 case CMD_PREFS_SET: |
1066 if (objc != 4) { | 1082 if (objc != 4) { |
1068 return TCL_ERROR; | 1084 return TCL_ERROR; |
1069 } | 1085 } |
1070 preftype = purple_prefs_get_type(Tcl_GetString(objv[2])); | 1086 preftype = purple_prefs_get_type(Tcl_GetString(objv[2])); |
1071 switch (preftype) { | 1087 switch (preftype) { |
1072 case PURPLE_PREF_NONE: | 1088 case PURPLE_PREF_NONE: |
1073 Tcl_SetStringObj(result, "bad path or pref type none", -1); | 1089 Tcl_SetObjResult(interp, |
1090 Tcl_NewStringObj("bad path or pref type none", -1)); | |
1074 return TCL_ERROR; | 1091 return TCL_ERROR; |
1075 break; | 1092 break; |
1076 case PURPLE_PREF_BOOLEAN: | 1093 case PURPLE_PREF_BOOLEAN: |
1077 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &intval)) != TCL_OK) | 1094 if ((error = Tcl_GetBooleanFromObj(interp, objv[3], &intval)) != TCL_OK) |
1078 return error; | 1095 return error; |
1107 return TCL_ERROR; | 1124 return TCL_ERROR; |
1108 } | 1125 } |
1109 preftype = purple_prefs_get_type(Tcl_GetString(objv[2])); | 1126 preftype = purple_prefs_get_type(Tcl_GetString(objv[2])); |
1110 switch (preftype) { | 1127 switch (preftype) { |
1111 case PURPLE_PREF_NONE: | 1128 case PURPLE_PREF_NONE: |
1112 Tcl_SetStringObj(result, "none", -1); | 1129 Tcl_SetObjResult(interp, Tcl_NewStringObj("none", -1)); |
1113 break; | 1130 break; |
1114 case PURPLE_PREF_BOOLEAN: | 1131 case PURPLE_PREF_BOOLEAN: |
1115 Tcl_SetStringObj(result, "boolean", -1); | 1132 Tcl_SetObjResult(interp, Tcl_NewStringObj("boolean", -1)); |
1116 break; | 1133 break; |
1117 case PURPLE_PREF_INT: | 1134 case PURPLE_PREF_INT: |
1118 Tcl_SetStringObj(result, "int", -1); | 1135 Tcl_SetObjResult(interp, Tcl_NewStringObj("int", -1)); |
1119 break; | 1136 break; |
1120 case PURPLE_PREF_STRING: | 1137 case PURPLE_PREF_STRING: |
1121 Tcl_SetStringObj(result, "string", -1); | 1138 Tcl_SetObjResult(interp, Tcl_NewStringObj("string", -1)); |
1122 break; | 1139 break; |
1123 case PURPLE_PREF_STRING_LIST: | 1140 case PURPLE_PREF_STRING_LIST: |
1124 Tcl_SetStringObj(result, "stringlist", -1); | 1141 Tcl_SetObjResult(interp, Tcl_NewStringObj("stringlist", -1)); |
1125 break; | 1142 break; |
1126 default: | 1143 default: |
1127 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype); | 1144 purple_debug(PURPLE_DEBUG_ERROR, "tcl", "tcl does not know about pref type %d\n", preftype); |
1128 Tcl_SetStringObj(result, "unknown", -1); | 1145 Tcl_SetObjResult(interp, Tcl_NewStringObj("unknown", -1)); |
1129 } | 1146 } |
1130 break; | 1147 break; |
1131 } | 1148 } |
1132 | 1149 |
1133 return TCL_OK; | 1150 return TCL_OK; |
1141 enum { CMD_PRESENCE_ACCOUNT, CMD_PRESENCE_ACTIVE_STATUS, | 1158 enum { CMD_PRESENCE_ACCOUNT, CMD_PRESENCE_ACTIVE_STATUS, |
1142 CMD_PRESENCE_AVAILABLE, CMD_PRESENCE_CHAT_USER, | 1159 CMD_PRESENCE_AVAILABLE, CMD_PRESENCE_CHAT_USER, |
1143 CMD_PRESENCE_CONTEXT, CMD_PRESENCE_CONVERSATION, | 1160 CMD_PRESENCE_CONTEXT, CMD_PRESENCE_CONVERSATION, |
1144 CMD_PRESENCE_IDLE, CMD_PRESENCE_LOGIN, CMD_PRESENCE_ONLINE, | 1161 CMD_PRESENCE_IDLE, CMD_PRESENCE_LOGIN, CMD_PRESENCE_ONLINE, |
1145 CMD_PRESENCE_STATUS, CMD_PRESENCE_STATUSES } cmd; | 1162 CMD_PRESENCE_STATUS, CMD_PRESENCE_STATUSES } cmd; |
1146 Tcl_Obj *result = Tcl_GetObjResult(interp); | 1163 Tcl_Obj *result; |
1147 Tcl_Obj *list, *elem; | 1164 Tcl_Obj *list, *elem; |
1148 PurplePresence *presence; | 1165 PurplePresence *presence; |
1149 GList *cur; | 1166 GList *cur; |
1150 int error, idle, idle_time, login_time; | 1167 int error, idle, idle_time, login_time; |
1151 | 1168 |
1178 if (objc == 3) { | 1195 if (objc == 3) { |
1179 Tcl_SetObjResult(interp, | 1196 Tcl_SetObjResult(interp, |
1180 purple_tcl_ref_new(PurpleTclRefStatus, | 1197 purple_tcl_ref_new(PurpleTclRefStatus, |
1181 purple_presence_get_active_status(presence))); | 1198 purple_presence_get_active_status(presence))); |
1182 } else if (objc == 4) { | 1199 } else if (objc == 4) { |
1183 Tcl_SetBooleanObj(result, | 1200 Tcl_SetObjResult(interp, |
1184 purple_presence_is_status_active(presence, | 1201 Tcl_NewBooleanObj( |
1185 Tcl_GetString(objv[3]))); | 1202 purple_presence_is_status_active(presence, |
1203 Tcl_GetString(objv[3])))); | |
1186 } else { | 1204 } else { |
1187 PurpleStatusPrimitive primitive; | 1205 PurpleStatusPrimitive primitive; |
1188 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) { | 1206 if (strcmp(Tcl_GetString(objv[3]), "-primitive")) { |
1189 Tcl_SetStringObj(result, "bad option \"", -1); | 1207 result = Tcl_NewStringObj("bad option \"", -1); |
1190 Tcl_AppendObjToObj(result, objv[3]); | 1208 Tcl_AppendObjToObj(result, objv[3]); |
1191 Tcl_AppendToObj(result, | 1209 Tcl_AppendToObj(result, |
1192 "\": should be -primitive", -1); | 1210 "\": should be -primitive", -1); |
1211 Tcl_SetObjResult(interp,result); | |
1193 return TCL_ERROR; | 1212 return TCL_ERROR; |
1194 } | 1213 } |
1195 primitive = purple_primitive_get_type_from_id(Tcl_GetString(objv[4])); | 1214 primitive = purple_primitive_get_type_from_id(Tcl_GetString(objv[4])); |
1196 if (primitive == PURPLE_STATUS_UNSET) { | 1215 if (primitive == PURPLE_STATUS_UNSET) { |
1197 Tcl_SetStringObj(result, "invalid primitive ", -1); | 1216 result = Tcl_NewStringObj("invalid primitive ", -1); |
1198 Tcl_AppendObjToObj(result, objv[4]); | 1217 Tcl_AppendObjToObj(result, objv[4]); |
1218 Tcl_SetObjResult(interp,result); | |
1199 return TCL_ERROR; | 1219 return TCL_ERROR; |
1200 } | 1220 } |
1201 Tcl_SetBooleanObj(result, purple_presence_is_status_primitive_active(presence, primitive)); | 1221 Tcl_SetObjResult(interp, |
1222 Tcl_NewBooleanObj( | |
1223 purple_presence_is_status_primitive_active(presence, primitive))); | |
1202 break; | 1224 break; |
1203 } | 1225 } |
1204 break; | 1226 break; |
1205 case CMD_PRESENCE_AVAILABLE: | 1227 case CMD_PRESENCE_AVAILABLE: |
1206 if (objc != 3) { | 1228 if (objc != 3) { |
1207 Tcl_WrongNumArgs(interp, 2, objv, "presence"); | 1229 Tcl_WrongNumArgs(interp, 2, objv, "presence"); |
1208 return TCL_ERROR; | 1230 return TCL_ERROR; |
1209 } | 1231 } |
1210 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) | 1232 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) |
1211 return TCL_ERROR; | 1233 return TCL_ERROR; |
1212 Tcl_SetBooleanObj(result, purple_presence_is_available(presence)); | 1234 Tcl_SetObjResult(interp, |
1235 Tcl_NewBooleanObj(purple_presence_is_available(presence))); | |
1213 break; | 1236 break; |
1214 case CMD_PRESENCE_CHAT_USER: | 1237 case CMD_PRESENCE_CHAT_USER: |
1215 if (objc != 3) { | 1238 if (objc != 3) { |
1216 Tcl_WrongNumArgs(interp, 2, objv, "presence"); | 1239 Tcl_WrongNumArgs(interp, 2, objv, "presence"); |
1217 return TCL_ERROR; | 1240 return TCL_ERROR; |
1218 } | 1241 } |
1219 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) | 1242 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) |
1220 return TCL_ERROR; | 1243 return TCL_ERROR; |
1221 Tcl_SetStringObj(result, purple_presence_get_chat_user(presence), -1); | 1244 Tcl_SetObjResult(interp, |
1245 Tcl_NewStringObj(purple_presence_get_chat_user(presence), -1)); | |
1222 break; | 1246 break; |
1223 case CMD_PRESENCE_CONTEXT: | 1247 case CMD_PRESENCE_CONTEXT: |
1224 if (objc != 3) { | 1248 if (objc != 3) { |
1225 Tcl_WrongNumArgs(interp, 2, objv, "presence"); | 1249 Tcl_WrongNumArgs(interp, 2, objv, "presence"); |
1226 return TCL_ERROR; | 1250 return TCL_ERROR; |
1227 } | 1251 } |
1228 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) | 1252 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) |
1229 return TCL_ERROR; | 1253 return TCL_ERROR; |
1230 switch (purple_presence_get_context(presence)) { | 1254 switch (purple_presence_get_context(presence)) { |
1231 case PURPLE_PRESENCE_CONTEXT_UNSET: | 1255 case PURPLE_PRESENCE_CONTEXT_UNSET: |
1232 Tcl_SetStringObj(result, "unset", -1); | 1256 Tcl_SetObjResult(interp, Tcl_NewStringObj("unset", -1)); |
1233 break; | 1257 break; |
1234 case PURPLE_PRESENCE_CONTEXT_ACCOUNT: | 1258 case PURPLE_PRESENCE_CONTEXT_ACCOUNT: |
1235 Tcl_SetStringObj(result, "account", -1); | 1259 Tcl_SetObjResult(interp, Tcl_NewStringObj("account", -1)); |
1236 break; | 1260 break; |
1237 case PURPLE_PRESENCE_CONTEXT_CONV: | 1261 case PURPLE_PRESENCE_CONTEXT_CONV: |
1238 Tcl_SetStringObj(result, "conversation", -1); | 1262 Tcl_SetObjResult(interp, Tcl_NewStringObj("conversation", -1)); |
1239 break; | 1263 break; |
1240 case PURPLE_PRESENCE_CONTEXT_BUDDY: | 1264 case PURPLE_PRESENCE_CONTEXT_BUDDY: |
1241 Tcl_SetStringObj(result, "buddy", -1); | 1265 Tcl_SetObjResult(interp, Tcl_NewStringObj("buddy", -1)); |
1242 break; | 1266 break; |
1243 } | 1267 } |
1244 break; | 1268 break; |
1245 case CMD_PRESENCE_CONVERSATION: | 1269 case CMD_PRESENCE_CONVERSATION: |
1246 if (objc != 3) { | 1270 if (objc != 3) { |
1260 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) | 1284 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) |
1261 return TCL_ERROR; | 1285 return TCL_ERROR; |
1262 if (objc == 3) { | 1286 if (objc == 3) { |
1263 if (purple_presence_is_idle(presence)) { | 1287 if (purple_presence_is_idle(presence)) { |
1264 idle_time = purple_presence_get_idle_time (presence); | 1288 idle_time = purple_presence_get_idle_time (presence); |
1265 Tcl_SetIntObj(result, idle_time); | 1289 Tcl_SetObjResult(interp, Tcl_NewIntObj(idle_time)); |
1266 } else { | 1290 } else { |
1267 result = Tcl_NewListObj(0, NULL); | 1291 result = Tcl_NewListObj(0, NULL); |
1268 Tcl_SetObjResult(interp, result); | 1292 Tcl_SetObjResult(interp, result); |
1269 } | 1293 } |
1270 break; | 1294 break; |
1287 return TCL_ERROR; | 1311 return TCL_ERROR; |
1288 } | 1312 } |
1289 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) | 1313 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) |
1290 return TCL_ERROR; | 1314 return TCL_ERROR; |
1291 if (objc == 3) { | 1315 if (objc == 3) { |
1292 Tcl_SetIntObj(result, purple_presence_get_login_time(presence)); | 1316 Tcl_SetObjResult(interp, Tcl_NewIntObj(purple_presence_get_login_time(presence))); |
1293 } else { | 1317 } else { |
1294 if ((error == Tcl_GetIntFromObj(interp, | 1318 if ((error == Tcl_GetIntFromObj(interp, |
1295 objv[3], | 1319 objv[3], |
1296 &login_time)) != TCL_OK) | 1320 &login_time)) != TCL_OK) |
1297 return TCL_ERROR; | 1321 return TCL_ERROR; |
1303 Tcl_WrongNumArgs(interp, 2, objv, "presence"); | 1327 Tcl_WrongNumArgs(interp, 2, objv, "presence"); |
1304 return TCL_ERROR; | 1328 return TCL_ERROR; |
1305 } | 1329 } |
1306 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) | 1330 if ((presence = purple_tcl_ref_get(interp, objv[2], PurpleTclRefPresence)) == NULL) |
1307 return TCL_ERROR; | 1331 return TCL_ERROR; |
1308 Tcl_SetBooleanObj(result, purple_presence_is_online(presence)); | 1332 Tcl_SetObjResult(interp, |
1333 Tcl_NewBooleanObj( | |
1334 purple_presence_is_online(presence))); | |
1309 break; | 1335 break; |
1310 case CMD_PRESENCE_STATUS: | 1336 case CMD_PRESENCE_STATUS: |
1311 if (objc != 4) { | 1337 if (objc != 4) { |
1312 Tcl_WrongNumArgs(interp, 2, objv, "presence status_id"); | 1338 Tcl_WrongNumArgs(interp, 2, objv, "presence status_id"); |
1313 return TCL_ERROR; | 1339 return TCL_ERROR; |
1339 return TCL_OK; | 1365 return TCL_OK; |
1340 } | 1366 } |
1341 | 1367 |
1342 int tcl_cmd_savedstatus(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 1368 int tcl_cmd_savedstatus(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
1343 { | 1369 { |
1344 Tcl_Obj *result = Tcl_GetObjResult(interp); | 1370 Tcl_Obj *result; |
1345 const char *cmds[] = { "current", "handle", NULL }; | 1371 const char *cmds[] = { "current", "handle", NULL }; |
1346 enum { CMD_SAVEDSTATUS_CURRENT, CMD_SAVEDSTATUS_HANDLE } cmd; | 1372 enum { CMD_SAVEDSTATUS_CURRENT, CMD_SAVEDSTATUS_HANDLE } cmd; |
1347 int error; | 1373 int error; |
1348 PurpleSavedStatus *saved_status; | 1374 PurpleSavedStatus *saved_status; |
1349 | 1375 |
1361 Tcl_WrongNumArgs(interp, 2, objv, ""); | 1387 Tcl_WrongNumArgs(interp, 2, objv, ""); |
1362 return TCL_ERROR; | 1388 return TCL_ERROR; |
1363 } | 1389 } |
1364 if ((saved_status = purple_savedstatus_get_current()) == NULL) | 1390 if ((saved_status = purple_savedstatus_get_current()) == NULL) |
1365 return TCL_ERROR; | 1391 return TCL_ERROR; |
1392 result = Tcl_NewListObj(0, NULL); | |
1366 Tcl_ListObjAppendElement(interp, result, Tcl_NewStringObj(purple_savedstatus_get_title(saved_status), -1)); | 1393 Tcl_ListObjAppendElement(interp, result, Tcl_NewStringObj(purple_savedstatus_get_title(saved_status), -1)); |
1367 Tcl_ListObjAppendElement(interp, result, Tcl_NewIntObj(purple_savedstatus_get_type(saved_status))); | 1394 Tcl_ListObjAppendElement(interp, result, Tcl_NewIntObj(purple_savedstatus_get_type(saved_status))); |
1368 Tcl_ListObjAppendElement(interp, result, Tcl_NewStringObj(purple_savedstatus_get_message(saved_status), -1)); | 1395 Tcl_ListObjAppendElement(interp, result, Tcl_NewStringObj(purple_savedstatus_get_message(saved_status), -1)); |
1396 Tcl_SetObjResult(interp,result); | |
1369 break; | 1397 break; |
1370 case CMD_SAVEDSTATUS_HANDLE: | 1398 case CMD_SAVEDSTATUS_HANDLE: |
1371 if (objc != 2) { | 1399 if (objc != 2) { |
1372 Tcl_WrongNumArgs(interp, 2, objv, ""); | 1400 Tcl_WrongNumArgs(interp, 2, objv, ""); |
1373 return TCL_ERROR; | 1401 return TCL_ERROR; |
1405 int tcl_cmd_signal(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 1433 int tcl_cmd_signal(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
1406 { | 1434 { |
1407 const char *cmds[] = { "connect", "disconnect", NULL }; | 1435 const char *cmds[] = { "connect", "disconnect", NULL }; |
1408 enum { CMD_SIGNAL_CONNECT, CMD_SIGNAL_DISCONNECT } cmd; | 1436 enum { CMD_SIGNAL_CONNECT, CMD_SIGNAL_DISCONNECT } cmd; |
1409 struct tcl_signal_handler *handler; | 1437 struct tcl_signal_handler *handler; |
1410 Tcl_Obj *result = Tcl_GetObjResult(interp); | |
1411 void *instance; | 1438 void *instance; |
1412 int error; | 1439 int error; |
1413 | 1440 |
1414 if (objc < 2) { | 1441 if (objc < 2) { |
1415 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); | 1442 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); |
1435 handler->args = objv[4]; | 1462 handler->args = objv[4]; |
1436 handler->proc = objv[5]; | 1463 handler->proc = objv[5]; |
1437 handler->interp = interp; | 1464 handler->interp = interp; |
1438 if (!tcl_signal_connect(handler)) { | 1465 if (!tcl_signal_connect(handler)) { |
1439 tcl_signal_handler_free(handler); | 1466 tcl_signal_handler_free(handler); |
1440 Tcl_SetIntObj(result, 1); | 1467 Tcl_SetObjResult(interp, Tcl_NewIntObj(1)); |
1441 } else { | 1468 } else { |
1442 Tcl_SetIntObj(result, 0); | 1469 Tcl_SetObjResult(interp, Tcl_NewIntObj(0)); |
1443 } | 1470 } |
1444 break; | 1471 break; |
1445 case CMD_SIGNAL_DISCONNECT: | 1472 case CMD_SIGNAL_DISCONNECT: |
1446 if (objc != 4) { | 1473 if (objc != 4) { |
1447 Tcl_WrongNumArgs(interp, 2, objv, "instance signal"); | 1474 Tcl_WrongNumArgs(interp, 2, objv, "instance signal"); |
1458 | 1485 |
1459 int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 1486 int tcl_cmd_status(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
1460 { | 1487 { |
1461 const char *cmds[] = { "attr", "type", NULL }; | 1488 const char *cmds[] = { "attr", "type", NULL }; |
1462 enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd; | 1489 enum { CMD_STATUS_ATTR, CMD_STATUS_TYPE } cmd; |
1463 Tcl_Obj *result = Tcl_GetObjResult(interp); | |
1464 PurpleStatus *status; | 1490 PurpleStatus *status; |
1465 PurpleStatusType *status_type; | 1491 PurpleStatusType *status_type; |
1466 PurpleValue *value; | 1492 PurpleValue *value; |
1467 const char *attr; | 1493 const char *attr; |
1468 int error, v; | 1494 int error, v; |
1484 if ((status = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatus)) == NULL) | 1510 if ((status = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatus)) == NULL) |
1485 return TCL_ERROR; | 1511 return TCL_ERROR; |
1486 attr = Tcl_GetString(objv[3]); | 1512 attr = Tcl_GetString(objv[3]); |
1487 value = purple_status_get_attr_value(status, attr); | 1513 value = purple_status_get_attr_value(status, attr); |
1488 if (value == NULL) { | 1514 if (value == NULL) { |
1489 Tcl_SetStringObj(result, "no such attribute", -1); | 1515 Tcl_SetObjResult(interp, |
1516 Tcl_NewStringObj("no such attribute", -1)); | |
1490 return TCL_ERROR; | 1517 return TCL_ERROR; |
1491 } | 1518 } |
1492 switch (purple_value_get_type(value)) { | 1519 switch (purple_value_get_type(value)) { |
1493 case PURPLE_TYPE_BOOLEAN: | 1520 case PURPLE_TYPE_BOOLEAN: |
1494 if (objc == 4) { | 1521 if (objc == 4) { |
1495 Tcl_SetBooleanObj(result, purple_value_get_boolean(value)); | 1522 Tcl_SetObjResult(interp, |
1523 Tcl_NewBooleanObj(purple_value_get_boolean(value))); | |
1496 } else { | 1524 } else { |
1497 if ((error = Tcl_GetBooleanFromObj(interp, objv[4], &v)) != TCL_OK) | 1525 if ((error = Tcl_GetBooleanFromObj(interp, objv[4], &v)) != TCL_OK) |
1498 return error; | 1526 return error; |
1499 purple_status_set_attr_boolean(status, attr, v); | 1527 purple_status_set_attr_boolean(status, attr, v); |
1500 } | 1528 } |
1501 break; | 1529 break; |
1502 case PURPLE_TYPE_INT: | 1530 case PURPLE_TYPE_INT: |
1503 if (objc == 4) { | 1531 if (objc == 4) { |
1504 Tcl_SetIntObj(result, purple_value_get_int(value)); | 1532 Tcl_SetObjResult(interp, Tcl_NewIntObj(purple_value_get_int(value))); |
1505 } else { | 1533 } else { |
1506 if ((error = Tcl_GetIntFromObj(interp, objv[4], &v)) != TCL_OK) | 1534 if ((error = Tcl_GetIntFromObj(interp, objv[4], &v)) != TCL_OK) |
1507 return error; | 1535 return error; |
1508 purple_status_set_attr_int(status, attr, v ); | 1536 purple_status_set_attr_int(status, attr, v ); |
1509 } | 1537 } |
1510 break; | 1538 break; |
1511 case PURPLE_TYPE_STRING: | 1539 case PURPLE_TYPE_STRING: |
1512 if (objc == 4) | 1540 if (objc == 4) |
1513 Tcl_SetStringObj(result, purple_value_get_string(value), -1); | 1541 Tcl_SetObjResult(interp, |
1542 Tcl_NewStringObj(purple_value_get_string(value), -1)); | |
1514 else | 1543 else |
1515 purple_status_set_attr_string(status, attr, Tcl_GetString(objv[4])); | 1544 purple_status_set_attr_string(status, attr, Tcl_GetString(objv[4])); |
1516 break; | 1545 break; |
1517 default: | 1546 default: |
1518 Tcl_SetStringObj(result, "attribute has unknown type", -1); | 1547 Tcl_SetObjResult(interp, |
1548 Tcl_NewStringObj("attribute has unknown type", -1)); | |
1519 return TCL_ERROR; | 1549 return TCL_ERROR; |
1520 } | 1550 } |
1521 break; | 1551 break; |
1522 case CMD_STATUS_TYPE: | 1552 case CMD_STATUS_TYPE: |
1523 if (objc != 3) { | 1553 if (objc != 3) { |
1537 | 1567 |
1538 int tcl_cmd_status_attr(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) | 1568 int tcl_cmd_status_attr(ClientData unused, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) |
1539 { | 1569 { |
1540 const char *cmds[] = { "id", "name", NULL }; | 1570 const char *cmds[] = { "id", "name", NULL }; |
1541 enum { CMD_STATUS_ATTR_ID, CMD_STATUS_ATTR_NAME } cmd; | 1571 enum { CMD_STATUS_ATTR_ID, CMD_STATUS_ATTR_NAME } cmd; |
1542 Tcl_Obj *result = Tcl_GetObjResult(interp); | |
1543 PurpleStatusAttr *attr; | 1572 PurpleStatusAttr *attr; |
1544 int error; | 1573 int error; |
1545 | 1574 |
1546 if (objc < 2) { | 1575 if (objc < 2) { |
1547 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); | 1576 Tcl_WrongNumArgs(interp, 1, objv, "subcommand ?args?"); |
1557 Tcl_WrongNumArgs(interp, 2, objv, "attr"); | 1586 Tcl_WrongNumArgs(interp, 2, objv, "attr"); |
1558 return TCL_ERROR; | 1587 return TCL_ERROR; |
1559 } | 1588 } |
1560 if ((attr = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusAttr)) == NULL) | 1589 if ((attr = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusAttr)) == NULL) |
1561 return TCL_ERROR; | 1590 return TCL_ERROR; |
1562 Tcl_SetStringObj(result, purple_status_attr_get_id(attr), -1); | 1591 Tcl_SetObjResult(interp, |
1592 Tcl_NewStringObj(purple_status_attr_get_id(attr), -1)); | |
1563 break; | 1593 break; |
1564 case CMD_STATUS_ATTR_NAME: | 1594 case CMD_STATUS_ATTR_NAME: |
1565 if (objc != 3) { | 1595 if (objc != 3) { |
1566 Tcl_WrongNumArgs(interp, 2, objv, "attr"); | 1596 Tcl_WrongNumArgs(interp, 2, objv, "attr"); |
1567 return TCL_ERROR; | 1597 return TCL_ERROR; |
1568 } | 1598 } |
1569 if ((attr = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusAttr)) == NULL) | 1599 if ((attr = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusAttr)) == NULL) |
1570 return TCL_ERROR; | 1600 return TCL_ERROR; |
1571 Tcl_SetStringObj(result, purple_status_attr_get_name(attr), -1); | 1601 Tcl_SetObjResult(interp, |
1602 Tcl_NewStringObj(purple_status_attr_get_name(attr), -1)); | |
1572 break; | 1603 break; |
1573 } | 1604 } |
1574 | 1605 |
1575 return TCL_OK; | 1606 return TCL_OK; |
1576 } | 1607 } |
1585 CMD_STATUS_TYPE_AVAILABLE, CMD_STATUS_TYPE_EXCLUSIVE, | 1616 CMD_STATUS_TYPE_AVAILABLE, CMD_STATUS_TYPE_EXCLUSIVE, |
1586 CMD_STATUS_TYPE_ID, CMD_STATUS_TYPE_INDEPENDENT, | 1617 CMD_STATUS_TYPE_ID, CMD_STATUS_TYPE_INDEPENDENT, |
1587 CMD_STATUS_TYPE_NAME, CMD_STATUS_TYPE_PRIMARY_ATTR, | 1618 CMD_STATUS_TYPE_NAME, CMD_STATUS_TYPE_PRIMARY_ATTR, |
1588 CMD_STATUS_TYPE_PRIMITIVE, CMD_STATUS_TYPE_SAVEABLE, | 1619 CMD_STATUS_TYPE_PRIMITIVE, CMD_STATUS_TYPE_SAVEABLE, |
1589 CMD_STATUS_TYPE_USER_SETTABLE } cmd; | 1620 CMD_STATUS_TYPE_USER_SETTABLE } cmd; |
1590 Tcl_Obj *result = Tcl_GetObjResult(interp); | |
1591 PurpleStatusType *status_type; | 1621 PurpleStatusType *status_type; |
1592 Tcl_Obj *list, *elem; | 1622 Tcl_Obj *list, *elem; |
1593 GList *cur; | 1623 GList *cur; |
1594 int error; | 1624 int error; |
1595 | 1625 |
1607 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1637 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1608 return TCL_ERROR; | 1638 return TCL_ERROR; |
1609 } | 1639 } |
1610 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1640 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1611 return TCL_ERROR; | 1641 return TCL_ERROR; |
1612 Tcl_SetBooleanObj(result, purple_status_type_is_available(status_type)); | 1642 Tcl_SetObjResult(interp, |
1643 Tcl_NewBooleanObj(purple_status_type_is_available(status_type))); | |
1613 break; | 1644 break; |
1614 case CMD_STATUS_TYPE_ATTR: | 1645 case CMD_STATUS_TYPE_ATTR: |
1615 if (objc != 4) { | 1646 if (objc != 4) { |
1616 Tcl_WrongNumArgs(interp, 2, objv, "statustype attr"); | 1647 Tcl_WrongNumArgs(interp, 2, objv, "statustype attr"); |
1617 return TCL_ERROR; | 1648 return TCL_ERROR; |
1643 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1674 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1644 return TCL_ERROR; | 1675 return TCL_ERROR; |
1645 } | 1676 } |
1646 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1677 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1647 return TCL_ERROR; | 1678 return TCL_ERROR; |
1648 Tcl_SetBooleanObj(result, purple_status_type_is_exclusive(status_type)); | 1679 Tcl_SetObjResult(interp, |
1680 Tcl_NewBooleanObj(purple_status_type_is_exclusive(status_type))); | |
1649 break; | 1681 break; |
1650 case CMD_STATUS_TYPE_ID: | 1682 case CMD_STATUS_TYPE_ID: |
1651 if (objc != 3) { | 1683 if (objc != 3) { |
1652 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1684 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1653 return TCL_ERROR; | 1685 return TCL_ERROR; |
1654 } | 1686 } |
1655 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1687 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1656 return TCL_ERROR; | 1688 return TCL_ERROR; |
1657 Tcl_SetStringObj(result, purple_status_type_get_id(status_type), -1); | 1689 Tcl_SetObjResult(interp, |
1690 Tcl_NewStringObj(purple_status_type_get_id(status_type), -1)); | |
1658 break; | 1691 break; |
1659 case CMD_STATUS_TYPE_INDEPENDENT: | 1692 case CMD_STATUS_TYPE_INDEPENDENT: |
1660 if (objc != 3) { | 1693 if (objc != 3) { |
1661 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1694 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1662 return TCL_ERROR; | 1695 return TCL_ERROR; |
1663 } | 1696 } |
1664 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1697 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1665 return TCL_ERROR; | 1698 return TCL_ERROR; |
1666 Tcl_SetBooleanObj(result, purple_status_type_is_independent(status_type)); | 1699 Tcl_SetObjResult(interp, |
1700 Tcl_NewBooleanObj(purple_status_type_is_independent(status_type))); | |
1667 break; | 1701 break; |
1668 case CMD_STATUS_TYPE_NAME: | 1702 case CMD_STATUS_TYPE_NAME: |
1669 if (objc != 3) { | 1703 if (objc != 3) { |
1670 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1704 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1671 return TCL_ERROR; | 1705 return TCL_ERROR; |
1672 } | 1706 } |
1673 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1707 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1674 return TCL_ERROR; | 1708 return TCL_ERROR; |
1675 Tcl_SetStringObj(result, purple_status_type_get_name(status_type), -1); | 1709 Tcl_SetObjResult(interp, |
1710 Tcl_NewStringObj(purple_status_type_get_name(status_type), -1)); | |
1676 break; | 1711 break; |
1677 case CMD_STATUS_TYPE_PRIMITIVE: | 1712 case CMD_STATUS_TYPE_PRIMITIVE: |
1678 if (objc != 3) { | 1713 if (objc != 3) { |
1679 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1714 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1680 return TCL_ERROR; | 1715 return TCL_ERROR; |
1681 } | 1716 } |
1682 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1717 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1683 return TCL_ERROR; | 1718 return TCL_ERROR; |
1684 Tcl_SetStringObj(result, purple_primitive_get_id_from_type(purple_status_type_get_primitive(status_type)), -1); | 1719 Tcl_SetObjResult(interp, |
1720 Tcl_NewStringObj(purple_primitive_get_id_from_type | |
1721 (purple_status_type_get_primitive(status_type)), -1)); | |
1685 break; | 1722 break; |
1686 case CMD_STATUS_TYPE_PRIMARY_ATTR: | 1723 case CMD_STATUS_TYPE_PRIMARY_ATTR: |
1687 if (objc != 3) { | 1724 if (objc != 3) { |
1688 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1725 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1689 return TCL_ERROR; | 1726 return TCL_ERROR; |
1690 } | 1727 } |
1691 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1728 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1692 return TCL_ERROR; | 1729 return TCL_ERROR; |
1693 Tcl_SetStringObj(result, purple_status_type_get_primary_attr(status_type), -1); | 1730 Tcl_SetObjResult(interp, |
1731 Tcl_NewStringObj(purple_status_type_get_primary_attr(status_type), -1)); | |
1694 break; | 1732 break; |
1695 case CMD_STATUS_TYPE_SAVEABLE: | 1733 case CMD_STATUS_TYPE_SAVEABLE: |
1696 if (objc != 3) { | 1734 if (objc != 3) { |
1697 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1735 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1698 return TCL_ERROR; | 1736 return TCL_ERROR; |
1699 } | 1737 } |
1700 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1738 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1701 return TCL_ERROR; | 1739 return TCL_ERROR; |
1702 Tcl_SetBooleanObj(result, purple_status_type_is_saveable(status_type)); | 1740 Tcl_SetObjResult(interp, |
1741 Tcl_NewBooleanObj( | |
1742 purple_status_type_is_saveable(status_type))); | |
1703 break; | 1743 break; |
1704 case CMD_STATUS_TYPE_USER_SETTABLE: | 1744 case CMD_STATUS_TYPE_USER_SETTABLE: |
1705 if (objc != 3) { | 1745 if (objc != 3) { |
1706 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); | 1746 Tcl_WrongNumArgs(interp, 2, objv, "statustype"); |
1707 return TCL_ERROR; | 1747 return TCL_ERROR; |
1708 } | 1748 } |
1709 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) | 1749 if ((status_type = purple_tcl_ref_get(interp, objv[2], PurpleTclRefStatusType)) == NULL) |
1710 return TCL_ERROR; | 1750 return TCL_ERROR; |
1711 Tcl_SetBooleanObj(result, purple_status_type_is_user_settable(status_type)); | 1751 Tcl_SetObjResult(interp, |
1752 Tcl_NewBooleanObj( | |
1753 purple_status_type_is_user_settable(status_type))); | |
1712 break; | 1754 break; |
1713 } | 1755 } |
1714 | 1756 |
1715 return TCL_OK; | 1757 return TCL_OK; |
1716 } | 1758 } |