anchor.diff:           ;(print "msg: " msg)
            ;(print "(cdr msg): " (cdr msg))
   
  -         ; it's good idea to free the input buffer...
  -         (syscall 0 (car Out) 1024 #f)
  -         (unless (null? (cdr msg)) (begin
  +         ; it's good idea to free the input buffer
  +         (syscall 0 (car Out) 1024 #f) ; 1024 would be enought, i think...
  +
  +;         (if (equal? msg '(SIGINT)) ; SIGINT = 2
  +;            (syscall 62 Pid 2 #f)
  +
  +         (let*((parser command
  +                  (if (string? (car msg))
  +                     (values #false msg)
  +                     (values (car msg) (cdr msg)))))
  +            ;(locate 40 18) (print "parser: " parser)
  +            ;(locate 40 19) (print "command: " command)
  +         (unless (null? command) (begin
               ;(print "sending " msg)
  -            (for-each (lambda (x) (display-to (cdr In) x)) (cdr msg))
  +            (for-each (lambda (x) (display-to (cdr In) x)) command)
               (display-to (cdr In) "\n")))
            
  -         (mail sender (car (fd->exp-stream (car Out) "" (car msg) syntax-fail))))
  +         (mail sender (if parser (car (fd->exp-stream (car Out) "" (car msg) syntax-fail)) #true))))
         (loop)))))
   
   ; qemu instance
  
positive.code:    (loop ff)))))
  
  ; ---
  (hide-cursor) (cls)
  (interact 'code 'show)
  (interact 'registers 'show)
  
  (define progressbar "-\\|/")
  (let loop ((progress 0))
     (locate 58 1) (set-color GREY) (display (string (ref progressbar (mod progress (size progressbar)))))
     (locate 1 20) (display " ")
     (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))))
  
negative.code: (fork-server name (lambda ()
     (define In (syscall 22 #f #f #f)) ; create input/output pipes: '(read-pipe . write-pipe)
     (define Out (syscall 22 #f #f #f))
     (define Pid
        (syscall 59 (c-string (car arguments)) ; (syscall:fork)
           (map c-string arguments)
           (list (car In) (cdr Out) stderr)))
     (print "forked " name " with id " Pid)
  
     ; main loop:
     (let loop ()
  