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