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("