* debugger/mcs51/break.c, debugger/mcs51/cmd.c,
[fw/sdcc] / debugger / mcs51 / cmd.c
index fef7d6dc629f1a0e4504dbbe6533ece2384a8e9e..332ee2edaf58b512ee4345debeefa27c9b9f4dd6 100644 (file)
@@ -1,7 +1,6 @@
 /*-------------------------------------------------------------------------
     cmd.c - source  file for debugger command execution
-
-             Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1999)
+        Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1999)
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
@@ -22,6 +21,7 @@
    what you give them.   Help stamp out software-hoarding!
 -------------------------------------------------------------------------*/
 
+#include <assert.h>
 #include "sdcdb.h"
 #include "symtab.h"
 #include "simi.h"
@@ -335,7 +335,7 @@ static  int printOrSetSymValue (symbol *sym, context *cctxt,
                                 char *rs, char *val, char cmp);
 
 int srcMode = SRC_CMODE ;
-static set  *dispsymbols = NULL   ; /* set of displayable symbols */
+set *dispsymbols = NULL   ; /* set of displayable symbols */
 static int currentFrame = 0;        /* actual displayed frame     */
 /*-----------------------------------------------------------------*/
 /* funcWithName - returns function with name                       */
@@ -347,11 +347,11 @@ DEFSETFUNC(funcWithName)
     V_ARG(function **,funcp);
 
     if (*funcp)
-       return 0;
+        return 0;
 
     if (strcmp(func->sym->name,name) == 0) {
-       *funcp = func;
-       return 1;
+        *funcp = func;
+        return 1;
     }
 
     return 0;
@@ -407,27 +407,27 @@ static void setBPatModLine (module *mod, int line, char bpType )
 
     next_line = line;
     for ( ; next_line < (srcMode == SRC_CMODE ? mod->ncLines : mod->nasmLines ) ;
-         next_line++ ) {
-       if (srcMode == SRC_CMODE) {
-           if (mod->cLines[next_line]->addr != INT_MAX) {
-               setBreakPoint (mod->cLines[next_line]->addr, CODE, bpType,
-                              userBpCB, mod->c_name, next_line);
-               return;
-//             break;
-           }
-       }
-       else {
-          if (mod->asmLines[next_line]->addr != INT_MAX) {
-              setBreakPoint (mod->asmLines[next_line]->addr, CODE, bpType,
-                             userBpCB, mod->asm_name, next_line);
-               return;
-//            break;
-          }
-       }
-    }
-
-       fprintf(stderr,"No line %d or after in file \"%s\"..\n",
-                       line,mod->c_name);
+          next_line++ ) {
+        if (srcMode == SRC_CMODE) {
+            if (mod->cLines[next_line]->addr != INT_MAX) {
+                setBreakPoint (mod->cLines[next_line]->addr, CODE, bpType,
+                               userBpCB, mod->c_name, next_line);
+                return;
+//              break;
+            }
+        }
+        else {
+           if (mod->asmLines[next_line]->addr != INT_MAX) {
+               setBreakPoint (mod->asmLines[next_line]->addr, CODE, bpType,
+                              userBpCB, mod->asm_name, next_line);
+                return;
+//             break;
+           }
+        }
+    }
+
+        fprintf(stderr,"No line %d or after in file \"%s\"..\n",
+                        line,mod->c_name);
 
     return;
 }
@@ -440,29 +440,29 @@ static void clearBPatModLine (module *mod, int line)
     /* look for the first executable line after the line
        specified & get the break point there */
     if (srcMode == SRC_CMODE && line > mod->ncLines) {
-       fprintf(stderr,"No line %d in file \"%s\".\n",
-               line,mod->c_name);
-       return ;
+        fprintf(stderr,"No line %d in file \"%s\".\n",
+                line,mod->c_name);
+        return ;
     }
 
     if (srcMode == SRC_AMODE && line > mod->ncLines) {
-       fprintf(stderr,"No line %d in file \"%s\".\n",
-               line,mod->c_name);
-       return ;
+        fprintf(stderr,"No line %d in file \"%s\".\n",
+                line,mod->c_name);
+        return ;
     }
 
     for ( ; line < (srcMode == SRC_CMODE ? mod->ncLines : mod->nasmLines ) ;
-         line++ ) {
-       if (srcMode == SRC_CMODE)
-           if (mod->cLines[line]->addr) {
-               clearUSERbp (mod->cLines[line]->addr);
-               break;
-           }
-       else
-           if (mod->asmLines[line]->addr) {
-               clearUSERbp (mod->asmLines[line]->addr);
-               break;
-           }
+          line++ ) {
+        if (srcMode == SRC_CMODE)
+            if (mod->cLines[line]->addr) {
+                clearUSERbp (mod->cLines[line]->addr);
+                break;
+            }
+        else
+            if (mod->asmLines[line]->addr) {
+                clearUSERbp (mod->asmLines[line]->addr);
+                break;
+            }
     }
 
     return;
@@ -519,9 +519,9 @@ DEFSETFUNC(funcWithNameModule)
         return 0;
 
     if (strcmp(func->sym->name,fname) == 0 &&
-       strcmp(func->mod->c_name,mname) == 0) {
-       *funcp = func;
-       return 1;
+        strcmp(func->mod->c_name,mname) == 0) {
+        *funcp = func;
+        return 1;
     }
 
     return 0;
@@ -537,14 +537,14 @@ DEFSETFUNC(funcInAddr)
     V_ARG(function **,funcp);
 
     if (*funcp)
-       return 0;
+        return 0;
 
     /* in the address range */
     if (func->sym->addr <= addr &&
-       func->sym->eaddr >= addr) {
+        func->sym->eaddr >= addr) {
 
-       *funcp = func;
-       return 1;
+        *funcp = func;
+        return 1;
     }
 
     return 0;
@@ -559,11 +559,11 @@ DEFSETFUNC(setStepBp)
 
     if (func->sym && func->sym->addr ) {
 
-       /* set the entry break point */
-       setBreakPoint (func->sym->addr , CODE , STEP ,
-                      stepBpCB ,func->mod->c_name , func->entryline);
+        /* set the entry break point */
+        setBreakPoint (func->sym->addr , CODE , STEP ,
+                       stepBpCB ,func->mod->c_name , func->entryline);
 
-       return 1;
+        return 1;
     }
 
     return 0;
@@ -579,7 +579,7 @@ DEFSETFUNC(setStepEPBp)
     V_ARG(char *,mname);
 
     setBreakPoint (ep->addr, CODE, bptype,
-                  stepBpCB, mname, ep->line);
+                   stepBpCB, mname, ep->line);
     return 1;
 }
 
@@ -593,7 +593,7 @@ DEFSETFUNC(setNextEPBp)
     V_ARG(char *,mname);
 
     setBreakPoint (ep->addr, CODE, bptype,
-                  nextBpCB, mname, ep->line);
+                   nextBpCB, mname, ep->line);
     return 1;
 }
 
@@ -610,12 +610,12 @@ DEFSETFUNC(lineAtAddr)
 
     /* address must be an exact match */
     if (ep->addr == addr) {
-       *line = ep->line;
-       if (block)
-           *block = ep->block ;
-       if (level)
-           *level = ep->level ;
-       return 1;
+        *line = ep->line;
+        if (block)
+            *block = ep->block ;
+        if (level)
+            *level = ep->level ;
+        return 1;
     }
 
     return 0;
@@ -635,12 +635,12 @@ DEFSETFUNC(lineNearAddr)
 
     /* the line in which the address is */
     if (ep->addr <= addr) {
-       *line = ep->line;
-       if (block)
-           *block = ep->block ;
-       if (level)
-           *level = ep->level ;
-       return 1;
+        *line = ep->line;
+        if (block)
+            *block = ep->block ;
+        if (level)
+            *level = ep->level ;
+        return 1;
     }
 
     return 0;
@@ -687,7 +687,7 @@ context *discoverContext (unsigned addr, function *func)
     /* find the asm line number */
     line = 0;
     if (applyToSet(func->afpoints,lineAtAddr,addr,
-                  &line,NULL,NULL))
+                   &line,NULL,NULL))
         currCtxt->asmline = line;
     else
         currCtxt->asmline = -1;
@@ -734,9 +734,9 @@ void simGo (unsigned int gaddr)
        of the program */
     if (!rv)
     {
-               if ( gaddr == 0 )
+        if ( gaddr == 0 )
             gaddr = -1;
-               if ( gaddr == -1 || doingSteps == 1 )
+        if ( gaddr == -1 || doingSteps == 1 )
             goto top ;
     }
 
@@ -748,20 +748,16 @@ void simGo (unsigned int gaddr)
 /*-----------------------------------------------------------------*/
 static char *preparePrint(char *s, context *cctxt, int *fmt, symbol **sym)
 {
-    char *bp = s+strlen(s) -1;
+    char *bp;
     char save_ch ;
 
     *fmt = FMT_NON;
     *sym = NULL;
 
-    while (isspace(*s)) s++;
+    s = trim(s);
     if (!*s)
         return (char *)0;
 
-    while (isspace(*bp)) bp--;
-    bp++ ;
-    *bp = '\0';
-
     if ( *s == '/' )
     {
         /* format of printout */
@@ -782,7 +778,7 @@ static char *preparePrint(char *s, context *cctxt, int *fmt, symbol **sym)
                 break;
         }
         s++;
-        while (isspace(*s)) s++;
+        s = trim_left(s);
     }
     for ( bp = s; *bp && ( isalnum( *bp ) || *bp == '_' || *bp == '$'); bp++ );
     save_ch = *bp;
@@ -858,14 +854,14 @@ static int cmdDisasm (char *s, context *cctxt, int args)
 
     if ( args > 0 )
     {
-        while (*s && isspace(*s)) s++;
+        s = trim_left(s);
 
         if ( isdigit(*s))
         {
             saddr = strtol(s,&s,0);
             if ( args > 1 )
             {
-                while (*s && isspace(*s)) s++;
+                s = trim_left(s);
 
                 if ( isdigit(*s))
                     eaddr = strtol(s,0,0);
@@ -908,7 +904,7 @@ static int cmdDisasm (char *s, context *cctxt, int args)
     else
     {
         if ( args > 1 )
-            printf("Dump of assembler code from 0x%08x to 0x%08x:\n",saddr,eaddr);
+            printf("Dump of assembler code from 0x%08lx to 0x%08lx:\n",saddr,eaddr);
         found = 0;
         while ( saddr < eaddr )
         {
@@ -978,38 +974,33 @@ static int commonSetUserBp(char *s, context *cctxt, char bpType)
     */
 
     if (!cctxt) {
-       fprintf(stdout,"No symbol table is loaded.  Use the \"file\" command.\n");
-       return 0;
+        fprintf(stdout,"No symbol table is loaded.  Use the \"file\" command.\n");
+        return 0;
     }
-    /* white space skip */
-    while (*s && isspace(*s)) s++;
-
-    /* null terminate it after stripping trailing blanks*/
-    bp = s + strlen(s);
-    while (bp != s && isspace(*bp)) bp--;
-    *bp = '\0';
+    /* trim left and right */
+    s = trim(s);
 
     /* case a) nothing */
     /* if nothing given then current location : we know
        the current execution location from the currentContext */
     if (! *s ) {
 
-       /* if current context is known */
-       if (cctxt->func) {
+        /* if current context is known */
+        if (cctxt->func) {
         Dprintf(D_break, ("commonSetUserBp: a) cctxtaddr:%x \n",cctxt->addr));
-           if (srcMode == SRC_CMODE)
-               /* set the break point */
-               setBreakPoint ( cctxt->addr , CODE , bpType , userBpCB ,
-                               cctxt->func->mod->c_name, cctxt->cline);
-           else
-               setBreakPoint ( cctxt->addr , CODE , bpType , userBpCB ,
-                               cctxt->func->mod->asm_name, cctxt->asmline);
+            if (srcMode == SRC_CMODE)
+                /* set the break point */
+                setBreakPoint ( cctxt->addr , CODE , bpType , userBpCB ,
+                                cctxt->func->mod->c_name, cctxt->cline);
+            else
+                setBreakPoint ( cctxt->addr , CODE , bpType , userBpCB ,
+                                cctxt->func->mod->asm_name, cctxt->asmline);
 
-       }
-       else
-           fprintf(stderr,"No default breakpoint address now.\n");
+        }
+        else
+            fprintf(stderr,"No default breakpoint address now.\n");
 
-       goto ret ;
+        goto ret ;
     }
     /* case g) *addr */
     if ( *s == '*' && isdigit(*(s+1)))
@@ -1021,17 +1012,17 @@ static int commonSetUserBp(char *s, context *cctxt, char bpType)
             module *modul;
             if (!applyToSet(modules,moduleLineWithAddr,braddr,&modul,&line))
             {
-                fprintf(stderr,"Address 0x%08x not exists in code.\n",braddr);
+                fprintf(stderr,"Address 0x%08lx not exists in code.\n",braddr);
             }
             else
             {
-                Dprintf(D_break, ("commonSetUserBp: g) addr:%x \n",braddr));
+                Dprintf(D_break, ("commonSetUserBp: g) addr:%lx \n",braddr));
                 setBreakPoint ( braddr , CODE , bpType , userBpCB ,
                             modul->c_name,line);
             }
             goto ret ;
         }
-               else
+                else
         {
             int line = func->exitline;
             if ( !applyToSet(func->cfpoints,lineAtAddr,braddr,
@@ -1040,89 +1031,89 @@ static int commonSetUserBp(char *s, context *cctxt, char bpType)
             setBreakPoint ( braddr , CODE , bpType , userBpCB ,
                             func->mod->c_name,line);
         }
-       goto ret ;
+        goto ret ;
     }
     /* case b) lineno */
     /* check if line number */
     if ( !strchr(s,':') && isdigit(*s)) {
-       /* get the lineno */
-       int line = atoi(s) -1;
+        /* get the lineno */
+        int line = atoi(s) -1;
     Dprintf(D_break, ("commonSetUserBp: b) line:%d \n",line));
     if ( line < 0 )
     {
-               fprintf(stdout,"linenumber <= 0\n");
+                fprintf(stdout,"linenumber <= 0\n");
         goto ret;
     }
-       /* if current context not present then we must get the module
-          which has main & set the break point @ line number provided
-          of that module : if current context known then set the bp
-          at the line number given for the current module
-       */
-       if (cctxt->func) {
-           if (!cctxt->func->mod) {
-               if (!applyToSet(functions,funcWithName,"main"))
-                   fprintf(stderr,"Function \"main\" not defined.\n");
-               else
-                   setBPatModLine(func->mod,line, bpType);
-           } else
-               setBPatModLine(cctxt->func->mod,line, bpType);
-       } else {
-               if (list_mod) {
-                       setBPatModLine(list_mod,line, bpType);
-               } else {
-                 fprintf(stdout,"Sdcdb fails to have module symbol context at %d\n", __LINE__);
-               }
-       }
-
-       goto ret;
+        /* if current context not present then we must get the module
+           which has main & set the break point @ line number provided
+           of that module : if current context known then set the bp
+           at the line number given for the current module
+        */
+        if (cctxt->func) {
+            if (!cctxt->func->mod) {
+                if (!applyToSet(functions,funcWithName,"main"))
+                    fprintf(stderr,"Function \"main\" not defined.\n");
+                else
+                    setBPatModLine(func->mod,line, bpType);
+            } else
+                setBPatModLine(cctxt->func->mod,line, bpType);
+        } else {
+                if (list_mod) {
+                        setBPatModLine(list_mod,line, bpType);
+                } else {
+                  fprintf(stdout,"Sdcdb fails to have module symbol context at %d\n", __LINE__);
+                }
+        }
+
+        goto ret;
     }
 
     if ((bp = strchr(s,':'))) {
 
-       module *mod = NULL;
-       *bp = '\0';
-
-       if (srcMode == SRC_CMODE) {
-           if (!applyToSet(modules,moduleWithCName,s,&mod)) {
-               fprintf (stderr,"No source file named %s.\n",s);
-               goto ret;
-           }
-       } else {
-           if (!applyToSet(modules,moduleWithAsmName,s,&mod)) {
-               fprintf (stderr,"No source file named %s.\n",s);
-               goto ret;
-           }
-       }
-
-       /* case c) filename:lineno */
-       if (isdigit(*(bp +1))) {
+        module *mod = NULL;
+        *bp = '\0';
+
+        if (srcMode == SRC_CMODE) {
+            if (!applyToSet(modules,moduleWithCName,s,&mod)) {
+                fprintf (stderr,"No source file named %s.\n",s);
+                goto ret;
+            }
+        } else {
+            if (!applyToSet(modules,moduleWithAsmName,s,&mod)) {
+                fprintf (stderr,"No source file named %s.\n",s);
+                goto ret;
+            }
+        }
+
+        /* case c) filename:lineno */
+        if (isdigit(*(bp +1))) {
         Dprintf(D_break, ("commonSetUserBp: c) line:%d \n",atoi(bp+1)));
-           setBPatModLine (mod,atoi(bp+1)-1,bpType);
-           goto ret;
-
-       }
-       /* case d) filename:function */
-       if (!applyToSet(functions,funcWithNameModule,bp+1,s,&func))
-           fprintf(stderr,"Function \"%s\" not defined.\n",bp+1);
-       else
+            setBPatModLine (mod,atoi(bp+1)-1,bpType);
+            goto ret;
+
+        }
+        /* case d) filename:function */
+        if (!applyToSet(functions,funcWithNameModule,bp+1,s,&func))
+            fprintf(stderr,"Function \"%s\" not defined.\n",bp+1);
+        else
         Dprintf(D_break, ("commonSetUserBp: d) \n"));
-           setBPatModLine (mod,
-                           (srcMode == SRC_CMODE ?
-                            func->entryline :
-                            func->aentryline),bpType);
+            setBPatModLine (mod,
+                            (srcMode == SRC_CMODE ?
+                             func->entryline :
+                             func->aentryline),bpType);
 
-       goto ret;
+        goto ret;
     }
 
     /* case e) function */
     Dprintf(D_break, ("commonSetUserBp: e) \n"));
     if (!applyToSet(functions,funcWithName,s,&func))
-       fprintf(stderr,"Function \"%s\" not defined.\n",s);
+        fprintf(stderr,"Function \"%s\" not defined.\n",s);
     else
-       setBPatModLine(func->mod,
-                      (srcMode == SRC_CMODE ?
-                       func->entryline :
-                       func->aentryline),bpType);
+        setBPatModLine(func->mod,
+                       (srcMode == SRC_CMODE ?
+                        func->entryline :
+                        func->aentryline),bpType);
 
  ret:
     return 0;
@@ -1149,7 +1140,7 @@ int cmdSetUserBp (char *s, context *cctxt)
 /*-----------------------------------------------------------------*/
 int cmdJump (char *s, context *cctxt)
 {
-    char *bp ;
+    char *bp;
     function *func = NULL;
     if (STACK_EMPTY(callStack))
     {
@@ -1157,13 +1148,9 @@ int cmdJump (char *s, context *cctxt)
         return 0;
     }
 
-    /* white space skip */
-    while (*s && isspace(*s)) s++;
+    /* trim left and right */
+    s = trim(s);
 
-    /* null terminate it after stripping trailing blanks*/
-    bp = s + strlen(s);
-    while (bp != s && isspace(*bp)) bp--;
-    *bp = '\0';
     if (! *s )
     {
         fprintf(stdout,"No argument: need line or *addr.\n");
@@ -1189,7 +1176,7 @@ int cmdJump (char *s, context *cctxt)
         int line = atoi(s) -1;
         if (!cctxt || !cctxt->func || !cctxt->func->mod)
         {
-                   fprintf(stderr,"Function not defined.\n");
+                    fprintf(stderr,"Function not defined.\n");
             return 0;
         }
         if (line >= cctxt->func->entryline &&
@@ -1200,7 +1187,7 @@ int cmdJump (char *s, context *cctxt)
         }
         if (line >= cctxt->func->mod->ncLines )
         {
-                   fprintf(stderr,"line not in module.\n");
+                    fprintf(stderr,"line not in module.\n");
             return 0;
         }
         fprintf(stdout,"Warning line %d outside actual function.\n",line+1);
@@ -1225,7 +1212,7 @@ int cmdJump (char *s, context *cctxt)
         line = atoi(bp) -1;
         if (line >= mod->ncLines )
         {
-                   fprintf(stderr,"line not in module.\n");
+                    fprintf(stderr,"line not in module.\n");
             return 0;
         }
         if ( mod != cctxt->func->mod ||
@@ -1263,15 +1250,15 @@ int cmdListAsm (char *s, context *cctxt)
 /*-----------------------------------------------------------------*/
 int cmdSetOption (char *s, context *cctxt)
 {
-    while (*s && isspace(*s)) s++;
+    s = trim_left(s);
     if (strncmp(s,"srcmode",7) == 0 ) {
-       if (srcMode == SRC_CMODE)
-           srcMode = SRC_AMODE;
-       else
-           srcMode = SRC_CMODE;
-       fprintf(stderr,"source mode set to '%s'\n",
-               (srcMode == SRC_CMODE ? "C" : "asm"));
-       return 0;
+        if (srcMode == SRC_CMODE)
+            srcMode = SRC_AMODE;
+        else
+            srcMode = SRC_CMODE;
+        fprintf(stderr,"source mode set to '%s'\n",
+                (srcMode == SRC_CMODE ? "C" : "asm"));
+        return 0;
     }
 
     if (strncmp(s,"listsize ",9) == 0)
@@ -1300,7 +1287,7 @@ int cmdSetOption (char *s, context *cctxt)
         s = rs;
         while (*s && *s != '=') s++;
         *s++ = '\0';
-        while (isspace(*s)) *s++ = '\0';
+        s = trim_left(s);
         if (*s && sym)
         {
             printOrSetSymValue(sym,cctxt,0,0,0,rs,s,'\0');
@@ -1322,8 +1309,8 @@ int cmdSetOption (char *s, context *cctxt)
 int cmdContinue (char *s, context *cctxt)
 {
     if (STACK_EMPTY(callStack)) {
-       fprintf(stdout,"The program is not being run.\n");
-       return 0;
+        fprintf(stdout,"The program is not being run.\n");
+        return 0;
     }
 
     fprintf(stdout,"Continuing.\n");
@@ -1338,14 +1325,14 @@ int cmdContinue (char *s, context *cctxt)
 int cmdIgnore (char *s, context *cctxt)
 {
     int bpnum, cnt ;
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if (!*s )
     {
         fprintf(stdout,"Argument required (breakpoint number).\n");
         return 0;
     }
     bpnum = strtol(s,&s,10);
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if (!*s )
     {
         fprintf(stdout,"Second argument (specified ignore-count) is missing.");
@@ -1362,14 +1349,14 @@ int cmdIgnore (char *s, context *cctxt)
 int cmdCondition (char *s, context *cctxt)
 {
     int bpnum ;
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if (!*s )
     {
         fprintf(stdout,"Argument required (breakpoint number).\n");
         return 0;
     }
     bpnum = strtol(s,&s,10);
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if (*s)
         s = Safe_strdup(s);
     else
@@ -1385,7 +1372,7 @@ int cmdCommands (char *s, context *cctxt)
 {
     int bpnum ;
     char *cmds,*line;
-    while (isspace(*s)) s++;
+    s = trim_left(s);
 
     if (!*s )
         bpnum = getLastBreakptNumber();
@@ -1395,7 +1382,7 @@ int cmdCommands (char *s, context *cctxt)
     cmds = NULL;
     while ((line = getNextCmdLine()))
     {
-        while (isspace(*line)) line++;
+        line = trim_left(line);
         if (!strncmp(line,"end",3))
             break;
         if (! cmds )
@@ -1418,23 +1405,26 @@ int cmdCommands (char *s, context *cctxt)
 int cmdDelUserBp (char *s, context *cctxt)
 {
     int bpnum ;
-    while (isspace(*s)) s++;
+    s = trim_left(s);
 
     if (!*s ) {
-       if (userBpPresent) {
-           char buffer[10];
-           fprintf (stdout,"Delete all breakpoints? (y or n) ");
-           fflush(stdout);
-           fgets(buffer,sizeof(buffer),stdin);
-           if (toupper(buffer[0]) == 'Y')
-               deleteUSERbp(-1);
-       }
-       return 0;
+        if (userBpPresent) {
+            char buffer[10];
+            char *res;
+
+            fprintf (stdout,"Delete all breakpoints? (y or n) ");
+            fflush(stdout);
+            res = fgets(buffer,sizeof(buffer),stdin);
+            assert(res == &buffer[0]);
+            if (toupper(buffer[0]) == 'Y')
+                deleteUSERbp(-1);
+        }
+        return 0;
     }
 
     /* determine the break point number */
     if (sscanf(s,"%d",&bpnum) == 1)
-       deleteUSERbp(bpnum);
+        deleteUSERbp(bpnum);
 
     return 0;
 }
@@ -1450,7 +1440,7 @@ int cmdStepi (char *s, context *cctxt)
     else
     {
         doingSteps = 2;
-           simGo(2);
+            simGo(2);
         doingSteps = 0;
         showfull = 1;
     }
@@ -1550,7 +1540,7 @@ int cmdNexti (char *s, context *cctxt)
     else
     {
         doingSteps = 2;
-           simGo(1);
+            simGo(1);
         doingSteps = 0;
         showfull = 1;
     }
@@ -1637,27 +1627,29 @@ int cmdRun (char *s, context *cctxt)
 {
     char buff[10];
     if (STACK_EMPTY(callStack)) {
-       fprintf(stdout,"Starting program\n");
+        fprintf(stdout,"Starting program\n");
     if ( ! simactive )
     {
         fprintf(stdout,"No executable file specified.\nUse the \"file\" command.\n");
         return 0;
     }
     resetHitCount();
-       simGo(0);
+        simGo(0);
     } else {
+        char *res;
 
-       fprintf(stdout,
-               "The program being debugged has been started already.\n");
-       fprintf(stdout,"Start it from the beginning? (y or n) ");
-       fflush(stdout);
+        fprintf(stdout,
+                "The program being debugged has been started already.\n");
+        fprintf(stdout,"Start it from the beginning? (y or n) ");
+        fflush(stdout);
 
-       fgets(buff,sizeof(buff),stdin);
-       if (toupper(buff[0]) == 'Y') {
-           simReset();
+        res = fgets(buff,sizeof(buff),stdin);
+        assert(res == &buff[0]);
+        if (toupper(buff[0]) == 'Y') {
+            simReset();
         resetHitCount();
-           simGo(0);
-       }
+            simGo(0);
+        }
     }
     showfull = 1;
     return 0;
@@ -1941,17 +1933,17 @@ static void infoRegisters( int all, context *ctxt)
     for ( j = 0; j < 8 ; j++ )
     {
         val = simGetValue (j,'R',1);
-        fprintf(stdout," 0x%02X",val);
+        fprintf(stdout," 0x%02lX",val);
     }
     fprintf(stdout,"\n");
     val = simGetValue (0xe0,'I',1);
-    fprintf(stdout,"ACC : 0x%02X %d %c\n",val,val,(isprint(val) ? val : '.'));
+    fprintf(stdout,"ACC : 0x%02lX %lu %c\n",val,val,(isprint(val) ? (char)val : '.'));
     val = simGetValue (0xf0,'I',1);
-    fprintf(stdout,"B   : 0x%02X %d %c\n",val,val,(isprint(val) ? val : '.'));
+    fprintf(stdout,"B   : 0x%02lX %lu %c\n",val,val,(isprint(val) ? (char)val : '.'));
     val = simGetValue (0x82,'I',2);
-    fprintf(stdout,"DPTR: 0x%04X %d\n",val,val);
+    fprintf(stdout,"DPTR: 0x%04lX %lu\n",val,val);
     val = simGetValue (0x81,'I',1);
-    fprintf(stdout,"SP  : 0x%02X (0x%04X)\n",val,simGetValue (val-1,'B',2));
+    fprintf(stdout,"SP  : 0x%02lX (0x%04lX)\n",val,simGetValue (val-1,'B',2));
     fprintf(stdout,"PSW : 0x%02X | CY : %c | AC : %c | OV : %c | P : %c\n",
             i,(i&0x80)?'1':'0',(i&0x40)?'1':'0',(i&4)?'1':'0',(i&1)?'1':'0');
     if ( all )
@@ -1970,7 +1962,7 @@ static void infoRegisters( int all, context *ctxt)
             if (applyToSetFTrue(sfrsymbols,symWithAddr,i,'I',&sym))
             {
                 val = simGetValue (sym->addr,sym->addrspace,sym->size);
-                fprintf(stdout,"%s : 0x%02x",sym->name,val);
+                fprintf(stdout,"%s : 0x%02lx",sym->name,val);
                 if ( !(i & 0x07 ))
                 {
                     for ( j = 0 ; j < 8 ; j++ )
@@ -2002,9 +1994,9 @@ static void infoStack(context *ctxt)
     while ((func = STACK_WALK(callStack))) {
     Dprintf(D_break, ("break: infoStack: %s %p (%p)\n",func->sym->name, w_callStack,p_callStack));
 
-       fprintf(stdout,"#%d  0x%08x in %s () at %s:%d\n",i++,
-               func->laddr,func->sym->name,
-               func->mod->c_name,func->lline+1);
+        fprintf(stdout,"#%d  0x%08x in %s () at %s:%d\n",i++,
+                func->laddr,func->sym->name,
+                func->mod->c_name,func->lline+1);
     }
     if ( !i )
         fprintf(stdout,"no stack.\n");
@@ -2015,8 +2007,8 @@ static void infoStack(context *ctxt)
 /*-----------------------------------------------------------------*/
 int cmdWhere(char *s, context *cctxt)
 {
-       infoStack(cctxt);
-       return 0;
+        infoStack(cctxt);
+        return 0;
 }
 
 
@@ -2026,24 +2018,25 @@ static int infomode = 0;
 /*-----------------------------------------------------------------*/
 int cmdInfo (char *s, context *cctxt)
 {
-    while (isspace(*s)) s++;
+    /* trim left and_right*/
+    s = trim(s);
 
     /* list all break points */
     if (strncmp(s,"break",5) == 0) {
-       listUSERbp();
-       return 0;
+        listUSERbp();
+        return 0;
     }
 
     /* info frame same as frame */
-    if (strcmp(s,"frame") == 0) {
-       cmdFrame (s,cctxt);
-       return 0;
+    if (strncmp(s,"frame",5) == 0) {
+        cmdFrame (s+5,cctxt);
+        return 0;
     }
 
     if (strncmp(s,"line",4) == 0) {
-    infomode=1;
-       cmdListSrc (s+4,cctxt);
-       return 0;
+        infomode=1;
+        cmdListSrc (s+4,cctxt);
+        return 0;
     }
     if (strncmp(s,"source",6) == 0)
     {
@@ -2074,7 +2067,7 @@ int cmdInfo (char *s, context *cctxt)
         }
         return 0;
     }
-    if (strncmp(s,"functions",7) == 0)
+    if (strcmp(s,"functions") == 0)
     {
         function *f;
         module *m = NULL;
@@ -2092,15 +2085,15 @@ int cmdInfo (char *s, context *cctxt)
     }
     /* info stack display call stack */
     if (strcmp(s,"stack") == 0) {
-       infoStack(cctxt);
-    showfull = 1;
-       return 0;
+        infoStack(cctxt);
+        showfull = 1;
+        return 0;
     }
 
     /* info stack display call stack */
     if (strcmp(s,"registers") == 0) {
         infoRegisters(0,cctxt);
-           return 0;
+            return 0;
     }
 
     /* info stack display call stack */
@@ -2136,7 +2129,7 @@ int cmdInfo (char *s, context *cctxt)
 int cmdQuit (char *s, context *cctxt)
 {
     if (simactive)
-       closeSimulator();
+        closeSimulator();
     return 1;
 }
 
@@ -2152,7 +2145,7 @@ int cmdListSrc (char *s, context *cctxt)
     function *func = NULL;
 
 
-    while (*s && isspace(*s)) s++;
+    s = trim_left(s);
 
     /* if the user has spcified line numer then the line number
        can be of the following formats
@@ -2163,16 +2156,16 @@ int cmdListSrc (char *s, context *cctxt)
        FILE:FUNCTION - function in file */
 
     if (*s) {
-       /* case a) LINE */
-       if (isdigit(*s)) {
-           if (!cctxt || !cctxt->func || !cctxt->func->mod) {
-             if (!list_mod) {
-               fprintf(stdout,"Sdcdb fails to have a proper context at %d.\n", __LINE__);
-               return 0;
-             }
-           }
-           else
-             list_mod = cctxt->func->mod;
+        /* case a) LINE */
+        if (isdigit(*s)) {
+            if (!cctxt || !cctxt->func || !cctxt->func->mod) {
+              if (!list_mod) {
+                fprintf(stdout,"Sdcdb fails to have a proper context at %d.\n", __LINE__);
+                return 0;
+              }
+            }
+            else
+              list_mod = cctxt->func->mod;
         pline = strtol(s,&s,10) - 1;
         if (s && (s = strchr(s,',')))
         {
@@ -2183,29 +2176,29 @@ int cmdListSrc (char *s, context *cctxt)
             else
                 llines = listlines;
         }
-       }
-       else {
-           char *bp;
-
-           /* if ':' present then FILE:LINE || FILE:FUNCTION */
-           if ((bp = strchr(s,':'))) {
-               *bp = '\0';
-               bp ++;
-               if (isdigit(*bp)) {
-                   /* FILE:LINE */
-                   list_mod=NULL;  /* bug fix 2-09-02, moduleWithCName expects mod to be null */
-                   if (srcMode == SRC_CMODE) {
-                       if (!applyToSet(modules,moduleWithCName,s,&list_mod)) {
-                           fprintf (stderr,"No c source file named %s.\n",s);
-                           return 0;
-                       }
-                   } else {
-                       if (!applyToSet(modules,moduleWithAsmName,s,&list_mod)) {
-                           fprintf (stderr,"No source file named %s.\n",s);
-                           return 0;
-                       }
-                   }
-                   pline = strtol(bp,&bp,10) - 1;
+        }
+        else {
+            char *bp;
+
+            /* if ':' present then FILE:LINE || FILE:FUNCTION */
+            if ((bp = strchr(s,':'))) {
+                *bp = '\0';
+                bp ++;
+                if (isdigit(*bp)) {
+                    /* FILE:LINE */
+                    list_mod=NULL;  /* bug fix 2-09-02, moduleWithCName expects mod to be null */
+                    if (srcMode == SRC_CMODE) {
+                        if (!applyToSet(modules,moduleWithCName,s,&list_mod)) {
+                            fprintf (stderr,"No c source file named %s.\n",s);
+                            return 0;
+                        }
+                    } else {
+                        if (!applyToSet(modules,moduleWithAsmName,s,&list_mod)) {
+                            fprintf (stderr,"No source file named %s.\n",s);
+                            return 0;
+                        }
+                    }
+                    pline = strtol(bp,&bp,10) - 1;
             if (bp && (bp = strchr(bp,',')))
             {
                 /* FILE:LINE,LASTLINE */
@@ -2215,24 +2208,24 @@ int cmdListSrc (char *s, context *cctxt)
                 else
                     llines = listlines;
             }
-               } else {
-                   /* FILE:FUCTION */
-                   if (!applyToSet(functions,funcWithNameModule,bp,s,&func)) {
-                       fprintf(stdout,"Function \"%s\" not defined.\n",bp);
-                       return 0;
-                   }
-                   list_mod = func->mod;
-                   if (srcMode == SRC_CMODE) {
-                       pline = func->entryline;
-                       llines = func->exitline - func->entryline + 1;
-                   } else {
-                       pline = func->aentryline;
-                       llines = func->aexitline - func->aentryline + 1;
-                   }
-               }
-           }
-           else {
-               /* FUNCTION */
+                } else {
+                    /* FILE:FUCTION */
+                    if (!applyToSet(functions,funcWithNameModule,bp,s,&func)) {
+                        fprintf(stdout,"Function \"%s\" not defined.\n",bp);
+                        return 0;
+                    }
+                    list_mod = func->mod;
+                    if (srcMode == SRC_CMODE) {
+                        pline = func->entryline;
+                        llines = func->exitline - func->entryline + 1;
+                    } else {
+                        pline = func->aentryline;
+                        llines = func->aexitline - func->aentryline + 1;
+                    }
+                }
+            }
+            else {
+                /* FUNCTION */
             if (*s == '\'')
             {
                 /* 'FUNCTION' */
@@ -2243,38 +2236,38 @@ int cmdListSrc (char *s, context *cctxt)
                 }
 
             }
-               if (!applyToSet(functions,funcWithName,s,&func)) {
-                   fprintf(stderr,"Function \"%s\" not defined.\n",s);
-                   return 0;
-               }
-               else {
-                   list_mod = func->mod;
-                   if (srcMode == SRC_CMODE) {
-                       pline = func->entryline;
-                       llines = func->exitline - func->entryline + 1;
-                   } else {
-                       pline = func->aentryline;
-                       llines = func->aexitline - func->aentryline + 1;
-                   }
-               }
-           }
-       }
+                if (!applyToSet(functions,funcWithName,s,&func)) {
+                    fprintf(stderr,"Function \"%s\" not defined.\n",s);
+                    return 0;
+                }
+                else {
+                    list_mod = func->mod;
+                    if (srcMode == SRC_CMODE) {
+                        pline = func->entryline;
+                        llines = func->exitline - func->entryline + 1;
+                    } else {
+                        pline = func->aentryline;
+                        llines = func->aexitline - func->aentryline + 1;
+                    }
+                }
+            }
+        }
     } else {
-       /* if no line specified & we had listed
-          before then continue from that listing */
-       if (currline)
-           pline = currline ;
-       else {
-           if (!cctxt || !cctxt->func || !cctxt->func->mod) {
-             fprintf(stdout,"Missing context at %d. Try list filename:lineno\n", __LINE__);
-             return 0;
-           }
-           list_mod = cctxt->func->mod;
-           if (srcMode == SRC_CMODE)
-               pline = cctxt->cline;
-           else
-               pline = cctxt->asmline;
-       }
+        /* if no line specified & we had listed
+           before then continue from that listing */
+        if (currline)
+            pline = currline ;
+        else {
+            if (!cctxt || !cctxt->func || !cctxt->func->mod) {
+              fprintf(stdout,"Missing context at %d. Try list filename:lineno\n", __LINE__);
+              return 0;
+            }
+            list_mod = cctxt->func->mod;
+            if (srcMode == SRC_CMODE)
+                pline = cctxt->cline;
+            else
+                pline = cctxt->asmline;
+        }
     }
 
     if (!list_mod) {
@@ -2287,12 +2280,12 @@ int cmdListSrc (char *s, context *cctxt)
     if ( infomode )
     {
         unsigned firstaddr , lastaddr ;
-           if ( pline  >= list_mod->ncLines )
+            if ( pline  >= list_mod->ncLines )
             pline = cctxt->cline;
         firstaddr = lastaddr = list_mod->cLines[pline]->addr;
         if (!func && cctxt && cctxt->func )
             func = cctxt->func;
-           fprintf(stdout,"Line %d of \"%s\" starts at address 0x%08x <%s+%d>",
+            fprintf(stdout,"Line %d of \"%s\" starts at address 0x%08x <%s+%d>",
                 pline+1,
                 list_mod->c_name, lastaddr,
                 func ? func->sym->name : "?",
@@ -2320,17 +2313,17 @@ int cmdListSrc (char *s, context *cctxt)
         return 0;
     }
     for ( i = 0 ; i < llines ; i++ ) {
-       if (srcMode == SRC_CMODE) {
-           if ( (pline + i) >= list_mod->ncLines )
-               break;
-           fprintf(stdout,"%d\t%s",pline + i,
-                   list_mod->cLines[pline +i]->src);
-       } else {
-           if ( (pline + i) >= list_mod->nasmLines )
-               break;
-           fprintf(stdout,"%d\t%s",pline + i,
-                   list_mod->asmLines[pline +i]->src);
-       }
+        if (srcMode == SRC_CMODE) {
+            if ( (pline + i) >= list_mod->ncLines )
+                break;
+            fprintf(stdout,"%d\t%s",pline + i,
+                    list_mod->cLines[pline +i]->src);
+        } else {
+            if ( (pline + i) >= list_mod->nasmLines )
+                break;
+            fprintf(stdout,"%d\t%s",pline + i,
+                    list_mod->asmLines[pline +i]->src);
+        }
     }
     currline = pline + i ;
     return 0;
@@ -2354,11 +2347,11 @@ static unsigned long getValBasic(symbol *sym, link *type, char *val)
     if (IS_FLOAT(type))
         v.f = strtod(val,NULL);
     else
-       if (IS_PTR(type))
-           v.val = strtol(val,NULL,0);
-       else
+        if (IS_PTR(type))
+            v.val = strtol(val,NULL,0);
+        else
     {
-           if (IS_INTEGRAL(type))
+            if (IS_INTEGRAL(type))
         {
             link *etype;
             if ( type->next )
@@ -2387,7 +2380,7 @@ static unsigned long getValBasic(symbol *sym, link *type, char *val)
                         v.i.lo = strtol(val,NULL,0);
                 else
                     v.val = strtol(val,NULL,0);
-           }
+            }
         else
             v.val = strtol(val,NULL,0);
     }
@@ -2408,9 +2401,9 @@ static void printFmtInteger(char *deffmt,int fmt, long val,
     };
     static int radixOfFormat[] = { 0 , 2, 8 ,10, 16  };
     static int olenOfSize[]    = { 0 , 3, 6 , 8, 11  };
-       char buf[40];
-       char negative = 0;
-       int charPos = 38;
+        char buf[40];
+        char negative = 0;
+        int charPos = 38;
     int radix;
 
     if ( fmt == FMT_NON || fmt == FMT_DEZ )
@@ -2425,16 +2418,16 @@ static void printFmtInteger(char *deffmt,int fmt, long val,
         negative = 1;
     */
 
-       if (!negative)
-           val = -val;
+        if (!negative)
+            val = -val;
 
-       buf[39] = '\0';
+        buf[39] = '\0';
     while (val <= -radix)
     {
-           buf[charPos--] = digits[-(val % radix)];
-           val = val / radix;
-       }
-       buf[charPos] = digits[-val];
+            buf[charPos--] = digits[-(val % radix)];
+            val = val / radix;
+        }
+        buf[charPos] = digits[-val];
 
     switch ( fmt )
     {
@@ -2464,9 +2457,9 @@ static void printFmtInteger(char *deffmt,int fmt, long val,
             buf[--charPos] = '0';
             break;
     }
-       if (negative) {
-           buf[--charPos] = '-';
-       }
+        if (negative) {
+            buf[--charPos] = '-';
+        }
     fputs(&buf[charPos],stdout);
 }
 
@@ -2490,11 +2483,11 @@ static void printValBasic(symbol *sym, link *type,
     v.val = simGetValue(addr,mem,size);
     /* if this a floating point number then */
     if (IS_FLOAT(type))
-       fprintf(stdout,"%f",v.f);
+        fprintf(stdout,"%f",v.f);
     else
-       if (IS_PTR(type))
-           fprintf(stdout,"0x%*x",size<<1,v.val);
-       else
+        if (IS_PTR(type))
+            fprintf(stdout,"0x%*lx",size<<1,v.val);
+        else
         if (IS_INTEGRAL(type))
         {
             link *etype;
@@ -2529,11 +2522,11 @@ static void printValBasic(symbol *sym, link *type,
                     if (IS_BITVAR(etype))
                         fprintf(stdout,"%c",(v.val?'1':'0'));
                     else
-                        fprintf(stdout,"0x%0*x",size<<1,v.val);
+                        fprintf(stdout,"0x%0*lx",size<<1,v.val);
                 }
             }
-           } else
-            fprintf(stdout,"0x%0*x",size<<1,v.val);
+            } else
+            fprintf(stdout,"0x%0*lx",size<<1,v.val);
 }
 
 /*-----------------------------------------------------------------*/
@@ -2550,22 +2543,22 @@ static void printValFunc (symbol *sym, int fmt)
 static void printArrayValue (symbol *sym,  link *type,
                              char space, unsigned int addr, int fmt)
 {
-       link *elem_type = type->next;
-       int i;
+        link *elem_type = type->next;
+        int i;
 
-       fprintf(stdout,"{");
-       for (i = 0 ; i < DCL_ELEM(type) ; i++) {
-               if (IS_AGGREGATE(elem_type)) {
-                       printValAggregates(sym,elem_type,space,addr,fmt);
-               } else {
-                       printValBasic(sym,elem_type,space,addr,getSize(elem_type),fmt);
-               }
-               addr += getSize(elem_type);
-               if (i != DCL_ELEM(type) -1)
-                       fprintf(stdout,",");
-       }
+        fprintf(stdout,"{");
+        for (i = 0 ; i < DCL_ELEM(type) ; i++) {
+                if (IS_AGGREGATE(elem_type)) {
+                        printValAggregates(sym,elem_type,space,addr,fmt);
+                } else {
+                        printValBasic(sym,elem_type,space,addr,getSize(elem_type),fmt);
+                }
+                addr += getSize(elem_type);
+                if (i != DCL_ELEM(type) -1)
+                        fprintf(stdout,",");
+        }
 
-       fprintf(stdout,"}");
+        fprintf(stdout,"}");
 }
 
 /*-----------------------------------------------------------------*/
@@ -2574,21 +2567,21 @@ static void printArrayValue (symbol *sym,  link *type,
 static void printStructValue (symbol *sym, link *type,
                               char space, unsigned int addr, int fmt)
 {
-       symbol *fields = SPEC_STRUCT(type)->fields;
+        symbol *fields = SPEC_STRUCT(type)->fields;
     int first = 1;
-       fprintf(stdout," { ");
-       while (fields) {
-               fprintf(stdout,"%s%s = ",(first ? "": ", "),fields->name);
-               first = 0;
+        fprintf(stdout," { ");
+        while (fields) {
+                fprintf(stdout,"%s%s = ",(first ? "": ", "),fields->name);
+                first = 0;
         if (IS_AGGREGATE(fields->type)) {
-                       printValAggregates(fields,fields->type,space, addr, fmt);
-               } else {
-                       printValBasic(fields,fields->type,space,addr,getSize(fields->type), fmt);
-               }
-               addr += getSize(fields->type);
-               fields = fields->next;
-       }
-       fprintf(stdout,"}");
+                        printValAggregates(fields,fields->type,space, addr, fmt);
+                } else {
+                        printValBasic(fields,fields->type,space,addr,getSize(fields->type), fmt);
+                }
+                addr += getSize(fields->type);
+                fields = fields->next;
+        }
+        fprintf(stdout,"}");
 }
 
 /*-----------------------------------------------------------------*/
@@ -2598,15 +2591,15 @@ static void printValAggregates (symbol *sym, link *type,
                                 char space,unsigned int addr, int fmt)
 {
 
-       if (IS_ARRAY(type)) {
-               printArrayValue(sym, type, space, addr, fmt);
-               return ;
-       }
+        if (IS_ARRAY(type)) {
+                printArrayValue(sym, type, space, addr, fmt);
+                return ;
+        }
 
-       if (IS_STRUCT(type)) {
-               printStructValue(sym, type, space, addr, fmt);
-               return;
-       }
+        if (IS_STRUCT(type)) {
+                printStructValue(sym, type, space, addr, fmt);
+                return;
+        }
 }
 
 /*-----------------------------------------------------------------*/
@@ -2618,7 +2611,7 @@ static int printOrSetSymValue (symbol *sym, context *cctxt,
 {
     static char fmtChar[] = " todx ";
     static int stack = 1;
-       symbol *fields;
+        symbol *fields;
     link *type;
     unsigned int  addr;
     int size, n;
@@ -2735,7 +2728,7 @@ static int printOrSetSymValue (symbol *sym, context *cctxt,
     /* arrays & structures first */
     if (IS_AGGREGATE(type))
     {
-           if ( val )
+            if ( val )
         {
             fprintf(stdout,"Cannot set/compare aggregate variable\n");
             return 1;
@@ -2744,17 +2737,17 @@ static int printOrSetSymValue (symbol *sym, context *cctxt,
             printValAggregates(sym,type,sym->addrspace,addr,fmt);
     }
     else
-       /* functions */
-       if (IS_FUNC(type))
+        /* functions */
+        if (IS_FUNC(type))
     {
-           if ( !val )
+            if ( !val )
             printValFunc(sym,fmt);
         else
             return 1;
     }
-       else
+        else
     {
-           if ( val )
+            if ( val )
         {
             unsigned long newval;
             newval = getValBasic(sym,type,val);
@@ -2790,7 +2783,7 @@ static int printOrSetSymValue (symbol *sym, context *cctxt,
             printValBasic(sym,type,sym->addrspace,addr,size,fmt);
     }
     if ( flg > 0 ) fprintf(stdout,"\n");
-       return 0;
+        return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -2802,16 +2795,16 @@ static void printStructInfo (structdef *sdef)
     int i = 0 ;
 
     while (field) {
-       i += field->offset;
-       field = field->next;
+        i += field->offset;
+        field = field->next;
     }
 
     fprintf(stdout,"%s %s {\n",(i ? "struct" : "union" ), sdef->tag);
     field = sdef->fields;
     while (field) {
-       printTypeInfo (field->type);
-       fprintf(stdout," %s ;\n",field->name);
-       field = field->next ;
+        printTypeInfo (field->type);
+        fprintf(stdout," %s ;\n",field->name);
+        field = field->next ;
     }
 
     fprintf(stdout,"}\n");
@@ -2824,72 +2817,72 @@ static void printStructInfo (structdef *sdef)
 static void printTypeInfo(link *p)
 {
     if (!p)
-       return ;
+        return ;
 
     if (IS_DECL(p)) {
-       switch (DCL_TYPE(p))  {
-       case FUNCTION:
-           printTypeInfo (p->next);
-           fprintf(stdout,"()");
-           break;
-       case ARRAY:
-           printTypeInfo (p->next);
-           fprintf(stdout,"[%d]",DCL_ELEM(p));
-           break;
-
-       case IPOINTER:
-       case PPOINTER:
-       case POINTER:
-           printTypeInfo (p->next);
-           fprintf(stdout,"(_near *)");
-           break;
-
-       case FPOINTER:
-           printTypeInfo (p->next);
-           fprintf(stdout,"(_xdata *)");
-           break;
-
-       case CPOINTER:
-           printTypeInfo( p->next);
-           fprintf(stdout,"(_code *)");
-           break;
-
-       case GPOINTER:
-           printTypeInfo( p->next);
-           fprintf(stdout,"(_generic *)");
-           break;
-       }
+        switch (DCL_TYPE(p))  {
+        case FUNCTION:
+            printTypeInfo (p->next);
+            fprintf(stdout,"()");
+            break;
+        case ARRAY:
+            printTypeInfo (p->next);
+            fprintf(stdout,"[%d]",DCL_ELEM(p));
+            break;
+
+        case IPOINTER:
+        case PPOINTER:
+        case POINTER:
+            printTypeInfo (p->next);
+            fprintf(stdout,"(_near *)");
+            break;
+
+        case FPOINTER:
+            printTypeInfo (p->next);
+            fprintf(stdout,"(_xdata *)");
+            break;
+
+        case CPOINTER:
+            printTypeInfo( p->next);
+            fprintf(stdout,"(_code *)");
+            break;
+
+        case GPOINTER:
+            printTypeInfo( p->next);
+            fprintf(stdout,"(_generic *)");
+            break;
+        }
     } else {
-       switch (SPEC_NOUN(p)) { /* depending on the specifier type */
-       case V_INT:
-           (IS_LONG(p) ? fputs("long ",stdout) :
-            ( IS_SHORT(p) ? fputs("short ",stdout) :
-              fputs("int ",stdout))) ;
-           break;
-       case V_FLOAT:
-            fputs("float ",stdout);
-            break;
+        switch (SPEC_NOUN(p)) { /* depending on the specifier type */
+        case V_INT:
+            (IS_LONG(p) ? fputs("long ",stdout) :
+             ( IS_SHORT(p) ? fputs("short ",stdout) :
+               fputs("int ",stdout))) ;
+            break;
+        case V_FLOAT:
+             fputs("float ",stdout);
+             break;
 
-       case V_CHAR:
-           fputs ("char ",stdout);
-           break;
+        case V_CHAR:
+            fputs ("char ",stdout);
+            break;
 
-       case V_VOID:
-           fputs("void ",stdout);
-           break;
+        case V_VOID:
+            fputs("void ",stdout);
+            break;
 
-       case V_STRUCT:
-           printStructInfo (SPEC_STRUCT(p));
-           break;
+        case V_STRUCT:
+            printStructInfo (SPEC_STRUCT(p));
+            break;
 
-       case V_SBIT:
-           fputs("sbit ",stdout);
-           break;
+        case V_SBIT:
+            fputs("sbit ",stdout);
+            break;
 
-       case V_BIT:
-           fprintf(stdout,": %d" ,SPEC_BLEN(p));
-           break;
-       }
+        case V_BIT:
+            fprintf(stdout,": %d" ,SPEC_BLEN(p));
+            break;
+        }
     }
 }
 
@@ -2922,7 +2915,7 @@ int conditionIsTrue( char *s, context *cctxt)
             }
             s++ ;
         }
-        while (isspace(*s)) *s++ = '\0';
+        s = trim_left(s);
         fmt = printOrSetSymValue(sym,cctxt,0,0,0,rs,s,cmp_char);
     }
     Safe_free(dup);
@@ -3035,7 +3028,7 @@ int cmdUnDisplay (char *s, context *cctxt)
     dsymbol *dsym;
     int dnum;
 
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if (!*s)
     {
         for (dsym = setFirstItem(dispsymbols);
@@ -3070,22 +3063,19 @@ int cmdUnDisplay (char *s, context *cctxt)
 /*-----------------------------------------------------------------*/
 int cmdPrintType (char *s, context *cctxt)
 {
-        symbol *sym ;
-    char *bp = s+strlen(s) -1;
+    symbol *sym ;
 
-    while (isspace(*s)) s++;
+    /* trim left and right */
+    s = trim(s);
     if (!*s) return 0;
-    while (isspace(*bp)) bp--;
-    bp++ ;
-    *bp = '\0';
 
     if ((sym = symLookup(s,cctxt))) {
-       printTypeInfo(sym->type);
-       fprintf(stdout,"\n");
+        printTypeInfo(sym->type);
+        fprintf(stdout,"\n");
     } else {
-       fprintf(stdout,
-               "No symbol \"%s\" in current context.\n",
-               s);
+        fprintf(stdout,
+                "No symbol \"%s\" in current context.\n",
+                s);
     }
     return 0;
 }
@@ -3108,88 +3098,83 @@ int cmdClrUserBp (char *s, context *cctxt)
     */
 
     if (!cctxt) {
-       fprintf(stdout,"No symbol table is loaded.  Use the \"file\" command.\n");
-       return 0;
+        fprintf(stdout,"No symbol table is loaded.  Use the \"file\" command.\n");
+        return 0;
     }
 
-    /* white space skip */
-    while (*s && isspace(*s)) s++;
-
-    /* null terminate it after stripping trailing blanks*/
-    bp = s + strlen(s);
-    while (bp != s && isspace(*bp)) bp--;
-    *bp = '\0';
+    /* trim left and right */
+    s = trim(s);
 
     /* case a) nothing */
     /* if nothing given then current location : we know
        the current execution location from the currentContext */
     if (! *s ) {
 
-       /* if current context is known */
-       if (cctxt->func)
-           /* clear the break point @ current location */
-           clearUSERbp (cctxt->addr);
-       else
-           fprintf(stderr,"No default breakpoint address now.\n");
+        /* if current context is known */
+        if (cctxt->func)
+            /* clear the break point @ current location */
+            clearUSERbp (cctxt->addr);
+        else
+            fprintf(stderr,"No default breakpoint address now.\n");
 
-       goto ret ;
+        goto ret ;
     }
 
     /* case b) lineno */
     /* check if line number */
     if (isdigit(*s)) {
-       /* get the lineno */
-       int line = atoi(s);
-
-       /* if current context not present then we must get the module
-          which has main & set the break point @ line number provided
-          of that module : if current context known then set the bp
-          at the line number given for the current module
-       */
-       if (cctxt->func) {
-           if (!cctxt->func->mod) {
-               if (!applyToSet(functions,funcWithName,"main"))
-                   fprintf(stderr,"Function \"main\" not defined.\n");
-               else
-                   clearBPatModLine(func->mod,line);
-           } else
-               clearBPatModLine(cctxt->func->mod,line);
-       }
-
-       goto ret;
+        /* get the lineno */
+        int line = atoi(s);
+
+        /* if current context not present then we must get the module
+           which has main & set the break point @ line number provided
+           of that module : if current context known then set the bp
+           at the line number given for the current module
+        */
+        if (cctxt->func) {
+            if (!cctxt->func->mod) {
+                if (!applyToSet(functions,funcWithName,"main"))
+                    fprintf(stderr,"Function \"main\" not defined.\n");
+                else
+                    clearBPatModLine(func->mod,line);
+            } else
+                clearBPatModLine(cctxt->func->mod,line);
+        }
+
+        goto ret;
     }
 
     if ((bp = strchr(s,':'))) {
 
-       module *mod = NULL;
-       *bp = '\0';
+        module *mod = NULL;
+        *bp = '\0';
 
-       if (!applyToSet(modules,moduleWithCName,s,&mod)) {
-           fprintf (stderr,"No source file named %s.\n",s);
-           goto ret;
-       }
+        if (!applyToSet(modules,moduleWithCName,s,&mod)) {
+            fprintf (stderr,"No source file named %s.\n",s);
+            goto ret;
+        }
 
-       /* case c) filename:lineno */
-       if (isdigit(*(bp +1))) {
+        /* case c) filename:lineno */
+        if (isdigit(*(bp +1))) {
 
-           clearBPatModLine (mod,atoi(bp+1));
-           goto ret;
+            clearBPatModLine (mod,atoi(bp+1));
+            goto ret;
 
-       }
-       /* case d) filename:function */
-       if (!applyToSet(functions,funcWithNameModule,bp+1,s,&func))
-           fprintf(stderr,"Function \"%s\" not defined.\n",bp+1);
-       else
-           clearBPatModLine (mod,func->entryline);
+        }
+        /* case d) filename:function */
+        if (!applyToSet(functions,funcWithNameModule,bp+1,s,&func))
+            fprintf(stderr,"Function \"%s\" not defined.\n",bp+1);
+        else
+            clearBPatModLine (mod,func->entryline);
 
-       goto ret;
+        goto ret;
     }
 
     /* case e) function */
     if (!applyToSet(functions,funcWithName,s,&func))
-       fprintf(stderr,"Function \"%s\" not defined.\n",s);
+        fprintf(stderr,"Function \"%s\" not defined.\n",s);
     else
-       clearBPatModLine(func->mod,func->entryline);
+        clearBPatModLine(func->mod,func->entryline);
 
  ret:
     return 0;
@@ -3275,14 +3260,14 @@ static void printFrame()
 /*-----------------------------------------------------------------*/
 int cmdUp(char *s, context *cctxt)
 {
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if ( *s )
         currentFrame += strtol(s,0,10);
     else
         currentFrame++ ;
 
     printFrame();
-       return 0;
+        return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3290,14 +3275,14 @@ int cmdUp(char *s, context *cctxt)
 /*-----------------------------------------------------------------*/
 int cmdDown(char *s, context *cctxt)
 {
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if ( *s )
         currentFrame -= strtol(s,0,10);
     else
         currentFrame-- ;
 
     printFrame();
-       return 0;
+        return 0;
 }
 /*-----------------------------------------------------------------*/
 /* cmdFrame - Frame command                                        */
@@ -3307,7 +3292,7 @@ int cmdFrame (char *s, context *cctxt)
     function *func = NULL;
     int framenr = 0;
 
-    while (isspace(*s)) s++;
+    s = trim_left(s);
     if ( *s )
         currentFrame = strtol(s,0,10);
     printFrame();
@@ -3320,18 +3305,18 @@ int cmdFrame (char *s, context *cctxt)
 int cmdFinish (char *s, context *ctxt)
 {
     if (STACK_EMPTY(callStack)) {
-       fprintf(stdout,"The program is not running.\n");
-       return 0;
+        fprintf(stdout,"The program is not running.\n");
+        return 0;
     }
 
     if (srcMode == SRC_CMODE) {
-       setBreakPoint (ctxt->func->sym->eaddr, CODE, STEP,
-                      stepBpCB, ctxt->func->mod->c_name,
-                      ctxt->func->exitline);
+        setBreakPoint (ctxt->func->sym->eaddr, CODE, STEP,
+                       stepBpCB, ctxt->func->mod->c_name,
+                       ctxt->func->exitline);
     } else {
-       setBreakPoint (ctxt->func->sym->eaddr, CODE, STEP,
-                      stepBpCB, ctxt->func->mod->asm_name,
-                      ctxt->func->aexitline);
+        setBreakPoint (ctxt->func->sym->eaddr, CODE, STEP,
+                       stepBpCB, ctxt->func->mod->asm_name,
+                       ctxt->func->aexitline);
     }
 
     simGo(-1);
@@ -3347,16 +3332,16 @@ int cmdFinish (char *s, context *ctxt)
 int cmdShow (char *s, context *cctxt)
 {
     /* skip white space */
-    while (*s && isspace(*s)) s++ ;
+    s = trim_left(s);
 
     if (strcmp(s,"copying") == 0) {
-       fputs(copying,stdout);
-       return 0;
+        fputs(copying,stdout);
+        return 0;
     }
 
     if (strcmp(s,"warranty") == 0) {
-       fputs(warranty,stdout);
-       return 0;
+        fputs(warranty,stdout);
+        return 0;
     }
 
     return 0;