photo/helpers.php

98 lines
2.1 KiB
PHP

<?php
if (! function_exists('stringtrim')) {
function stringtrim(string $string,int $chrs=6): string
{
return sprintf('%s...%s',substr($string,0,$chrs),substr($string,-1*$chrs));
}
}
/**
* Dump out data into a hex dump
*/
if (! function_exists('hex_dump')) {
function hex_dump($data,$newline="\n",$width=16): string
{
$result = '';
$pad = '.'; # padding for non-visible characters
$to = $from = '';
for ($i=0; $i<=0xFF; $i++) {
$from .= chr($i);
$to .= ($i >= 0x20 && $i <= 0x7E) ? chr($i) : $pad;
}
$hex = str_split(bin2hex($data),$width*2);
$chars = str_split(strtr($data,$from,$to),$width);
$offset = 0;
foreach ($hex as $i => $line) {
$result .= sprintf('%08X: %-48s [%s]%s',
$offset,
substr_replace(implode(' ',str_split($line,2)),' ',8*3,0),
$chars[$i],
$newline);
$offset += $width;
}
return $result;
}
}
/**
* Determine if an int is valid for this environment
*/
if (! function_exists('is_valid_int')) {
function is_valid_int(mixed $num): bool
{
/*
// check if integers are 64-bit
static $hasINT64 = NULL;
if ($hasINT64 === NULL) {
$hasINT64 = is_int(pow(2, 31)); // 32-bit int are limited to (2^31)-1
if ((! $hasINT64) && (! defined('PHP_INT_MIN')))
define('PHP_INT_MIN', ~PHP_INT_MAX);
}
*/
// if integers are 64-bit - no other check required
return (($num <= PHP_INT_MAX) && ($num >= PHP_INT_MIN));
}
}
if (! function_exists('fixed_point_int_to_float')) {
function fixed_point_int_to_float(string $rawdata): float
{
if (! strlen($rawdata))
return 0;
$len = strlen($rawdata);
if ($len&($len-1) === 0)
throw new \Exception('Rawdata len must be a power of 2');
// Take the first part
$value = 0;
for ($i=0; $i<$len/2; $i++)
$value += ord($rawdata[$len/2+$i])*pow(256,(strlen($rawdata)-1-$i));
// Take the second part
$dec = 0;
for ($i=0; $i<$len/2; $i++)
$dec += ord($rawdata[$i])*pow(256,(strlen($rawdata)-1-$i));
return $value+$dec/pow(2,8*$len/2);
}
}
if (! function_exists('pascal_string')) {
function pascal_string(string $str): string
{
$len = ord(substr($str,0,1));
return substr($str,1,$len);
}
}