view src/main.d @ 1:4a9dcbd9e54f

-files of 0.13 beta -fixes so that it now compiles with the current dmd version
author marton@basel.hu
date Tue, 05 Apr 2011 20:44:01 +0200
parents
children
line wrap: on
line source

/*  Ddbg - Win32 Debugger for the D programming language
 *  Copyright (c) 2007 Jascha Wetzel
 *  All rights reserved. See LICENSE.TXT for details.
 */

import cli.userinterface;
import cli.ddbgcli;
import cli.gdbcli;
import cli.gdbmicli;
import debugger;

import std.string;
import std.stdio;

import util;

/**************************************************************************************************

**************************************************************************************************/
int main(string[] args)
{
    debug domain(args);
    else
    {
        try domain(args);
        catch ( DebuggerException e )
        {
            writefln("%s", e.msg);
            return 1;
        }
        catch ( Object o )
        {
            writefln("\n\n----------------------------------------\nUnhandled exception in %s:\n"~
                    "%s\n\nPlease report this problem!\nSee the http://ddbg.mainia.de/releases.html for details.\nThank you!",
                    VERSION_STRING, o
            );
            return 1;
        }
    }
	return 0;
}

void domain(string[] args)
{
    string[string] options = parseArgs(args);

    UserInterface cli;
    if ( ("cli" in options) !is null )
    {
        if ( options["cli"] == "gdb" )
            cli	= new GDBCLI;
        else if ( options["cli"] == "gdbmi" )
            cli	= new GDBMICLI;
        else {
            DbgIO.println("Unknown CLI mode \"%s\"", options["cli"]);
            return;
        }
    }
    else
        cli	= new DdbgCLI;
    cli.init(args);

    if ( "cmd" in options )
    {
        string cmd_string = strip(options["cmd"]);
        if ( cmd_string[0] == '"' && cmd_string[$-1] == '"' )
            cmd_string = cmd_string[1..$-1];
        cli.runCommands(cmd_string);
    }

    cli.start();
}

string[string] parseArgs(inout string[] args)
{
    string[string]    options;

    for ( int i=1; i < args.length; )
    {
        string arg = args[i];

        uint optend;
        for ( optend = 1; optend < arg.length; ++optend )
        {
            if ( !inPattern(arg[optend], "a-zA-Z0-9") )
                break;
        }
        string option = arg[0..optend];
        switch ( option )
        {
            case "-cli":
            case "-cmd":
                string value;
                if ( optend >= arg.length ) {
                    args = args[0..i]~args[i+1..$];
                    value = args[i];
                }
                else
                    value = arg[optend..$];
                if ( value.length <= 0 ) {
                    DbgIO.println("ERROR: -%s=<value> or -%s <value> expected", option, option);
                    break;
                }
                if ( value[0] == '=' )
                    value = value[1..$];
                options[option[1..$]] = value;
                args = args[0..i]~args[i+1..$];
                break;
            default:
                ++i;
                if ( option[0] != '-' )
                    return options;
                break;
        }
    }
    return options;
}