;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:10; Patch-File:T -*- ;;; Patch file for System version 123.104 ;;; Reason: ;;; Changes to EASY interface: ;;; - :string-for-printing always prints in decimal ;;; - Make "tcphost:name.domain.remote-port#local-port" work properly ;;; Written 6-Nov-87 15:30:56 by pld at site LMI Cambridge ;;; while running on Jack Flanders from band 2 ;;; with Experimental System 123.103, 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.KERNEL; EASY.LISP#23 at 6-Nov-87 15:32:33 #10R TCP-APPLICATION#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; KERNEL; EASY  " (defmethod (tcp-host-pathname :string-for-printing) () (format nil "~A: ~D remote ~D local ~D" (send (send self :host) :name) (send self :name) (send self :type) (send self :version))) )) ; From modified file DJ: L.NETWORK.IP-TCP.KERNEL; EASY.LISP#23 at 6-Nov-87 15:33:36 #10R TCP-APPLICATION#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; KERNEL; EASY  " (defmethod (udp-host-pathname :string-for-printing) () (format nil "~A: ~D remote ~D local ~D" (send (send self :host) :name) (send self :name) (send self :type) (send self :version))) )) ; From modified file DJ: L.NETWORK.IP-TCP.KERNEL; EASY.LISP#23 at 6-Nov-87 17:43:42 #10R TCP-APPLICATION#: (COMPILER-LET ((*PACKAGE* (GLOBAL:PKG-FIND-PACKAGE "TCP-APPLICATION"))) (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; IP-TCP; KERNEL; EASY  " (defun tcp-host-parse-namestring (namestring &optional (start 0) (end (length namestring))) (flet ((skip-dotted-fields (string count test start end &aux (dot start) last-dot) (loop (when (null dot) (return nil)) (and count (zerop count) (return dot)) (unless (funcall test (char string (1+ dot))) (return dot)) (when count (decf count)) (setq last-dot dot) (setq dot (string-search "." string (1+ dot) end)) (and (null dot) (null count) (return last-dot))))) (let ((remote-address :wild) (remote-port nil) (local-port nil) (remote-port-start nil) (local-port-start nil) temp) (unless (= start end) (let ((first (char namestring start)) (dot (string-search "." namestring start end)) (pound (string-search "#" namestring start end)) (name-end nil) (remote-port-end nil) (local-port-end nil)) (when (and dot (alphanumericp first)) (if (digit-char-p first) ;skip dotted decimal address (setq dot (skip-dotted-fields namestring 3 #'digit-char-p dot (or pound end))) (setq dot (skip-dotted-fields namestring nil #'alpha-char-p dot (or pound end))))) (setq name-end (or dot pound end)) (setq remote-address (substring namestring start name-end)) (when (and pound dot) (setq local-port-start (1+ pound)) (setq local-port-end end) (setq local-port (substring namestring local-port-start local-port-end))) (setq remote-port-start (cond (dot (1+ dot)) (pound (1+ pound)))) (when remote-port-start (setq remote-port-end (if local-port-start pound end)) (setq remote-port (substring namestring remote-port-start remote-port-end))))) (cond ((null remote-port)) ((setq temp (global:parse-number remote-port)) (setq remote-port temp)) ((and (setq temp (global:intern-soft (string-append "IPPORT-" (string-upcase remote-port)) "TCP-APPLICATION")) (sym-boundp temp)) (setq remote-port (sym-value temp))) (t (global:ferror :parse-pathname-error "Bad REMOTE-PORT specification \"~A\" in: ~S" remote-port namestring))) (cond ((null local-port)) ((setq temp (global:parse-number local-port)) (setq local-port temp)) ((and (setq temp (global:intern-soft (string-append "IPPORT-" (string-upcase local-port)) "TCP-APPLICATION")) (sym-boundp temp)) (setq local-port (sym-value temp))) (t (global:ferror :parse-pathname-error "Bad LOCAL-PORT specification \"~A\" in: ~S" local-port namestring))) (values :unspecific :unspecific (or remote-address :wild) ;name == remote address (or remote-port :wild) ;type == remote port (or local-port :wild))))) ;version == local port ))