comet2monitorのダンプ時に範囲が指定できるように
[YACASL2.git] / src / monitor.c
index 831a47a..f0af0a1 100644 (file)
@@ -224,26 +224,27 @@ void mon_break(int argc, char *argv[])
 
 void mon_dump(int argc, char *argv[])
 {
-    int i = 0;
+    int i = 0, j;
     WORD start = 0, end = 0xFFFF;
     if(argc > 0 && stracmp(argv[0], 2, (char* []){"a", "auto"})) {
         execmode.dump = true;
+        i++;
     } else if(argc > 0 && stracmp(argv[0], 2, (char* []){"no", "noauto"})) {
         execmode.dump = false;
-    } else {
-        if(argc > 0) {
-            start = nh2word(argv[0]);
-            if(argc > 1) {
-                end = nh2word(argv[1]);
-            }
+        i++;
+    }
+    if(argc > i) {
+        start = execmode.dump_start = nh2word(argv[i++]);
+        if(argc > i) {
+            end = execmode.dump_end = nh2word(argv[i++]);
         }
         dumpmemory(start, end);
-        if(argc > 2) {
-            for(i = 2; i < argc; i++) {
-                if(i > 2) {
+        if(argc > i) {
+            for(j = i; i < argc; j++) {
+                if(j > i) {
                     fprintf(stderr, " ");
                 }
-                fprintf(stderr, "%s", argv[i+1]);
+                fprintf(stderr, "%s", argv[j]);
             }
             fprintf(stderr, ": ignored.\n");
         }
@@ -340,7 +341,8 @@ void free_moncmdline(MONCMDLINE *moncmdl)
 
 void monitor()
 {
-    char *buf, *p;
+    char *buf = NULL;
+    int i;
     MONCMDLINE *moncmdl;
     MONCMDTYPE cmdtype = MONREPEAT;
 
@@ -348,8 +350,12 @@ void monitor()
         fprintf(stdout, "- ");
         buf = malloc_chk(MONINSIZE + 1, "monitor.buf");
         fgets(buf, MONINSIZE, stdin);
-        if((p = strchr(buf, '\n')) != NULL) {
-            strcpy(p, "");
+        fprintf(stdout, "%s", buf);
+        if(!buf[0]) {
+            cmdtype = MONQUIT;
+        }
+        if((i = strcspn(buf, "\n")) > 0 || buf[0] == '\n') {
+            buf[i] = '\0';
         }
         if((moncmdl = monlinetok(buf)) != NULL) {
             cmdtype = monitorcmd(moncmdl->cmd, moncmdl->args);