<html>
<head>
</head>
<body>
<pre>
Note this is an interim the document and subject to changes.


****
This MI implementation is base on GDB/MI 5.2.1.

* Command/Response channels
To create an MISession an InputStream and OutputStream are
needed(assuming it is the pipe connected to gdb).

	MISession misession = new MISession(InputStream, OutputStream);
	
During initialisation of the session(MISession) two threads
are created TxThread, RxThread and associative list queues
TxQueue and RxQueue:
- The RxThread thread is block on readig the output of the pipe(gdb) for
any responses.
- The TxThread thread is block waiting for command.

MI Commands are created via the CommandFactory and
are added to the TxQueue, the TxThread will then wake up
generate a token(ID) for the command and send it to the pipe(gdb), after
transmission the command is then move to the RxQueue waiting for the 
result(MIResultRecord).

Any responses will wake the RxThread, the thread will parse
the response constructing an MIOutput, then it searches the RxQueue
for any commands with the same token waking any thread waiting
for a synchronous response(MIResultRecord).  Any out-of-band
responses(MIOOBRecord) are dispatch to MISession observers, clients interested
in notifications should register to the MISession.

* MI Parsing
There is a generic MI parser (MIParser) constructing an syntax tree of the output.
For example, a ResultRecord response after a "-break-insert", the parser will
generate this tree:
	10-break-insert main
	10^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
			addr="0x08048468",func="main",file="hello.c",line="4",times="0"}

	- MIOutput
		- MIOOBRecord[0]
		- MIResutRecord
			- token = 10
			- ResultClass = "done"
			- MIResult[1]
				- MIResult[0]
					- variable = "bkpt"
					- value = MITuple
						- MIResult[9]
							- MiResult[0]
								- variable = "number"
								- MIConst = "1"
							- MiResult[1]
								- variable = "type"
								- MIConst = "breakpoint"
							- MiResult[2]
								- variable = "disp"
								- MIConst = "keep"
							- MiResult[3]
								- variable = "enabled"
								- MIConst = "y"
							- MiResult[4]
								- variable = "addr"
								- MIConst = "0x08048468"
							- MiResult[5]
								- variable = "func"
								- MIConst = "main"
							- MiResult[6]
								- variable = "file"
								- MIConst = "hello.c"
							- MiResult[7]
								- variable = "line"
								- MIConst = "4"
							- MiResult[8]
								- variable = "times"
								- MIConst = "0"

MICommands will do there own parsing:
	session = MISession(in, out);
	MIBreakInsert cmd = new MIBreakInsert("main");
	session.postCommand(cmd);	// sent to gdb.
	MIBreakInsertInfo info = cmd.getBreakInsertInfo(); // Parsing of the Result Record.

****
MI Process

For convienience, to java.lang.Process is provided.

		MISession.getSessionProcess();

This Process talks directly to gdb and is smart enough to wrap any command
in CLICommand etc ..

	MISession.getMIInferior()
	
MIInferior implements Process for the Inferiror.

*****
MI <==> CDI Adapters

 To do.
</pre>
</body>
</html>
