source: perlglue.xs @ e74c01c

barnowl_perlaimdebianrelease-1.10release-1.4release-1.5release-1.6release-1.7release-1.8release-1.9
Last change on this file since e74c01c was 1b6b2f3, checked in by Nelson Elhage <nelhage@mit.edu>, 17 years ago
Refactoring the editwin code somewhat, and adding the ability to hang arbitrary reply commands off of messages.
  • Property mode set to 100644
File size: 2.6 KB
RevLine 
[dd16bdd]1/* -*- mode: c; indent-tabs-mode: t; c-basic-offset: 8 -*- */
[83a9b63]2static const char fileIdent[] = "$Id$";
3
[8a54409]4#ifdef HAVE_LIBZEPHYR
[f1e629d]5#include <zephyr/zephyr.h>
[8a54409]6#endif
[f1e629d]7#include <EXTERN.h>
[8ee73f8d]8
[1152d45]9#define OWL_PERL
10#include "owl.h"
11SV *owl_perlconfig_curmessage2hashref(void);
[8ee73f8d]12
13MODULE = owl            PACKAGE = owl           
14
15char *
16command(cmd)
17        char *cmd
18        PREINIT:
19                char *rv = NULL;
20        CODE:
21                rv = owl_function_command(cmd);
22                RETVAL = rv;   
23        OUTPUT:
24                RETVAL
25        CLEANUP:
26                if (rv) owl_free(rv);
27
[f1e629d]28SV *
29getcurmsg()
30        CODE:
31                ST(0) = owl_perlconfig_curmessage2hashref();
32
33int
34getnumcols()
35        CODE:
36                RETVAL = owl_global_get_cols(&g);
37        OUTPUT:
38                RETVAL
39
40char *
41zephyr_getrealm()
42        CODE:
[8a54409]43                RETVAL = owl_zephyr_get_realm();
[f1e629d]44        OUTPUT:
45                RETVAL
46
47char *
48zephyr_getsender()
49        CODE:
[8a54409]50                RETVAL = owl_zephyr_get_sender();
[f1e629d]51        OUTPUT:
52                RETVAL
53
[e1c4636]54void
[f1e629d]55zephyr_zwrite(cmd,msg)
[e1c4636]56        char *cmd
57        char *msg
58        PREINIT:
59                int i;
60        CODE:
61                i = owl_zwrite_create_and_send_from_line(cmd, msg);
62
63char *
64ztext_stylestrip(ztext)
65        char *ztext
66        PREINIT:
67                char *rv = NULL;
68        CODE:
[1fd0b25]69                rv = owl_function_ztext_stylestrip(ztext);
[e1c4636]70                RETVAL = rv;
71        OUTPUT:
72                RETVAL
73        CLEANUP:
74                if (rv) owl_free(rv);
75
[6922edd]76void
77new_command_internal(name, func, summary, usage, description)
78        char *name
79        SV *func
80        char *summary
81        char *usage
82        char *description
83        PREINIT:
84                owl_cmd cmd;
85        CODE:
86                SvREFCNT_inc(func);
87                cmd.name = name;
88                cmd.cmd_perl = func;
89                cmd.summary = summary;
90                cmd.usage = usage;
91                cmd.description = description;
92                cmd.validctx = OWL_CTX_ANY;
93                cmd.cmd_aliased_to = NULL;
94                cmd.cmd_args_fn = NULL;
95                cmd.cmd_v_fn = NULL;
96                cmd.cmd_i_fn = NULL;
97                cmd.cmd_ctxargs_fn = NULL;
98                cmd.cmd_ctxv_fn = NULL;
99                cmd.cmd_ctxi_fn = NULL;
100                owl_cmddict_add_cmd(owl_global_get_cmddict(&g), &cmd);
[dd16bdd]101
[1b6b2f3]102void queue_message(msg) 
[dd16bdd]103        SV *msg
104        PREINIT:
105                char * key;
106                char * val;
107                owl_message *m;
108                HV * hash;
109                HE * ent;
110                I32 count;
111                I32 len;
112        CODE:
[1b6b2f3]113        {
[dd16bdd]114                if(!SvROK(msg) || SvTYPE(SvRV(msg)) != SVt_PVHV) {
115                        croak("Usage: owl::queue_message($message)");
116                }
117               
118                hash = (HV*)SvRV(msg);
119                m = owl_malloc(sizeof(owl_message));
120                owl_message_init(m);
121               
122                count = hv_iterinit(hash);
123                while((ent = hv_iternext(hash))) {
124                        key = hv_iterkey(ent, &len);
125                        val = SvPV_nolen(hv_iterval(hash, ent));
126                        if(!strcmp(key, "type")) {
127                                owl_message_set_type(m, owl_message_parse_type(val));
128                        } else if(!strcmp(key, "direction")) {
129                                owl_message_set_direction(m, owl_message_parse_direction(val));
130                        } else {
131                                owl_message_set_attribute(m, key, val);
132                        }
133                }
[1b6b2f3]134                owl_message_set_isprivate(m);
135                if(owl_message_is_type_admin(m)) {
136                        if(!owl_message_get_attribute_value(m, "adminheader"))
137                                owl_message_set_attribute(m, "adminheader", "");
138                } 
[dd16bdd]139
140                owl_global_messagequeue_addmsg(&g, m);
[1b6b2f3]141        }
Note: See TracBrowser for help on using the repository browser.