(defun read-item (infile) (let ((item (read infile nil '*done*)) (route (read infile nil nil))) (if (fboundp item) (print item)) (if route (progn (cond ((member (car route) '(s S)) ; is it a subject? (setq route (cdr route)) (putprop item t 'SUBJECT) (print route))))) item)) (defvar *myfile* "dj:saz;foo.test") (with-open-file (infile *myfile*) (do nil ((eq (read-item infile) '*done*) '*done*)))