;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for CDI version 1.20
;;; Reason:
;;;  Add Explorer printer host.
;;; Written 17-Jul-86 15:38:05 by Gibson at site CDI Dallas
;;; while running on EXPLORER-1 from band 1
;;; with System 110.232, Lambda-Diag 7.17, Experimental Local-File 68.7, FILE-Server 18.4, Unix-Interface 9.1, ZMail 65.14, Object Lisp 3.4, Tape 6.39, Site Data Editor 3.3, Tiger 24.0, KERMIT 31.3, Gateway 4.15, TCP-Kernel 39.7, TCP-User 62.7, TCP-Server 45.5, MEDIUM-RESOLUTION-COLOR 3.4, MICRO-COMPILATION-TOOLS 3.2, System Revision Level 3.93, Experimental Window-Maker 2.0, Experimental CDI 1.19, microcode 1564, CDI Beta III.



; From file S2: >Lambda-3>IO1>exp-printer-host.lisp.3 at 17-Jul-86 15:38:06
#8R FILE-SYSTEM#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FILE-SYSTEM")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: io1; EXP-PRINTER-HOST  "

(DEFFLAVOR EXP-PRINTER-HOST
	 (DEVICE-NAME)
	 (SI:BASIC-HOST)
  (:GETTABLE-INSTANCE-VARIABLES DEVICE-NAME)
  (:INITABLE-INSTANCE-VARIABLES DEVICE-NAME))

))

; From modified file S2: >Lambda-3>IO1>exp-printer-host.lisp.3 at 17-Jul-86 15:38:46
#8R FILE-SYSTEM#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "FILE-SYSTEM")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: io1; EXP-PRINTER-HOST  "


(DEFFLAVOR EXP-PRINTER-HOST
	 (DEVICE-NAME)
	 (SI:BASIC-HOST)
  (:GETTABLE-INSTANCE-VARIABLES DEVICE-NAME)
  (:INITABLE-INSTANCE-VARIABLES DEVICE-NAME))

(DEFMETHOD (EXP-PRINTER-HOST :NAME) ()
  DEVICE-NAME)

(DEFMETHOD (EXP-PRINTER-HOST :NAME-AS-FILE-COMPUTER) ()
  DEVICE-NAME)

(DEFMETHOD (EXP-PRINTER-HOST :PATHNAME-HOST-NAMEP) (NAME)
  (STRING-EQUAL NAME DEVICE-NAME))

(DEFMETHOD (EXP-PRINTER-HOST :PATHNAME-FLAVOR) ()
  (VALUES 'EXP-PRINTER-PATHNAME NIL))

(DEFFLAVOR EXP-PRINTER-PATHNAME
	 ()
	 (PATHNAME))

(DEFMETHOD (EXP-PRINTER-PATHNAME :PARSE-NAMESTRING)
	   (HOST-SPECIFIED STRING &OPTIONAL (START 0) END)
  HOST-SPECIFIED
  (VALUES :NO-INTERN (MAKE-INSTANCE 'EXP-PRINTER-FILEHANDLE
				     :NAMESTRING (SUBSTRING STRING START END))))

;NAMESTRING is just for pseudo debugging purposes; Magtape files dont really have names.
(DEFFLAVOR EXP-PRINTER-FILEHANDLE
	 (NAMESTRING
	  (last-instance nil))
	 ()
  (:INITABLE-INSTANCE-VARIABLES NAMESTRING))

(DEFMETHOD (EXP-PRINTER-FILEHANDLE :STRING-FOR-PRINTING) ()
  NAMESTRING)

(DEFMETHOD (EXP-PRINTER-FILEHANDLE :PRINT-SELF) (STREAM PRINDEPTH SLASHIFY-P) PRINDEPTH
  (COND (SLASHIFY-P
	 (SEND STREAM :STRING-OUT "#<")
	 (PRIN1 'EXP-PRINTER-FILEHANDLE STREAM)
	 (FORMAT STREAM " ~S ~O>" NAMESTRING (%POINTER SELF)))
	(T
	 (SEND STREAM :STRING-OUT NAMESTRING))))

;This is a kludge to make the copy-patch-files-of-system work.
(DEFMETHOD (EXP-PRINTER-FILEHANDLE :PATCH-FILE-PATHNAME) (&REST IGNORE)
  "EXP-PRINTER:")

(defmethod (EXP-PRINTER-FILEHANDLE :OPEN) (pathname &key flavor-and-init-options)
  (cond ((null flavor-and-init-options)
	 (setq flavor-and-init-options default-flavor-and-init-options)))
  (let ((flavor (car flavor-and-init-options))
	(init-options (cdr flavor-and-init-options)))
    (cond ((null flavor-and-init-options)
	   pathname)
	  ((eq (car flavor-and-init-options) (type-of last-instance))
	   last-instance)
	  (t
	   (setq last-instance (apply 'make-instance flavor init-options))))))

(DEFUN ADD-EXP-PRINTER-HOST (&OPTIONAL (NAME "EXP-PRINTER"))
  (COND ((NULL (GET-PATHNAME-HOST NAME T))
	 (LET ((HOST (MAKE-INSTANCE 'EXP-PRINTER-HOST :DEVICE-NAME NAME)))
	   (PUSH HOST *PATHNAME-HOST-LIST*)))))

(COMPILE-FLAVOR-METHODS EXP-PRINTER-HOST EXP-PRINTER-PATHNAME EXP-PRINTER-FILEHANDLE)

(ADD-EXP-PRINTER-HOST)

(si:update-site-configuration-info)
))
