;;; -*- Mode:Lisp; Readtable:ZL; Package:LASER2; Base:8; Patch-File:T -*-
;;; Patch file for LMI Laser Printer II version 12.1
;;; Reason:
;;;  Make LASER2 use normal TCP gateway software:
;;;  NOTE: You show do an (UPDATE-SITE-CONFIGURATION-INFO) after this.
;;; Written 4-Apr-86 16:41:33 by JER at site LMI Cambridge
;;; while running on Natasha Nogoodnik from band 3
;;; with Experimental System 110.166, Experimental Lambda-Diag 7.3, Experimental Local-File 68.5, Experimental FILE-Server 18.2, Experimental Unix-Interface 9.1, Experimental ZMail 65.11, Experimental Object Lisp 3.1, Experimental Tape 6.33, Experimental Site Data Editor 3.3, Experimental Tiger 24.0, Experimental KERMIT 31.2, Experimental Window-Maker 1.0, Experimental Gateway 4.5, Experimental TCP-Kernel 39.5, Experimental TCP-User 62.6, Experimental TCP-Server 45.5, Experimental MEDIUM-RESOLUTION-COLOR 3.1, Experimental MICRO-COMPILATION-TOOLS 3.2, Experimental LMI Laser Printer II 12.0, microcode 1408, SDU ROM 102, Alpha III(3/25 mrc) printing.



; From modified file DJ: L.HARDCOPY.LASER2; DEFS.LISP#24 at 4-Apr-86 16:41:35
#8R LASER2#:
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "LASER2")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: HARDCOPY; LASER2; DEFS  "

(defmethod (laser2-stream :after :init) (&rest ignore)
 )

))
;; *** Note: ***
;;   You may lose because the buffer's readtable (ZL) differs from that of the patch buffer.
;; *************

; From file DJ: L.HARDCOPY.LASER2; TCP.LISP#17 at 4-Apr-86 16:42:13
#8R LASER2#:
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "LASER2")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: HARDCOPY; LASER2; TCP  "

(defmethod (laser2-stream :run-server) ()
  ;; So we can open files
  (setq tcp-stream nil)
  (let ((user-id "LASER2") rmname fndname)
    (do-forever
      ;; Wait for job.
      (process-wait "No Jobs" #'(lambda (x) (send x :printer-queue)) self)
      (setq current-job (pop printer-queue))
      (unwind-protect
	  (*catch 'no-printer
	    (cond 
	      ((get-site-option :arpa-gateways)
	       (setq rmname (apply 'circular-list (get-site-option :arpa-gateways)))
	       (*catch 'open
		 (do-forever
		   (setq fndname (car rmname))
		   (setq tcp-stream (catch-error
				      (chaos:connect
					      fndname
					      (format nil "TCP ~A"
						      (string-subst-char
							#/space #\#
							(cadr (cadr current-job))))) nil))
		   (if tcp-stream (*throw 'open nil))
		   (setq rmname (cdr rmname))
		   (process-sleep 600. "No Printers Available")))
	       (setq tcp-stream (chaos:make-stream tcp-stream)))
	      (t (*throw 'no-printer t)))
	    (tv:background-notify "Now Printing ~A on ~A" (car current-job)
				  (second (second current-job)))
	    (cond
	      ((equal (car current-job) :FILE)
	       (apply self :print-file (cddr current-job)))
	      ((equal (car current-job) :STREAM)
	       (apply self :print-stream (cddr current-job)))
	      ((equal (car current-job) :ARRAY)
	       (apply self :print-bit-array (cddr (butlast current-job)))
	       (if (not (last current-job))
		   (deallocate-resource 'tv:hardcopy-bit-array-resource (caddr current-job))))))
	(if tcp-stream
	    (close tcp-stream))
	(setq tcp-stream nil))
      (setq current-job nil))))

))
