anchor.diff:        (show 60 2 'ebx ebx)
         (show 60 3 'ecx ecx)
         (show 60 4 'edx edx)
  +      (show 60 5 'esp esp)
  +      (show 60 6 'ebp ebp)
  +      (show 60 7 'esi esi)
  +      (show 60 8 'edi edi)
  +
  +      (show 60 10 'eip eip)
   
         (mail sender 'ok)
         (loop (fold (lambda (ff v)
                        (put ff (car v) (cdr v)))
                  ff `(
  -                  (eax . ,eax)
  -                  (ebx . ,ebx)
  -                  (ecx . ,ecx)
  -                  (edx . ,edx)
  +                  (eax . ,eax) (ebx . ,ebx) (ecx . ,ecx) (edx . ,edx)
  +                  (esp . ,esp) (ebp . ,ebp) (esi . ,esi) (edi . ,edi)
  +                  (eip . ,eip)
                  ))))))))
   
  -; numeric utils
  +(fork-server 'code (lambda ()
  +(let loop ((ff #empty))
  +(let*((envelope (wait-mail))
  +      (sender msg envelope))
  +   (let ((code (gdb gdb-x-i-answer-parser "x/11i $pc")))
  +      (locate 1 1) (set-color GREY)
  +      (for-each (lambda (ai)
  +            (display "                                                           \x1B;[1000D")
  +            (print "0x" ($reg->string (car ai)) "   " (bytes->string (cdr ai)))
  +            #true)
  +         code))
  +   (mail sender 'ok)
  +   (loop ff)))))
  +
   ; ---
  -
  -(let loop ()
  -   (interact 'registers 'show)
  -
  -;   (locate 1 60) (for-each display (list
  -;      "eax " (bytes->string ))
  -
  -
  -   (locate 1 20) (set-color GREY) (display "> ")
  -   (let ((r (read)))
  -      (cond
  -         ((eq? r 's)
  -            ;(gdb get-rest-of-line "si")
  -            (print "Ok"))))
  -   (loop))
  +(hide-cursor)
  +(interact 'code 'show)
  +(interact 'registers 'show)
  +
  +(define progressbar "-\\|/")
  +(let loop ((progress 0))
  +   (locate 1 20) (set-color GREY) (print (string (ref progressbar (mod progress (size progressbar)))) " ")
  +   (cond
  +      ; https://www.cl.cam.ac.uk/~mgk25/ucs/keysymdef.h
  +      ((key-pressed #xffc3) ; F6
  +         (gdb get-rest-of-line "si")
  +         (interact 'code 'show)
  +         (interact 'registers 'show))
  +      ((key-pressed #xffc4) ; F7
  +         (let ((code (gdb gdb-x-i-answer-parser "x/2i $pc")))
  +            ;(caar code) <= current ip
  +            ;(caadr code) <= next ip
  +            (print "  " ($reg->string (caadr code)))
  +            (gdb get-rest-of-line "tbreak *0x" ($reg->string (caadr code)))) ; <= Temporary breakpoint ? at 0x??
  +         (gdb get-rest-of-line "c") ; Continuing. #\newline Temporary breakpoint ?, 0x??? in ?? ()
  +         (interact 'code 'show)
  +         (interact 'registers 'show))
  +
  +      ; ...
  +      ((key-pressed #x002f) ; XK_slash
  +         (locate 1 20) (set-color GREY) (display "> /")
  +         (show-cursor)
  +         (let ((r (read)))
  +            #true))
  +      ;; ((key-pressed #x0020) ; XK_space
  +         ;; (let ((answer (gdb gdb-x-i-answer-parser "x/7i $pc")))
  +         ;;    (cls)
  +         ;;    (locate 1 1) (set-color GREY)
  +         ;;    (for-each (lambda (ai)
  +         ;;          (print "0x" ($reg->string (car ai)) "   " (bytes->string (cdr ai)))
  +         ;;          #true)
  +         ;;       answer))
  +         ;;    (interact 'registers 'show))
  +
  +      (else
  +         (yield)))
  +   (loop (+ 1 progress))))
  
positive.code: (define gdb-si-answer-parser
     (let-parses((ip (get-greedy* (get-byte-if (lambda (x) (not (eq? x #\space))))))
                 (skip (get-word " in " #t))
                 (skip get-rest-of-line)
                 (prompt gdb-prompt-parser))
        ip))
  (define gdb-p-x-answer-parser
     (let-parses((skip (get-greedy* (get-byte-if (lambda (x) (not (eq? x #\space))))))
                 (skip (get-word " = 0x" #t))
                 (value get-rest-of-line)
                 (prompt gdb-prompt-parser))
        value))
  
  
  
  ; =============================================================================================
  
negative.code:          (ebx (bytes->number (gdb gdb-p-x-answer-parser "p/x $ebx") 16))
           (ecx (bytes->number (gdb gdb-p-x-answer-parser "p/x $ecx") 16))
           (edx (bytes->number (gdb gdb-p-x-answer-parser "p/x $edx") 16))
           (esp (bytes->number (gdb gdb-p-x-answer-parser "p/x $esp") 16))
           (ebp (bytes->number (gdb gdb-p-x-answer-parser "p/x $ebp") 16))
           (esi (bytes->number (gdb gdb-p-x-answer-parser "p/x $esi") 16))
           (edi (bytes->number (gdb gdb-p-x-answer-parser "p/x $edi") 16))
           (eip (bytes->number (gdb gdb-p-x-answer-parser "p/x $eip") 16))
           (show (lambda (x y reg value)
              (locate x y)
              (set-color DARKGREY)
  