Hi all,
in the SPOILER you can find the structorian strs definition for the above rdb file.
More to come...
I am back with a php class for reading binary files according to their struct(orian)...
It is still under heavy development...
Skamorzo!
in the SPOILER you can find the structorian strs definition for the above rdb file.
[filemask="db_stringus(ascii).rdb"]
struct HEADER {
str [len=128] date;
u32 records;
child ENTRY;
}
struct ENTRY {
u32 code;
i32 group_id;
str [len=1024] name_id;
str [len=1024] value;
if (CurOffset < FileSize) {
sibling;
}
}
struct HEADER {
str [len=128] date;
u32 records;
child ENTRY;
}
struct ENTRY {
u32 code;
i32 group_id;
str [len=1024] name_id;
str [len=1024] value;
if (CurOffset < FileSize) {
sibling;
}
}
More to come...
I am back with a php class for reading binary files according to their struct(orian)...
It is still under heavy development...
<?php
class structorian {
public $fd = NULL;
public $mode = NULL;
public function __construct($filename, $mode = "rb") {
$this->mode = $mode;
switch($mode) {
case "wb":
$this->fd = fopen($filename, $mode);
break;
default:
$this->fd = fopen($filename, $mode);
break;
}
}
public function read($dataType = NULL, $count = NULL) {
$data = NULL;
if((!!$this->fd) && (!feof($this->fd))) {
switch ($dataType) {
case "i8":
$data = unpack("ci8", fread($this->fd, 1))['i8'];
break;
case "i16":
$data = unpack("si16", fread($this->fd, 2))['i16'];
break;
case "i32":
$data = unpack("ii32", fread($this->fd, 4))['i32'];
break;
case "ichar":
$data = chr(unpack("cchar", fread($this->fd, 1))['char']);
break;
case "u8":
$data = unpack("Cu8", fread($this->fd, 1))['u8'];
break;
case "u16":
$data = unpack("Su16", fread($this->fd, 2))['u16'];
break;
case "u32":
$data = unpack("Iu32", fread($this->fd, 4))['u32'];
break;
case "char":
case "uchar":
$data = chr(unpack("Cchar", fread($this->fd, 1))['char']);
break;
case "str":
case "cstr":
$data = unpack("a".$count."str", fread($this->fd, $count))['str'];
break;
case "float":
$data = unpack("ffloat", fread($this->fd, 4))['float'];
break;
case "double":
$data = unpack("ddouble", fread($this->fd, 8))['double'];
break;
default:
break;
}
}
return $data;
}
public function __destruct() {
if(!!$this->fd) return fclose($this->fd);
}
/*
public function x8() {
}
public function x16() {
}
public function x32() {
}
public function bits8() {
}
public function bits16() {
}
public function bits32() {
}
public function enum8() {
}
public function enum16() {
}
public function enum32() {
}
public function set8() {
}
public function set16() {
}
public function set32() {
}
public function wstr() {
}
public function wchar() {
}
*/
}
$a = new structorian("db_string(ascii).rdb");
echo "/* Date: ". $a->read("str", 128). " */\n";
echo "/* Records: ". $a->read("u32"). " */\n";
while(!feof($a->fd)) {
$counter_1 = $a->read("u32");
$counter_2 = $a->read("u32");
echo $a->read("str", $counter_1). "|";
echo $a->read("str", $counter_2). "|";
echo $a->read("u32"). "|";
echo $a->read("i32"). "|";
echo $a->read("u32"). "|";
echo $a->read("u32"). "|";
echo $a->read("u32"). "|";
echo $a->read("u32"). "\n";
}
$b = new structorian("db_stringus(ascii).rdb");
echo "/* Date: ". $b->read("str", 128). " */\n";
echo "/* Records: ". $b->read("u32"). " */\n";
while(!feof($b->fd)) {
echo $b->read("u32"). "|";
echo $b->read("i32"). "|";
echo $b->read("str", 1024). "|";
echo $b->read("str", 1024). "\n";
}
?>
class structorian {
public $fd = NULL;
public $mode = NULL;
public function __construct($filename, $mode = "rb") {
$this->mode = $mode;
switch($mode) {
case "wb":
$this->fd = fopen($filename, $mode);
break;
default:
$this->fd = fopen($filename, $mode);
break;
}
}
public function read($dataType = NULL, $count = NULL) {
$data = NULL;
if((!!$this->fd) && (!feof($this->fd))) {
switch ($dataType) {
case "i8":
$data = unpack("ci8", fread($this->fd, 1))['i8'];
break;
case "i16":
$data = unpack("si16", fread($this->fd, 2))['i16'];
break;
case "i32":
$data = unpack("ii32", fread($this->fd, 4))['i32'];
break;
case "ichar":
$data = chr(unpack("cchar", fread($this->fd, 1))['char']);
break;
case "u8":
$data = unpack("Cu8", fread($this->fd, 1))['u8'];
break;
case "u16":
$data = unpack("Su16", fread($this->fd, 2))['u16'];
break;
case "u32":
$data = unpack("Iu32", fread($this->fd, 4))['u32'];
break;
case "char":
case "uchar":
$data = chr(unpack("Cchar", fread($this->fd, 1))['char']);
break;
case "str":
case "cstr":
$data = unpack("a".$count."str", fread($this->fd, $count))['str'];
break;
case "float":
$data = unpack("ffloat", fread($this->fd, 4))['float'];
break;
case "double":
$data = unpack("ddouble", fread($this->fd, 8))['double'];
break;
default:
break;
}
}
return $data;
}
public function __destruct() {
if(!!$this->fd) return fclose($this->fd);
}
/*
public function x8() {
}
public function x16() {
}
public function x32() {
}
public function bits8() {
}
public function bits16() {
}
public function bits32() {
}
public function enum8() {
}
public function enum16() {
}
public function enum32() {
}
public function set8() {
}
public function set16() {
}
public function set32() {
}
public function wstr() {
}
public function wchar() {
}
*/
}
$a = new structorian("db_string(ascii).rdb");
echo "/* Date: ". $a->read("str", 128). " */\n";
echo "/* Records: ". $a->read("u32"). " */\n";
while(!feof($a->fd)) {
$counter_1 = $a->read("u32");
$counter_2 = $a->read("u32");
echo $a->read("str", $counter_1). "|";
echo $a->read("str", $counter_2). "|";
echo $a->read("u32"). "|";
echo $a->read("i32"). "|";
echo $a->read("u32"). "|";
echo $a->read("u32"). "|";
echo $a->read("u32"). "|";
echo $a->read("u32"). "\n";
}
$b = new structorian("db_stringus(ascii).rdb");
echo "/* Date: ". $b->read("str", 128). " */\n";
echo "/* Records: ". $b->read("u32"). " */\n";
while(!feof($b->fd)) {
echo $b->read("u32"). "|";
echo $b->read("i32"). "|";
echo $b->read("str", 1024). "|";
echo $b->read("str", 1024). "\n";
}
?>
Skamorzo!