The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "GtkDefs.h"
#include "GnomeDefs.h"

#include <zvt/zvtterm.h>

MODULE = Gnome::ZvtTerm		PACKAGE = Gnome::ZvtTerm		PREFIX = zvt_term_

#ifdef ZVT_TERM

Gnome::ZvtTerm_Sink
new(Class)
	SV *	Class
	CODE:
	RETVAL = (ZvtTerm*)(zvt_term_new());
	OUTPUT:
	RETVAL

Gnome::ZvtTerm_Sink
new_with_size(Class, cols, rows)
	SV *	Class
	int	cols
	int	rows
	CODE:
	RETVAL = (ZvtTerm*)(zvt_term_new_with_size(cols, rows));
	OUTPUT:
	RETVAL

void
zvt_term_reset (term, hard)
	Gnome::ZvtTerm	term
	int	hard


#if GNOME_HVER >= 0x010200

void
zvt_term_feed(term, text, len)
	Gnome::ZvtTerm	term
	char *	text
	int	len

#endif

int
zvt_term_forkpty(term, do_uwtmp_log)
	Gnome::ZvtTerm	term
	int do_uwtmp_log;

void
zvt_term_closepty(term)
	Gnome::ZvtTerm	term

void
zvt_term_killchild(term, signal)
	Gnome::ZvtTerm	term
	int	signal

void
zvt_term_bell(term)
	Gnome::ZvtTerm	term

void
zvt_term_set_scrollback(term, scrollback)
	Gnome::ZvtTerm	term
	int	scrollback

void
zvt_term_get_buffer (term, type, sx, sy, ex, ey)
	Gnome::ZvtTerm	term
	int	type
	int	sx
	int	sy
	int	ex
	int	ey
	PPCODE:
	{
		char* res;
		int len=0;

		res = zvt_term_get_buffer (term, &len, type, sx, sy, ex, ey);
		EXTEND(sp, 2);
		PUSHs(sv_2mortal(newSVpv(res, 0)));
		PUSHs(sv_2mortal(newSViv(len)));
		g_free(res);
	}

void
zvt_term_set_font_name(term, name)
	Gnome::ZvtTerm	term
	char *	name

void
zvt_term_set_fonts(term, font, font_bold)
	Gnome::ZvtTerm	term
	Gtk::Gdk::Font	font
	Gtk::Gdk::Font	font_bold

void
zvt_term_hide_pointer(term)
	Gnome::ZvtTerm	term

void
zvt_term_show_pointer(term)
	Gnome::ZvtTerm	term

void
zvt_term_set_bell (term, state)
	Gnome::ZvtTerm	term
	int	state

gboolean
zvt_term_get_bell (term)
	Gnome::ZvtTerm	term

void
zvt_term_set_blink(term, state)
	Gnome::ZvtTerm	term
	int	state

void
zvt_term_set_scroll_on_keystroke(term, state)
	Gnome::ZvtTerm	term
	int	state

void
zvt_term_set_scroll_on_output(term, state)
	Gnome::ZvtTerm	term
	int	state

void
zvt_term_set_color_scheme (term, red, green, blue)
	Gnome::ZvtTerm	term
	SV *red
	SV *green
	SV *blue
	CODE:
	{
		gushort r[18], g[18], b[18];
		AV *ra, *ga, *ba;
		int i;
		SV **s;

		if (!red || !SvOK(red) || !SvROK(red) || SvTYPE(SvRV(red)) != SVt_PVAV )
			croak("need an array ref in set_color_scheme");
		ra = (AV*)SvRV(red);
		if (!green || !SvOK(green) || !SvROK(green) || SvTYPE(SvRV(green)) != SVt_PVAV )
			croak("need an array ref in set_color_scheme");
		ga = (AV*)SvRV(green);
		if (!blue || !SvOK(blue) || !SvROK(blue) || SvTYPE(SvRV(blue)) != SVt_PVAV )
			croak("need an array ref in set_color_scheme");
		ba = (AV*)SvRV(blue);
		for (i=0; i < 18; ++i) {
			r[i] = (s=av_fetch(ra, i, 0)) && SvOK(*s)? SvIV(*s): 0;
			g[i] = (s=av_fetch(ga, i, 0)) && SvOK(*s)? SvIV(*s): 0;
			b[i] = (s=av_fetch(ba, i, 0)) && SvOK(*s)? SvIV(*s): 0;
		}
		zvt_term_set_color_scheme (term, r, g, b);
	}


void
zvt_term_set_default_color_scheme(term)
	Gnome::ZvtTerm	term

void
zvt_term_set_del_key_swap (term, state)
	Gnome::ZvtTerm	term
	int	state

void
zvt_term_set_wordclass (term ,klass)
	Gnome::ZvtTerm	term
	char*	klass

#if 0

void
zvt_term_set_auto_window_hint (term, state)
	Gnome::ZvtTerm	term
	int	state

#endif

int
zvt_term_match_add (term, regexp, highlight_mask, data)
	Gnome::ZvtTerm	term
	char*	regexp
	unsigned int highlight_mask
	SV *data

void
zvt_term_match_clear (term, regexp)
	Gnome::ZvtTerm	term
	char*	regexp

char*
zvt_term_match_check (term, x, y)
	Gnome::ZvtTerm	term
	int	x
	int	y
	CODE:
	{
		gpointer data = NULL;
		RETVAL = zvt_term_match_check (term, x, y, &data);
	}

void
zvt_term_set_background (term, pixmap_file, transparent, shaded)
	Gnome::ZvtTerm	term
	char*	pixmap_file
	int	transparent
	int	shaded

void
zvt_term_set_shadow_type (term, type)
	Gnome::ZvtTerm	term
	Gtk::ShadowType	type

void
zvt_term_set_size (term, width, height)
	Gnome::ZvtTerm	term
	int	width
	int	height

int
writechild (term, text)
	Gnome::ZvtTerm	term
	SV *text
	CODE:
	{
		STRLEN len;
		char *p = SvPV(text, len);
		RETVAL = zvt_term_writechild(term, p, len);
	}
	OUTPUT:
	RETVAL


Gtk::Adjustment
adjustment(term)
	Gnome::ZvtTerm	term
	CODE:
	RETVAL = term->adjustment;
	OUTPUT:
	RETVAL

#endif