;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 123.132
;;; Reason:
;;;  (tcpa:open-easy-tcp-stream) was giving the tcp-unbuffered-stream invalid init
;;;  keywords: :input-buffer-limit and :output-buffer-limit.
;;; Written 1-Dec-87 13:44:11 by pld at site Gigamos Cambridge
;;; while running on Jack Flanders from band 2
;;; with Experimental System 123.129, Experimental Local-File 73.3, Experimental FILE-Server 22.1, Experimental Unix-Interface 11.0, Experimental Tape 18.0, Experimental KERMIT 34.0, Experimental ZMail 71.0, Experimental Lambda-Diag 15.0, microcode 1754, SDU Boot Tape 3.12, SDU ROM 8.



; From modified file DJ: L.NETWORK.IP-TCP.KERNEL; EASY.LISP#26 at 1-Dec-87 13:44:11
#10R TCP-APPLICATION#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; KERNEL; EASY  "

(defun open-easy-tcp-stream (remote-address remote-port local-port
			     &rest args &key
			     (keyword "Easy TCP stream")
			     (connect t)
			     (buffered t)
			     (auto-force-output nil)
			     (direction :both)
			     (input-buffers 4)
			     (output-buffers 4)
			     coroutine-input
			     for-udp
			     &allow-other-keys
			     )
  (declare (ignore coroutine-input))		;Compatibility -- special option no longer required
  (when for-udp
    ;;This is a kludge -- should use UDP-HOST -- but is compatible with old system
    (return-from open-easy-tcp-stream
      (apply #'open-easy-udp-stream
	     remote-address
	     remote-port
	     local-port
	     (trim-keywords (copy-list args) '(:for-udp)))))
  (let ((flavor (cond ((not buffered) 'tcp-unbuffered-stream)
		      ((not auto-force-output) 'tcp-buffered-stream)
		      (t 'tcp-auto-buffered-stream)))
	(normalp nil)
	(stream nil)
	(trimmed-args (trim-keywords (copy-list args)
				     '(:keyword :connect :buffered :auto-force-output :direction
				       :input-buffers :output-buffers :coroutine-input :for-udp))))
    (unwind-protect
	(progn
	  (when (eq remote-port :wild)		;not specified
	    (setq remote-address nil)		;...so null out remote-address
	    (setq remote-port nil)		; and remote-port
	    (setq connect nil))			; and make into a passive connection
	  (when (eq local-port :wild)
	    (setq local-port nil))
	  (setq stream (if buffered
			   (make-instance flavor
					  :input-buffer-limit (ecase direction
								((:input :both) input-buffers)
								(:output 0))
					  :output-buffer-limit (ecase direction
								 ((:output :both) output-buffers)
								 (:input 0))
					  )
			 (make-instance flavor)))
	  (setq normalp
		(lexpr-send stream
			    :open
			    keyword
			    :active connect
			    :remote-address remote-address
			    :remote-port remote-port
			    :local-port local-port
			    trimmed-args)))
      (unless normalp
	(and stream (close stream))))
    stream))

))
