Function: xscheme-process-filter

xscheme-process-filter is a byte-compiled function defined in xscheme.el.gz.

Signature

(xscheme-process-filter PROC STRING)

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/xscheme.el.gz
(defun xscheme-process-filter (proc string)
  (let ((xscheme-filter-input string)
	(call-noexcursion nil))
    (while xscheme-filter-input
      (setq call-noexcursion nil)
      (with-current-buffer (process-buffer proc)
	(cond ((eq xscheme-process-filter-state 'idle)
	       (let ((start (string-search "\e" xscheme-filter-input)))
		 (if start
		     (progn
		       (xscheme-process-filter-output
			(substring xscheme-filter-input 0 start))
		       (setq xscheme-filter-input
			     (substring xscheme-filter-input (1+ start)))
		       (setq xscheme-process-filter-state 'reading-type))
		   (let ((string xscheme-filter-input))
		     (setq xscheme-filter-input nil)
		     (xscheme-process-filter-output string)))))
	      ((eq xscheme-process-filter-state 'reading-type)
	       (if (zerop (length xscheme-filter-input))
		   (setq xscheme-filter-input nil)
		 (let ((char (aref xscheme-filter-input 0)))
		   (setq xscheme-filter-input
			 (substring xscheme-filter-input 1))
		   (let ((entry (assoc char xscheme-process-filter-alist)))
		     (if entry
			 (funcall (nth 2 entry) (nth 1 entry))
		       (progn
			 (xscheme-process-filter-output ?\e char)
			 (setq xscheme-process-filter-state 'idle)))))))
	      ((eq xscheme-process-filter-state 'reading-string)
	       (let ((start (string-search "\e" xscheme-filter-input)))
		 (if start
		     (let ((string
			    (concat xscheme-string-accumulator
				    (substring xscheme-filter-input 0 start))))
		       (setq xscheme-filter-input
			     (substring xscheme-filter-input (1+ start)))
		       (setq xscheme-process-filter-state 'idle)
		       (if (listp xscheme-string-receiver)
			   (progn
			     (setq xscheme-string-receiver
				   (car xscheme-string-receiver))
			     (setq call-noexcursion string))
			 (funcall xscheme-string-receiver string)))
		   (progn
		     (setq xscheme-string-accumulator
			   (concat xscheme-string-accumulator
				   xscheme-filter-input))
		     (setq xscheme-filter-input nil)))))
	      (t
	       (error "Scheme process filter -- bad state"))))
      (if call-noexcursion
	  (funcall xscheme-string-receiver call-noexcursion)))))