Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / perl / ui / Formats.xs
1 #include "module.h"
2
3 static int magic_free_text_dest(pTHX_ SV *sv, MAGIC *mg)
4 {
5         TEXT_DEST_REC *dest = (TEXT_DEST_REC *) mg->mg_ptr;
6         char *target = (char *) dest->target;
7         g_free(target);
8         g_free(dest);
9         mg->mg_ptr = NULL;
10         sv_setiv(sv, 0);
11         return 0;
12 }
13
14 static MGVTBL vtbl_free_text_dest =
15 {
16     NULL, NULL, NULL, NULL, magic_free_text_dest
17 };
18
19 static SV *perl_format_create_dest(SERVER_REC *server, char *target,
20                                    int level, WINDOW_REC *window)
21 {
22         TEXT_DEST_REC *dest;
23         SV *sv, *ret_sv;
24
25         dest = g_new0(TEXT_DEST_REC, 1);
26         format_create_dest(dest, server, g_strdup(target), level, window);
27
28         ret_sv = plain_bless(dest, "Irssi::UI::TextDest");
29
30         sv = *hv_fetch(hvref(ret_sv), "_irssi", 6, 0);
31         sv_magic(sv, NULL, '~', NULL, 0);
32
33         SvMAGIC(sv)->mg_private = 0x1551; /* HF */
34         SvMAGIC(sv)->mg_virtual = &vtbl_free_text_dest;
35         SvMAGIC(sv)->mg_ptr = (char *) dest;
36
37         return ret_sv;
38 }
39
40 MODULE = Irssi::UI::Formats  PACKAGE = Irssi
41 PROTOTYPES: ENABLE
42
43 int
44 format_get_length(str)
45         char *str
46
47 int
48 format_real_length(str, len)
49         char *str
50         int len
51
52 void
53 strip_codes(input)
54         char *input
55 PREINIT:
56         char *ret;
57 PPCODE:
58         ret = strip_codes(input);
59         XPUSHs(sv_2mortal(new_pv(ret)));
60         g_free(ret);
61
62
63 void
64 format_create_dest(target, level=MSGLEVEL_CLIENTNOTICE, window=NULL)
65         char *target
66         int level
67         Irssi::UI::Window window
68 PPCODE:
69         XPUSHs(sv_2mortal(perl_format_create_dest(NULL, target, level, window)));
70
71 #*******************************
72 MODULE = Irssi::UI::Formats  PACKAGE = Irssi::UI::Window
73 #*******************************
74
75 void
76 format_get_text(window, module, server, target, formatnum, ...)
77         Irssi::UI::Window window
78         char *module
79         Irssi::Server server
80         char *target
81         int formatnum
82 PREINIT:
83         TEXT_DEST_REC dest;
84         THEME_REC *theme;
85         char **charargs;
86         char *ret;
87         int n;
88 PPCODE:
89         charargs = g_new0(char *, items-5+1);
90         for (n = 5; n < items; n++) {
91                 charargs[n-5] = (char *)SvPV(ST(n), PL_na);
92         }
93
94         format_create_dest(&dest, server, target, 0, window);
95         theme = window_get_theme(dest.window);
96
97         ret = format_get_text_theme_charargs(theme, module, &dest, formatnum, charargs);
98         g_free(charargs);
99
100         XPUSHs(sv_2mortal(new_pv(ret)));
101         g_free_not_null(ret);
102
103 #*******************************
104 MODULE = Irssi::UI::Formats  PACKAGE = Irssi::Window
105 #*******************************
106
107 void
108 format_create_dest(window=NULL, level=MSGLEVEL_CLIENTNOTICE)
109         Irssi::UI::Window window
110         int level
111 PPCODE:
112         XPUSHs(sv_2mortal(perl_format_create_dest(NULL, NULL, level, window)));
113
114 #*******************************
115 MODULE = Irssi::UI::Formats  PACKAGE = Irssi::Server
116 #*******************************
117
118 void
119 format_create_dest(server, target=NULL, level=MSGLEVEL_CLIENTNOTICE, window=NULL)
120         Irssi::Server server
121         char *target
122         int level
123         Irssi::UI::Window window
124 PPCODE:
125         XPUSHs(sv_2mortal(perl_format_create_dest(server, target, level, window)));
126
127 #*******************************
128 MODULE = Irssi::UI::Formats  PACKAGE = Irssi::UI::TextDest
129 #*******************************
130
131 void
132 print(dest, str)
133         Irssi::UI::TextDest dest
134         char *str
135 CODE:
136         printtext_dest(dest, "%s", str);