Moved for merge preparation.
[core.git] / contrib / lfdb2 / read.php
diff --git a/contrib/lfdb2/read.php b/contrib/lfdb2/read.php
new file mode 100644 (file)
index 0000000..8779b65
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+error_reporting(E_ALL | E_STRICT);
+
+define('__STEP_32'  , 3);
+define('__FACTOR_32', 16);
+define('__FORMAT_READ_32', 'I2');
+
+define('__STEP_64'  , 7);
+define('__FACTOR_64', 32);
+define('__FORMAT_READ_64', 'N2');
+
+// Default is 32-bit
+$__factor = constant('__FACTOR_32');
+$__format = constant('__FORMAT_READ_32');
+$__step   = constant('__STEP_32');
+
+if ((isset($_SERVER['argv'][1])) && ($_SERVER['argv'][1] == '-64')) {
+       // Use 64-bit
+       $__factor = constant('__FACTOR_64');
+       $__format = constant('__FORMAT_READ_64');
+       $__step   = constant('__STEP_64');
+} // END - if
+
+$buffer = file_get_contents('test.data.bin' . ($__factor * 2)) or die('Please run write.php first!' . PHP_EOL);
+
+assert(filesize('test.data.bin' . ($__factor * 2)) == strlen($buffer));
+assert((strlen($buffer) % 8) == 0);
+
+print 'Hash(' . strlen($buffer) . ')=' . md5($buffer) . PHP_EOL;
+
+$decoded = '';
+$i = 0;
+for ($pos = 0; $pos < strlen($buffer); $pos += 8) {
+       $part = substr($buffer, $pos, 8);
+       assert(strlen($part) == 8);
+       //print 'part='.md5($part).PHP_EOL;
+       $unpacked = unpack($__format, $part);
+       //print 'unpacked='.print_r($unpacked,true);
+       $unpacked = $unpacked[1] << $__factor | $unpacked[2];
+
+       //print 'unpacked=' . $unpacked . PHP_EOL;
+       for ($i = 0; $i < $__step; $i++) {
+               $factor = pow(256, ($__step - 1 - $i));
+               //print __LINE__.':i=' . $i . ',factor=' . $factor . ',unpacked=' . $unpacked . PHP_EOL;
+               $chr = ($unpacked / $factor);
+               //print __LINE__.':i=' . $i . ',chr=' . $chr . PHP_EOL;
+
+               if ($chr > 0) {
+                       $a = explode('.', $chr);
+                       $chr = $a[0];
+                       //print __LINE__.':i=' . $i . ',chr=' . $chr . ',unpacked=' . $unpacked . PHP_EOL;
+                       $unpacked -= ($chr * $factor);
+                       //print __LINE__.':i=' . $i . ',chr=' . $chr . ',unpacked=' . $unpacked . PHP_EOL;
+               } else {
+                       $chr = $unpacked;
+                       $unpacked = 0;
+               }
+
+               //print 'chr=' . $chr . PHP_EOL;
+               $decoded .= chr($chr);
+       } // END - for
+} // END - for
+
+$decoded = gzuncompress($decoded);
+
+print 'Writing ' . strlen($decoded) . ' bytes to output ...' . PHP_EOL;
+file_put_contents('test.data.out' . ($__factor * 2), $decoded);
+
+// [EOF]
+?>