;;; -*- Mode: Common-Lisp; Package: PRINTER; Base: 10.; Patch-File: T -*-
;;; Written 04/02/90 13:15:42 by DAB,
;;; Reason: Fixed (FILE-PRINT-REQUEST :PRINT-FILE) to handle copies on MX properly. [11006]
;;; while running on MX29 from band n817
;;; With SYSTEM 6.31, GC 6.3, VIRTUAL-MEMORY 6.3, MICRONET 6.0, MICRONET-COMM 6.2,
;;;  DISK-IO 6.2, DISK-LABEL 6.0, BASIC-PATHNAME 6.4, MAC-PATHNAME 6.0, NETWORK-SUPPORT-COLD 6.2,
;;;  BASIC-NAMESPACE 6.7, BASIC-FILE 6.10, RPC 6.2, NFS-MX 6.6, EH 6.6, MAKE-SYSTEM 6.2,
;;;  MEMORY-AUX 6.0, COMPILER 6.14, TV 6.24, NVRAM 6.2, UCL 6.0, INPUT-EDITOR 6.0,
;;;  MACTOOLBOX 2.14, METER 6.1, ZWEI 6.13, DEBUG-TOOLS 6.4, WINDOW-MX 6.10, PRINTER 6.3,
;;;  MAC-PRINTER-TYPES 6.1, CLIPBOARD 6.1, TI-CLOS 6.42, CLEH 6.5, NETWORK-PATHNAME 6.1,
;;;  NETWORK-NAMESPACE 6.1, DATALINK 6.0, CHAOSNET 6.5, NETWORK-SUPPORT 6.1, NETWORK-SERVICE 6.2,
;;;  DATALINK-DISPLAYS 6.0, MX-DATALINK 6.1, NAMESPACE-EDITOR 6.4, IP 3.60, NFS-MX-SERVER 6.0,
;;;  MX-SERIAL 6.1, PRINTER-TYPES 6.2, IMAGEN 6.1, MAIL-DAEMON 6.6, MAIL-READER 6.7,
;;;  TELNET 6.1, VT100 6.0, STREAMER-TAPE 6.5, DECNET 1.72, VISIDOC 6.7, PROFILE 6.2,
;;;   microcode 138, Band Name: microExplorer Network (8/17)

#!C
; From file REQUESTS.LISP#> PRINTER; sys:
#10R PRINTER#:
(COMPILER-LET ((*PACKAGE* (FIND-PACKAGE "PRINTER"))
                          (SI:*LISP-MODE* :COMMON-LISP)
                          (*READTABLE* SYS:COMMON-LISP-READTABLE)
                          (SI:*READER-SYMBOL-SUBSTITUTIONS* SYS::*COMMON-LISP-SYMBOL-SUBSTITUTIONS*))
  (COMPILER#:PATCH-SOURCE-FILE "SYS: PRINTER; REQUESTS.#"


(DEFMETHOD (FILE-PRINT-REQUEST :PRINT-FILE) (&AUX PRINT-AOK PRINTER (PRINTER-OPTIONS (CDR PRINT-DEVICE)))
  "Copy file in print request to printer.
Prints regular text file (withwithout fonts) or array image file."
  (declare (special *MAC-unwind-protect-forms* ))
  (UNWIND-PROTECT
      (WITH-OPEN-STREAM (PRINTER-STREAM (APPLY #'GET-PRINTER-STREAM PRINTER-OPTIONS))
			(SETQ PRINTER (SEND SELF :MAKE-PRINTER-DEVICE PRINTER-STREAM))
			(WITH-OPEN-file (FILE-STREAM FILE-NAME :characters t :direction :input :ERROR nil) ;05.05.87 DAB
					(COND
					  ((ERRORP FILE-STREAM)
					   (NOTIFY-USER-AT-HOST
					     (FORMAT () "Error: ~A~%in print request ~A" FILE-STREAM SELF)
					     SENDER-HOST))
					  ((NOT
					     (LET ((P-STATE
						     (SEND PRINTER :CURRENT-PRINTER-STATE (GET PRINT-DEVICE :STREAM))))
					       (GETF P-STATE	;returns list of condition states
						     :ONLINE)))	;if offline report error and  
					   (NOTIFY-USER-AT-HOST	;de-queue request.
					     (FORMAT ()
						     "Error: Printer ~A in print request ~A is offline or out of paper."
						     (CAR PRINT-DEVICE) FILE-NAME)
					     SENDER-HOST))
					  (T
					   (DOTIMES (N (IF (SEND PRINTER :PRINTS-MULTIPLE-COPIES-P)
							    1
							    COPIES))
						     (IF (PLUSP N)
							 (SEND FILE-STREAM :SET-POINTER 0))	; reset file stream
						     (when (zerop N)  ; DAB 04-02-90 Do this for first copies only.
						       (SEND PRINTER :START-DOCUMENT (IF HEADER
										       (OR HEADER-NAME FILE-NAME))
							   (IF SENDER-HOST
							       (STRING-APPEND USER-NAME "@" (FORMAT () "~A" SENDER-HOST))
							       USER-NAME)
							   COPIES))
						     (IF (SEND PRINTER :SCREEN-IMAGE-FILE-P FILE-NAME)
							 (SEND PRINTER :PRINT-RAW-FILE FILE-STREAM)
							 (SEND PRINTER :PRINT-TEXT-FILE FILE-STREAM FONT-LIST))
						     )
					    (SEND PRINTER :END-DOCUMENT)  ; DAB 04-02-90Do this when we are done with all copies.
					    (SETQ PRINT-AOK T)))))
    ;; delete file 
    (IF DELETE-AFTER
	(DELETE-FILE FILE-NAME))
    ;;11-16-88 DAB Added for mac printing. Mx-opens and mx-closes must be balanced.
    (when *MAC-unwind-protect-forms* (dolist (func *MAC-unwind-protect-forms*) ;11-16-88 DAB
				       (funcall func)))
    )
  PRINT-AOK)
))
