;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for Kermit version 36.3
;;; Reason:
;;;  centralize / rationalize label setups.  Clean up display.  Fix fonts.
;;; Written 19-Jul-88 21:03:53 by keith (Keith Corbett) at site Gigamos Cambridge
;;; while running on Breaking Glass from band 1
;;; with System 125.7, ZWEI 125.2, ZMail 73.0, Local-File 75.0, File-Server 24.0, Unix-Interface 13.0, Tape 24.0, Lambda-Diag 17.0, Experimental Window-Maker 2.0, Experimental Kermit 36.2, microcode 1761, SDU Boot Tape 3.14, SDU ROM 103, 7/19.



; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:01
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defflavor kermit-frame
	   
	   ((kermit-ready-for-commands? nil)
	    (kermit-connected-flag nil)
	    (kermit-serial-stream nil)
	    (serial-stream-open-form *default-serial-stream-open-form*)
	    kstate kterm-state
	    )
	   
	   (tv:process-mixin
	    tv:select-mixin			; just to get :set-process handler!
	    tv:inferiors-not-in-select-menu-mixin
	    tv:alias-for-inferiors-mixin
	    tv:margin-choice-mixin tv:essential-mouse	;for asynchronous mouse cmds
	    tv:bordered-constraint-frame-with-shared-io-buffer)

  :SPECIAL-INSTANCE-VARIABLES
  :inittable-instance-variables
  :outside-accessible-instance-variables
  (:accessor-prefix "")
  
  (:documentation
    :special-purpose
    "kermit command and terminal frame for file transfer and remote terminal emulation")
  
  (:default-init-plist

    :margin-choices '((" Abort " nil async-abort 0 0)
		      (" Exit " nil async-exit 0 0)
		      (" Break " nil async-break 0 0)
		      (" Resume " nil async-resume 0 0))

    :borders 3					; 3 on frame + 3 on each pane
    
    :expose-p t					; expose w/o blink on instantiation
    :activate-p t				; activate on instantiation
    :save-bits :delayed			; make save bits array on deexposure
    :process '(run-kermit-process)
 
    :panes
    `((status-pane kermit-status-pane)
      (command-pane kermit-command-pane)
      (interaction-pane kermit-interaction-pane)
      (extra-pane kermit-status-pane)
      . ((terminal-pane kermit-terminal-pane)))
    
    ;;;Window configurations:
    :constraints

    '((default
	. ((top-strip terminal-pane interaction-pane)
	   ((top-strip
	      :horizontal (:ask-window command-pane :pane-size)
	      . ((status-pane command-pane)
		 ((command-pane :ask :pane-size))
		 ((status-pane :even)))))
	   ((terminal-pane 25. :lines))
	   ((interaction-pane :even))))
      (long-terminal
	. ((top-strip terminal-pane interaction-pane)
	   ((top-strip
	      :horizontal (:ask-window command-pane :pane-size)
	      . ((status-pane command-pane)
		 ((command-pane :ask :pane-size))
		 ((status-pane :even)))))
	   ((interaction-pane 4. :lines))
	   ((terminal-pane :even))
	   )))
    ))

;;;; this is a very important thing to do unless
;;;; you like to live in the cold load stream:

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:03
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defmacro safe-font-spec (&rest fonts)
  `(loop for font-spec in '(,@fonts "CPTFONT")
	 as font = (intern-soft font-spec "FONTS")
	 when font (return font)))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:04
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defmacro kermit-label(string &optional (mode :centered))
  `(list :string ,string :font ,label-font ,@(ncons mode)))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:05
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defvar label-font (safe-font-spec "HL12BI"))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:06
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defconst terminal-pane-label (kermit-label "Terminal Emulator Window"))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:07
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defconst interaction-pane-label (kermit-label "Interaction Pane"))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:08
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defconst command-pane-label (kermit-label "Commands"))

;;;This label gets overwritten by WITH-STATUS

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:09
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defconst status-pane-label (kermit-label  "Kermit Status"))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:11
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defparameter status-pane-label-font (safe-font-spec))


;;;; scrolling mixin
;;; this should be part of the general system, but alot of people flame
;;; at the idea, so...

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:04:15
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defflavor kermit-interaction-pane ()
	   
	   (tv:notification-mixin
	    tv:list-mouse-buttons-mixin
	    scrolling-mixin
	    tv:window)
  
  (:documentation
    :special-purpose
    "kermit interaction pane")
  
  (:default-init-plist    
    :blinker-p t    
    :borders 3					; 3 on frame + 3 on each pane    
    :vsp 3					; 3 pixels between lines
    :reverse-video-p t
    :save-bits :delayed
    :more-p nil
    :label interaction-pane-label    
    :deexposed-typeout-action :permit    
    :font-map '(cptfont)
    :right-margin-character-flag 1))

))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:05:12
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defflavor kermit-status-pane ()
	   (tv:list-mouse-buttons-mixin
	    tv:top-label-mixin
  	    tv:window)
  (:documentation
    :special-purpose
    "kermit status pane")
  (:default-init-plist
    :borders 3					; 3 on frame + 3 on each pane
    :font-map (ncons status-pane-label-font)
    :vsp 3					; 5 pixels between lines
    :more-p nil
    :deexposed-typeout-action :permit
    :save-bits :delayed
    :reverse-video-p t
    :label status-pane-label
    :blinker-p nil				; no blinker
    ))


))

; From modified file DJ: L.NETWORK.KERMIT; WINDOW.LISP#81 at 19-Jul-88 21:05:14
#8R KERMIT#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "KERMIT")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; KERMIT; WINDOW  "


(defmacro with-status ((status-pane-format-string . format-args?) &body body)
  `(let ((*--old-label--*
	   (send status-pane :label)))
     (unwind-protect
	 (progn
	   (send status-pane
		 :set-label			;which may be multi lines.
		 (list
		   :string (format nil
				   ,status-pane-format-string
				   . ,format-args?)
		   :font status-pane-label-font))
	   . ,body)
       (send status-pane ':clear-screen)
       (send status-pane :set-label *--old-label--*))))


))
