#!/usr/bin/guile -s
!#

(define datadir "../common/")

(use-modules (ice-9 debug)
	     (srfi srfi-13)
	     
	     (alterator algo)
	     (alterator ensign)
	     (alterator compat telegraph)
	     (alterator compat command))


;input to easy to use lists
(define (in) (prepare-cmds (message->commands (read-bus '>>))))


;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 (append (list (string-append name "/" (car x)))
						 (cdr x)))) cmds))
  (let ((name (string-append "/" (string-join (car cmd) "/")))
	(answer (call-mariner cmd "/usr/lib/alterator/")))
    (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)
