#!/usr/bin/guile -s
!#
(use-modules (ice-9 debug))

(define datadir "../common/")

(load (string-append datadir "ensign.scm"))
(load (string-append datadir "compat-telegraph.scm"))

;old-version: process commands from list and autoconvert results
(define (process-command cmd)
  (define (write-error name reason)
    (write-command `(,(string-append "/error" name) reason ,reason)))
  (define (write-multiple-commands name cmds)
    (for-each (lambda (x) (write-command (list (string-append name "/" (car x))))) cmds))
  (let ((name (string-append "/" (string-join (car cmd) "/")))
	(answer (call-mariner cmd)))
    (if answer
      (cond
	((null? answer) '()); empty answer
	((error-answer? answer) (write-error name (cadr answer)))
	((and (pair? answer) (pair? (car answer))) (write-multiple-commands name answer))
	((pair? answer) (write-command `(,name ,@answer)))
	(else
	  (write-error name "unsupported answer type"))))))

(define (process cmds)
  (wait-accept backward-address (current-ports))
  (for-each process-command cmds)
  (write-line end-of-message)
  (force-output (current-output-port)))

(define (main)
  (process (in))
  (main))

(main)
