 dabbrev-point"))))

(defun prolog-completion-error-message (string)
  (message string)
  (setq *saved-prolog-process-mark* *prolog-completion-process-mark*))

;;; DABBREV

(defun prolog-dabbrev-atom ()
  (interactive)
  (let (sofar)
    (cond ((setq sofar (prolog-completion-sofar))
	   (send-prolog (concat 
			 "'$silent'(emacs_dabbrev_atom(\""
			 sofar
			 "\"))")))
	  (t
	   (message "Point not at end of atom")))))

;;; COMPLETION

(defun prolog-complete-atom ()
  (interactive)
  (let (sofar)
    (cond ((setq sofar (prolog-completion-sofar))
	   (send-prolog (concat
			 "'$silent'(emacs_complete_atom(\""
			 sofar
			 "\"))")))
	  (t
	   (message "Point not at end of atom")))))
		
(defun prolog-completions-start-collect ()
  (setq *prolog-atom-completions* nil))

(defun prolog-transfer-completion (atom number)
  (setq *prolog-atom-completions*
	(cons (list atom number)
	      *prolog-atom-completions*)))

(defun prolog-completions-run (sofar)
  (prolog-complete-atom-with
   (completing-read "Complete atom: "
		    *prolog-atom-completions*
		    nil
		    nil
		    sofar)
   t))
  
;;; HISTORY

(defun prolog-previous-command ()
  (interactive)
  (end-of-buffer)
  (setq *prolog-completion-process-mark*
	(marker-position (process-mark (get-buffer-process "*prolog*"))))
  (send-prolog "'$silent'(emacs_previous_command)"))


(defun prolog-next-command ()
  (interactive)
  (end-of-buffer)
  (setq *prolog-completion-process-mark*
	(marker-position (process-mark (get-buffer-process "*prolog*"))))
  (send-prolog "'$silent'(emacs_next_command)"))


(defun prolog-insert-history-command (cmd)
  (kill-region *prolog-completion-process-mark* (point))
  (insert cmd ".")
  (setq *saved-prolog-process-mark* *prolog-completion-process-mark*))


;;; COMPILATION

(defun prolog-recompile ()
  (interactive)
  (save-some-buffers)
  (if (not (eq (current-buffer) (get-buffer "*prolog*")))
      (pop-to-buffer (get-buffer "*prolog*") ni