/* $Id$ */

#define BUFLEN	32	/* size of buffer in message header */

#define M_DB_RUN	0100	/* set for commands that cause child to run */
#define M_DB_SS		0200	/* debugger wants single stepping (to be orred
				   with SETSS(F) or CONT
				*/

#define m_type		m_buf[0]

#define PS		4
#define LS		4

struct message_hdr {
  char	m_buf[BUFLEN];
/* Possible values of m_buf[0]: */
#define	M_SETBP		0	/* set breakpoint at address in next PS bytes */
#define	M_CLRBP		1	/* clear breakpoint at address in next PS bytes */
#define	M_SETSS		(2|M_DB_RUN)
				/* set single stepping, # of steps in next LS bytes */
#define M_SETSSF	(3|M_DB_RUN)
				/* set single stepping,
				   counting calls as one step
				*/
#define	M_GETEMREGS	4	/* get EM registers, level in next LS bytes */
#define	M_GETBYTES	5	/* get data; size in next LS bytes,
				   address in next PS bytes
				*/
#define M_GETSTR	6	/* get string; max size in next LS bytes,
				   address in next PS bytes
				*/
#define M_SETBYTES	7	/* get data; size in next LS bytes,
				   address in next PS bytes
				*/
/* #define M_CALL	 	8	/* call function; not implemented */
#define M_CONT		(9|M_DB_RUN)
				/* continue */
#define	M_SETEMREGS	10	/* set EM registers, level in next LS bytes;
				   Actually, only the program counter is set.
				*/
#define M_CLRSS		12	/* clear single stepping */
#define M_DUMP		13	/* dump command */
#define M_DGLOB		14	/* data area */
#define M_DSTACK	15	/* stack area */
#define M_SETTRACE	16	/* start tracing; range in next two PS bytes */
#define M_CLRTRACE	17	/* end tracing */

#define	M_OK		50	/* answer of child to most messages */
#define M_FAIL		51	/* answer of child when something goes wrong */
#define M_DATA		52	/* answer of child when data requested */
#define M_END_SS	53	/* stopped because of user single stepping */
#define M_INTR		54	/* sent on interrupt */
};

#define	LB_OFF	(0*PS+LS+1)
#define AB_OFF	(1*PS+LS+1)
#define PC_OFF	(2*PS+LS+1)
#define HP_OFF	(3*PS+LS+1)
#define SP_OFF	(4*PS+LS+1)