blob: 4d8ca65c78576884c23bd13bb439451425c80087 [file] [log] [blame]
/*=============================================================================
Copyright (c) 2001-2010 Joel de Guzman
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/
#include <boost/config/warning_disable.hpp>
#include <input/sexpr.hpp>
#include <input/parse_sexpr_impl.hpp>
#include <scheme/compiler.hpp>
#include <utree/io.hpp>
#include <fstream>
int check_file(std::ifstream& in, char const* filename)
{
if (!in)
{
std::cerr << filename << " not found" << std::endl;
return -1;
}
// Ignore the BOM marking the beginning of a UTF-8 file in Windows
char c = in.peek();
if (c == '\xef')
{
char s[3];
in >> s[0] >> s[1] >> s[2];
s[3] = '\0';
if (s != std::string("\xef\xbb\xbf"))
{
std::cerr << "Error: Unexpected characters from input file: "
<< filename << std::endl;
return -1;
}
}
return 0;
}
///////////////////////////////////////////////////////////////////////////////
// Main program
///////////////////////////////////////////////////////////////////////////////
int main(int argc, char **argv)
{
char const* filename = filename = argv[1];
std::ifstream in(filename, std::ios_base::in);
if (check_file(in, filename) != 0)
return -1;
scheme::interpreter program(in, filename);
scheme::function main_ = program["main"];
if (!main_.empty())
main_(); // call main
return 0;
}