;;;;Here there be aliens (mapc 'require '(asdf usocket)) (setq *print-pretty* t) (defvar *lf* nil) (defvar *pc* 0) (defvar *post* nil) (defun alist-and-body (s c n) `(setq *post* (cons (let ((utime (get-universal-time))) (multiple-value-bind (second minute hour date month year day) (decode-universal-time utime 0) (append (read ,s t nil t) (list (cons 'pc (incf *pc*)) (cons 'second second) (cons 'minute minute) (cons 'hour hour) (cons 'date date) (cons 'month (cdr (assoc month '((1 . jan) (2 . feb) (3 . mar) (4 . apr) (5 . may) (6 . jun) (7 . jul) (8 . aug) (9 . sep) (10 . oct) (11 . nov) (12 . dec))))) (cons 'year year) (cons 'day (cdr (assoc day '((0 . mon) (1 . tue) (2 . wed) (3 . thu) (4 . fri) (5 . sat) (6 . sun))))))))) (loop for r = (read ,s t nil t) while (not (eq r '})) collect r finally (read-char-no-hang ,s t nil t))))) (set-dispatch-macro-character #\# #\{ #'alist-and-body) (defun post (&optional (msg nil) (server "127.0.0.1") (port 45678)) (usocket:with-client-socket (socket stream server port :element-type 'character) (unwind-protect (let ((*read-eval* nil)) (format stream "7~s~%~s~%" (car msg) (cdr msg)) (loop for response = (read stream nil nil) while response collecting response)) (usocket:socket-close socket)))) (defun strm2syms (stream) (let ((symbols (list)) (curword (list))) (loop for ch = (read-char stream nil nil) do (if (or (null ch) (char= ch #\Space)) (progn (push (with-input-from-string (s (format nil "|~a|" (coerce (nreverse curword) 'string))) (read s)) symbols) (setf curword (list))) (when ch (push ch curword))) while ch finally (return-from strm2syms (reverse symbols))))) (defun unjust (stream) (let ((string (format nil "~a" (strm2syms stream)))) (values (subseq string 1 (1- (length string)))))) (defun linewise (filepath) (with-open-file (file filepath :direction :input) (loop for line = (read-line file nil nil) while line collecting (with-input-from-string (in line) (unjust in)))))