Now relying on exception codes to know when debugger is entered for a
single step trap.

diff --git a/debugger/break.c b/debugger/break.c
index db80414..d5fa643 100644
--- a/debugger/break.c
+++ b/debugger/break.c
@@ -321,7 +321,7 @@
  * Determine if we should continue execution after a SIGTRAP signal when
  * executing in the given mode.
  */
-BOOL DEBUG_ShouldContinue( enum exec_mode mode, int * count )
+BOOL DEBUG_ShouldContinue( DWORD code, enum exec_mode mode, int * count )
 {
     DBG_ADDR addr;
     DBG_ADDR cond_addr;
@@ -330,7 +330,7 @@
 
 #ifdef __i386__
     /* If not single-stepping, back up over the int3 instruction */
-    if (!(DEBUG_context.EFlags & STEP_FLAG)) 
+    if (code == EXCEPTION_BREAKPOINT) 
        DEBUG_context.Eip--;
 #endif
 
@@ -427,7 +427,7 @@
 #ifdef __i386__
     /* If there's no breakpoint and we are not single-stepping, then we     */
     /* must have encountered an int3 in the Windows program; let's skip it. */
-    if ((bpnum == -1) && !(DEBUG_context.EFlags & STEP_FLAG))
+    if ((bpnum == -1) && code == EXCEPTION_BREAKPOINT)
         DEBUG_context.Eip++;
 #endif
 
diff --git a/debugger/dbg.y b/debugger/dbg.y
index 30e26ec..f978d64 100644
--- a/debugger/dbg.y
+++ b/debugger/dbg.y
@@ -41,7 +41,7 @@
 }
 
 %token tCONT tPASS tSTEP tLIST tNEXT tQUIT tHELP tBACKTRACE tINFO tWALK tUP tDOWN
-%token tENABLE tDISABLE tBREAK tDELETE tSET tMODE tPRINT tEXAM tABORT tDEBUGMSG
+%token tENABLE tDISABLE tBREAK tWATCH tDELETE tSET tMODE tPRINT tEXAM tABORT
 %token tCLASS tMAPS tMODULE tSTACK tSEGMENTS tREGS tWND tQUEUE tLOCAL
 %token tPROCESS tMODREF
 %token tEOL tSTRING tDEBUGSTR
@@ -407,7 +407,7 @@
  *
  * Debugger main loop.
  */
-BOOL DEBUG_Main( BOOL is_debug, BOOL force )
+BOOL DEBUG_Main( BOOL is_debug, BOOL force, DWORD code )
 {
     int newmode;
     BOOL ret_ok;
@@ -430,14 +430,16 @@
             fprintf( stderr, " in 16-bit code (%04x:%04lx).\n",
                      (WORD)DEBUG_context.SegCs, DEBUG_context.Eip );
 #else
-        fprintf( stderr, " (%p).\n", GET_IP(DEBUG_CurrThread->context) );
+        fprintf( stderr, " (%p).\n", GET_IP(&DEBUG_context) );
 #endif
     }
 
     if (DEBUG_LoadEntryPoints("Loading new modules symbols:\n"))
        DEBUG_ProcessDeferredDebug();
 
-    if (force || !(is_debug && DEBUG_ShouldContinue( DEBUG_CurrThread->dbg_exec_mode, &DEBUG_CurrThread->dbg_exec_count )))
+    if (force || !(is_debug && DEBUG_ShouldContinue( code, 
+						     DEBUG_CurrThread->dbg_exec_mode, 
+						     &DEBUG_CurrThread->dbg_exec_count )))
     {
         DBG_ADDR addr;
         DEBUG_GetCurrentAddress( &addr );
@@ -525,7 +527,6 @@
      */
     if ((DEBUG_CurrThread->dbg_exec_mode == EXEC_CONT) || (DEBUG_CurrThread->dbg_exec_mode == EXEC_PASS))
 	DEBUG_CurrThread->dbg_exec_count = 0;
-
 /* EPP     if (USER_Driver) USER_Driver->pEndDebugging(); */
     
     return (DEBUG_CurrThread->dbg_exec_mode == EXEC_PASS) ? 0 : DBG_CONTINUE;
diff --git a/debugger/debug.l b/debugger/debug.l
index de15577..26513ed 100644
--- a/debugger/debug.l
+++ b/debugger/debug.l
@@ -150,6 +150,7 @@
 <INITIAL>symbolfile|symbols|symbol|sf   { BEGIN(PATH_EXPECTED); return tSYMBOLFILE; }
 
 <INITIAL,INFO_CMD,DEL_CMD>break|brea|bre|br|b	{ BEGIN(PATH_EXPECTED); return tBREAK; }
+<INITIAL>watch|watc|wat			{ BEGIN(PATH_EXPECTED); return tWATCH; }
 
 <INFO_CMD>share|shar|sha		{ return tSHARE; }
 <INFO_CMD>locals|local|loca|loc		{ return tLOCAL; }
diff --git a/debugger/debugger.h b/debugger/debugger.h
index d51ddc3..1f3d02c 100644
--- a/debugger/debugger.h
+++ b/debugger/debugger.h
@@ -177,7 +177,7 @@
 extern void DEBUG_EnableBreakpoint( int num, BOOL enable );
 extern void DEBUG_InfoBreakpoints(void);
 extern BOOL DEBUG_HandleTrap(void);
-extern BOOL DEBUG_ShouldContinue( enum exec_mode mode, int * count );
+extern BOOL DEBUG_ShouldContinue( DWORD code, enum exec_mode mode, int * count );
 extern void DEBUG_SuspendExecution( void );
 extern enum exec_mode DEBUG_RestartExecution( enum exec_mode mode, int count );
 extern BOOL DEBUG_IsFctReturn(void);
@@ -362,7 +362,7 @@
 
   /* debugger/dbg.y */
 extern void DEBUG_Exit( DWORD exit_code );
-extern BOOL DEBUG_Main( BOOL is_debug, BOOL force );
+extern BOOL DEBUG_Main( BOOL is_debug, BOOL force, DWORD code );
 
   /* Choose your allocator! */
 #if 1