# typemap for Perl 5 interface to Berkeley DB version 2
#
# SCCS: 1.6, 11/11/97     
#
# written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
# version 0.2
#
#################################### DB SECTION
#
# 

void *			T_PV
u_int			T_U_INT
u_int32_t		T_U_INT
const char * 		T_PV_NULL
PV_or_NULL		T_PV_NULL
IO_or_NULL		T_IO_NULL
BerkeleyDB		T_PTROBJ
BerkeleyDB::Common	T_PTROBJ
BerkeleyDB::Hash	T_PTROBJ
BerkeleyDB::Btree	T_PTROBJ
BerkeleyDB::Recno	T_PTROBJ
BerkeleyDB::Text	T_PTROBJ
BerkeleyDB::Cursor	T_PTROBJ
BerkeleyDB::TxnMgr	T_PTROBJ
BerkeleyDB::Txn		T_PTROBJ
BerkeleyDB::Log		T_PTROBJ
BerkeleyDB::Lock	T_PTROBJ
BerkeleyDB::Env		T_PTROBJ_NULL
DBT			T_dbtdatum
DBTKEY			T_dbtkeydatum
DBTKEY_B		T_dbtkeydatum_btree
DBTYPE			T_U_INT

INPUT

T_U_INT
        $var = SvUV($arg)

T_PV_NULL
	if ($arg == &sv_undef)
	    $var = NULL ;
	else {
            $var = ($type)SvPV($arg,na) ;
	    if (na == 0)
		$var = NULL ;
	}

T_IO_NULL
	if ($arg == &sv_undef)
	    $var = NULL ; 
	else 
            $var = IoOFP(sv_2io($arg))

T_PTROBJ_NULL
	if ($arg == &sv_undef)
	    $var = NULL ;
        else if (sv_derived_from($arg, \"${ntype}\")) {
            IV tmp = SvIV((SV*)SvRV($arg));
            $var = ($type) tmp;
        }
        else
            croak(\"$var is not of type ${ntype}\")

T_dbtkeydatum
	if (db->type == DB_RECNO) {
	    Value =  GetRecnoKey(db, SvIV($arg)) ; 
	    $var.data = & Value; 
	    $var.size = (int)sizeof(db_recno_t);
	}
	else {
	    $var.data = SvPV($arg, na);
	    $var.size = (int)na;
	}
	$var.flags = 0 ;

T_dbtkeydatum_btree
	if (db->type == DB_RECNO || 
		(db->type == DB_BTREE && flags & DB_SET_RECNO)) {
	    Value =  GetRecnoKey(db, SvIV($arg)) ; 
	    $var.data = & Value; 
	    $var.size = (int)sizeof(db_recno_t);
	}
	else {
	    $var.data = SvPV($arg, na);
	    $var.size = (int)na;
	}
	$var.flags = 0 ;

T_dbtdatum
	$var.data = SvPV($arg, na);
	$var.size = (int)na;
  	$var.flags = db->partial ;
    	$var.dlen  = db->dlen ;
	$var.doff  = db->doff ;
	

OUTPUT

T_U_INT
        sv_setuv($arg, (UV)$var);

T_PV_NULL
        sv_setpv((SV*)$arg, $var);

T_dbtkeydatum_btree
	OutputKey_B($arg, $var)
T_dbtkeydatum
	OutputKey($arg, $var)
T_dbtdatum
	OutputValue($arg, $var)

T_PTROBJ_NULL
        sv_setref_pv($arg, \"${ntype}\", (void*)$var);

