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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
#define PERL_NO_GET_CONTEXT
#include "module.h"
static int magic_free_text_dest(pTHX_ SV *sv, MAGIC *mg)
{
TEXT_DEST_REC *dest = (TEXT_DEST_REC *) mg->mg_ptr;
char *target = (char *) dest->target;
g_free(target);
g_free(dest);
mg->mg_ptr = NULL;
sv_setiv(sv, 0);
return 0;
}
static MGVTBL vtbl_free_text_dest =
{
NULL, NULL, NULL, NULL, magic_free_text_dest
};
static SV *perl_format_create_dest(SERVER_REC *server, char *target,
int level, WINDOW_REC *window)
{
TEXT_DEST_REC *dest;
SV *sv, *ret_sv;
dest = g_new0(TEXT_DEST_REC, 1);
format_create_dest(dest, server, g_strdup(target), level, window);
ret_sv = plain_bless(dest, "Irssi::UI::TextDest");
sv = *hv_fetch(hvref(ret_sv), "_irssi", 6, 0);
sv_magic(sv, NULL, '~', NULL, 0);
SvMAGIC(sv)->mg_private = 0x1551; /* HF */
SvMAGIC(sv)->mg_virtual = &vtbl_free_text_dest;
SvMAGIC(sv)->mg_ptr = (char *) dest;
return ret_sv;
}
MODULE = Irssi::UI::Formats PACKAGE = Irssi
PROTOTYPES: ENABLE
int
format_get_length(str)
char *str
int
format_real_length(str, len)
char *str
int len
void
format_string_expand(str)
char *str
PREINIT:
char *ret;
PPCODE:
ret = format_string_expand(str, NULL);
XPUSHs(sv_2mortal(new_pv(ret)));
g_free(ret);
void
strip_codes(input)
char *input
PREINIT:
char *ret;
PPCODE:
ret = strip_codes(input);
XPUSHs(sv_2mortal(new_pv(ret)));
g_free(ret);
void
format_string_unexpand(input)
char *input
PREINIT:
char *ret;
PPCODE:
ret = format_string_unexpand(input, 0);
XPUSHs(sv_2mortal(new_pv(ret)));
g_free(ret);
void
format_create_dest(target, level=MSGLEVEL_CLIENTNOTICE, window=NULL)
char *target
int level
Irssi::UI::Window window
PPCODE:
XPUSHs(sv_2mortal(perl_format_create_dest(NULL, target, level, window)));
#*******************************
MODULE = Irssi::UI::Formats PACKAGE = Irssi::UI::Window
#*******************************
void
format_get_text(window, module, server, target, format, ...)
Irssi::UI::Window window
char *module
Irssi::Server server
char *target
char *format
PREINIT:
TEXT_DEST_REC dest;
THEME_REC *theme;
char **charargs;
char *ret;
int formatnum;
int n;
PPCODE:
charargs = g_new0(char *, items-5+1);
for (n = 5; n < items; n++) {
charargs[n-5] = SvPV_nolen(ST(n));
}
format_create_dest(&dest, server, target, 0, window);
theme = window_get_theme(dest.window);
formatnum = format_find_tag(module, format);
ret = format_get_text_theme_charargs(theme, module, &dest, formatnum, charargs);
g_free(charargs);
XPUSHs(sv_2mortal(new_pv(ret)));
g_free_not_null(ret);
#*******************************
MODULE = Irssi::UI::Formats PACKAGE = Irssi::UI::Window
#*******************************
void
format_create_dest(window=NULL, level=MSGLEVEL_CLIENTNOTICE)
Irssi::UI::Window window
int level
PPCODE:
XPUSHs(sv_2mortal(perl_format_create_dest(NULL, NULL, level, window)));
#*******************************
MODULE = Irssi::UI::Formats PACKAGE = Irssi::Server
#*******************************
void
format_create_dest(server, target=NULL, level=MSGLEVEL_CLIENTNOTICE, window=NULL)
Irssi::Server server
char *target
int level
Irssi::UI::Window window
PPCODE:
XPUSHs(sv_2mortal(perl_format_create_dest(server, target, level, window)));
#*******************************
MODULE = Irssi::UI::Formats PACKAGE = Irssi::UI::TextDest
#*******************************
void
print(dest, str)
Irssi::UI::TextDest dest
char *str
CODE:
printtext_dest(dest, "%s", str);
#*******************************
MODULE = Irssi::UI::Formats PACKAGE = Irssi::UI::TextDest PREFIX = format_dest_
#*******************************
void
format_dest_meta_stash(dest, meta_key, meta_value)
Irssi::UI::TextDest dest
char *meta_key
char *meta_value
char *
format_dest_meta_stash_find(dest, meta_key)
Irssi::UI::TextDest dest
char *meta_key
CODE:
RETVAL = (char *) format_dest_meta_stash_find(dest, meta_key);
OUTPUT:
RETVAL
|