(uiop:define-package :binry-hop/debug-util
(:use :cl)
(:export #:io-open #:io-close #:mv-ssf #:cat)
(:nicknames :debug-util))

(in-package :binry-hop/debug-util)

(defun io-open (&key (path #p"tmp.data")
               (direction :io) (if-exists :supersede)
               (if-does-not-exist :create)
               &allow-other-keys keys)
(apply 'open path
 (append keys
  (list :direction direction :if-exists if-exists
        :if-does-not-exist if-does-not-exist))))

(defun io-close (stream)
(unwind-protect
 (close stream)
 (close stream :abort t)))

(defmacro mv-ssf (symbols form)
`(multiple-value-bind ,symbols ,form
  (setf
   ,@(loop for s in symbols nconc
      `((symbol-function ',s) ,s)))))

(defun cat (&optional (path #p"tmp.data"))
(with-open-file (in path)
 (loop for read = (read-line in nil nil) while read do (print read))))