;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 124.46 ;;; Reason: ;;; Don't force user to login to access imagen for screen dump, etc. ;;; Written 10-Jun-88 15:56:05 by pld at site Gigamos Cambridge ;;; while running on Azathoth from band 1 ;;; with Experimental System 124.36, Experimental Local-File 74.1, Experimental File-Server 23.1, Experimental Unix-Interface 12.0, Experimental ZMail 72.0, Experimental Tape 23.6, Experimental Lambda-Diag 16.1, microcode 1756, SDU Boot Tape 3.14, SDU ROM 8, the old ones. ; From modified file DJ: L.NETWORK.IP-TCP.USER; IMAGEN.LISP#76 at 10-Jun-88 15:57:06 #10R TCP-APPLICATION#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; USER; IMAGEN  " (defun print-owner () (if (and si:user-id (not (string-equal si:user-id ""))) si:user-id "(not logged in)")) )) ; From modified file DJ: L.NETWORK.IP-TCP.USER; IMAGEN.LISP#76 at 10-Jun-88 15:57:11 #10R TCP-APPLICATION#: (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-stream (tcp-stream (open-easy-tcp-stream address (sym-value 'IPPORT-IMAGEN) nil :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)) (directory (when truename (send (send truename :new-pathname :name nil :type nil :version nil) :string-for-printing))) (header-name (if truename (send (send truename :new-directory nil) :string-for-host) "Unnamed Stream")) (name (if truename (send truename :string-for-printing) "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) (tcp:*tcp-stream-whostate* "Imagen Output")) (setq stream (ftp:make-ascii-translating-output-stream tcp-stream nil)) (format stream "@document(language ~A,jamresistance on,owner ~S,host ~S~@[,directory ~S~],name ~S~ ,jobheader on,spooldate ~S~:[~*~;,copies ~D,pagecollation on~],pagereversal on~ ,formlength ~D,formwidth ~D,formsperpage ~D,leftmargin ~D)" (case format (:impress "Impress") (:tek "Tektronix") (otherwise "Printer")) (print-owner) (send si:local-host :name) ;Local host directory ;Host and directory for Job Header header-name ;Name for Job Header spool-date ;Date 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)))))) )) ; From modified file DJ: L.NETWORK.IP-TCP.USER; IMAGEN.LISP#76 at 10-Jun-88 15:57:13 #10R TCP-APPLICATION#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; USER; IMAGEN  " (defun transmit-imagen-data-bytes (address) (with-open-stream (imagen-stream (open-easy-tcp-stream address (sym-value 'IPPORT-IMAGEN) nil :direction :output :output-buffers *imagen-writes-out* :keyword "Imagen Screen Dump")) (let* ((landscape-p (eval *imagen-landscape-p*)) (magnification 0) (horizontal-magnification 0) (horizontal-available (getf *imagen-paper* (if landscape-p :landscape-h-available :portrait-h-available))) (horizontal-size 0) (horizontal-offset 0) (vertical-magnification 0) (vertical-available (getf *imagen-paper* (if landscape-p :landscape-v-available :portrait-v-available))) (vertical-size 0) (vertical-offset 0) (tcp:*tcp-stream-whostate* "Imagen Output")) (multiple-value-setq (horizontal-magnification horizontal-size) (imagen-magnification (third *imagen-data-size*) horizontal-available)) (multiple-value-setq (vertical-magnification vertical-size) (imagen-magnification (fourth *imagen-data-size*) vertical-available)) (setq magnification (max 0 (min horizontal-magnification vertical-magnification))) (unless (= magnification horizontal-magnification) (setq horizontal-size (* magnification (/ horizontal-size horizontal-magnification))) (setq horizontal-magnification magnification)) (unless (= magnification vertical-magnification) (setq vertical-size (* magnification (/ vertical-size vertical-magnification))) (setq vertical-magnification magnification)) (setq horizontal-offset (/ (- horizontal-available horizontal-size) 2.0)) (setq vertical-offset (/ (- vertical-available vertical-size) 2.0)) (when landscape-p (setq horizontal-offset (- horizontal-available horizontal-offset))) (format imagen-stream "@document(language impress,jobheader on,host ~S,name ~:[portrait~;landscape~]~D-~D-~D,spooldate ~S,owner ~S)" (send si:local-host :name) landscape-p (expt 2 magnification) (nth 2 *imagen-data-size*) (nth 3 *imagen-data-size*) (time:print-current-time nil :dd-mmm-yyyy) (print-owner)) (if landscape-p (impress imagen-stream 'SET_MAGNIFICATION magnification 'SET_ABS_H (inches-to-points vertical-offset) 'SET_ABS_V (inches-to-points horizontal-offset) 'SET_HV_SYSTEM (list :byte 0 ; pad 1 1 ; ORIGIN: physical 1 0 ; AXES: +90 deg (regular) 1 1 1 ; Orientation: 270 from X. )) (impress imagen-stream 'SET_MAGNIFICATION magnification 'SET_ABS_H (inches-to-points horizontal-offset) 'SET_ABS_V (inches-to-points vertical-offset))) (impress imagen-stream 'BITMAP 'OPAQUE (nth 0 *imagen-data-size*) (nth 1 *imagen-data-size*)) (send imagen-stream :string-out *imagen-data-bytes* 0 (* 128 (nth 0 *imagen-data-size*) (nth 1 *imagen-data-size*))) (impress imagen-stream 'ENDPAGE 'EOF)))) ))