<?
/*

Binary -> Decimal
Decimal -> Binary

Hexadecimal -> Decimal
Decimal -> Hexadecimal

Hexadecimal -> Binary
Binary -> Hexadecimal

Author: Kyle Florence

*/

class Converter {

    var 
$temp;
    var 
$result;

    function 
con_decBin ($x) {

        
// Whole Number
        
$n 0$i $w floor($x);

        while (
$i 0.5)
        {
            
$i $w 2; ($w == 0) ? $this->temp[$n] = $this->temp[$n] = 1$w floor($i); $n++;
        }

        for(
$i sizeof($this->temp); $i >= 0$i--)
        {
            
$this->result .= $this->temp[$i];
            if (
$i == 0$this->result .= ' ';
        }

        
// Decimal Number
        
$i $d $x floor($x);

        if (
$i 0) {
                       
            
$this->result .= '. ';

            
$n sizeof($this->temp);
            
            unset(
$r);

            while (
$i 0)
            {
                
$i $d 2$dw floor($i); $r .= $dw$d $i $dw;
                if (
$n == 0$r .= ' ';
                
$n++;
            }
            
            
$this->result .= $r;
        }
        
        return 
$this->result;
    }

    function 
con_binDec ($x) {

        
// Whole Number
        
$x explode('.'$x);

        
$t 1$this->result 0;

        for(
$i 1$i <= strlen($x[0]); $i++)
        {
            if (
$x[0]{strlen($x[0])-$i} == '1'$this->result += $t;
            
$t += $t;
        }

        
// Decimal Number
        
if ($x[1]) {

            
$this->result .= '.';

            
$t 2;
            unset(
$r);

            for(
$i strlen($x[1]); $i 0$i--)
            {
                if (
$x[1]{strlen($x[1])-$i} == '1'$r += (1/$t);
                
$t += $t;
            }
            
            
$r explode('.'$r);
            
$this->result .= $r[1];
        }
        
        return 
$this->result;
    }
    
    function 
con_decHex ($x) {

        
// Whole Number
        
$n 0$i $w floor($x);

        while (
$i 0)
        {
            
$i $w 16;
            
$r = ($i floor($i)) * 16;
            
            switch (
$r) {
                case 
'10'$r 'A'; break;
                case 
'11'$r 'B'; break;
                case 
'12'$r 'C'; break;
                case 
'13'$r 'D'; break;
                case 
'14'$r 'E'; break;
                case 
'15'$r 'F'; break;
                case 
'0' $r =  ''; break;
            }

            
$this->temp[$n] = $r;
            
$w floor($i); $n++;
        }
        
        for(
$i sizeof($this->temp); $i >= 0$i--)
        {
            
$this->result .= $this->temp[$i];
            if (
$i == 0$this->result .= ' ';
        }
        
        
// Decimal Number
        
$i $d $x floor($x);

        if (
$i 0) {
                       
            
$this->result .= '. ';

            
$n sizeof($this->temp);
            
            unset(
$r);

            while (
$i 0)
            {
                
$i $d 16$dw floor($i);

                switch (
$dw) {
                    case 
'10'$r .= 'A'; break;
                    case 
'11'$r .= 'B'; break;
                    case 
'12'$r .= 'C'; break;
                    case 
'13'$r .= 'D'; break;
                    case 
'14'$r .= 'E'; break;
                    case 
'15'$r .= 'F'; break;
                    case 
'0': break;
                    default:   
$r .= $dw; break;
                }

                
$d $i $dw;
                if (
$n == 0$r .= ' ';
                
$n++;
            }
            
            
$this->result .= $r;
        }
        
        return 
$this->result;
    }
    
    function 
con_hexDec ($x) {
        
        
// Whole Number
        
$x explode('.'$x);
        
        
$t 1$r 0;

        for(
$i 1$i <= strlen($x[0]); $i++)
        {
            switch (
$x[0]{strlen($x[0])-$i}) {
                case 
'A'$r += ($t 10); break;
                case 
'B'$r += ($t 11); break;
                case 
'C'$r += ($t 12); break;
                case 
'D'$r += ($t 13); break;
                case 
'E'$r += ($t 14); break;
                case 
'F'$r += ($t 15); break;
                default : 
$r += ($t $x[0]{strlen($x[0])-$i}); break;
             }
            
$t = ($t 16);
        }

        
$this->result $r;

        
// Decimal Number
        
if ($x[1]) {
                       
            
$this->result .= '.';

            
$t 16;
            unset(
$r);

            for(
$i strlen($x[1]); $i 0$i--)
            {
                switch (
$x[1]{strlen($x[1])-$i}) {
                    case 
'A'$r += ((1/$t) * 10); break;
                    case 
'B'$r += ((1/$t) * 11); break;
                    case 
'C'$r += ((1/$t) * 12); break;
                    case 
'D'$r += ((1/$t) * 13); break;
                    case 
'E'$r += ((1/$t) * 14); break;
                    case 
'F'$r += ((1/$t) * 15); break;
                    default : 
$r += ((1/$t) * $x[1]{strlen($x[1])-$i}); break;
                }
                
$t = ($t $t);
            }

            
$r explode('.'$r);
            
$this->result .= $r[1];
        }
        
        return 
$this->result;
    }
}

class 
Template {
    var 
$vars;
    var 
$tdir;

    
// sets the template directory and template
    
function set_dir($template) {
        
$this->tdir $template;
    }

    
// define template file (constructor)
    
function Template($file null) {
        
$this->file $file;
    }

    
// set template variables
    
function set($variable$value) {
        
$this->vars[$variable] = is_object($value) ? $value->fetch() : $value;
    }

    
// fetches a file and saves the output buffer, then returns it
    
function fetch($file null) {
        if(!
$file) {
            
$file $this->file;
        }

        
extract($this->vars);
        
ob_start();
        include(
".".$file);
        
$contents ob_get_contents();
        
ob_end_clean();
        return 
$contents;
    }
}

// set up object
$con = new Converter();

// set up template
$tpl = new Template();

$tpl->set_dir('/template/');
$tpl->set('dir''/template/');

?>