;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*-
;;; Patch file for System version 123.40
;;; Reason:
;;;  FTP server was only accepting lower case parameters for file type, structure, and mode.
;;;  Thus, you couldn't set any binary mode (for QFASL files, for example.)
;;; Written 7-Oct-87 17:10:10 by pld at site LMI Cambridge
;;; while running on Jack Flanders from band 2
;;; with Experimental System 123.39, Experimental Local-File 73.0, Experimental FILE-Server 22.0, 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.SERVER; FTP.LISP#62 at 7-Oct-87 17:10:23
#10R FTP#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "FTP")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; SERVER; FTP  "


(defun (:property type ftp-server-handle) (state arg cmdline)
  (let ((arg2 (ftp-second-cmd-arg cmdline)))
    (case (char-upcase (aref arg 0))
      (#\A
       (cond ((and arg2 (not (zerop (length arg2)))
		   (char-not-equal (aref arg2 0) #\n))
	      (ftp-reply state 504 "Form must be N."))
	     (t
	      (setf (ftpstate-byte-size state) 8)
	      (setf (ftpstate-transfer-type state) :ascii)
	      (ftp-reply state 200 "Type set to A."))))
      (#\E
       (ftp-reply state 504 "Type E not implemented."))
      (#\I
       (ftp-reply state 200 "Type set to I.")
       (setf (ftpstate-byte-size state) 8)
       (setf (ftpstate-transfer-type state) :image))
      (#\L
       (cond ((not arg2)
	      (setq arg2 8))
	     ((setq arg2 (parse-integer arg2 :radix 10 :junk-allowed t))))
       (cond ((member arg2 '(8 16) :test #'eq)
	      (setf (ftpstate-transfer-type state) 
		    :logical-byte-size)
	      (setf (ftpstate-byte-size state) arg2)
	      (ftp-reply state 200 "Type set to L (byte size ~D)." arg2))
	     (t
	      (ftp-reply state 504 "Byte size must be 8 or 16"))))
      (otherwise
       (ftp-reply state 504 "Command not implemented for that parameter.")))))

))

; From modified file DJ: L.NETWORK.IP-TCP.SERVER; FTP.LISP#62 at 7-Oct-87 17:10:30
#10R FTP#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "FTP")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; SERVER; FTP  "


(defun (:property stru ftp-server-handle) (state arg cmdline) cmdline
  (case (aref arg 0)
    ((#\f #\F)
     (setf (ftpstate-transfer-structure state) :file)
     (ftp-reply state 200 "Structure set to F."))
    (otherwise
     (ftp-reply state 504 "Command not implemented for that parameter."))))

))

; From modified file DJ: L.NETWORK.IP-TCP.SERVER; FTP.LISP#62 at 7-Oct-87 17:10:31
#10R FTP#: 
(COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "FTP")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; SERVER; FTP  "


(defun (:property mode ftp-server-handle) (state arg cmdline) cmdline
  (case (aref arg 0)
    ((#\s #\S)
     (setf (ftpstate-transfer-mode state) :stream)
     (ftp-reply state 200 "Mode set to S."))
    (otherwise
     (ftp-reply state 504 "Command not implemented for that parameter."))))

))
