;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 123.231
;;; Reason:
;;;  Fix zwei:editor-stream-mixin to make it's Interval be a zwei:file-buffer
;;;  with an appropriate name.  Fix (tcpa:print-stream-to-imagen) to not bomb
;;;  out if the stream doesn't have a :truename.
;;; Written 11-Apr-88 14:34:32 by pld at site Gigamos Cambridge
;;; while running on Jack Flanders from band 1
;;; with Experimental System 123.229, Experimental Local-File 73.4, Experimental FILE-Server 22.2, Experimental Unix-Interface 11.0, Experimental KERMIT 34.3, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, Experimental Tape 22.0, microcode 1755, SDU Boot Tape 3.14, SDU ROM 8.



; From modified file DJ: L.ZWEI; STREAM.LISP#181 at 11-Apr-88 14:34:45
#8R ZWEI#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "ZWEI")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: ZWEI; STREAM  "


(defmethod (editor-stream-mixin :before :init) (ignore)
  ;;When the Interval is created, make it a zwei:file-buffer
  (setq interval 'file-buffer))

))

; From modified file DJ: L.ZWEI; STREAM.LISP#181 at 11-Apr-88 14:34:46
#8R ZWEI#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "ZWEI")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: ZWEI; STREAM  "


(DEFMETHOD (EDITOR-STREAM-MIXIN :AFTER :INIT) (INIT-PLIST)
  (SETQ *STREAM-INPUT-HISTORY* (MAKE-HISTORY (STRING-APPEND "input history of "
							    (SEND *STREAM-SHEET* ':NAME))))
  (SETQ TV:IO-BUFFER (SEND *STREAM-SHEET* ':IO-BUFFER))
  (SETQ *STREAM-BLINKER* (WINDOW-POINT-BLINKER *STREAM-SHEET*))
  (AND (GET INIT-PLIST ':IBEAM-BLINKER-P)
       (LET ((BLINKER (TV:MAKE-BLINKER *STREAM-SHEET* 'STREAM-IBEAM-BLINKER
				       ':EDITOR-STREAM SELF ':VISIBILITY NIL )))
	 (SETF (WINDOW-SPECIAL-BLINKER-LIST *STREAM-SHEET*)
	       (DELQ (ASSQ 'STREAM-BLINK-IBEAM (WINDOW-SPECIAL-BLINKER-LIST *STREAM-SHEET*))
		     (WINDOW-SPECIAL-BLINKER-LIST *STREAM-SHEET*)))
	 (PUSH `(STREAM-BLINK-IBEAM . ,BLINKER)
	       (WINDOW-SPECIAL-BLINKER-LIST *STREAM-SHEET*))))
  (let ((name (tv:sheet-name *stream-sheet*)))
    (setf (symeval-in-instance interval 'name) name)
    (setf (symeval-in-instance interval 'pathname) (make-pathname :host si:local-host :name (string-upcase name))))
  (SYS:%USING-BINDING-INSTANCES (CLOSURE-BINDINGS EDITOR-CLOSURE))
  (SETQ *EDITOR-STREAM* SELF
	*WINDOW* *STREAM-SHEET*
	*EDITOR-STREAM-START-BP* *STREAM-START-BP*)
  (PUSH 'STREAM-PRE-COMMAND-HOOK *COMMAND-HOOK*)
  (PUSH 'STREAM-COMMAND-HOOK *POST-COMMAND-HOOK*))

))

; From modified file DJ: L.NETWORK.IP-TCP.USER; IMAGEN.LISP#73 at 11-Apr-88 14:39:15
#10R TCP-APPLICATION#: #!:CL
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; USER; IMAGEN  "

(defun print-stream-to-imagen (file-stream address &optional options)
  (check-type address string)
  (with-open-file (tcp-stream (string-append "TCP-HOST:"
					     address
					     ".IMAGEN")
			      :direction :output
			      :output-buffers *imagen-writes-out*
			      :keyword "Imagen Printer")
    (let* ((format (getf options :format :text))
	   (copies (getf options :copies *imagen-default-copies*))
	   (form-length (getf options :form-length *imagen-default-form-length*))
	   (form-width (getf options :form-width *imagen-default-form-width*))
	   (line-wrapping (getf options :line-wrapping *imagen-default-line-wrapping*))
	   (forms-per-page (getf options :forms-per-page *imagen-default-forms-per-page*))
	   ;;forms-per-page = 1, form-width = 80  --> normal PORTRAIT
	   ;;forms-per-page = 1, form-width = 132 --> normal LANDSCAPE
	   ;;forms-per-page = 2, form-width = 80  --> two pages per page, side by side, LANDSCAPE
	   ;;forms-per-page = 2, form-width = 132 --> two pages per page, one above other, PORTRAIT
	   (left-margin (getf options :left-margin *imagen-default-left-margin*))
	   (line-numbers (getf options :line-numbers *imagen-default-line-numbers*))
	   (truename (global:send-if-handles file-stream :truename))
	   (name (if truename
		     (send truename :string-for-editor)
		   "Unnamed Stream"))
	   (spool-date (time:print-current-time nil :dd-mmm-yyyy))
	   (file-date (getf options :file-date spool-date))
	   (page-headings (getf options :page-headings *imagen-default-page-headings*))
	   (page-list (getf options :page-list))
	   (stream nil))
      (setq stream (ftp:make-ascii-translating-output-stream tcp-stream nil))
      (format stream
	      "@document(language ~A,jamresistance on,host ~S~
,jobheader on,name ~S,spooldate ~S,owner ~S~:[~*~;,copies ~D,pagecollation on~],pagereversal on~
,formlength ~D,formwidth ~D,formsperpage ~D,leftmargin ~D)"
	      (case format
		(:impress "Impress")
		(:tek "Tektronix")
		(otherwise "Printer"))
	      (send si:local-host :name)	;Local host
	      name	;Name for Job Header and Page Header
	      spool-date	;Date for Job Header
	      (string si:user-id)	;Owner for Job Header
	      (> copies 1)	;Conditional for multiple-copy options
	      copies	;Number of copies
	      form-length	;lines per logical page
	      form-width	;columns per logical page
	      forms-per-page	;logical pages per physical pages
	      left-margin	;blank columns at left edge of each logical page
	      )
      (ecase format
	((:text nil)
	 (global:stream-copy-until-eof file-stream
				       (make-paginating-stream tcp-stream
							       (and page-headings (list name t file-date))
							       (if page-headings 2 0)
							       line-numbers
							       form-length
							       form-width
							       line-wrapping
							       left-margin
							       t
							       page-list)))
	(:ascii
	 (global:stream-copy-until-eof file-stream stream))
	((:impress :tek)
	 (global:stream-copy-until-eof file-stream tcp-stream))))))

))
