(FILECREATED "19-Dec-85 12:43:12" {SAFE}</C/SCHOEN/TCP>TCPNAMES.;1 35035  

      changes to:  (VARS TCPNAMESCOMS)
		   (FNS REPACKFILENAME.STRING.TI)

      previous date: "13-Aug-85 19:24:24" {SAFE}</c/schoen/tcp>TCPNAMES)


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

(PRETTYCOMPRINT TCPNAMESCOMS)

(RPAQQ TCPNAMESCOMS ((FNS REPACKFILENAME.STRING REPACKFILENAME.STRING.D 
			    REPACKFILENAME.STRING.MSDOS 
			    REPACKFILENAME.STRING.TI REPACKFILENAME.STRING.VMS 
			    REPACKFILENAME.STRING.3600 
			    REPACKFILENAME.STRING.TOPS20 
			    REPACKFILENAME.STRING.UNIX 
			    \REPACKFILENAME.NEW.TRANSLATION 
			    \REPACKFILENAME.NEW.TRANSLATIONS)
	(INITVARS (\REPACKFILENAME.OSTYPE.TABLE (HASHARRAY 30 1.1)))
	(GLOBALVARS \REPACKFILENAME.OSTYPE.TABLE)
	(P (\REPACKFILENAME.NEW.TRANSLATIONS (INTERLISP IFS)
					     REPACKFILENAME.STRING.D
					     (TOPS-20 TOPS20)
					     REPACKFILENAME.STRING.TOPS20
					     (SYMBOLICS-3600 LISPM)
					     REPACKFILENAME.STRING.3600 VMS 
					     REPACKFILENAME.STRING.VMS UNIX 
					     REPACKFILENAME.STRING.UNIX MS-DOS 
					     REPACKFILENAME.STRING.MSDOS))
	(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
		  (ADDVARS (NLAMA \REPACKFILENAME.NEW.TRANSLATIONS)
			   (NLAML)
			   (LAMA REPACKFILENAME.STRING.UNIX 
				 REPACKFILENAME.STRING.TOPS20 
				 REPACKFILENAME.STRING.3600 
				 REPACKFILENAME.STRING.VMS 
				 REPACKFILENAME.STRING.MSDOS 
				 REPACKFILENAME.STRING.D)))))
(DEFINEQ

(REPACKFILENAME.STRING
  (LAMBDA (NAME FOROSTYPE)                                   (* ejs: "27-Apr-85 13:29")
    (DECLARE (GLOBALVARS \REPACKFILENAME.OSTYPE.TABLE))
    (LET ((NAMELST (UNPACKFILENAME.STRING NAME))
       (REPACKFUNCTION (GETHASH FOROSTYPE \REPACKFILENAME.OSTYPE.TABLE)))
      (COND
	((NULL REPACKFUNCTION)
	  NAME)
	(T (APPLY REPACKFUNCTION NAMELST))))))

(REPACKFILENAME.STRING.D
  (LAMBDA N                                                  (* ejs: "13-Aug-85 19:23")

          (* * Convert file names to native format)


    (if (AND (EQ N 1)
	     (LISTP (ARG N 1)))
	then                                                 (* spread argument list)
	     (APPLY (FUNCTION REPACKFILENAME.STRING.D)
		    (ARG N 1))
      else (PROG ((BLIP "")
		  (I 1)
		  HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION PACKLIST VAR VAL TEMP)
	         (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION))
	     LP  (COND
		   ((NOT (IGREATERP I N))
		     (COND
		       ((LISTP (SETQ VAR (ARG N I)))
			 (SETQ VAL (CDR VAR))
			 (SETQ VAR (CAR VAR)))
		       ((NOT (IGREATERP (SETQ I (ADD1 I))
					N))
			 (SETQ VAL (ARG N I)))
		       (T (SETQ VAL)))
		     (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))             (* fields must be atom)
		     (SELECTQ VAR
			      (BODY (MAP (UNPACKFILENAME.STRING (COND
								  ((LISTP VAL)
                                                             (* PACKFILENAME.STRING for error checking of fields)
								    (REPACKFILENAME.STRING.D VAL))
								  (T VAL)))
					 (FUNCTION (LAMBDA (X)
                                                             (* NIL => not yet seen, BLIP => seen as NIL.)
					     (OR (EVALV (CAR X))
						 (SET (CAR X)
						      (OR (CADR X)
							  BLIP)))))
					 (FUNCTION CDDR)))
			      (HOST (OR HOST (SETQ DIRECTORY
					  (if VAL
					      then (SELCHARQ (CHCON1 VAL)
							     (({ %( %[)
							       (SUBSTRING VAL 2
									  (SELCHARQ (NTHCHARCODE
										      VAL -1)
										    ((} %] %))
										      -2)
										    -1)))
							     VAL)
					    else BLIP))))
			      (DIRECTORY                     (* DIRECTORY really is treated as 
							     {Host}device:<directory>)
					 (OR (EVALV VAR)
					     (SET VAR (OR VAL BLIP)))

          (* for X on (UNPACKFILENAME.STRING VAL NIL) by (CDDR X) do (COND ((EQ (CAR X) (QUOTE NAME)) 
	  (OR (EVALV (QUOTE DIRECTORY)) (SETQ DIRECTORY (OR (CADR X) BLIP)))) (T (OR (EVALV (CAR X)) (SET 
	  (CAR X) (OR (CADR X) BLIP))))))


					 )
			      ((DEVICE HOST NAME EXTENSION VERSION)
				(OR (EVALV VAR)
				    (SET VAR (OR VAL BLIP))))
			      (\ILLEGAL.ARG VAR))
		     (SETQ I (ADD1 I))
		     (GO LP)))
	         (RETURN (CONCATLIST
			   (NCONC (AND HOST (NEQ HOST BLIP)
				       (LIST "{" HOST "}"))
				  (AND DEVICE (NEQ DEVICE BLIP)
				       (SELCHARQ (NTHCHARCODE DEVICE -1)
						 (: (LIST DEVICE))
						 (LIST DEVICE (QUOTE :))))
				  (AND DIRECTORY (NEQ DIRECTORY BLIP)
				       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
					      (for C from 1 to (NCHARS DIRECTORY)
						 do (COND
						      ((FMEMB (NTHCHARCODE DIRECTORY C)
							      (CONSTANT (LIST (CHARCODE %.)
									      (CHARCODE \)
									      (CHARCODE /))))
							(RPLCHARCODE DIRECTORY C (CHARCODE >)))))
					      (LIST "<" DIRECTORY ">")))
				  (AND NAME (NEQ NAME BLIP)
				       (LIST NAME))
				  (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
					   (AND VERSION (NEQ VERSION BLIP)))
				       (LIST (COND
					       ((AND EXTENSION (EQ (CHCON1 EXTENSION)
								   (CHARCODE %.)))
						 BLIP)
					       (T (QUOTE %.)))
					     (OR EXTENSION BLIP)))
				  (AND VERSION (NEQ VERSION BLIP)
				       (COND
					 ((FIXP VERSION)
					   (LIST (QUOTE ;)
						 VERSION))
					 (T (SELCHARQ (CHCON1 VERSION)
						      (; (LIST VERSION))
						      ((%. !)
							(LIST (QUOTE ;)
							      (SUBSTRING VERSION 2 -1)))
						      (LIST (QUOTE ;)
							    VERSION))))))))))))

(REPACKFILENAME.STRING.MSDOS
  (LAMBDA N                                                  (* ejs: "13-Aug-85 18:43")
    (if (AND (EQ N 1)
	     (LISTP (ARG N 1)))
	then                                                 (* spread argument list)
	     (APPLY (FUNCTION REPACKFILENAME.STRING.MSDOS)
		    (ARG N 1))
      else (PROG ((BLIP "")
		  (I 1)
		  HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION PACKLIST VAR VAL TEMP)
	         (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION))
	     LP  (COND
		   ((NOT (IGREATERP I N))
		     (COND
		       ((LISTP (SETQ VAR (ARG N I)))
			 (SETQ VAL (CDR VAR))
			 (SETQ VAR (CAR VAR)))
		       ((NOT (IGREATERP (SETQ I (ADD1 I))
					N))
			 (SETQ VAL (ARG N I)))
		       (T (SETQ VAL)))
		     (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))             (* fields must be atom)
		     (SELECTQ VAR
			      (BODY (MAP (UNPACKFILENAME.STRING (COND
								  ((LISTP VAL)
                                                             (* PACKFILENAME.STRING for error checking of fields)
								    (REPACKFILENAME.STRING.MSDOS
								      VAL))
								  (T VAL)))
					 (FUNCTION (LAMBDA (X)
                                                             (* NIL => not yet seen, BLIP => seen as NIL.)
					     (OR (EVALV (CAR X))
						 (SET (CAR X)
						      (OR (CADR X)
							  BLIP)))))
					 (FUNCTION CDDR)))
			      (HOST (OR HOST (SETQ HOST
					  (if VAL
					      then (SELCHARQ (CHCON1 VAL)
							     (({ %[ %()
							       (SUBSTRING VAL 2
									  (SELCHARQ (NTHCHARCODE
										      VAL -1)
										    ((} %] %))
										      -2)
										    -1)))
							     VAL)
					    else BLIP))))
			      (DIRECTORY                     (* DIRECTORY really is treated as 
							     {Host}device:<directory>)
					 (for X on (UNPACKFILENAME.STRING VAL) by (CDDR X)
					    do (COND
						 ((EQ (CAR X)
						      (QUOTE NAME))
						   (OR (EVALV (QUOTE DIRECTORY))
						       (SETQ DIRECTORY (OR (CADR X)
									   BLIP))))
						 (T (OR (EVALV (CAR X))
							(SET (CAR X)
							     (OR (CADR X)
								 BLIP)))))))
			      ((DEVICE HOST NAME EXTENSION VERSION)
				(OR (EVALV VAR)
				    (SET VAR (OR VAL BLIP))))
			      (\ILLEGAL.ARG VAR))
		     (SETQ I (ADD1 I))
		     (GO LP)))
	         (RETURN (CONCATLIST
			   (NCONC (AND HOST (NEQ HOST BLIP)
				       (LIST "{" HOST "}"))
				  (AND DEVICE (NEQ DEVICE BLIP)
				       (LIST ":" DEVICE))
				  (AND DIRECTORY (NEQ DIRECTORY BLIP)
				       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
					      (for C from 1 to (NCHARS DIRECTORY)
						 do (COND
						      ((FMEMB (NTHCHARCODE DIRECTORY C)
							      (CONSTANT (LIST (CHARCODE >)
									      (CHARCODE %.)
									      (CHARCODE /))))
							(RPLCHARCODE DIRECTORY C (CHARCODE \)))))
					      (LIST "\" DIRECTORY "\"))
				       (LIST "\" DIRECTORY "\"))
				  (AND NAME (NEQ NAME BLIP)
				       (LIST NAME))
				  (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
					   (AND VERSION (NEQ VERSION BLIP)))
				       (LIST (COND
					       ((OR (AND EXTENSION (EQ (CHCON1 EXTENSION)
								       (CHARCODE %.)))
						    (OR (NULL EXTENSION)
							(EQ EXTENSION BLIP)
							(STREQUAL EXTENSION "")))
						 BLIP)
					       (T (QUOTE %.)))
					     (OR EXTENSION BLIP))))))))))

(REPACKFILENAME.STRING.TI
  (LAMBDA N                                     (* cvs "19-Dec-85 12:25")

          (* * Can you believe this???)


    (if (AND (EQ N 1)
		 (LISTP (ARG N 1)))
	then                                  (* spread argument list)
	       (APPLY (FUNCTION REPACKFILENAME.STRING.TI)
			(ARG N 1))
      else
       (PROG ((BLIP "")
		(I 1)
		HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION PACKLIST 
		VAR VAL TEMP)
	       (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME 
				      EXTENSION VERSION))
	   LP  (COND
		 ((NOT (IGREATERP I N))
		   (COND
		     ((LISTP (SETQ VAR (ARG N I)))
		       (SETQ VAL (CDR VAR))
		       (SETQ VAR (CAR VAR)))
		     ((NOT (IGREATERP (SETQ I (ADD1 I))
					  N))
		       (SETQ VAL (ARG N I)))
		     (T (SETQ VAL)))
		   (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))
                                                (* fields must be atom)
		   (SELECTQ
		     VAR
		     (BODY (MAP (UNPACKFILENAME.STRING
				    (COND
				      ((LISTP VAL)
                                                (* PACKFILENAME.STRING for error checking of fields)
					(REPACKFILENAME.STRING.TI VAL))
				      (T VAL)))
				  (FUNCTION (LAMBDA (X)
                                                (* NIL => not yet seen, BLIP => seen as NIL.)
				      (OR (EVALV (CAR X))
					    (SET (CAR X)
						   (OR (CADR X)
							 BLIP)))))
				  (FUNCTION CDDR)))
		     (HOST
		       (OR
			 HOST
			 (SETQ HOST
			   (if VAL
			       then
				(SELCHARQ (CHCON1 VAL)
					  (({ %[ %()
					    (SUBSTRING
					      VAL 2 (SELCHARQ
						(NTHCHARCODE VAL -1)
						((} %] %))
						  -2)
						-1)))
					  VAL)
			     else BLIP))))
		     (DIRECTORY               (* DIRECTORY really is treated as {Host}device:<directory>)
		       (for X on (UNPACKFILENAME.STRING VAL)
			  by (CDDR X)
			  do (COND
				 ((EQ (CAR X)
					'NAME)
				   (OR (EVALV 'DIRECTORY)
					 (SETQ DIRECTORY (OR (CADR X)
								 BLIP))))
				 (T (OR (EVALV (CAR X))
					  (SET (CAR X)
						 (OR (CADR X)
						       BLIP)))))))
		     ((DEVICE HOST NAME EXTENSION VERSION)
		       (OR (EVALV VAR)
			     (SET VAR (OR VAL BLIP))))
		     (\ILLEGAL.ARG VAR))
		   (SETQ I (ADD1 I))
		   (GO LP)))
	       (RETURN
		 (CONCATLIST
		   (NCONC
		     (AND HOST (NEQ HOST BLIP)
			    (LIST HOST ":"))
		     (AND DEVICE (NEQ DEVICE BLIP)
			    (SELCHARQ (NTHCHARCODE DEVICE -1)
				      (: (LIST DEVICE))
				      (LIST DEVICE ':)))
		     (AND
		       DIRECTORY
		       (NEQ DIRECTORY BLIP)
		       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
				(for C from 1 to (NCHARS DIRECTORY)
				   do
				    (COND
				      ((FMEMB (NTHCHARCODE DIRECTORY C)
						(CONSTANT
						  (LIST (CHARCODE >)
							  (CHARCODE /)
							  (CHARCODE \))))
					(RPLCHARCODE DIRECTORY C
						       (CHARCODE %.)))))
				(LIST DIRECTORY ";")))
		     (AND NAME (NEQ NAME BLIP)
			    (LIST NAME))
		     (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
				  (AND VERSION (NEQ VERSION BLIP)))
			    (LIST (COND
				      ((AND EXTENSION
					      (EQ (CHCON1 EXTENSION)
						    (CHARCODE %.)))
					BLIP)
				      (T '%.))
				    (OR EXTENSION BLIP)))
		     (AND VERSION (NEQ VERSION BLIP)
			    (COND
			      ((FIXP VERSION)
				(LIST '#
					VERSION))
			      (T (SELCHARQ (CHCON1 VERSION)
					   (# (LIST VERSION))
					   ((%. ! ;)
					     (LIST '#
						     (SUBSTRING VERSION 2 -1))
					     )
					   (L (LIST '#
						      'OLDEST))
					   ((H 0)
					     (LIST '#
						     '>))
					   (LIST '#
						   VERSION))))))))))))

(REPACKFILENAME.STRING.VMS
  (LAMBDA N                                                  (* ejs: "13-Aug-85 18:43")
    (if (AND (EQ N 1)
	     (LISTP (ARG N 1)))
	then                                                 (* spread argument list)
	     (APPLY (FUNCTION REPACKFILENAME.STRING.VMS)
		    (ARG N 1))
      else (PROG ((BLIP "")
		  (I 1)
		  HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION TEMPORARY PROTECTION ACCOUNT 
		  PACKLIST VAR VAL TEMP)
	         (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION TEMPORARY 
				    PROTECTION ACCOUNT))
	     LP  (COND
		   ((NOT (IGREATERP I N))
		     (COND
		       ((LISTP (SETQ VAR (ARG N I)))
			 (SETQ VAL (CDR VAR))
			 (SETQ VAR (CAR VAR)))
		       ((NOT (IGREATERP (SETQ I (ADD1 I))
					N))
			 (SETQ VAL (ARG N I)))
		       (T (SETQ VAL)))
		     (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))             (* fields must be atom)
		     (SELECTQ VAR
			      (BODY (MAP (UNPACKFILENAME.STRING (COND
								  ((LISTP VAL)
                                                             (* PACKFILENAME.STRING for error checking of fields)
								    (REPACKFILENAME.STRING.VMS VAL))
								  (T VAL)))
					 (FUNCTION (LAMBDA (X)
                                                             (* NIL => not yet seen, BLIP => seen as NIL.)
					     (OR (EVALV (CAR X))
						 (SET (CAR X)
						      (OR (CADR X)
							  BLIP)))))
					 (FUNCTION CDDR)))
			      (HOST (OR HOST (SETQ HOST
					  (if VAL
					      then (SELCHARQ (CHCON1 VAL)
							     (({ %[ %()
							       (SUBSTRING VAL 2
									  (SELCHARQ (NTHCHARCODE
										      VAL -1)
										    ((} %] %))
										      -2)
										    -1)))
							     VAL)
					    else BLIP))))
			      (DIRECTORY                     (* DIRECTORY really is treated as 
							     {Host}device:<directory>)
					 (for X on (UNPACKFILENAME.STRING VAL) by (CDDR X)
					    do (COND
						 ((EQ (CAR X)
						      (QUOTE NAME))
						   (OR (EVALV (QUOTE DIRECTORY))
						       (SETQ DIRECTORY (OR (CADR X)
									   BLIP))))
						 (T (OR (EVALV (CAR X))
							(SET (CAR X)
							     (OR (CADR X)
								 BLIP)))))))
			      ((DEVICE HOST NAME EXTENSION VERSION TEMPORARY)
				(OR (EVALV VAR)
				    (SET VAR (OR VAL BLIP))))
			      (\ILLEGAL.ARG VAR))
		     (SETQ I (ADD1 I))
		     (GO LP)))
	         (RETURN (CONCATLIST
			   (NCONC (AND HOST (NEQ HOST BLIP)
				       (LIST "{" HOST "}"))
				  (AND DEVICE (NEQ DEVICE BLIP)
				       (SELCHARQ (NTHCHARCODE DEVICE -1)
						 (: (LIST DEVICE))
						 (LIST DEVICE (QUOTE :))))
				  (AND DIRECTORY (NEQ DIRECTORY BLIP)
				       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
					      (for C from 1 to (NCHARS DIRECTORY)
						 do (COND
						      ((FMEMB (NTHCHARCODE DIRECTORY C)
							      (CONSTANT (LIST (CHARCODE /)
									      (CHARCODE >))))
							(RPLCHARCODE DIRECTORY C (CHARCODE %.)))))
					      (LIST "[" DIRECTORY "]")))
				  (AND NAME (NEQ NAME BLIP)
				       (LIST NAME))
				  (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
					   (AND VERSION (NEQ VERSION BLIP)))
				       (LIST (COND
					       ((AND EXTENSION (EQ (CHCON1 EXTENSION)
								   (CHARCODE %.)))
						 BLIP)
					       (T (QUOTE %.)))
					     (OR EXTENSION BLIP)))
				  (AND VERSION (NEQ VERSION BLIP)
				       (COND
					 ((FIXP VERSION)
					   (LIST (QUOTE ;)
						 VERSION))
					 (T (SELCHARQ (CHCON1 VERSION)
						      (; (LIST VERSION))
						      ((%. !)
							(LIST (QUOTE ;)
							      (SUBSTRING VERSION 2 -1)))
						      (LIST (QUOTE ;)
							    VERSION))))))))))))

(REPACKFILENAME.STRING.3600
  (LAMBDA N                                                  (* ejs: "13-Aug-85 18:44")

          (* * Can you believe this???)


    (if (AND (EQ N 1)
	     (LISTP (ARG N 1)))
	then                                                 (* spread argument list)
	     (APPLY (FUNCTION REPACKFILENAME.STRING.3600)
		    (ARG N 1))
      else (PROG ((BLIP "")
		  (I 1)
		  HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION PACKLIST VAR VAL TEMP)
	         (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION))
	     LP  (COND
		   ((NOT (IGREATERP I N))
		     (COND
		       ((LISTP (SETQ VAR (ARG N I)))
			 (SETQ VAL (CDR VAR))
			 (SETQ VAR (CAR VAR)))
		       ((NOT (IGREATERP (SETQ I (ADD1 I))
					N))
			 (SETQ VAL (ARG N I)))
		       (T (SETQ VAL)))
		     (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))             (* fields must be atom)
		     (SELECTQ VAR
			      (BODY (MAP (UNPACKFILENAME.STRING (COND
								  ((LISTP VAL)
                                                             (* PACKFILENAME.STRING for error checking of fields)
								    (REPACKFILENAME.STRING.3600
								      VAL))
								  (T VAL)))
					 (FUNCTION (LAMBDA (X)
                                                             (* NIL => not yet seen, BLIP => seen as NIL.)
					     (OR (EVALV (CAR X))
						 (SET (CAR X)
						      (OR (CADR X)
							  BLIP)))))
					 (FUNCTION CDDR)))
			      (HOST (OR HOST (SETQ HOST
					  (if VAL
					      then (SELCHARQ (CHCON1 VAL)
							     (({ %[ %()
							       (SUBSTRING VAL 2
									  (SELCHARQ (NTHCHARCODE
										      VAL -1)
										    ((} %] %))
										      -2)
										    -1)))
							     VAL)
					    else BLIP))))
			      (DIRECTORY                     (* DIRECTORY really is treated as 
							     {Host}device:<directory>)
					 (for X on (UNPACKFILENAME.STRING VAL) by (CDDR X)
					    do (COND
						 ((EQ (CAR X)
						      (QUOTE NAME))
						   (OR (EVALV (QUOTE DIRECTORY))
						       (SETQ DIRECTORY (OR (CADR X)
									   BLIP))))
						 (T (OR (EVALV (CAR X))
							(SET (CAR X)
							     (OR (CADR X)
								 BLIP)))))))
			      ((DEVICE HOST NAME EXTENSION VERSION)
				(OR (EVALV VAR)
				    (SET VAR (OR VAL BLIP))))
			      (\ILLEGAL.ARG VAR))
		     (SETQ I (ADD1 I))
		     (GO LP)))
	         (RETURN (CONCATLIST
			   (NCONC (AND HOST (NEQ HOST BLIP)
				       (LIST HOST ":"))
				  (AND DEVICE (NEQ DEVICE BLIP)
				       (SELCHARQ (NTHCHARCODE DEVICE -1)
						 (: (LIST DEVICE))
						 (LIST DEVICE (QUOTE :))))
				  (AND DIRECTORY (NEQ DIRECTORY BLIP)
				       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
					      (for C from 1 to (NCHARS DIRECTORY)
						 do (COND
						      ((FMEMB (NTHCHARCODE DIRECTORY C)
							      (CONSTANT (LIST (CHARCODE /)
									      (CHARCODE %.)
									      (CHARCODE /)
									      (CHARCODE \))))
							(RPLCHARCODE DIRECTORY C (CHARCODE >)))))
					      (LIST ">" DIRECTORY ">")))
				  (AND NAME (NEQ NAME BLIP)
				       (LIST NAME))
				  (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
					   (AND VERSION (NEQ VERSION BLIP)))
				       (LIST (COND
					       ((AND EXTENSION (EQ (CHCON1 EXTENSION)
								   (CHARCODE %.)))
						 BLIP)
					       (T (QUOTE %.)))
					     (OR EXTENSION BLIP)))
				  (AND VERSION (NEQ VERSION BLIP)
				       (COND
					 ((FIXP VERSION)
					   (LIST (QUOTE %.)
						 VERSION))
					 (T (SELCHARQ (CHCON1 VERSION)
						      (; (LIST VERSION))
						      ((%. !)
							(LIST (QUOTE %.)
							      (SUBSTRING VERSION 2 -1)))
						      (L (LIST (QUOTE %.)
							       (QUOTE OLDEST)))
						      ((H 0)
							(LIST (QUOTE %.)
							      (QUOTE NEWEST)))
						      (LIST (QUOTE %.)
							    VERSION))))))))))))

(REPACKFILENAME.STRING.TOPS20
  (LAMBDA N                                                  (* ejs: "13-Aug-85 18:44")
    (if (AND (EQ N 1)
	     (LISTP (ARG N 1)))
	then                                                 (* spread argument list)
	     (APPLY (FUNCTION REPACKFILENAME.STRING.TOPS20)
		    (ARG N 1))
      else (PROG ((BLIP "")
		  (I 1)
		  HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION TEMPORARY PROTECTION ACCOUNT 
		  PACKLIST VAR VAL TEMP)
	         (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION TEMPORARY 
				    PROTECTION ACCOUNT))
	     LP  (COND
		   ((NOT (IGREATERP I N))
		     (COND
		       ((LISTP (SETQ VAR (ARG N I)))
			 (SETQ VAL (CDR VAR))
			 (SETQ VAR (CAR VAR)))
		       ((NOT (IGREATERP (SETQ I (ADD1 I))
					N))
			 (SETQ VAL (ARG N I)))
		       (T (SETQ VAL)))
		     (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))             (* fields must be atom)
		     (SELECTQ VAR
			      (BODY (MAP (UNPACKFILENAME.STRING (COND
								  ((LISTP VAL)
                                                             (* PACKFILENAME.STRING for error checking of fields)
								    (REPACKFILENAME.STRING.TOPS20
								      VAL))
								  (T VAL)))
					 (FUNCTION (LAMBDA (X)
                                                             (* NIL => not yet seen, BLIP => seen as NIL.)
					     (OR (EVALV (CAR X))
						 (SET (CAR X)
						      (OR (CADR X)
							  BLIP)))))
					 (FUNCTION CDDR)))
			      (HOST (OR HOST (SETQ HOST
					  (if VAL
					      then (SELCHARQ (CHCON1 VAL)
							     (({ %[ %()
							       (SUBSTRING VAL 2
									  (SELCHARQ (NTHCHARCODE
										      VAL -1)
										    ((} %] %))
										      -2)
										    -1)))
							     VAL)
					    else BLIP))))
			      (DIRECTORY                     (* DIRECTORY really is treated as 
							     {Host}device:<directory>)
					 (for X on (UNPACKFILENAME.STRING VAL) by (CDDR X)
					    do (COND
						 ((EQ (CAR X)
						      (QUOTE NAME))
						   (OR (EVALV (QUOTE DIRECTORY))
						       (SETQ DIRECTORY (OR (CADR X)
									   BLIP))))
						 (T (OR (EVALV (CAR X))
							(SET (CAR X)
							     (OR (CADR X)
								 BLIP)))))))
			      ((DEVICE HOST NAME EXTENSION VERSION TEMPORARY)
				(OR (EVALV VAR)
				    (SET VAR (OR VAL BLIP))))
			      (\ILLEGAL.ARG VAR))
		     (SETQ I (ADD1 I))
		     (GO LP)))
	         (SELECTQ TEMPORARY
			  ((T S ;S)                          (* hack for Interlisp-D!)
			    (OR HOST DEVICE (PROGN (SETQ HOST (QUOTE CORE))
						   (SETQ TEMPORARY))))
			  NIL)
	         (RETURN (CONCATLIST
			   (NCONC (AND HOST (NEQ HOST BLIP)
				       (LIST "{" HOST "}"))
				  (AND DEVICE (NEQ DEVICE BLIP)
				       (SELCHARQ (NTHCHARCODE DEVICE -1)
						 (: (LIST DEVICE))
						 (LIST DEVICE (QUOTE :))))
				  (AND DIRECTORY (NEQ DIRECTORY BLIP)
				       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
					      (for C from 1 to (NCHARS DIRECTORY)
						 do (COND
						      ((FMEMB (NTHCHARCODE DIRECTORY C)
							      (CONSTANT (LIST (CHARCODE /)
									      (CHARCODE >))))
							(RPLCHARCODE DIRECTORY C (CHARCODE %.)))))
					      (LIST "<" DIRECTORY ">")))
				  (AND NAME (NEQ NAME BLIP)
				       (LIST NAME))
				  (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
					   (AND VERSION (NEQ VERSION BLIP)))
				       (LIST (COND
					       ((AND EXTENSION (EQ (CHCON1 EXTENSION)
								   (CHARCODE %.)))
						 BLIP)
					       (T (QUOTE %.)))
					     (OR EXTENSION BLIP)))
				  (AND VERSION (NEQ VERSION BLIP)
				       (COND
					 ((FIXP VERSION)
					   (LIST (QUOTE %.)
						 VERSION))
					 (T (SELCHARQ (CHCON1 VERSION)
						      (; (LIST VERSION))
						      ((%. !)
							(LIST (QUOTE %.)
							      (SUBSTRING VERSION 2 -1)))
						      (L (LIST (QUOTE %.)
							       -2))
						      (H (LIST (QUOTE %.)
							       0))
						      (LIST (QUOTE %.)
							    VERSION)))))
				  (AND TEMPORARY (NEQ TEMPORARY BLIP)
				       (LIST (QUOTE ;)
					     (SELECTQ TEMPORARY
						      ((S ;S)
							(QUOTE S))
						      T))))))))))

(REPACKFILENAME.STRING.UNIX
  (LAMBDA N                                                  (* ejs: "13-Aug-85 18:45")
    (if (AND (EQ N 1)
	     (LISTP (ARG N 1)))
	then                                                 (* spread argument list)
	     (APPLY (FUNCTION REPACKFILENAME.STRING.UNIX)
		    (ARG N 1))
      else (PROG ((BLIP "")
		  (I 1)
		  HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION PACKLIST VAR VAL TEMP)
	         (DECLARE (SPECVARS HOST DEVICE STRUCTURE DIRECTORY NAME EXTENSION VERSION))
	     LP  (COND
		   ((NOT (IGREATERP I N))
		     (COND
		       ((LISTP (SETQ VAR (ARG N I)))
			 (SETQ VAL (CDR VAR))
			 (SETQ VAR (CAR VAR)))
		       ((NOT (IGREATERP (SETQ I (ADD1 I))
					N))
			 (SETQ VAL (ARG N I)))
		       (T (SETQ VAL)))
		     (OR (STRINGP VAL)
			 (ATOM VAL)
			 (ERRORX (LIST 27 VAL)))             (* fields must be atom)
		     (SELECTQ VAR
			      (BODY (MAP (UNPACKFILENAME.STRING (COND
								  ((LISTP VAL)
                                                             (* PACKFILENAME.STRING for error checking of fields)
								    (REPACKFILENAME.STRING.UNIX
								      VAL))
								  (T VAL)))
					 (FUNCTION (LAMBDA (X)
                                                             (* NIL => not yet seen, BLIP => seen as NIL.)
					     (OR (EVALV (CAR X))
						 (SET (CAR X)
						      (OR (CADR X)
							  BLIP)))))
					 (FUNCTION CDDR)))
			      (HOST (OR HOST (SETQ HOST
					  (if VAL
					      then (SELCHARQ (CHCON1 VAL)
							     (({ %[ %()
							       (SUBSTRING VAL 2
									  (SELCHARQ (NTHCHARCODE
										      VAL -1)
										    ((} %] %))
										      -2)
										    -1)))
							     VAL)
					    else BLIP))))
			      (DIRECTORY                     (* DIRECTORY really is treated as 
							     {Host}device:<directory>)
					 (for X on (UNPACKFILENAME.STRING VAL) by (CDDR X)
					    do (COND
						 ((EQ (CAR X)
						      (QUOTE NAME))
						   (OR (EVALV (QUOTE DIRECTORY))
						       (SETQ DIRECTORY (OR (CADR X)
									   BLIP))))
						 (T (OR (EVALV (CAR X))
							(SET (CAR X)
							     (OR (CADR X)
								 BLIP)))))))
			      ((DEVICE HOST NAME EXTENSION VERSION)
				(OR (EVALV VAR)
				    (SET VAR (OR VAL BLIP))))
			      (\ILLEGAL.ARG VAR))
		     (SETQ I (ADD1 I))
		     (GO LP)))
	         (RETURN (CONCATLIST
			   (NCONC (AND HOST (NEQ HOST BLIP)
				       (LIST "{" HOST "}"))
				  (AND DEVICE (NEQ DEVICE BLIP)
				       (LIST "/" DEVICE))
				  (AND DIRECTORY (NEQ DIRECTORY BLIP)
				       (PROGN (SETQ DIRECTORY (CONCAT DIRECTORY))
					      (for C from 1 to (NCHARS DIRECTORY)
						 do (COND
						      ((FMEMB (NTHCHARCODE DIRECTORY C)
							      (CONSTANT (LIST (CHARCODE >)
									      (CHARCODE %.))))
							(RPLCHARCODE DIRECTORY C (CHARCODE /)))))
					      (LIST "/" DIRECTORY "/"))
				       (LIST "/" DIRECTORY "/"))
				  (AND NAME (NEQ NAME BLIP)
				       (LIST NAME))
				  (AND (OR (AND EXTENSION (NEQ EXTENSION BLIP))
					   (AND VERSION (NEQ VERSION BLIP)))
				       (LIST (COND
					       ((OR (AND EXTENSION (EQ (CHCON1 EXTENSION)
								       (CHARCODE %.)))
						    (OR (NULL EXTENSION)
							(EQ EXTENSION BLIP)
							(STREQUAL EXTENSION "")))
						 BLIP)
					       (T (QUOTE %.)))
					     (OR EXTENSION BLIP))))))))))

(\REPACKFILENAME.NEW.TRANSLATION
  (LAMBDA (OSTYPE FUNCTION)
    (DECLARE (GLOBALVARS \REPACKFILENAME.OSTYPE.TABLE))      (* ejs: "27-Apr-85 13:36")
    (PUTHASH OSTYPE FUNCTION \REPACKFILENAME.OSTYPE.TABLE)))

(\REPACKFILENAME.NEW.TRANSLATIONS
  (NLAMBDA NAMES                                             (* ejs: "27-Apr-85 13:36")

          (* * Supply a property-list format argument of ostypes and translating functions to be added to ostype table)


    (for TAIL on NAMES by (CDDR TAIL) do (for OSTYPE inside (CAR TAIL) do (
\REPACKFILENAME.NEW.TRANSLATION OSTYPE (CADR TAIL))))))
)

(RPAQ? \REPACKFILENAME.OSTYPE.TABLE (HASHARRAY 30 1.1))
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS \REPACKFILENAME.OSTYPE.TABLE)
)
(\REPACKFILENAME.NEW.TRANSLATIONS (INTERLISP IFS)
				  REPACKFILENAME.STRING.D
				  (TOPS-20 TOPS20)
				  REPACKFILENAME.STRING.TOPS20
				  (SYMBOLICS-3600 LISPM)
				  REPACKFILENAME.STRING.3600 VMS 
				  REPACKFILENAME.STRING.VMS UNIX 
				  REPACKFILENAME.STRING.UNIX MS-DOS 
				  REPACKFILENAME.STRING.MSDOS)
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 

(ADDTOVAR NLAMA \REPACKFILENAME.NEW.TRANSLATIONS)

(ADDTOVAR NLAML )

(ADDTOVAR LAMA REPACKFILENAME.STRING.UNIX REPACKFILENAME.STRING.TOPS20 
					    REPACKFILENAME.STRING.3600 
					    REPACKFILENAME.STRING.VMS 
					    REPACKFILENAME.STRING.MSDOS 
					    REPACKFILENAME.STRING.D)
)
(PRETTYCOMPRINT TCPNAMESCOMS)

(RPAQQ TCPNAMESCOMS ((FNS REPACKFILENAME.STRING REPACKFILENAME.STRING.D 
			    REPACKFILENAME.STRING.MSDOS 
			    REPACKFILENAME.STRING.TI REPACKFILENAME.STRING.VMS 
			    REPACKFILENAME.STRING.3600 
			    REPACKFILENAME.STRING.TOPS20 
			    REPACKFILENAME.STRING.UNIX 
			    \REPACKFILENAME.NEW.TRANSLATION 
			    \REPACKFILENAME.NEW.TRANSLATIONS)
	(INITVARS (\REPACKFILENAME.OSTYPE.TABLE (HASHARRAY 30 1.1)))
	(GLOBALVARS \REPACKFILENAME.OSTYPE.TABLE)
	(P (\REPACKFILENAME.NEW.TRANSLATIONS (INTERLISP IFS)
					     REPACKFILENAME.STRING.D
					     (TOPS-20 TOPS20)
					     REPACKFILENAME.STRING.TOPS20
					     (SYMBOLICS-3600 LISPM)
					     REPACKFILENAME.STRING.3600 VMS 
					     REPACKFILENAME.STRING.VMS UNIX 
					     REPACKFILENAME.STRING.UNIX MS-DOS 
					     REPACKFILENAME.STRING.MSDOS))
	(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
		  (ADDVARS (NLAMA \REPACKFILENAME.NEW.TRANSLATIONS)
			   (NLAML)
			   (LAMA REPACKFILENAME.STRING.UNIX 
				 REPACKFILENAME.STRING.TOPS20 
				 REPACKFILENAME.STRING.3600 
				 REPACKFILENAME.STRING.VMS 
				 REPACKFILENAME.STRING.TI 
				 REPACKFILENAME.STRING.MSDOS 
				 REPACKFILENAME.STRING.D)))))
(DECLARE: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 

(ADDTOVAR NLAMA \REPACKFILENAME.NEW.TRANSLATIONS)

(ADDTOVAR NLAML )

(ADDTOVAR LAMA REPACKFILENAME.STRING.UNIX REPACKFILENAME.STRING.TOPS20 
					    REPACKFILENAME.STRING.3600 
					    REPACKFILENAME.STRING.VMS 
					    REPACKFILENAME.STRING.TI 
					    REPACKFILENAME.STRING.MSDOS 
					    REPACKFILENAME.STRING.D)
)
(PUTPROPS TCPNAMES COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1490 32513 (REPACKFILENAME.STRING 1500 . 1910) (
REPACKFILENAME.STRING.D 1912 . 6132) (REPACKFILENAME.STRING.MSDOS 6134 . 10090) 
(REPACKFILENAME.STRING.TI 10092 . 14311) (REPACKFILENAME.STRING.VMS 14313 . 
18601) (REPACKFILENAME.STRING.3600 18603 . 23096) (REPACKFILENAME.STRING.TOPS20 
23098 . 27923) (REPACKFILENAME.STRING.UNIX 27925 . 31846) (
\REPACKFILENAME.NEW.TRANSLATION 31848 . 32077) (\REPACKFILENAME.NEW.TRANSLATIONS
 32079 . 32511)))))
STOP