;;; -*- Mode: Common-Lisp; Package: MT; Base: 10.; Patch-File: T -*-
;;; Written 06/13/89 09:22:26 by BERGER,
;;; Reason: Fixed prepare-remote-tape to use pick-drive, otherwise you get unit-offline if remote tape has not been prepared.
;;; while running on ARIES from band LODX
;;; With SYSTEM 6.5, VIRTUAL-MEMORY 6.1, EH 6.1, MAKE-SYSTEM 6.0, MICRONET 6.0, LOCAL-FILE 6.0,
;;;  BASIC-PATHNAME 6.0, NETWORK-SUPPORT-COLD 6.0, BASIC-NAMESPACE 6.0, NETWORK-NAMESPACE 6.0,
;;;  DISK-IO 6.0, DISK-LABEL 6.0, BASIC-FILE 6.1, MAC-PATHNAME 6.0, NETWORK-PATHNAME 6.0,
;;;  COMPILER 6.2, TV 6.6, DATALINK 6.0, CHAOSNET 6.0, GC 6.2, MEMORY-AUX 6.0, NVRAM 6.0,
;;;  SYSLOG 6.0, STREAMER-TAPE 6.1, UCL 6.0, INPUT-EDITOR 6.0, METER 6.0, ZWEI 6.1,
;;;  DEBUG-TOOLS 6.0, NETWORK-SUPPORT 6.0, NETWORK-SERVICE 6.0, DATALINK-DISPLAYS 6.0,
;;;  FONT-EDITOR 6.1, SERIAL 6.0, PRINTER 6.1, MAC-PRINTER-TYPES 6.1, PRINTER-TYPES 6.0,
;;;  IMAGEN 6.0, SUGGESTIONS 6.0, MAIL-DAEMON 6.2, MAIL-READER 6.0, TELNET 6.0, VT100 6.0,
;;;  NAMESPACE-EDITOR 6.0, PROFILE 6.1, VISIDOC 6.1, TI-CLOS 6.5, CLEH 6.3, IP 3.46,
;;;  Experimental BUG 11.7, Experimental CLX 6.1, CLUE 6.5, X11M 6.1, DECNET 1.67,
;;;   microcode 429, Band Name: Release 6.0 + SLE 6/5

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


(defun prepare-remote-tape (stream host)
  ;(format t "~%Server: prepare tape command.")
  ;(sys:INITIALIZE-DISK-SYSTEM)	;; Tung
  (pick-drive)  ; DAB 06-13-89
  (LET ((DRIVES (SI::ALL-TAPE-UNITS))
	(tape-type :quarter-inch)
	(result t)
	tape-format tape-mode tape-size density)
    (cond ((null drives)
	   (setq *TAPE-UNIT* ())
	   (write $TAPE-OFFLINE :stream stream)
	   (send stream :force-output))
	  ((= 1 (LENGTH DRIVES))
	   (reject-command stream $TAPE-FORMAT?)	; add for other tape formats
	   (setq tape-format (stoi (read stream NIL)))
	   (when tape-format
	     (cond ((or (= tape-format $QUARTER-INCH-TAPE-NUM)
			(= tape-format $QUARTER-INCH-CARRY-NUM))
		    (mt:prepare-tape-drive (CAR DRIVES)))
		   ((= tape-format $QUARTER-INCH-TAR-NUM)
		    (setq tape-mode (stoi (read stream NIL)))
		    (if (numberp  tape-mode)
			(INITIALIZE-TAPE-DRIVE :UNIT *CURRENT-UNIT* :BUFFERED T :SPEED 0 :BLOCK-SIZE 1024.
					       :DENSITY tape-mode)
			(setq result ())) )
		   ((or (= tape-format $HALF-INCH-TAPE-NUM)
			(= tape-format $HALF-INCH-TAR-NUM) )
		    (setq tape-size (stoi (read stream NIL)))	;; fixnum
		    (setq tape-mode (intern (read stream NIL) 'keyword))	;; keyword
		    (setq density (stoi (read stream NIL)))	;; fixnum
		    (setq tape-type :half-inch)
		    (prepare-tape-drive *current-unit* :block-size tape-size :block-mode tape-mode
					:tape-type tape-type :density density)
		    ;(format t "~%size = ~s, mode=~s, density=~d." tape-size tape-mode density) (sleep 8)
		    )
;		   ((= tape-format $HALF-INCH-TAR-NUM)
;		    (setq tape-type :half-inch)
;		    (prepare-tape-drive *current-unit* :block-size block-size :block-mode block-mode
;					:tape-type tape-type :density density)
;		    (reject-command stream "half-inch-tape?") )
;		    (setq tape-mode (stoi (read stream NIL)))
;		    (if (numberp  tape-mode)
;			(INITIALIZE-TAPE-DRIVE :UNIT *CURRENT-UNIT* :BUFFERED T :SPEED 0 :BLOCK-SIZE 1024.
;					       :DENSITY tape-mode)
;			(setq result ())) )
		   (t ;(format t "~%tape-format = ~a." tape-format) (sleep 3)
		      (setq result ())) ) ; cond
	     (when result
	       (setq *TAPE-UNIT* host)
	       (setf (get 'mt:*current-unit* 'tape-type) tape-type) )
	     (reject-command stream (if result $COMPLETE $TAPE-OFFLINE)) ))
	  (t (write drives :stream stream)	;; more than one drives (haven't tested yet ??????)
	     (send stream :force-output)
	     (setq drives (stoi (read stream)))
	     (and (numberp drives)
		  (setq *TAPE-UNIT* (CAR DRIVES))) )
	  )) ;; let
  )
))
