// $Id: jikes.cpp,v 1.65 2000/01/11 02:50:15 lord Exp $
//
// This software is subject to the terms of the IBM Jikes Compiler
// License Agreement available at the following URL:
// http://www.ibm.com/research/jikes.
// Copyright (C) 1996, 1999, International Business Machines Corporation
// and others.  All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//

#include "config.h"
#include <iostream.h>
#include <assert.h>
#include "control.h"
#include <stdio.h>

#ifdef __amigaos__
// Jikes definitely needs more than the default 4K stack. Without ICU support,
// about 8K seem to be enough. With ICU support stack requirements rise to
// about 26K, so we round this value up to 30K to play it safe.
extern "C" {
  unsigned long __stack = 30000;
}
#endif

int main(int argc, char *argv[])
{
    int return_code;

    SetNewHandler();

    FloatingPointCheck();

    ArgumentExpander *arguments = new ArgumentExpander(argc, argv);

    Option *option = new Option(*arguments);

    if (option -> first_file_index < arguments -> argc)
    {
        Control *control = new Control(*arguments, *option);
        return_code = control -> return_code;
#ifdef NO_LEAKS
        delete control;
#endif
    }
    else
    {
        fprintf(stderr,
        "\nJikes Compiler"
        "\n(C) Copyright IBM Corp. 1997, 2000.\n"
        "- Licensed Materials - Program Property of IBM - All Rights Reserved.\n\n");
        fprintf(stderr, "%s", StringConstant::U8S_command_format);
        fprintf(stderr,
        "\n\n"
        "-classpath path    use path for CLASSPATH\n"
        "-d dir             write class files in directory dir\n"
        "-debug             no effect (recognized for compatibility)\n"
        "-depend | -Xdepend recompile all used classes\n"
        "-deprecation       report uses of deprecated features\n"
        "-encoding encoding use specified encoding to read source files\n"
        "-g                 debug (generate LocalVariableTable)\n"
        "-nowarn            do not issue warning messages\n"
        "-nowrite           do not write any class files\n"
        "-O                 do not write LineNumberTable\n"
        "-verbose           list files read and written\n"
        "-Xstdout           redirect output listings to stdout\n"
        "++                 compile in incremental mode\n"
        "+B                 do not invoke bytecode generator\n"
        "+c                 do not discard comments from lexer output\n"
        "+CSO               search for both java and classfile in classpath\n"
        "+D                 report errors immediately in emacs-form without buffering\n"
        "+DR=filename       generate dependence report in filename\n"
        "+E                 list errors in emacs-form\n"
        "+F                 do full dependence check except for Zip and Jar files\n"
        "+Kname=TypeKeyWord map name to type keyword\n"
        "+M                 generate makefile dependencies\n"
        "+P                 pedantic compilation - issues lots of warnings\n"
        "+Td...d            set value of tab d...d spaces; each d is a decimal digit\n"
        "+U                 do full dependence check including Zip and Jar files\n"
        "+Z                 treat cautions as errors\n"
#ifdef TEST
        "Debugging options:\n"
        "+A                 dump AST to standard output\n"
        "+C                 dump bytecodes to standard output\n"
        "+L                 dump lexer output (stream of tokens)\n"
        "+O numbytes        call no-op op_trap() for bytecodes of the given length\n"
        "+u                 unparse AST; produces Java code for the AST\n"
        "+ud                unparse AST, with extra debugging information\n"
#endif
        "\nVersion 1.11 (10 Jan 2000)\n"
        "Originally written by Philippe Charles and David Shields \n"
        "of IBM Research, Jikes is now maintained and refined by the\n"
        "Jikes Project at http://ibm.com/developerworks/opensource.\n"
        "Please consult this URL for more information and to learn \n"
        "how to report problems.\n");

        return_code = 1;
    }

#ifdef NO_LEAKS
    delete arguments;
    delete option;
#endif

    return return_code;
}
