4.3BSD/usr/contrib/mh/miscellany/emh/emh-type.ml

; emh-type.ml :: implements the emh type commands
; Wed Oct  5 00:55:45 1983	/mtr  <mrose@uci-750a>


(declare-buffer-specific &mhargs)

(defun 
    
    (&mh-show &args &buffer &dir &folder &msg
	(setq &args 
	      (if (| prefix-argument-provided (> (nargs) 0))
		  (arg 1 ": mh-show (args) ") ""))
	(save-excursion
	    (pop-to-buffer (&mh-cur-folder))
	    (setq &dir &mhdir)
	    (setq &folder &mhfolder))
	(setq &msg (&mh-cur-message))
	(if (>= (process-status
		    (setq &buffer (concat "message " &folder "/" &msg))) 0)
	    (error-message "already doing show " &msg))
	(if (| (error-occured (next-buffer-name &buffer))
	       (save-excursion (temp-use-buffer &buffer) (!= &args &mhargs)))
	    (save-excursion
		(error-occured (delete-buffer &buffer))
		(temp-use-buffer &buffer)
		(use-local-map "&mh-keymap")
		(setq needs-checkpointing 0)
		(erase-buffer)
		(setq &mhargs &args)
		(setq &mhdir &dir)
		(setq &mhmsg &msg)
		(&mh-start-process
		    (concat "show " (setq &mhfolder &folder) " " &msg 
			    (if (!= &args "") (concat " " &args) "") " | cat")
		    &buffer)
		(insert-sentinel &buffer "&mh-show-sentinel")
		(setq mode-string "Starting")
		(setq mode-line-format "  %b: show (status: %m)  %M"))
	    (save-excursion (pop-to-buffer &buffer) (beginning-of-file)))
	(&mh-set-cur &msg)
	
	(novalue)
    )
    
    (&mh-show-sentinel &flag &text
	(setq &flag (>> prefix-argument 16))
	(setq &text (process-output))
	(save-excursion 
	    (temp-use-buffer MPX-process)
	    (setq mode-string (substr &text 1 (- (length &text) 1)))
	    (if (= mode-string "Exited")
		(progn 
		       (setq mode-string "emh")
		       (setq mode-line-format
			     "  %b: display (%m) %M %[%p%]"))))
	(dot-is-visible)	; hack...
	(if (bitwise-and &flag 12)
	    (save-excursion (pop-to-buffer MPX-process) (beginning-of-file)))
    )
    
    (&mh-prev &args
	(setq &args 
	      (if (| prefix-argument-provided (> (nargs) 0))
		  (arg 1 ": mh-prev (args) ") ""))
	(pop-to-buffer (&mh-cur-folder))
	(if (bobp) (error-message "no prev message"))
	(previous-line) (beginning-of-line)
	(if (error-occured (&mh-cur-message))
	    (progn (next-line) (error-message "no prev message")))
	(&mh-show &args)
    )
    
    (&mh-next &args
	(setq &args 
	      (if (| prefix-argument-provided (> (nargs) 0))
		  (arg 1 ": mh-next (args) ") ""))
	(pop-to-buffer (&mh-cur-folder))
	(if (eobp) (error-message "no next message"))
	(next-line) (beginning-of-line)
	(if (error-occured (&mh-cur-message))
	    (progn (previous-line) (error-message "no next message")))
	(&mh-show &args)
    )
)

(novalue)