;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 126.56
;;; Reason:
;;;  Improve interface to SI:MAYBE-SET-SYSTEMS-RELEASED.
;;;  
;;;  This gets called when we do a full GC in mode :SYSTEM-RELEASE, typically
;;;  when the system status is changing.  Now, prompt to release some, all,
;;;  or none of the patchable systems.  Also offer to set the system release
;;;  status (printed by PRINT-HERALD) to any of the stanard values.
;;; Written 17-Aug-88 17:10:41 by keith (Keith Corbett) at site Gigamos Cambridge
;;; while running on Breaking Glass from band 2
;;; with Experimental System 126.55, ZMail 73.2, Local-File 75.2, File-Server 24.1, Unix-Interface 13.0, Tape 24.2, Lambda-Diag 17.0, Experimental ZWEI 126.0, microcode 1762, SDU Boot Tape 3.14, SDU ROM 103.



; From modified file DJ: L.SYS; LAST.LISP#2 at 17-Aug-88 17:10:42
#10R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; LAST  "

(defun maybe-set-systems-released ()
  ;;Status of patchable systems
  (let ((systems-to-release nil) answer)
    (dolist (s patch-systems-list)
      (and (neq (patch-status s) :released)
	   (push s systems-to-release)))
    (when (setq answer
		(and systems-to-release
		     (fquery `(:type :tyi :choices (((:all "All")   #\A)
						    ((:some "Some") #\S)
						    ((nil "None")   #\N))
				     :clear-input t
				     :timeout ,(* 5 60 60)
				     :default-value nil)
			     "Release patchable systems? ")))
      (dolist (s (nreverse systems-to-release))
	(when (or (eq answer :all)
		  (let ((proceed
			  (fquery `(:type :tyi :choices (((t "Yes")      #\Y)
							 ((nil "No")     #\N)
							 ((:quit "Quit") #\Q)
							 ((:proceed "Proceed") #\P))
					  :clear-input t
					  :timeout ,(* 2 60 60)
					  :default-value nil)
				  "~A ~A (version ~D.~D)~&  Release it? "
				  (patch-status s)
				  (patch-name s)
				  (patch-version s)
				  (version-number (first (patch-version-list s))))))
		    (case proceed
		      (:quit (return))
		      (:proceed (setq answer :all)))
		    proceed))
	  (set-system-status (patch-name s) :released)
	  (format t "~A. ~&Released" (patch-name s))))))
  ;;Status keyword
  (when (yes-or-no-p-with-timeout (* 5 60 60) nil
				  "~2&Current release status is ~S.  Change it ?"
				  si:*release-status*)
    (let* ((statuslist  '(:development :released :alpha :beta :obsolete))
	   (choices (loop for status in statuslist
			  as str = (format nil "~1(~A~)" status)
			  collect (list
				    (list status str)
				    (char str 0)))))
      (format t "~%The release status should be one of the following:~%~{~%~3T- ~1(~A~)~}" statuslist)
      (setq si:*release-status*
	    (fquery `(:type :tyi
		      :choices ,choices
		      :clear-input t
		      :timeout ,(* 2 60 60)
		      :default-value :released)
		    "~%Set release status - specify first character: "))))
  (format t "~2&")
  ;;Show results
  (print-herald)
  nil)

))
