<?
 
/**
 
* ----------------------------------------------------------------
 
*            XBase
 
*            api_conversion.php    
 
* 
 
*  Developer        : Erwin Kooi
 
*  released at      : Jan 2006
 
*  last modified by : Erwin Kooi
 
*  date modified    : Jan 2006
 
*
 
*  You're free to use this code as long as you don't alter it
 
*  Copyright (c) 2005 Cyane Dynamic Web Solutions
 
*  Info? Mail to [email protected]
 
* 
 
* --------------------------------------------------------------
 
*
 
* This file implements the default dBase functions as described in the PHP docs
 
*
 
**/
 
 
require_once "Column.class.php";
 
require_once "Record.class.php";
 
require_once "Table.class.php";
 
require_once "WritableTable.class.php";
 
 
function xbase_add_record($xbase_identifier=false,$record) { // - Add a record (array of values) to a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $r =& $xbase->appendRecord();
 
    foreach ($record as $i=>$v) {
 
        if (is_object($i))
 
            $r->setString($i,$v);
 
        else if (is_numeric($i)) 
 
            $r->setStringByIndex($i,$v);
 
        else 
 
            $r->setStringByName($i,$v);
 
    }
 
    $xbase->writeRecord();
 
}
 
function xbase_close($xbase_identifier=false) { // - Close a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $xbase->close();
 
}
 
function xbase_create($filename,$fields) { // - Creates a dBase database
 
    if ($xbase =& XBaseWritableTable::create($filename,$fields)) return xbase_addInstance($xbase);
 
    return false;
 
}
 
function xbase_delete_record($xbase_identifier=false,$record) { // - Deletes a record from a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $xbase->moveTo($record-1);
 
    $xbase->deleteRecord();
 
}
 
function xbase_get_header_info($xbase_identifier=false) { // - Get the header info of a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $result = array();
 
    foreach ($xbase->columns as $column) {
 
        $result[] = array(
 
            "name"=>$column->name, 
 
            "type"=>$column->type, 
 
            "length"=>$column->length, 
 
            "precision"=>$column->decimalCount, 
 
            "format"=>"%s", 
 
            "offset"=>$column->bytePos,
 
        );
 
    }
 
    return $result;
 
}
 
function xbase_get_record_with_names($xbase_identifier=false,$record) { // - Gets a record from a dBase database as an associative array 
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $r =& $xbase->moveTo($record-1);
 
    $result = array();
 
    foreach ($xbase->columns as $column) {
 
        $result[$column->name] = $r->getString($column);
 
    }
 
    $result["deleted"] = $r->isDeleted();
 
    return $result;
 
}
 
function xbase_get_record($xbase_identifier=false) { // - Gets a record from a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $r =& $xbase->moveTo($record-1);
 
    $result = array();
 
    foreach ($xbase->columns as $column) {
 
        $result[] = $r->getString($column);
 
    }
 
    $result["deleted"] = $r->isDeleted();
 
    return $result;
 
}
 
function xbase_numfields($xbase_identifier=false) { // - Find out how many fields are in a dBase database 
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    return $xbase->getColumnCount();
 
}
 
function xbase_numrecords($xbase_identifier=false) { // - Find out how many records are in a dBase database 
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    return $xbase->getRecordCount();
 
}
 
function xbase_open($filename,$flags=0) { // - Opens a dBase database - flags : Typically 0 means read-only, 1 means write-only, and 2 means read and write
 
    if ($flags==0) {
 
        $xbase =& new XBaseTable($filename);
 
        if (!$xbase->open()) return false;
 
    } else {
 
        $xbase =& new XBaseWritableTable($filename);
 
        if (!$xbase->openWrite()) return false;
 
    }
 
    return xbase_addInstance($xbase);
 
}
 
function xbase_pack($xbase_identifier=false) { // - Packs a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $xbase->pack();
 
}
 
function xbase_replace_record($xbase_identifier=false,$record,$record_number) { // - Replace a record in a dBase database
 
    if (!($xbase=&xbase_getInstance($xbase_identifier))) return false;
 
    $r =& $xbase->moveTo($record_number-1);
 
    foreach ($record as $i=>$v) {
 
        if (is_object($i))
 
            $r->setString($i,$v);
 
        else if (is_numeric($i)) 
 
            $r->setStringByIndex($i,$v);
 
        else 
 
            $r->setStringByName($i,$v);
 
    }
 
    $xbase->writeRecord();
 
}
 
 
/**
 
*    private
 
*/
 
$xbase_instances = array();
 
function &xbase_getInstance($i=NULL) {
 
    global $xbase_instances;
 
    if (sizeof($xbase_instances)==0) trigger_error ("No xbases available", E_USER_ERROR);
 
    if (is_null($i)) {
 
        $result =& current($xbase_instances);
 
    } else {
 
        if (!@$xbase_instances[$i]) trigger_error ($i." is an invalid xbase identifier", E_USER_ERROR);
 
        $result =& $xbase_instances[$i];
 
    }
 
    return $result;
 
}
 
function xbase_addInstance(&$i) {
 
    global $xbase_instances;
 
    $result = sizeof($xbase_instances);
 
    $xbase_instances[$result]=&$i;
 
    return $result;
 
}
 
 
 
?>
 
 |