;;; -*- Mode: Common-Lisp; Package: User; Base: 10.; Patch-File: T -*-

;;; Reason: Part of patches required to be able to boot disk-saved MMON
;;; band to another hardware configuration. To be effective you
;;; must also load SYSTEM and MMON patches. Also contains misc
;;; patches for obscure problems.

;;;                           RESTRICTED RIGHTS LEGEND
;;;
;;; Use, duplication, or disclosure by the Government is subject to
;;; restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
;;; Technical Data and Computer Software clause at 52.227-7013.
;;;
;;;   TEXAS INSTRUMENTS INCORPORATED      
;;;   P.O. BOX 2909, M/S 2151             
;;;   AUSTIN, TEXAS 78769                 
;;;
;;; Copyright (C) 1989 Texas Instruments Incorporated.
;;; All rights reserved.

;;; Patch file for TV version 6.17
;;; Written 10/20/89 10:23:18 by marky,
;;; while running on LIBRA from band LODA
;;; With SYSTEM 6.20, VIRTUAL-MEMORY 6.2, EH 6.5, MAKE-SYSTEM 6.2, MICRONET 6.0, LOCAL-FILE 6.1,
;;;  BASIC-PATHNAME 6.2, NETWORK-SUPPORT-COLD 6.2, BASIC-NAMESPACE 6.4, NETWORK-NAMESPACE 6.0,
;;;  DISK-IO 6.1, DISK-LABEL 6.0, BASIC-FILE 6.4, MAC-PATHNAME 6.0, NETWORK-PATHNAME 6.0,
;;;  COMPILER 6.12, TV 6.15, DATALINK 6.0, CHAOSNET 6.1, GC 6.3, MEMORY-AUX 6.0, NVRAM 6.2,
;;;  SYSLOG 6.2, STREAMER-TAPE 6.4, UCL 6.0, INPUT-EDITOR 6.0, METER 6.1, ZWEI 6.7,
;;;  DEBUG-TOOLS 6.3, NETWORK-SUPPORT 6.0, NETWORK-SERVICE 6.1, DATALINK-DISPLAYS 6.0,
;;;  FONT-EDITOR 6.1, SERIAL 6.0, PRINTER 6.3, MAC-PRINTER-TYPES 6.1, PRINTER-TYPES 6.2,
;;;  IMAGEN 6.1, SUGGESTIONS 6.1, MAIL-DAEMON 6.3, MAIL-READER 6.5, TELNET 6.0, VT100 6.0,
;;;  NAMESPACE-EDITOR 6.3, PROFILE 6.2, VISIDOC 6.5, TI-CLOS 6.25, CLEH 6.5, IP 3.54,
;;;  Experimental CLX 6.5, CLUE 6.25, X11M 6.15, Experimental BUG 11.15, Inconsistent MMON 6.1,
;;;   microcode 429, Band Name: clogged


;;; MISCELANEOUS ...................................

;; this never got off the ground on non-mmon systems and was dropped on MMON systems
;; and just keeps a pointer to an explorer main screen that the MAC never uses
(when (si:mx-p)
  (SETF tv:*current-screens* nil))
(SETF (DOCUMENTATION 'tv:*current-screens* 'variable)
      "This var will soon be obsolete - do not use it.")

;; 
(DEFF tv:get-screen 'tv:sheet-get-screen)
(SETF (DOCUMENTATION 'tv:get-screen) "Use tv:sheet-get-screen instead - this is obsolete") 

#!C
; From file TVDEFS.LISP#> WINDOW; Hotel:
#10R TV#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: WINDOW; TVDEFS.#"



;; (tv:clear-resource 'zwei:TEMPORARY-MODE-LINE-WINDOW-WITH-BORDERS-RESOURCE)
;; bug : do this on b&w screen - to get resource pointing to it.
;; then do in on color screen - it takes you back to here!
;;  (zwei:TYPEIN-LINE-READLINE-NEAR-WINDOW :mouse "dfsdfsdfsd")
;;
(DEFUN CHECK-DEEXPOSED-WINDOW-RESOURCE   (IGNORE WINDOW IN-USE-P &REST IGNORE)
  (AND (NOT IN-USE-P)
       ;;(or (not (mac-system-p))	;; may 07/10/89 
       ;; Prevent using a resource if the superior is pointing to a DIFFERENT screen
       (EQ tv:default-screen (tv:sheet-get-screen window))
       (NOT (SHEET-EXPOSED-P WINDOW))
       (SHEET-CAN-GET-LOCK   WINDOW)))
))

#!C
; From file BLINKERS.LISP#> WINDOW; Hotel:
#10R TV#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: WINDOW; BLINKERS.#"

;; correct window patch 4.124 so MAGNIFYING-BLINKER can be used as a mouse blinker
(DEFWRAPPER (MAGNIFYING-BLINKER :BLINK) (IGNORE . BODY)
  `(LET ((INHIBIT-SCHEDULING-FLAG T))
     (unless (eq self tv:mouse-blinker)	;; may 10/20/89 allow MAGNIFYING-BLINKER as mouse blinker
       (OPEN-BLINKER TV:MOUSE-BLINKER)) 
     . ,BODY))
))

#!C
; From file SHWARM.LISP#> WINDOW; Hotel:
#10R TV#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: WINDOW; SHWARM.#"

;; add delaying-screen-management for explorer, too.
(DEFMETHOD (SHEET :KILL) ()
  (sys:with-suggestions-menus-for (:method tv:sheet :kill)
    (delaying-screen-management ;; we need to prevent autoexpose'ing
      ;; may 07/10/89 I think these are not necessary, but came before delaying-screen-management
      ;; was tried and then were never taken back out.
      ;; (WHEN superior 
      ;;   (SEND self :bury))
      (MAPC 'SEND (COPY-LIST INFERIORS) (CIRCULAR-LIST :KILL)))
    (SEND SELF :DEACTIVATE)
    (CLEAN-OUT-IO-BUFFER NIL SELF)))
))

;;; *********************************************************
;;;
;;; Everything below here is to fix the disk-save problem.
;;; 
;;; See also (patches) : mmon.6.2 system.6.22
;;;
;;; *********************************************************
#!C
; From file CSIB-DEFS.LISP#> WINDOW; Hotel:
#10R TV#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: WINDOW; CSIB-DEFS.#"


;; use si:board-type so that it can be called before error-handler is enabled.
(defun find-slot (id-string)
  (dotimes (i number-of-slots)
    (when (string-equal id-string (si:board-type (+ #xf0 i))) ;; may 10/17/89 
      (return i))))
))


#!C
; From file SHWARM.LISP#> WINDOW; Hotel:
#10R TV#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: WINDOW; SHWARM.#"


(DEFUN window-initialize (&aux first-time)
  (DECLARE (SPECIAL INITIAL-LISP-LISTENER)) ;; may 03/23/89 quiet cwarns
  ;; done to setup the MP:*GLOBAL-STATE-BLOCK* var
  (and (si:mp-system-p)
       (si:cool-boot-p)
       mp-setup-gsb-window-early
       (funcall mp-setup-gsb-window-early))
  (IF (mac-system-p)
      (PROGN
        (sheet-clear-locks)
	;; Initialize the user-input activity time to the current time.  That
	;; is, make it look like the user just hit (i.e. pressed) a key on the
	;; keyboard (or mouse).
	(SETQ kbd-last-activity-time (TIME))
	(who-line-setup)
	(SETQ *landscape-monitor* t))
      ;; ELSE...
      (PROGN
	;; may 10/17/89 Moved to si:setup-sib-slots since it is for tv:init-csib-registers, anyway.
	;; Don't allow *COLOR-SYSTEM* when we don't have a CSIB.  CJJ 04/13/88
	;; *** FOR PATCH ONLY - I left this *IN* here since it depends on a 'system patch being loaded,too
	(UNLESS sib-is-csib
	  (SETF *color-system* nil))
	(initialize)
	(when (si:mp-system-p)
	  (unless *mp-blank-window*
	    (setf *mp-blank-window* (make-instance 'w:window))
	    (send (car (send *mp-blank-window* :blinker-list)) :set-visibility nil)
	    (send (car (send *mp-blank-window* :blinker-list)) :set-deselected-visibility nil)
	    (send *mp-blank-window* :set-label nil))
	  (setup-screens-for-mp)
	  (when (and (si:cool-boot-p)
		     mp-count-displayed-screens
		     (setf *mp-full-screen-mode*
			   (= (funcall mp-count-displayed-screens) 1)))
	    ))
	;; Now that we have multiple screens not intended for concurrent exposure, don't expose them all.  CJJ 04/13/88.
	;;(DOLIST (s all-the-screens)
	;;  (SEND s :expose))
	(w:expose-initial-screens)))
  (SETQ kbd-tyi-hook nil
	process-is-in-error nil)
  ;; So it stays latched here during loading.
  (OR (EQ who-line-process si:initial-process)
      (SETQ who-line-process nil))
  (WHEN (mac-system-p)
    (SETQ mouse-sheet nil
	  default-screen nil
	  inhibit-screen-management nil
	  screen-manager-top-level t
	  screen-manager-queue nil)
    (SETF first-time t)
    (after-tv-initialized)			;sets up initial Lisp Listenr for MX.
    (SETQ mouse-sheet (w:sheet-get-screen initial-lisp-listener)
	  default-screen mouse-sheet
	  ;; Assign a value for *INITIAL-SCREEN* on MX, also.  CJJ 04/14/88.
	  w:*initial-screen* mouse-sheet)
    (SETQ *window-system-mouse-on-the-mac* (mac-window-p default-screen)))	
  (UNLESS initial-lisp-listener
    (SETQ initial-lisp-listener (make-window 
				  ;; If we have a simple lisp listener flavor then instantiate
				  ;; that, otherwise, get the UCL version.
				  (IF (GET 'simple-lisp-listener 'si:flavor)
				      'simple-lisp-listener
				      ;;ELSE
				      'lisp-listener)
				  :process si:initial-process)
	  first-time t))
  (if (and (si:mp-system-p)
	   (si:cool-boot-p)
	   mp-displayp
	   (not (funcall mp-displayp (logand #xf si:processor-slot-number))))
      (progn (setf default-screen main-screen)
	     (setf who-line-screen (screen-screens-who-line-screen main-screen)) ;; may 03/07/89 
	     (when MP-disable-run-light (funcall MP-disable-run-light)))
      (SEND initial-lisp-listener :select))
  (WHEN first-time
    (SETQ *terminal-io* initial-lisp-listener))
  ;; may 10/17/89 Added WHEN since the si:system-initialization-list entry (monitor-initialize)
  ;; is called BEFORE (system-window-initializations) when w:default-screen may be invalid.
  ;; Fixes SPR 9292
  (when (mmon-p)
    (rebuild-previously-selected-screens)
    (stuff-screen-pointers-in-monitors))
  
  (OR (MEMBER 'blinker-clock clock-function-list :test #'EQ)
      (PUSH 'blinker-clock clock-function-list)))
))

;;; ********************************************************************************
;;; 
;;; * WARNING * - both the tv amd mmon versions are below!


(IF (tv:mmon-p)
#!C
; From file TV-PATCHES.LISP#> MMON; Hotel:
#10R TV#:
 (COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: MMON; TV-PATCHES.#"


 (DEFUN initialize ()
  (sheet-clear-locks)
  ;; Initialize the user-input activity time to the current time.  That
  ;; is, make it look like the user just hit (i.e. pressed) a key on the
  ;; keyboard (or mouse).
  (SETQ kbd-last-activity-time (TIME))
  ;; MAIN-SCREEN-BUFFER-ADDRESS is established in (STANDARD-SCREEN :MAKE-DEFAULT-SCREEN)
  ;; when first screen is exposed.  CJJ 06/08/88.

  ;; *** FOR PATCH ONLY - START ... I left this *IN* here since it depends on a 'system patch being loaded,too
  ;; may 10/17/89  Moved up in boot sequence to si:setup-sib-slots
  (IF *csib-slots* ;; if any CSIBs - GRH 6/88
      (PROGN
	(SETF time:keyboard-base #xf30000
	      time:configuration-rom-base #xff0000)
	(init-csib-registers)) ;;; one time initialization of csib control registers
      (SETF time:keyboard-base #xfc0000
	    time:configuration-rom-base #xfe0000))
  ;; *** FOR PATCH ONLY - END

  ;; may 03/09/89 Moved this below since all AND conditions were never
  ;; true in system build.
;  ;; Ensure setup for multiple-screens has been done.  CJJ 04/20/88
;  (AND main-screen
;       who-line-screen
;       (NOT (screen-screens-previously-selected-windows main-screen))
;       (things-to-do-first-time))
  ;; WHO-LINE-SCREEN is set up below in conjuction with *INITIAL-SCREEN*.  CJJ 04/14/88
  (initial-screen-setup) ;; was  (who-line-setup)

  ;; Use *INITIAL-SCREEN* for MAIN-SCREEN when MAIN-SCREEN doesn't exist - at build time.
  ;;(OR main-screen (SETQ main-screen *initial-screen*))
  ;; may 03/09/89. MAIN-SCREEN and *initial-screen* MUST be same at boot and FOREVER.
  ;; The variable main-screen has been renamed to default-screen. A new variable *initial-screen* 
  ;; is now needed for boot purposes when more than one screen became possible.
  ;; Now main-screen is a misnomer since more that one screen can exist.
  ;; It would be nice if main-screen could be eliminated so that any code referencing main-screen
  ;; would have to use default-screen. Alternately, we could try to make default-screen "track"
  ;; main-screen ?
  (SETQ main-screen *initial-screen*) ;; may 03/09/89 

  ;; Ensure setup for multiple-screens has been done.
  ;; may 03/09/89 Moved and modified from above for system build.
  (unless (screen-screens-previously-selected-windows *initial-screen*)
    (things-to-do-first-time))

  (SETQ *landscape-monitor* (> (sheet-inside-width  *initial-screen*) ;; may 04/19/89 
			       (sheet-inside-height *initial-screen*)))
  ;; MOUSE-SHEET and DEFAULT-SCREEN are established when first screen is exposed.  CJJ 06/08/88.
  (SETQ inhibit-screen-management nil
	screen-manager-top-level t
	screen-manager-queue nil))
))
;; * ELSE * load the tv version ....
#!C
; From file SHWARM.LISP#> WINDOW; Hotel:
#10R TV#:
 (COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "TV"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: WINDOW; SHWARM.#"


 (DEFUN initialize () ;&optional (color-screen? tv:*color-system*)) ;; may 03/09/89 
  ;; MAIN-SCREEN isn't created here anymore, so optional argument isn't needed.  CJJ 04/14/88
  (sheet-clear-locks)
  ;; Initialize the user-input activity time to the current time.  That
  ;; is, make it look like the user just hit (i.e. pressed) a key on the
  ;; keyboard (or mouse).
  (SETQ kbd-last-activity-time (TIME))
  ;;; >>> now see which board we are on
  ;;; Leave MAIN-SCREEN-BUFFER-ADDRESS as is, unless NIL.  This eliminates one more reference to *COLOR-SYSTEM*.  CJJ 04/14/88
  (UNLESS main-screen-buffer-address
    (SETQ main-screen-buffer-address
	  (IF sib-is-csib
	      ;; Always create a monochrome screen unless color explicitly requested.  CJJ 04/14/88
	      csib-expans-no-transp-va
	      ;;(IF tv:*color-system*
	      ;;    csib-color-no-transp-va
	      ;;    csib-expans-no-transp-va)
	      io-space-virtual-address)))

  ;; may 10/17/89  Moved up in boot sequence to si:setup-sib-slots
  ;; *** FOR PATCH ONLY - START ... I left this *IN* here since it depends on a 'system patch being loaded,too
  (IF sib-is-csib
      (PROGN
	(SETF time:keyboard-base #xf30000
	      time:configuration-rom-base #xff0000)
	(init-csib-registers)) ;;; one time initialization of csib control registers
      (SETF time:keyboard-base #xfc0000
	    time:configuration-rom-base #xfe0000))
  ;; *** FOR PATCH ONLY - END

  ;; may 03/09/89 Moved this below since all AND conditions were never
  ;; true in system build.
;  ;; Ensure setup for multiple-screens has been done.  CJJ 04/20/88
;  (AND main-screen
;       who-line-screen
;       (NOT (screen-screens-previously-selected-windows main-screen))
;       (things-to-do-first-time))  
  ;; WHO-LINE-SCREEN is set up below in conjuction with *INITIAL-SCREEN*.  CJJ 04/14/88
  (initial-screen-setup)   ;; was (who-line-setup)

  ;; Use *INITIAL-SCREEN* for MAIN-SCREEN when MAIN-SCREEN doesn't exist - at build time.
  ;;(OR main-screen (SETQ main-screen *initial-screen*))
  ;; may 03/09/89. MAIN-SCREEN and *initial-screen* MUST be same at boot and FOREVER.
  ;; The variable main-screen has been renamed to default-screen. A new variable *initial-screen* 
  ;; is now needed for boot purposes when more than one screen became possible.
  ;; Now main-screen is a misnomer since more that one screen can exist.
  ;; Any code referencing main-screen should probably use default-screen instead.
  (SETQ main-screen *initial-screen*) ;; may 03/09/89 

  ;; Ensure setup for multiple-screens has been done.
  ;; may 03/09/89 Moved and modified call to things-to-do-first-time from above for system build.
  (unless (screen-screens-previously-selected-windows *initial-screen*)
    (things-to-do-first-time))

  (SETQ *landscape-monitor* (> (sheet-inside-width  *initial-screen*)
			       (sheet-inside-height *initial-screen*)))
  ;; Use *INITIAL-SCREEN* instead of MAIN-SCREEN for MOUSE-SHEET and DEFAULT-SCREEN.  CJJ 04/14/88
  (SETQ mouse-sheet *initial-screen*)
  (SETQ default-screen *initial-screen*
	inhibit-screen-management nil
	screen-manager-top-level t
	screen-manager-queue nil))
))
) ;; ........  end of if (mmon-p)

;;; ********************************************************************************

;; Normally this is loaded by an MMON patch
;(WHEN (AND (tv:mmon-p) (NOT (si:mx-p)))
;  ;; Below is also in an MMON patch ..
;  (delete-initialization "Monitor Initialize" :system)
;  (ADD-INITIALIZATION "Monitor Initialize"
;		      '(tv:monitor-initialize)
;		      '(:system))
;  (tv:move-element-before "Monitor Initialize"
;			  sys:system-initialization-list
;			  "Process"
;			  :key #'CAR
;			  :test #'STRING-EQUAL)

;  (FORMAT t "~% ** WARNING ** You must must have loaded MMON and SYSTEM patches before you disk save!")
;  )




