]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Debugger 's' and 'W' command improved quoting support
authorToni Wilen <twilen@winuae.net>
Sat, 1 Oct 2022 16:47:36 +0000 (19:47 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 1 Oct 2022 16:47:36 +0000 (19:47 +0300)
debug.cpp

index 0ed27bcd19d17b4904efbb59d2cfd750d2f4ded8..02f087a5783c10039a9b0d03221e7d05933803ae 100644 (file)
--- a/debug.cpp
+++ b/debug.cpp
@@ -4478,19 +4478,21 @@ static void writeintomem (TCHAR **c)
        if (!more_params (c))
                return;
        TCHAR *cb = *c;
-       cc = peekchar (c);
        uae_u32 addrc = addr;
        for(;;) {
+               cc = peekchar(c);
                uae_u32 addrb = addr;
-               *c = cb;
                if (cc == '\'' || cc == '\"') {
+                       TCHAR quoted = cc;
                        next_char2(c);
                        while (more_params2(c)) {
                                TCHAR str[2];
                                char *astr;
                                cc = next_char2(c);
-                               if (cc == '\'' || cc == '\"')
+                               if (quoted == cc) {
+                                       ignore_ws(c);
                                        break;
+                               }
                                str[0] = cc;
                                str[1] = 0;
                                astr = ua (str);
@@ -4526,8 +4528,12 @@ static void writeintomem (TCHAR **c)
                                        break;
                        }
                }
+               if (more_params(c)) {
+                       continue;
+               }
                if (eaddr == 0xffffffff || addr <= addrb || addr >= eaddr)
                        break;
+               *c = cb;
        }
        if (eaddr != 0xffffffff)
                console_out_f(_T("Wrote data to %08x - %08x\n"), addrc, addr);
@@ -5510,41 +5516,55 @@ static void searchmem (TCHAR **cc)
        sslen = 0;
        stringmode = 0;
        ignore_ws (cc);
-       if (**cc == '"') {
-               stringmode = 1;
-               (*cc)++;
-               while (**cc != '"' && **cc != 0) {
-                       ss[sslen++] = tolower (**cc);
+       while(more_params(cc)) {
+               if (**cc == '"' || **cc == '\'') {
+                       TCHAR quoted = **cc;
+                       stringmode = 1;
                        (*cc)++;
+                       while (**cc != quoted && **cc != 0) {
+                               ss[sslen++] = tolower(**cc);
+                               (*cc)++;
+                       }
+                       if (**cc != 0) {
+                               (*cc)++;
+                       }
+               } else {
+                       for (;;) {
+                               if (**cc == 32 || **cc == 0) {
+                                       break;
+                               }
+                               if (**cc == '"' || **cc == '\'') {
+                                       break;
+                               }
+                               nc = _totupper(next_char(cc));
+                               if (isspace(nc))
+                                       break;
+                               if (isdigit(nc))
+                                       val = nc - '0';
+                               else
+                                       val = nc - 'A' + 10;
+                               if (val < 0 || val > 15)
+                                       return;
+                               val *= 16;
+                               if (**cc == 32 || **cc == 0)
+                                       break;
+                               nc = _totupper(next_char(cc));
+                               if (isspace(nc))
+                                       break;
+                               if (isdigit(nc))
+                                       val += nc - '0';
+                               else
+                                       val += nc - 'A' + 10;
+                               if (val < 0 || val > 255)
+                                       return;
+                               ss[sslen++] = (uae_u8)val;
+                       }
                }
-               if (**cc != 0)
+               if (**cc == 0 || **cc == 32) {
+                       break;
+               }
+               if (**cc != '"' && **cc != '\'') {
                        (*cc)++;
-       } else {
-               for (;;) {
-                       if (**cc == 32 || **cc == 0)
-                               break;
-                       nc = _totupper (next_char (cc));
-                       if (isspace (nc))
-                               break;
-                       if (isdigit(nc))
-                               val = nc - '0';
-                       else
-                               val = nc - 'A' + 10;
-                       if (val < 0 || val > 15)
-                               return;
-                       val *= 16;
-                       if (**cc == 32 || **cc == 0)
-                               break;
-                       nc = _totupper (next_char (cc));
-                       if (isspace (nc))
-                               break;
-                       if (isdigit(nc))
-                               val += nc - '0';
-                       else
-                               val += nc - 'A' + 10;
-                       if (val < 0 || val > 255)
-                               return;
-                       ss[sslen++] = (uae_u8)val;
                }
        }
        if (sslen == 0)