if (arguments.length < 1) {
    print("usage: load [-a] [-c config.xml] prog");
    java.lang.System.exit(1);
}

var config = null;
var aflag = false;

while (arguments[0][0] == '-') {
    switch (arguments[0][1]) {
        case 'a': {
            aflag = true;
            break;
        }
        case 'c': {
            config = arguments[1];
            arguments.shift();
            break;
        }
    }
    arguments.shift();
}

/* if no debug config file is specified, use one in the current directory */
if (config == null) {
    config = "./SystemConfig.xml";
}

// Import the DSS packages into our namespace to save on typing
importPackage(Packages.com.ti.debug.engine.scripting);
importPackage(Packages.com.ti.ccstudio.scripting.environment);
importPackage(Packages.java.lang);

// Create our scripting environment object
var script = new ScriptingEnvironment();

// only show warnings or worse (the default is much more verbose)
script.traceSetConsoleLevel(TraceLevel.WARNING);

// Get the Debug Server and start a Debug Session
var debugServer = script.getServer("DebugServer.1");
debugServer.setConfig(config);

var debugSession = debugServer.openSession(".*");

// Connect to the Target
debugSession.target.connect();

// Load a program
// (ScriptingEnvironment has a concept of a working folder and for all of
// the APIs which take path names as arguments you can either pass a relative
// path or an absolute path)
debugSession.memory.loadProgram(arguments[0]);

if (aflag == false) {
    // Set a breakpoint at "exit"
    var progExit = debugSession.symbol.getAddress("xdc_runtime_System_exit__F");
    var bp1 = debugSession.breakpoint.add(progExit);

    // Run.  Should halt at first BP
    debugSession.target.run();

    // Using an expression - get the current value of the PC
    nPC = debugSession.expression.evaluate("PC");

    // Verify we halted at the correct address.
    if (nPC != progExit) {
        print("FAIL: Expected halt at 0x" + Long.toHexString(progExit)
              + ", actually halted at 0x" + Long.toHexString(nPC));
    }
}
else {
    // let 'r rip!
    debugSession.target.runAsynch();
}

// All done
debugSession.terminate();
debugServer.stop();

java.lang.System.exit(0);

