~ubuntu-branches/ubuntu/oneiric/irssi/oneiric

« back to all changes in this revision

Viewing changes to src/perl/common/Core.xs

  • Committer: Bazaar Package Importer
  • Author(s): Andres Rodriguez
  • Date: 2009-05-05 15:50:50 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20090505155050-aoqlnpes7che9rtd
Tags: 0.8.13-1ubuntu1
* Merge from debian unstable (LP: #372411), remaining changes:
  - debian/patches: 03firsttimer_text
    + Adapt it so it tells you about connecting to irc.ubuntu.com and
      joining #ubuntu instead of irc.debian.org and #debian.
  - debian/patches: 90irc-ubuntu-com
* Fixed debian/patches/90irc-ubuntu-com for new irssi.conf.

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
 
8
8
#define DEFAULT_COMMAND_CATEGORY "Perl scripts' commands"
9
9
 
10
 
void perl_signal_add_hash(int priority, SV *sv)
 
10
static void perl_signal_add_hash(int priority, SV *sv)
11
11
{
12
12
        HV *hv;
13
13
        HE *he;
57
57
        }
58
58
}
59
59
 
 
60
static void add_tuple(gpointer key_, gpointer value_, gpointer user_data)
 
61
{
 
62
        HV *hash = user_data;
 
63
        char *key = key_;
 
64
        char *value = value_;
 
65
        hv_store(hash, key, strlen(key), new_pv(value), 0);
 
66
}
 
67
 
 
68
static void wrap_signal_emit(void *signal, void **p) {
 
69
        signal_emit(signal, 6, p[0], p[1], p[2], p[3], p[4], p[5]);
 
70
}
 
71
 
 
72
static void wrap_signal_continue(void *dummy, void **p) {
 
73
        (void)dummy;
 
74
        signal_continue(6, p[0], p[1], p[2], p[3], p[4], p[5]);
 
75
}
 
76
 
60
77
MODULE = Irssi::Core  PACKAGE = Irssi
61
78
PROTOTYPES: ENABLE
62
79
 
64
81
signal_emit(signal, ...)
65
82
        char *signal
66
83
CODE:
67
 
        void *p[SIGNAL_MAX_ARGUMENTS];
68
 
        int n;
 
84
        int signal_id;
 
85
        SV *args[SIGNAL_MAX_ARGUMENTS];
 
86
        int n, used;
69
87
 
70
 
        memset(p, 0, sizeof(p));
71
 
        for (n = 1; n < items && n < SIGNAL_MAX_ARGUMENTS+1; n++) {
72
 
                if (SvPOKp(ST(n)))
73
 
                        p[n-1] = SvPV(ST(n), PL_na);
74
 
                else if (irssi_is_ref_object(ST(n)))
75
 
                        p[n-1] = irssi_ref_object(ST(n));
76
 
                else if (SvROK(ST(n)))
77
 
                        p[n-1] = (void *) SvIV((SV*)SvRV(ST(n)));
78
 
                else if (SvIOK(ST(n)))
79
 
                        p[n-1] = (void *)SvIV(ST(n));
80
 
                else
81
 
                        p[n-1] = NULL;
82
 
        }
83
 
        signal_emit(signal, items-1, p[0], p[1], p[2], p[3], p[4], p[5]);
 
88
        signal_id = signal_get_uniq_id(signal);
 
89
        used = items - 1;
 
90
        if (used > SIGNAL_MAX_ARGUMENTS) {
 
91
                used = SIGNAL_MAX_ARGUMENTS;
 
92
        }
 
93
        for (n = 0; n < used; ++n) {
 
94
                args[n] = ST(n + 1);
 
95
        }
 
96
        perl_signal_args_to_c(wrap_signal_emit, signal, signal_id, args, used);
84
97
 
85
98
void
86
99
signal_continue(...)
87
100
CODE:
88
 
        void *p[SIGNAL_MAX_ARGUMENTS];
89
 
        int n;
 
101
        SV *args[SIGNAL_MAX_ARGUMENTS];
 
102
        int n, used;
90
103
 
91
 
        memset(p, 0, sizeof(p));
92
 
        for (n = 0; n < items && n < SIGNAL_MAX_ARGUMENTS; n++) {
93
 
                if (SvPOKp(ST(n)))
94
 
                        p[n] = SvPV(ST(n), PL_na);
95
 
                else if (irssi_is_ref_object(ST(n)))
96
 
                        p[n] = irssi_ref_object(ST(n));
97
 
                else if (SvROK(ST(n)))
98
 
                        p[n] = (void *) SvIV((SV*)SvRV(ST(n)));
99
 
                else if (SvIOK(ST(n)))
100
 
                        p[n] = (void *) SvIV(ST(n));
101
 
                else
102
 
                        p[n] = NULL;
103
 
        }
104
 
        signal_continue(items, p[0], p[1], p[2], p[3], p[4], p[5]);
 
104
        used = items;
 
105
        if (used > SIGNAL_MAX_ARGUMENTS) {
 
106
                used = SIGNAL_MAX_ARGUMENTS;
 
107
        }
 
108
        for (n = 0; n < used; ++n) {
 
109
                args[n] = ST(n);
 
110
        }
 
111
        perl_signal_args_to_c(wrap_signal_continue, NULL, signal_get_emitted_id(), args, used);
105
112
 
106
113
void
107
114
signal_add(...)
485
492
int
486
493
level2bits(str)
487
494
        char *str
 
495
CODE:
 
496
        RETVAL = level2bits(str, NULL);
 
497
OUTPUT:
 
498
        RETVAL
488
499
 
489
500
void
490
501
bits2level(bits)
553
564
        char *options
554
565
 
555
566
void
 
567
command_parse_options(cmd, data)
 
568
        char *cmd
 
569
        char *data
 
570
PREINIT:
 
571
        HV *hash;
 
572
        GHashTable *optlist;
 
573
        void *free_arg;
 
574
        char *ptr;
 
575
PPCODE:
 
576
        if (cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_GETREST,
 
577
                           cmd, &optlist, &ptr)) {
 
578
                hash = newHV();
 
579
                g_hash_table_foreach(optlist, add_tuple, hash);
 
580
                XPUSHs(sv_2mortal(newRV_noinc((SV*)hash)));
 
581
                XPUSHs(sv_2mortal(new_pv(ptr)));
 
582
                cmd_params_free(free_arg);
 
583
        } else {
 
584
                XPUSHs(&PL_sv_undef);
 
585
                XPUSHs(&PL_sv_undef);
 
586
        }
 
587
 
 
588
void
556
589
pidwait_add(pid)
557
590
        int pid
558
591