;; (SMURF) prints 300 characters around the current position in INFILE. ;; It's useful when you get a dot-context error or other error while ;; loading a file. Just do (SMURF) and it'll print out the vicinity ;; of the error. 2/3 of the printing will be before the error, 1/3 ;; after. If you want to see more context, just call it on the number ;; of characters you'd like to see instead of 300. ;; This function is my version of a long-existing function who's origin ;; is lost in the murky depths of history. You'll have to play historian ;; if you want to know why it's named SMURF! --RWK (HERALD SMURF) (defun smurf (&optional (chars-wanted 300)) (cond ((and (filep infile) (memq 'filepos (status filemode infile))) (terpri tyo) (let ((old-filepos (filepos infile)) (pre-chars (// (* 2 chars-wanted) 3))) (let ((new-filepos (max 0 (- old-filepos pre-chars))) (post-chars (- chars-wanted pre-chars))) (filepos infile new-filepos) (smurf-em (min old-filepos pre-chars)) (filepos infile old-filepos) (princ '|===>>> Error Occured Here <<<===| tyo) (smurf-em post-chars)))) (T (terpri tyo) (princ '|Can't FILEPOS with INFILE = | tyo) (prin1 infile tyo) (terpri tyo)))) (defun smurf-em (chars-wanted) (DO ((num chars-wanted (1- num)) (char (tyi infile nil) (tyi infile nil))) ((or (= num 0) (null char))) (tyo char tyo)))