The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Language::XSB::Base;

our $VERSION;
BEGIN {
    $VERSION = '0.11';
}

use strict;
use warnings;

require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw( xsb_init
		  setreg
		  setreg_int
		  getreg
		  getreg_int
		  regtype
		  go );

use Language::XSB::Config;

use Inline C => Config => MYEXTLIB => $XsbConfig{XSB_O},
                INC => "-I$XsbConfig{CONFDIR} -I$XsbConfig{EMUDIR}";
                # CCFLAGS => "-g -O0";

# my $pkg;
# BEGIN { $pkg=__PACKAGE__ }

use Inline C => qq
{

 #include "Base.h"

 int my_xsb_init(char *xsbloader) {
     char *xsb_argv[3]={ "$XsbConfig{CONFDIR}/bin/xsb",
			 xsbloader,
			 NULL, };
     int xsb_argc=2;
     converter=GvSV(gv_fetchpv(PKG "::converter", GV_ADDMULTI, SVt_PV));
     xsb(0, xsb_argc, xsb_argv);
     xsb(1,0,0);
 }

 SV *my_getreg(int index) {
     if (index < 0 || index >= 255 )
	 die ("invalid index \%d for xsb_reg_term", index);
     return term2sv(reg_term(index+1));
 }

 SV *my_getreg_int(int index) {
     if (index < 0 || index >= 255 )
	 die ("invalid index \%d for xsb_reg_term", index);
     return getreg_int(index+1);
 }

 int my_regtype(int index) {
     if (index < 0 || index >= 255 )
	 die ("invalid index \%d for xsb_reg_term", index);
     return regtype(index+1);
 }

 SV *my_setreg(int index, SV *term) {
     return setreg(index+1, term);
 }

 void my_setreg_int(int index, int value) {
     if (index < 0 || index >= 255 )
	 die ("invalid index \%d for xsb_reg_term", index);
     setreg_int(index+1, value);
 }

 int my_go() {
     xsb(1,0,0);
 }

}, NAME => __PACKAGE__, VERSION => $VERSION, PREFIX => 'my_', OPTIMIZE => '-g';


# conversions between Perl and Prolog implemented in Converter module
use Language::Prolog::Types::Converter;
our $converter='Language::Prolog::Types::Converter';

1;
__END__

=head1 NAME

Language::XSB::Base - XSB SLG-WAN access

=head1 SYNOPSIS

  # use Language::XSB::Base;
  # better... :-)
  use Language::XSB;


=head1 ABSTRACT

This module provides direct access to the XSB SLG-WAM.

=head1 DESCRIPTION

This module lets get and set the XSB SLG-WAM registers converting data
between Prolog and Perl formats.

It also has methods to initialize XSB and to make it run.

It should be noted that registers in XSB are indexed from 1, but in
Perl they are indexed from 0!

=head2 EXPORT

=over 4

=item C<xsb_init()>

=item C<setreg($index, $term)>

=item C<setreg_int($index, $integer)>

=item C<getreg($index)>

=item C<getreg_int($index)>

=item C<regtype($index)>

=item C<go()>


=head1 SEE ALSO



=head1 AUTHOR

Salvador Fandiño, E<lt>sfandino@yahoo.comE<gt>

=head1 COPYRIGHT AND LICENSE

Copyright 2002, 2003 by Salvador Fandiño

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself. 

=cut