annotate src/perl.c @ 560:cf3da01f451c

[gaim-migrate @ 570] Perl! (not yet. and i copied X-Chat almost directly) committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 31 Jul 2000 19:44:49 +0000
parents
children 9b36c91cce26
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
560
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
2 * gaim
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
3 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 * Copyright (C) 1998-1999, Mark Spencer <markster@marko.net>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * (at your option) any later version.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * GNU General Public License for more details.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
19 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
20 * This was taken almost exactly from X-Chat. The power of the GPL.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21 * Translated from X-Chat to Gaim by Eric Warmenhoven.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
22 * Originally by Erik Scrafford <eriks@chilisoft.com>.
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
23 *
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
26 #ifdef HAVE_CONFIG_H
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
27 #include "../config.h"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
28 #endif
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
29 #undef PACKAGE /* no idea why, just following X-Chat */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
30
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
31 /* #ifdef USE_PERL */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
32 #if 0 /* this isn't ready for prime-time yet. not even the 3-am shows. */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
33
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
34 #include <EXTERN.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
35 #ifndef _SEM_SEMUN_UNDEFINED
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
36 #define HAS_UNION_SEMUN
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37 #endif
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
38 #include <perl.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
39 #include <XSUB.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
40 #include <sys/mman.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
41 #include <sys/types.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
42 #include <sys/stat.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
43 #include <fcntl.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
44 #undef PACKAGE
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
45 #include <stdio.h>
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
46 #include "gaim.h"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
47
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
48 static PerlInterpreter *my_perl = NULL;
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
49
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
50 XS (XS_AIM_register); /* so far so good */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
51 XS (XS_AIM_add_message_handler); /* um... */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
52 XS (XS_AIM_add_command_handler); /* once again, um... */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
53 XS (XS_AIM_add_print_handler); /* can i really do this? */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
54 XS (XS_AIM_add_timeout_handler); /* ok, this i can do */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
55 XS (XS_AIM_print); /* how am i going to do this */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
56 XS (XS_AIM_print_with_channel); /* FIXME! this needs to be renamed */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
57 XS (XS_AIM_send_raw); /* this i can do for toc, but for oscar... ? */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
58 XS (XS_AIM_command); /* this should be easier */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
59 XS (XS_AIM_command_with_server); /* FIXME: this should probably be removed */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
60 XS (XS_AIM_channel_list); /* probably return conversation list */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
61 XS (XS_AIM_server_list); /* huh? does this apply? */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
62 XS (XS_AIM_user_list); /* return the buddy list */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
63 XS (XS_AIM_user_info); /* we'll see.... */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
64 XS (XS_AIM_ignore_list); /* deny list? */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
65 XS (XS_AIM_dcc_list); /* wha? */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
66 XS (XS_AIM_get_info); /* this i can do too */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
67
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
68 void perl_init(int autoload)
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
69 {
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
70 char *perl_args[] = {"", "-e", "0"};
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
71 char load_file[] =
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
72 "sub load_file()\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
73 "{\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
74 " (my $file_name) = @_;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
75 " open FH, $file_name or return 2;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
76 " local($/) = undef;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
77 " $file = <FH>;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
78 " close FH;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
79 " eval $file;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
80 " eval $file if $@;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
81 " return 1 if $@;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
82 " return 0;\n"
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
83 "}";
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
84
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
85 my_perl = perl_alloc();
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
86 perl_construct(my_perl);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
87 perl_parse(my_perl, NULL, 3, perl_args, NULL);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
88 #ifndef HAVE_PERL_EVAL_PV
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
89 perl_eval_pv(load_file, TRUE);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
90 #else
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
91 Perl_eval_pv(load_file, TRUE);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
92 #endif
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
93
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
94 newXS("AIM::register", XS_AIM_register, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
95 newXS("AIM::add_message_handler", XS_AIM_add_message_handler, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
96 newXS("AIM::add_command_handler", XS_AIM_add_command_handler, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
97 newXS("AIM::add_print_handler", XS_AIM_add_print_handler, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
98 newXS("AIM::add_timeout_handler", XS_AIM_add_timeout_handler, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
99 newXS("AIM::print", XS_AIM_print, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
100 newXS("AIM::print_with_channel", XS_AIM_print_with_channel, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
101 newXS("AIM::send_raw", XS_AIM_send_raw, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
102 newXS("AIM::command", XS_AIM_command, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
103 newXS("AIM::command_with_server", XS_AIM_command_with_server, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
104 newXS("AIM::channel_list", XS_AIM_channel_list, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
105 newXS("AIM::server_list", XS_AIM_server_list, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
106 newXS("AIM::user_list", XS_AIM_user_list, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
107 newXS("AIM::user_info", XS_AIM_user_info, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
108 newXS("AIM::ignore_list", XS_AIM_ignore_list, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
109 newXS("AIM::dcc_list", XS_AIM_dcc_list, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
110 newXS("AIM::get_info", XS_AIM_get_info, "AIM");
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
111
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
112 /* FIXME */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
113 if (autoload) {
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
114 /* for each *.pl in ~/.gaim/scripts (whatever), autoload file */
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
115 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
116 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
117
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
118 void perl_end()
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
119 {
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
120 if (my_perl != NULL) {
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
121 perl_destruct(my_perl);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
122 perl_free(my_perl);
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
123 my_perl = NULL;
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
124 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
125 }
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
126
cf3da01f451c [gaim-migrate @ 570]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
127 #endif /* USE_PERL */