<?php

define('FILE_NOT_FOUND', 'Soubor nenalezen.');

class FileStream
{
  private $Handle;
  private $FileName;
   
  function __construct()
  {
    $this->Handle = false;
  } 
   
  function __destruct() 
  {
    if($this->Handle)
      fclose($this->Handle);
  }
   
  public function OpenFile($FileName)
  {
	$this->FileName = $FileName;
    $this->CloseFile();
    $this->Handle = fopen($FileName, 'rb');
    if(!$this->Handle) die(FILE_NOT_FOUND);  
  }

  public function CreateFile($FileName)
  {
	$this->FileName = $FileName;
    $this->CloseFile();
    $this->Handle = fopen($FileName, 'wb+');
    if(!$this->Handle) die(FILE_NOT_FOUND);  
  }
  
  public function CloseFile()
  {
    if($this->Handle)
      fclose($this->Handle);   
  }
   
  public function ReadByte()
  {
    return(fread($this->Handle, 1));
  }  
   
  public function ReadUint()
  {
    $val = unpack('V*', fread($this->Handle, 4));
    return($val[1]);
  }
   
  public function ReadInt()
  {
    $val = unpack('I*', fread($this->Handle, 4));
    return($val[1]);
  }  
   
  public function ReadFloat()
  {
    $val = unpack('f*', fread($this->Handle, 4));
    return($val[1]);
  }
   
  public function ReadChar()
  {
    return(fread($this->Handle, 1));
  }

  public function ReadLine()
  {
    return(fgets($this->Handle));
  }    
   
  public function WriteByte($Value)
  {
    fwrite($this->Handle, pack('C*', $Value), 1);
  }  
   
  public function WriteUint($Value)
  {
	fwrite($this->Handle, pack('V*', $Value), 4);
  }
   
  public function WriteInt($Value)
  {
	fwrite($this->Handle, pack('I*', $Value), 4);
  }  
   
  public function WriteFloat($Value)
  {
    fwrite($this->Handle, pack('f*', $Value), 4);
  }
   
  public function WriteChar($Value)
  {
    fwrite($this->Handle, $Value, 1);
  }    
  
  public function WriteString($Value)
  {
	fwrite($this->Handle, $Value);
	fwrite($this->Handle, "\0", 1);
  }

  public function WriteLine($Text)
  {
    fputs($this->Handle, $Text);
  }       
   
  public function Seek($Position, $Type = SEEK_SET)
  {
    fseek($this->Handle, $Position, $Type);
  }
  
  public function GetPosition()
  {
	return(ftell($this->Handle));
  }
  
  public function GetSize()
  {
	return(filesize($this->FileName));
  }

  public function EOF()
  {
	 return(feof($this->Handle));
  }
}

?>
