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

MODULE = Gnome2::Print::Unit PACKAGE = Gnome2::Print::Unit PREFIX = gnome_print_unit_

## read-only access to GnomePrintUnit members.
SV *
members (GnomePrintUnit * unit)
    ALIAS:
    	Gnome2::Print::Unit::version     = 0
	Gnome2::Print::Unit::base        = 1
	Gnome2::Print::Unit::unittobase  = 2
	Gnome2::Print::Unit::name        = 3
	Gnome2::Print::Unit::abbr        = 4
	Gnome2::Print::Unit::plural      = 5
	Gnome2::Print::Unit::abbr_plural = 6
    CODE:
    	switch (ix) {
		case 0: RETVAL = newSViv (unit->version);                 break;
		case 1: RETVAL = newSViv (unit->base);                    break;
		case 2: RETVAL = newSVnv (unit->unittobase);              break;
		case 3: RETVAL = newSVpv ((char*)unit->name, PL_na);      break;
		case 4: RETVAL = newSVpv ((char*)unit->abbr, PL_na);      break;
		case 5: RETVAL = newSVpv ((char*)unit->plural, PL_na);    break;
		case 6: RETVAL = newSVpv ((char*)unit->abbr_plural, PL_na); break;

		default: RETVAL = &PL_sv_undef;
	}
    OUTPUT:
    	RETVAL


## These are read-only values, so we just pass copies.

##const GnomePrintUnit *gnome_print_unit_get_identity (guint base);
GnomePrintUnit_copy *
gnome_print_unit_get_identity (class, base)
	guint base
    CODE:
	RETVAL = (GnomePrintUnit *) gnome_print_unit_get_identity (base);
    OUTPUT:
	RETVAL

##const GnomePrintUnit *gnome_print_unit_get_default (void);
GnomePrintUnit_copy *
gnome_print_unit_get_default (class)
    CODE:
	RETVAL = (GnomePrintUnit *) gnome_print_unit_get_default ();
    OUTPUT:
	RETVAL

##const GnomePrintUnit *gnome_print_unit_get_by_name (const guchar *name);
GnomePrintUnit_copy *
gnome_print_unit_get_by_name (class, name)
	const guchar * name
    CODE:
	RETVAL = (GnomePrintUnit *) gnome_print_unit_get_by_name (name);
    OUTPUT:
	RETVAL

##const GnomePrintUnit *gnome_print_unit_get_by_abbreviation (const guchar *abbreviation);
GnomePrintUnit_copy *
gnome_print_unit_get_by_abbreviation (class, abbreviation)
	const guchar * abbreviation
    CODE:
	RETVAL = (GnomePrintUnit *) gnome_print_unit_get_by_abbreviation (abbreviation);
    OUTPUT:
	RETVAL

##GList * gnome_print_unit_get_list (guint bases);
=for apidoc
This function returns a list of Gnome2::Print::Unit.
=cut
void
gnome_print_unit_get_list (bases)
	guint bases
    PREINIT:
    	GList * list, * i;
    PPCODE:
    	list = gnome_print_unit_get_list (bases);
	for (i = list; i != NULL; i = i->next)
		XPUSHs (sv_2mortal (newSVGnomePrintUnit_copy (i->data)));
	gnome_print_unit_free_list (list);

##void    gnome_print_unit_free_list (GList *units);

	
MODULE = Gnome2::Print::Unit PACKAGE = Gnome2::Print::Unit PREFIX = gnome_print_

## gnome_print_convert_distance* return FALSE on error, or if the conversion is
## impossible, otherwise TRUE; we return the distance on success, or undef on
## failure.
##gboolean gnome_print_convert_distance (gdouble *distance, const GnomePrintUnit *from, const GnomePrintUnit *to);
=for apidoc
=signature $distance = $from->convert_distance($to)
	
This function returns a double on success or undef on failure.
=cut
void
gnome_print_convert_distance (from, to)
	GnomePrintUnit * from
	GnomePrintUnit * to
    PREINIT:
    	gboolean res;
    	gdouble distance;
    PPCODE:
    	res = gnome_print_convert_distance (&distance,
			(const GnomePrintUnit *)from,
			(const GnomePrintUnit *)to);
	if (! res)
		XSRETURN_UNDEF;
	EXTEND (SP, 1);
	PUSHs (sv_2mortal (newSVnv (distance)));

##gboolean gnome_print_convert_distance_full (gdouble *distance, const GnomePrintUnit *from, const GnomePrintUnit *to, gdouble ctmscale, gdouble devicescale);
=for apidoc
=signature $distance = $from->convert_distance_full($to, $ctmscale, $devicescale)

This function returns a double on success or undef on failure.
=cut
void
gnome_print_convert_distance_full (from, to, ctmscale, devicescale)
	GnomePrintUnit * from
	GnomePrintUnit * to
	gdouble ctmscale
	gdouble devicescale
    PREINIT:
    	gboolean res;
    	gdouble distance;
    PPCODE:
    	res = gnome_print_convert_distance_full (&distance, 
			(const GnomePrintUnit *)from,
			(const GnomePrintUnit *)to,
			ctmscale, devicescale);
	if (! res)
		XSRETURN_UNDEF;
	EXTEND (SP, 1);
	PUSHs (sv_2mortal (newSVnv (distance)));