1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
MODULE = Irssi::UI PACKAGE = Irssi
void
theme_register(formats)
SV *formats
PREINIT:
STRLEN n_a;
AV *av;
FORMAT_REC *formatrecs;
char *key, *value;
int len, n, fpos;
CODE:
if (!SvROK(formats))
croak("formats is not a reference to list");
av = (AV *) SvRV(formats);
len = av_len(av)+1;
if (len == 0 || (len & 1) != 0)
croak("formats list is invalid - not dividable by 3 (%d)", len);
formatrecs = g_new0(FORMAT_REC, len/2+2);
formatrecs[0].tag = g_strdup(perl_get_package());
formatrecs[0].def = g_strdup("Perl script");
for (fpos = 1, n = 0; n < len; n++, fpos++) {
key = SvPV(*av_fetch(av, n, 0), n_a); n++;
value = SvPV(*av_fetch(av, n, 0), n_a);
formatrecs[fpos].tag = g_strdup(key);
formatrecs[fpos].def = g_strdup(value);
formatrecs[fpos].params = MAX_FORMAT_PARAMS;
}
theme_register_module(perl_get_package(), formatrecs);
void
printformat(level, format, ...)
int level
char *format
PREINIT:
STRLEN n_a;
TEXT_DEST_REC dest;
char *arglist[MAX_FORMAT_PARAMS];
int n;
CODE:
format_create_dest(&dest, NULL, NULL, level, NULL);
memset(arglist, 0, sizeof(arglist));
for (n = 2; n < 2+MAX_FORMAT_PARAMS; n++) {
arglist[n-2] = n < items ? SvPV(ST(n), n_a) : "";
}
printformat_perl(&dest, format, arglist);
#*******************************
MODULE = Irssi::UI PACKAGE = Irssi::Server
#*******************************
void
printformat(server, target, level, format, ...)
Irssi::Server server
char *target
int level
char *format
PREINIT:
STRLEN n_a;
TEXT_DEST_REC dest;
char *arglist[MAX_FORMAT_PARAMS];
int n;
CODE:
format_create_dest(&dest, server, target, level, NULL);
memset(arglist, 0, sizeof(arglist));
for (n = 4; n < 4+MAX_FORMAT_PARAMS; n++) {
arglist[n-4] = n < items ? SvPV(ST(n), n_a) : "";
}
printformat_perl(&dest, format, arglist);
#*******************************
MODULE = Irssi::UI PACKAGE = Irssi::UI::Window
#*******************************
void
printformat(window, level, format, ...)
Irssi::UI::Window window
int level
char *format
PREINIT:
STRLEN n_a;
TEXT_DEST_REC dest;
char *arglist[MAX_FORMAT_PARAMS];
int n;
CODE:
format_create_dest(&dest, NULL, NULL, level, window);
memset(arglist, 0, sizeof(arglist));
for (n = 3; n < 3+MAX_FORMAT_PARAMS; n++) {
arglist[n-3] = n < items ? SvPV(ST(n), n_a) : "";
}
printformat_perl(&dest, format, arglist);
#*******************************
MODULE = Irssi::UI PACKAGE = Irssi::Windowitem
#*******************************
void
printformat(item, level, format, ...)
Irssi::Windowitem item
int level
char *format
PREINIT:
STRLEN n_a;
TEXT_DEST_REC dest;
char *arglist[MAX_FORMAT_PARAMS];
int n;
CODE:
format_create_dest(&dest, item->server, item->name, level, NULL);
memset(arglist, 0, sizeof(arglist));
for (n = 3; n < 3+MAX_FORMAT_PARAMS; n++) {
arglist[n-3] = n < items ? SvPV(ST(n), n_a) : "";
}
printformat_perl(&dest, format, arglist);
|