2021-03-14 19:00:22 +01:00

150 lines
3.2 KiB
Plaintext

#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_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);