annotate libpurple/plugins/perl/common/Cmds.xs @ 28297:491af22d8a01

Fix the Perl XMLNode API so that calls don't need to explicitly pass the class when it doesn't make sense (and lengths are never passed). Fixes #9931 (more or less). committer: Paul Aurich <paul@darkrain42.org>
author Etan Reisner <pidgin@unreliablesource.net>
date Tue, 18 Aug 2009 06:23:44 +0000
parents 4dc66862203f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 #include "module.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
2 #include "../perl-handlers.h"
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
4 MODULE = Purple::Cmd PACKAGE = Purple::Cmd PREFIX = purple_cmd_
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
5 PROTOTYPES: ENABLE
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
6
16750
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
7 BOOT:
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
8 {
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
9 HV *status_stash = gv_stashpv("Purple::Cmd::Status", 1);
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
10 HV *ret_stash = gv_stashpv("Purple::Cmd::Return", 1);
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
11 HV *p_stash = gv_stashpv("Purple::Cmd::Priority", 1);
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
12 HV *flag_stash = gv_stashpv("Purple::Cmd::Flag", 1);
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
13
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
14 static const constiv *civ, status_const_iv[] = {
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
15 #define const_iv(name) {#name, (IV)PURPLE_CMD_STATUS_##name}
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
16 const_iv(OK),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
17 const_iv(FAILED),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
18 const_iv(NOT_FOUND),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
19 const_iv(WRONG_ARGS),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
20 const_iv(WRONG_PRPL),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
21 const_iv(WRONG_TYPE),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
22 };
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
23 static const constiv ret_const_iv[] = {
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
24 #undef const_iv
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
25 #define const_iv(name) {#name, (IV)PURPLE_CMD_RET_##name}
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
26 const_iv(OK),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
27 const_iv(FAILED),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
28 const_iv(CONTINUE),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
29 };
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
30 static const constiv p_const_iv[] = {
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
31 #undef const_iv
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
32 #define const_iv(name) {#name, (IV)PURPLE_CMD_P_##name}
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
33 const_iv(VERY_LOW),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
34 const_iv(LOW),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
35 const_iv(DEFAULT),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
36 const_iv(PRPL),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
37 const_iv(PLUGIN),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
38 const_iv(ALIAS),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
39 const_iv(HIGH),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
40 const_iv(VERY_HIGH),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
41 };
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
42 static const constiv flag_const_iv[] = {
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
43 #undef const_iv
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
44 #define const_iv(name) {#name, (IV)PURPLE_CMD_FLAG_##name}
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
45 const_iv(IM),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
46 const_iv(CHAT),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
47 const_iv(PRPL_ONLY),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
48 const_iv(ALLOW_WRONG_ARGS),
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
49 };
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
50
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
51 for (civ = status_const_iv + sizeof(status_const_iv) / sizeof(status_const_iv[0]); civ-- > status_const_iv;)
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
52 newCONSTSUB(status_stash, (char *)civ->name, newSViv(civ->iv));
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
53
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
54 for (civ = ret_const_iv + sizeof(ret_const_iv) / sizeof(ret_const_iv[0]); civ-- > ret_const_iv;)
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
55 newCONSTSUB(ret_stash, (char *)civ->name, newSViv(civ->iv));
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
56
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
57 for (civ = p_const_iv + sizeof(p_const_iv) / sizeof(p_const_iv[0]); civ-- > p_const_iv;)
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
58 newCONSTSUB(p_stash, (char *)civ->name, newSViv(civ->iv));
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
59
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
60 for (civ = flag_const_iv + sizeof(flag_const_iv) / sizeof(flag_const_iv[0]); civ-- > flag_const_iv;)
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
61 newCONSTSUB(flag_stash, (char *)civ->name, newSViv(civ->iv));
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
62 }
39c7bb133a9f Remove the const-c and const-xs stuff and replace it with real constants
Etan Reisner <pidgin@unreliablesource.net>
parents: 15834
diff changeset
63
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
64 void
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
65 purple_cmd_help(conv, command)
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
66 Purple::Conversation conv
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
67 const gchar *command
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
68 PREINIT:
21775
4dc66862203f This should plug some leaks related to not having freed GList:s and GSList:s
Etan Reisner <pidgin@unreliablesource.net>
parents: 16750
diff changeset
69 GList *l, *ll;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
70 PPCODE:
21775
4dc66862203f This should plug some leaks related to not having freed GList:s and GSList:s
Etan Reisner <pidgin@unreliablesource.net>
parents: 16750
diff changeset
71 for (l = ll = purple_cmd_help(conv, command); l != NULL; l = l->next) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
72 XPUSHs(sv_2mortal(newSVpv(l->data, 0)));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
73 }
21775
4dc66862203f This should plug some leaks related to not having freed GList:s and GSList:s
Etan Reisner <pidgin@unreliablesource.net>
parents: 16750
diff changeset
74 g_list_free(ll);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
75
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76 void
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
77 purple_cmd_list(conv)
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
78 Purple::Conversation conv
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79 PREINIT:
21775
4dc66862203f This should plug some leaks related to not having freed GList:s and GSList:s
Etan Reisner <pidgin@unreliablesource.net>
parents: 16750
diff changeset
80 GList *l, *ll;
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
81 PPCODE:
21775
4dc66862203f This should plug some leaks related to not having freed GList:s and GSList:s
Etan Reisner <pidgin@unreliablesource.net>
parents: 16750
diff changeset
82 for (l = ll = purple_cmd_list(conv); l != NULL; l = l->next) {
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
83 XPUSHs(sv_2mortal(newSVpv(l->data, 0)));
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
84 }
21775
4dc66862203f This should plug some leaks related to not having freed GList:s and GSList:s
Etan Reisner <pidgin@unreliablesource.net>
parents: 16750
diff changeset
85 g_list_free(ll);
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
86
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
87 Purple::Cmd::Id
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
88 purple_cmd_register(plugin, command, args, priority, flag, prpl_id, func, helpstr, data = 0)
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
89 Purple::Plugin plugin
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90 const gchar *command
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
91 const gchar *args
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
92 Purple::Cmd::Priority priority
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
93 Purple::Cmd::Flag flag
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 const gchar *prpl_id
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95 SV *func
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
96 const gchar *helpstr
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
97 SV *data
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
98 CODE:
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
99 RETVAL = purple_perl_cmd_register(plugin, command, args, priority, flag,
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
100 prpl_id, func, helpstr, data);
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
101 OUTPUT:
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
102 RETVAL
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
104 void
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
105 purple_cmd_unregister(id)
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
106 Purple::Cmd::Id id
15374
5fe8042783c1 Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107 CODE:
15834
2f8274ce570a Perl fixes for s/gaim/purple/. This hasn't really been tested yet.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 15374
diff changeset
108 purple_perl_cmd_unregister(id);