;;; -*- Mode: Lisp -*-
;;;
;;; (c) Copyright 1984 - Lisp Machine, Inc.
;;;


; This file implements the diagnostic window.
; Currently, the diagnostic window is simply a lisp
; listener.  Eventually, it should automatically load
; in the diagnostic code upon being activated.

; When the right mouse button is pressed in the region
; of the diagnostic window, a pop-up menu appears
; with several options for doing various things useful
; in doing hardware diagnostics.

(defun make-diagnostic-window ()
   (tv:make-window 'diagnostic-window
                   ':edges-from ':mouse
		   ':expose-p t))

(defflavor diagnostic-window ()
	   (tv:lisp-listener))

(defmethod (diagnostic-window :mouse-click)
	   (mchar x y)
  (tv:menu-choose 
      '(("display a register"
	:eval
	(display-register))
       ("do frob1"
	:eval
	(princ "frob1 done")))))

; display-register will prompt the user for the name of
; a register.   He can either choose one of the registers
; in the "special register list", or he can enter the address 
; of any register in the machine.  

(defun display-register ()
   (let ((chosen-register
	   (tv:menu-choose
	     (loop with collist = '("Any Register")
	           for entry in register-list
		   do (setq collist (cons entry collist))
		   finally (return collist)))))

     (cond ((equal chosen-register '"Any Register")
	    (setq chosen-register
		  (prompt-for-register-name))
	    (create-window-for-register chosen-register)
	    (expose-register-window chosen-register))
	   (t
	    (create-window-for-special-register chosen-register)
	    (expose-special-register-window chosen-register)))))

; stubs
(defun prompt-for-register-name ()
   (princ "prompt-for-register-name"))

(defun create-window-for-register (x)
   (princ "create-window-for-register"))

(defun expose-register-window (x)
   (princ "expose-register-window"))

(defun create-window-for-special-register (x)
   (princ "create-window-for-special-register"))

(defun expose-special-register-window (x)
   (princ "expose-special-register-window"))

(setq register-list 
   '(("register1")
     ("register2")))



