<?php
if (isset($_GET['source'])) {
  
highlight_file(__FILE__);
  exit;
}
?>
<html><head><meta charset="UTF-8" />
<title>Basic Calculator</title>
<style>
input { font-family: Verdana; }
body { width: 60%; margin: auto; padding-top: 50px; font-family: Verdana; }
.output { padding: 10px 20px; border: 1px solid #ccc; background: #eee; font-family: Consolas, monospace; }
.err { font-weight: bold; color: #800000; }
</style>
</head>
<body>
<h1>Basic Calculator Online</h1>
<p><b>bc</b> or basic calculator is an arbitrary-precision calculator language with syntax similar to the C programming language. bc is typically used as either a mathematical scripting language or as an interactive mathematical shell.</p>
<p>Here you can use it online, without Linux shell.<p/>
<p>This page is proudly <a href="?source">open-source</a>!</p>
<form method='POST'>
<p>Expression: <input type='text' name='expression' placeholder='2 + 2 * 2' value="<?=htmlspecialchars($_POST['expression'])?>" autofocus="autofocus" /> <input type='submit' value='Evaluate ยป' /></p>
</form>
<?php
if (isset($_POST['expression'])) {
  
$expr trim($_POST['expression']);
  if (
preg_match('#[g-wy-z]#si'$expr)) {
    echo 
"<span class='err'>Only hex letters A-F can be used</span>";
  } else {
    echo 
"<div class='output'><b>Output:</b><br/>";
    
$output trim(shell_exec("timeout 60 bc 2>&1 <<<'$expr'"));
    if (empty(
$output)) {
      echo 
"<i>(empty)</i>";
    } else {
      echo 
nl2br(htmlspecialchars($output));
    }
    echo 
"</div>";
  }
}
?>
<p><br/></p>
<?php
readfile
("bc.html");
?>
</body></html>