= $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, array("options" => array("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; }