;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 121.19
;;; Reason:
;;;  Minor fix to SI:PARSE-HOST.
;;; Written 30-Jan-87 19:45:39 by RG (Richard Greenblatt) at site LMI Cambridge
;;; while running on Guinea Pig from band 2
;;; with Experimental System 121.18, Experimental Lambda-Diag 15.0, Experimental ZMail 70.2, Experimental KERMIT 32.0, Experimental Unix-Interface 10.0, Experimental Local-File 72.0, Experimental FILE-Server 21.0, Experimental Tape 13.0, microcode 1730, SDU Boot Tape 3.12, SDU ROM 102.



; From file DJ: L.NETWORK; HOST.LISP#155 at 30-Jan-87 19:45:40
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: NETWORK; HOST  "

(DEFUN PARSE-HOST (HOST &OPTIONAL NO-ERROR-P (UNKNOWN-OK T)
		   &AUX ELEMENT)
  "Return a host object for name HOST, taken from the HOST-ALIST.
This is the right function to use for making network connections,
but is not right for parsing pathnames.  Use FS:GET-PATHNAME-HOST for that.
HOST can also be a host object already; then it's simply returned.
NO-ERROR-P says just return NIL if there is no such host known.
UNKNOWN-OK says call the UNKNOWN-HOST-FUNCTION (if that's not NIL)
to give it a chance to create a host and add it to the host table."
  (cond ((TYPEP HOST 'HOST) HOST)
	(t
	 (LET ((IDX (STRING-SEARCH-CHAR #/. HOST)))
	   (AND IDX
		(MEMBER-EQUALP (SUBSTRING HOST (1+ IDX)) LOCAL-INTERNET-DOMAINS)
		(SETQ HOST (SUBSTRING HOST 0 IDX))))
	 (COND ((AND (SETQ ELEMENT (LOOP FOR ELEMENT IN HOST-ALIST
					 WHEN (or (MEM #'STRING-EQUAL HOST
						       (HOST-NAME-LIST ELEMENT))
						  (string-equal host (host-name element)))
					 RETURN ELEMENT))
		     (NOT (NULL (HOST-ADDRESSES ELEMENT))))
		(GET-ALIST-ELEM-HOST ELEMENT))
	       ((STRING-EQUAL HOST "CHAOS|" :END1 6 :END2 6)
		(LET ((ADDRESS (PARSE-NUMBER HOST 6 NIL 8)))
		  (OR (GET-HOST-FROM-ADDRESS ADDRESS :CHAOS)
		      (MAKE-UNNAMED-HOST :DEFAULT `(:CHAOS (,ADDRESS))))))
	       ((AND UNKNOWN-OK UNKNOWN-HOST-FUNCTION)
		(FUNCALL UNKNOWN-HOST-FUNCTION HOST)
		(PARSE-HOST HOST NO-ERROR-P NIL))
	       (NO-ERROR-P
		NIL)
	       (T
		(FERROR 'SYS:UNKNOWN-HOST-NAME "~S is not a known host." HOST))))))

))
