cgi webcalc; // -*-C-*-ish
import CGI;
import calclang;
import Dict;
import Regex;
Void PreContent()
{
content("
Web Calculator");
content("");
content("Web Calculator
");
}
Void Default()
{
runCalc(Dict::new());
}
Void runCalc(Context ctxt)
{
content("Defined variables
");
displayVars(ctxt);
content("
");
content(formHandler(OnCalc,ctxt)+
"Sum "+textBox("sum","",40)+
submit("Calculate")+
closeForm());
}
Void displayVars(Context ctxt)
{
for p in entries(ctxt) {
content(p.fst+" = "+p.snd+"
");
}
}
Void OnCalc(Context ctxt)
{
insum = incomingValue("sum",DataPost);
case match(compile(r"[A-Za-z 0-9+\-*/]*"), insum) of {
matches(xs,_,_) -> sum = xs[0];
}
content("");
try {
res = calcExpr(ctxt, sum);
content("
"+sum+ " = "+res+"
");
}
catch(CalcParseError(err,p)) {
content("Error: "+err+" at position "+p+"");
}
catch(e) {
content("Error: "+exceptionMessage(e)+"");
}
content("");
runCalc(ctxt);
}
String sc(String f) = ""+f+"";
Void PostContent()
{
content("
"+
sc("webcalc.k")+
sc("calclang.k")
);
content("");
}