= $len) { break; } if ($chr & 0x80) { $chr <<= 1; while ($chr & 0x80) { $i++; $chr <<= 1; } } } return $count; } function error($err) { echo 'Error: ' . $err; exit; } function ys($log = 1) { global $yShout, $prefs; if ($yShout) { return $yShout; } if (filter_var($log, FILTER_VALIDATE_INT, ["options" => ["min_range" => 0, "max_range" => $prefs['logs']]]) === false) { $log = 1; } $log = 'log.' . $log; return new YShout($log, loggedIn()); } function dstart() { global $ts; $ts = ts(); } function dstop() { global $ts; echo 'Time elapsed: ' . ((ts() - $ts) * 100000); exit; } function login($hash) { // echo 'login: ' . $hash . "\n"; $_SESSION['yLoginHash'] = $hash; cookie('yLoginHash', $hash); // return loggedIn(); } function logout() { $_SESSION['yLoginHash'] = ''; cookie('yLoginHash', ''); // cookieClear('yLoginHash'); } function loggedIn() { global $prefs; $loginHash = cookieGet('yLoginHash', false); // echo 'loggedin: ' . $loginHash . "\n"; // echo 'pw: ' . $prefs['password'] . "\n"; if (isset($loginHash)) { return $loginHash == md5($prefs['password']); } if (isset($_SESSION['yLoginHash'])) { return $_SESSION['yLoginHash'] == md5($prefs['password']); } return false; }