(FILECREATED "31-Oct-84 16:17:01" {ERIS}<LISPCORE>SOURCES>GETFILEINFOPATCH.;2 4162   

      changes to:  (FNS \GETFILENAME.OR.STREAM)
		   (VARS GETFILEINFOPATCHCOMS)

      previous date: "30-Oct-84 14:15:47" {ERIS}<LISPCORE>SOURCES>GETFILEINFOPATCH.;1)


(* Copyright (c) 1984 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT GETFILEINFOPATCHCOMS)

(RPAQQ GETFILEINFOPATCHCOMS ((FNS GETFILEINFO \GETFILENAME.OR.STREAM)))
(DEFINEQ

(GETFILEINFO
  [LAMBDA (FILE ATTRIB)                                      (* bvm: "30-Oct-84 13:16")
    (PROG ((STREAM (\GETFILENAME.OR.STREAM FILE (QUOTE OLD)))
	   DEV VAL)
          (RETURN (COND
		    [(type? STREAM STREAM)                   (* FILE is open. Ask device for info;
							     if it can't handle it, at least handle some generic 
							     cases)
		      (COND
			((EQ ATTRIB (QUOTE ACCESS))
			  (fetch ACCESS of STREAM))
			((FDEVOP (QUOTE GETFILEINFO)
				 (SETQ DEV (fetch DEVICE of STREAM))
				 STREAM ATTRIB DEV))
			((OPENED STREAM)                     (* Could be false for a closed nameless stream)
			  (SELECTQ ATTRIB
				   ((BYTESIZE OPENBYTESIZE)
				     (fetch BYTESIZE of STREAM))
				   (EOL (SELECTC (fetch EOLCONVENTION of STREAM)
						 (CR.EOLC (QUOTE CR))
						 (LF.EOLC (QUOTE LF))
						 (CRLF.EOLC (QUOTE CRLF))
						 (SHOULDNT)))
				   (BUFFERS (fetch MAXBUFFERS of STREAM))
				   (ENDOFSTREAMOP (fetch ENDOFSTREAMOP of STREAM))
				   (LENGTH (AND (RANDACCESSP STREAM)
						(\GETEOFPTR STREAM)))
				   (SIZE (AND [SETQ VAL (OR (FDEVOP (QUOTE GETFILEINFO)
								    DEV STREAM (QUOTE LENGTH)
								    DEV)
							    (AND (RANDACCESSP STREAM)
								 (\GETEOFPTR STREAM]
					      (FOLDHI VAL BYTESPERPAGE)))
				   NIL))
			((EQ ATTRIB (QUOTE SIZE))
			  (AND (SETQ VAL (FDEVOP (QUOTE GETFILEINFO)
						 DEV STREAM (QUOTE LENGTH)
						 DEV))
			       (FOLDHI VAL BYTESPERPAGE]
		    [STREAM                                  (* STREAM is a full filename)
			    (SELECTQ ATTRIB
				     ((ACCESS OPENBYTESIZE)
                                                             (* Strip off attributes that apply only to open files)
				       NIL)
				     (OR (FDEVOP (QUOTE GETFILEINFO)
						 (SETQ DEV (\GETDEVICEFROMNAME STREAM))
						 STREAM ATTRIB DEV)
					 (SELECTQ ATTRIB
						  (SIZE (AND (SETQ VAL (FDEVOP (QUOTE GETFILEINFO)
									       DEV STREAM
									       (QUOTE LENGTH)
									       DEV))
							     (FOLDHI VAL BYTESPERPAGE)))
						  NIL]
		    (T (LISPERROR "FILE NOT FOUND" FILE])

(\GETFILENAME.OR.STREAM
  [LAMBDA (NAME RECOG FDEV)                                  (* bvm: "31-Oct-84 16:12")
                                                             (* If NAME is or names an open stream, returns the 
							     stream, else returns full name according to RECOG)
    (COND
      ((type? STREAM NAME)
	(COND
	  ((OPENED NAME)                                     (* Stream is open, return it)
	    NAME)
	  ((fetch FULLFILENAME of NAME)                      (* See if full name open in another stream;
							     otherwise, just return the full name)
	    (OR (\SEARCHOPENFILES (SETQ NAME (fetch FULLFILENAME of NAME)))
		NAME))
	  (T                                                 (* Nameless stream is its own name)
	     NAME)))
      [(if (LITATOM NAME)
	   then (AND NAME (NEQ NAME T))
	 else (STRINGP NAME))
	(SETQ NAME (\ADD.CONNECTED.DIR NAME))
	(COND
	  ((\SEARCHOPENFILES NAME))
	  ((SETQ NAME (AND (OR FDEV (SETQ FDEV (\GETDEVICEFROMNAME NAME T)))
			   (FDEVOP (QUOTE GETFILENAME)
				   FDEV NAME RECOG FDEV)))
	    (OR (\SEARCHOPENFILES NAME)
		NAME]
      (T (\GETSTREAM NAME NIL T])
)
(PUTPROPS GETFILEINFOPATCH COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (446 4075 (GETFILEINFO 456 . 2796) (\GETFILENAME.OR.STREAM 2798 . 4073)))))
STOP