
(********************************************************************)
(*                                                                  *)
(*  calc.sd7      Calculator                                        *)
(*  Copyright (C) 1995, 2004, 2013  Thomas Mertes                   *)
(*                                                                  *)
(*  This program is free software; you can redistribute it and/or   *)
(*  modify it under the terms of the GNU General Public License as  *)
(*  published by the Free Software Foundation; either version 2 of  *)
(*  the License, or (at your option) any later version.             *)
(*                                                                  *)
(*  This program is distributed in the hope that it will be useful, *)
(*  but WITHOUT ANY WARRANTY; without even the implied warranty of  *)
(*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   *)
(*  GNU General Public License for more details.                    *)
(*                                                                  *)
(*  You should have received a copy of the GNU General Public       *)
(*  License along with this program; if not, write to the           *)
(*  Free Software Foundation, Inc., 51 Franklin Street,             *)
(*  Fifth Floor, Boston, MA  02110-1301, USA.                       *)
(*                                                                  *)
(********************************************************************)


$ include "seed7_05.s7i";
  include "progs.s7i";
  include "keybd.s7i";
  include "console.s7i";
  include "editline.s7i";


const proc: main is func

  local
    var string: command is "";
    var program: prog_expr is program.EMPTY;
  begin
    OUT := STD_CONSOLE;
    IN := openEditLine(KEYBOARD, OUT);
    writeln("Calc - Seed7 calculator");
    writeln("Copyright (C) 1995, 2004, 2013 Thomas Mertes");
    writeln("This is free software; see the source for copying conditions.  There is NO");
    writeln("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
    writeln("Calc is written in the Seed7 programming language");
    writeln("Homepage: http://seed7.sourceforge.net");
    writeln;
    write("calculate? ");
    readln(command);
    while command <> "" do
      prog_expr := parseStri("\
        \$ include \"seed7_05.s7i\";\n\
        \include \"console.s7i\";\n\
        \include \"float.s7i\";\n\
        \include \"math.s7i\";\n\
        \include \"rational.s7i\";\n\
        \include \"complex.s7i\";\n\
        \include \"bigint.s7i\";\n\
        \include \"bigrat.s7i\";\n\
        \include \"time.s7i\";\n\
        \include \"duration.s7i\";\n\
        \\n\
        \const proc: main is func\n\
        \  begin\n\
        \    OUT := STD_CONSOLE;\n\
        \    writeln(" & command & ");\n\
        \  end func;\n\
        \");
      if prog_expr <> program.EMPTY then
        if errorCount(prog_expr) = 0 then
          execute(prog_expr);
        else
          writeln("*** " <& errorCount(prog_expr) <& " errors found");
        end if;
      end if;
      write("calculate? ");
      readln(command);
    end while;
  end func;
