(FILECREATED "23-Jul-85 07:55:17" {ERIS}<LISPCORE>LIBRARY>NSMAINTAIN.;20 22100  

      changes to:  (FNS \NSMT.CHANGE.REMARK)

      previous date: "15-Jul-85 17:59:15" {ERIS}<LISPCORE>LIBRARY>NSMAINTAIN.;18)


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

(PRETTYCOMPRINT NSMAINTAINCOMS)

(RPAQQ NSMAINTAINCOMS ((FNS NSMAINTAIN \GETNSMAINTAINCOMMAND \NSMT.ADD.ALIAS 
			    \NSMT.ADD.DOMAIN.ADMINISTRATOR \NSMT.ADD.GROUP \NSMT.ADD.USER 
			    \NSMT.CHANGE.DOMAIN \NSMT.CHANGE.PASSWORD \NSMT.HUMANIZE.ENTRY 
			    \NSMT.JOIN.GROUP \NSMT.LEAVE.GROUP \NSMT.LIST.CHS \NSMT.LIST.FILESERVERS 
			    \NSMT.LIST.MAILSERVERS \NSMT.LIST.OBJECTS \NSMT.LIST.USERS 
			    \NSMT.READFNAME \NSMT.READREMARK \NSMT.REMOVE.ALIAS 
			    \NSMT.REMOVE.DOMAIN.ADMINISTRATOR \NSMT.REMOVE.USER \NSMT.SHOW.DOMAIN 
			    \NSMT.SHOW.GROUP.ACCESS \NSMT.TELLABOUT)
	(FNS \NSMT.ADD.FRIEND \NSMT.ADD.MEMBER \NSMT.ADD.OWNER \NSMT.CHANGE.REMARK 
	     \NSMT.CHANGE.GROUP.COMPONENT \NSMT.LIST.GROUPS \NSMT.LOGIN \NSMT.REMOVE.FRIEND 
	     \NSMT.REMOVE.MEMBER \NSMT.REMOVE.OWNER \NSMT.TYPE.ENTRY \NSMT.TYPE.MEMBERS)
	(FILES CLEARINGHOUSE)))
(DEFINEQ

(NSMAINTAIN
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 19:39")
    (PROG (CHGROUPS LASTNAME LASTGROUP LASTSTRING CMD)
          (DECLARE (SPECVARS CHGROUPS LASTNAME LASTGROUP LASTSTRING))
          (repeatwhile (NULL (ERSETQ (while (SETQ CMD (\GETNSMAINTAINCOMMAND)) do (APPLY* CMD))))))))

(\GETNSMAINTAINCOMMAND
  (LAMBDA NIL                                                (* jwo: " 7-Jul-85 17:14")
    (TERPRI T)
    (ASKUSER NIL NIL "CH: " (QUOTE (("Add Alias" "" RETURN (FUNCTION \NSMT.ADD.ALIAS))
				     ("Add Domain Administrator" "" RETURN (FUNCTION 
								   \NSMT.ADD.DOMAIN.ADMINISTRATOR))
				     ("Add Group" "" RETURN (FUNCTION \NSMT.ADD.GROUP))
				     ("Add Member" "" RETURN (FUNCTION \NSMT.ADD.MEMBER))
				     ("Add User" "" RETURN (FUNCTION \NSMT.ADD.USER))
				     ("Change Group Access" "" RETURN (FUNCTION 
							      \NSMT.CHANGE.GROUP.ACCESS))
				     ("Change Password" "" RETURN (FUNCTION \NSMT.CHANGE.PASSWORD))
				     ("Change Remark" "" RETURN (FUNCTION \NSMT.CHANGE.REMARK))
				     ("Join Group" "" RETURN (FUNCTION \NSMT.JOIN.GROUP))
				     ("Leave Group" "" RETURN (FUNCTION \NSMT.LEAVE.GROUP))
				     ("List Users" "" RETURN (FUNCTION \NSMT.LIST.USERS))
				     ("List Groups" "" RETURN (FUNCTION \NSMT.LIST.GROUPS))
				     ("List FileServers" "" RETURN (FUNCTION \NSMT.LIST.FILESERVERS))
				     ("List MailServers" "" RETURN (FUNCTION \NSMT.LIST.MAILSERVERS))
				     ("List Clearinghouses" "" RETURN (FUNCTION \NSMT.LIST.CHS))
				     ("Quit" " [confirm]" CONFIRMFLG T RETURN NIL)
				     ("Remove Alias" "" RETURN (FUNCTION \NSMT.REMOVE.ALIAS))
				     ("Remove Domain Administrator" "" RETURN (FUNCTION 
								\NSMT.REMOVE.DOMAIN.ADMINISTRATOR))
				     ("Remove Member" "" RETURN (FUNCTION \NSMT.REMOVE.MEMBER))
				     ("Remove User" "" RETURN (FUNCTION \NSMT.REMOVE.USER))
				     ("Show Domain" "" RETURN (FUNCTION \NSMT.SHOW.DOMAIN))
				     ("Show Group Access" "" RETURN (FUNCTION \NSMT.SHOW.GROUP.ACCESS)
							  )
				     ("Type Entry" "" RETURN (FUNCTION \NSMT.TYPE.ENTRY))
				     ("Type Members" "" RETURN (FUNCTION \NSMT.TYPE.MEMBERS))
				     (% "↑Y - Enter Lisp" NOECHOFLG T RETURN
					 (FUNCTION (LAMBDA NIL
					     (TERPRI T)
					     (USEREXEC (QUOTE ←←)))))))
	     T NIL (QUOTE (AUTOCOMPLETEFLG T)))))

(\NSMT.ADD.ALIAS
  [LAMBDA NIL
    (DECLARE (USEDFREE (LASTSTRING)))                        (* jwo: "24-Jun-85 15:11")
    (LET ((ALIAS (\NSMT.READFNAME " alias: "))
       (OBJECT (\NSMT.READFNAME " object: " LASTSTRING)))
      (COND
	((AND ALIAS OBJECT)
	  (CH.CREATE.ALIAS ALIAS OBJECT])

(\NSMT.ADD.DOMAIN.ADMINISTRATOR
  (LAMBDA NIL                                                (* jwo: "13-Jun-85 14:16")
    (\NSMT.CHANGE.DOMAIN (FUNCTION CH.ADD.MEMBER.TO.DOMAIN.ACL)
			 (QUOTE ADD))))

(\NSMT.ADD.GROUP
  (LAMBDA NIL                                                (* jwo: " 8-Jul-85 14:27")
    (LET ((GROUP (\NSMT.READFNAME ": " LASTSTRING)))
      (if GROUP
	  then (SETQ RESULT (CH.CREATE.OBJECT GROUP))
	       (if (AND (LISTP RESULT)
			(EQ (CAR RESULT)
			    (QUOTE ERROR)))
		   then (printout T " " (CADDR RESULT)
				  "." T)
		 else (TERPRI T)
		      (CH.ADD.ITEM.PROPERTY GROUP (QUOTE USERGROUP)
					    (PROMPTFORWORD "Remark: " RESULT NIL T NIL NIL
							   (CHARCODE (CR)))
					    (QUOTE STRING))
		      (CH.ADD.GROUP.PROPERTY GROUP (QUOTE MEMBERS)
					     (bind NEWMEMB while (SETQ NEWMEMB (PROGN (TERPRI T)
										      (\NSMT.READFNAME
											"Member: ")))
						collect NEWMEMB))
		      (for ADM in (bind NEWADM while (SETQ NEWADM (PROGN (TERPRI T)
									 (\NSMT.READFNAME 
										"Administrator: ")))
				     collect NEWADM)
			 do (CH.ADD.MEMBER.TO.PROPERTY.ACL GROUP (QUOTE MEMBERS)
							   (QUOTE Administrators)
							   ADM))
		      (for SELFER in (bind NEWSELFER while (SETQ NEWSELFER (PROGN (TERPRI T)
										  (\NSMT.READFNAME
										    
									       "SelfController: ")))
					collect NEWSELFER)
			 do (CH.ADD.MEMBER.TO.PROPERTY.ACL GROUP (QUOTE MEMBERS)
							   (QUOTE selfControllers)
							   SELFER))
		      (printout T "Done." T))))))

(\NSMT.ADD.USER
  (LAMBDA NIL                                                (* jwo: " 8-Jul-85 14:27")
    (PROG (NAME UPNAME PASS RESULT DESC)
          (DECLARE (USEDFREE LASTNAME LASTSTRING))
          (COND
	    ((SETQ NAME (\NSMT.READFNAME " name: " LASTNAME))
	      (COND
		((OR (NULL (SETQ PASS (PROMPTFORWORD " with password: " NIL NIL T (QUOTE *))))
		     (NOT (STREQUAL PASS (PROMPTFORWORD " (retype password) " NIL NIL T (QUOTE *)))))
		  (printout T " xxx" T))
		(T (SETQ DESC (PROMPTFORWORD " description: " RESULT NIL T NIL NIL (CHARCODE
					       (CR))))
		   (PRIN1 "..." T)
		   (COND
		     ((NEQ (CAR (SETQ RESULT (CH.CREATE.OBJECT NAME)))
			   (QUOTE ERROR))
		       (CH.ADD.ITEM.PROPERTY NAME (QUOTE USER)
					     DESC
					     (QUOTE STRING))
		       (CH.ADD.ITEM.PROPERTY NAME (QUOTE USERPASSWORD)
					     PASS
					     (QUOTE STRING))
		       (printout T " done" T))
		     (T (printout T RESULT))))))))))

(\NSMT.CHANGE.DOMAIN
  [LAMBDA (CHACCESSFN OPERATION)                             (* jwo: "24-Jun-85 13:08")
    (PROG (CHNAMETYPE DOMAIN INDIVIDUAL RESULT)
          (DECLARE (SPECVARS CHNAMETYPE)
		   (USEDFREE LASTNAME LASTSTRING LASTSTRING))
          (COND
	    ((AND (SETQ INDIVIDUAL (\NSMT.READFNAME " name: " LASTNAME))
		  (SETQ DOMAIN (\NSMT.READFNAME (SELECTQ OPERATION
							 (ADD " to domain: ")
							 (REMOVE " from domain: ")
							 (SHOULDNT))
						LASTSTRING T)))
	      (PRIN1 "..." T)
	      (SETQ RESULT (APPLY* CHACCESSFN DOMAIN (QUOTE Administrators)
				   INDIVIDUAL))
	      (printout T (COND
			  ((EQ RESULT T)
			    "done")
			  (T RESULT))
			T)
	      (SETQ LASTNAME INDIVIDUAL)
	      (SETQ LASTSTRING DOMAIN])

(\NSMT.CHANGE.PASSWORD
  [LAMBDA NIL                                                (* edited: "17-Jun-85 14:47")
    (PROG (NAME UPNAME PASS PASSKEY RESULT)
          (DECLARE (USEDFREE LASTNAME LASTSTRING))
          (COND
	    ((SETQ NAME (\NSMT.READFNAME " for individual: " USERNAME))
	      (COND
		([OR [NULL (SETQ PASS (PROMPTFORWORD " to be: " NIL NIL T (QUOTE *]
		     (NOT (STREQUAL PASS (PROMPTFORWORD " (retype password) " NIL NIL T (QUOTE *]
		  (printout T " xxx" T))
		(T (PRIN1 "..." T)
		   (COND
		     ((EQ (SETQ RESULT (CH.ADD.ITEM.PROPERTY NAME (QUOTE USERPASSWORD)
							     PASS
							     (QUOTE STRING)))
			  T)
		       (printout T " done" T)
		       (SETPASSWORD (QUOTE NS)
				    (MKATOM (SETQ LASTNAME (SETQ LASTSTRING NAME)))
				    PASS))
		     (T (printout T RESULT])

(\NSMT.HUMANIZE.ENTRY
  [LAMBDA (FNAME CHPLIST)                                    (* jwo: "24-Jun-85 16:06")
                                                             (* Called by \NSMT.TYPE.ENTRY to make sense out of the 
							     gook in the various clearinghouse properties.)
    (PROG (ALIASLST)
          (TERPRI T)
          (TERPRI T)
          (COND
	    ((SETQ ALIASLST (CH.LIST.ALIASES.OF FNAME))
	      (printout T "Aliases: " ALIASLST ".")
	      (TERPRI T)))
          (for P in CHPLIST do (\NSMT.TELLABOUT FNAME P])

(\NSMT.JOIN.GROUP
  (LAMBDA NIL                                                (* jwo: " 7-Jul-85 17:19")
    (PROG (GROUP RESULT)
          (DECLARE (USEDFREE LASTGROUP LASTSTRING))
          (COND
	    ((SETQ GROUP (\NSMT.READFNAME ": " LASTGROUP))
	      (PRIN1 "..." T)
	      (SETQ RESULT (CH.ADD.SELF GROUP (QUOTE MEMBERS)))
	      (printout T (COND
			  ((NEQ (AND (LISTP RESULT)
				     (CAR RESULT))
				(QUOTE ERROR))
			    "done")
			  (T (CADDR RESULT)))
			T)
	      (SETQ LASTSTRING (SETQ LASTGROUP GROUP)))))))

(\NSMT.LEAVE.GROUP
  (LAMBDA NIL                                                (* jwo: " 7-Jul-85 17:19")
    (PROG (GROUP RESULT)
          (DECLARE (USEDFREE LASTGROUP LASTSTRING))
          (COND
	    ((SETQ GROUP (\NSMT.READFNAME ": " LASTGROUP))
	      (PRIN1 "..." T)
	      (SETQ RESULT (CH.DELETE.SELF GROUP (QUOTE MEMBERS)))
	      (printout T (COND
			  ((NEQ (AND (LISTP RESULT)
				     (CAR RESULT))
				(QUOTE ERROR))
			    "done")
			  (T (CADDR RESULT)))
			T)
	      (SETQ LASTSTRING (SETQ LASTGROUP GROUP)))))))

(\NSMT.LIST.CHS
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 20:04")

          (* * list clearinghouses by pattern)


    (PROG NIL
          (\NSMT.LIST.OBJECTS (QUOTE CLEARINGHOUSE.SERVICE)))))

(\NSMT.LIST.FILESERVERS
  (LAMBDA NIL                                                (* jwo: " 8-Jul-85 14:42")

          (* * list file servers by pattern)


    (PROG NIL
          (\NSMT.LIST.OBJECTS (QUOTE FILESERVER)))))

(\NSMT.LIST.MAILSERVERS
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 20:03")

          (* * list mail servers by pattern)


    (PROG NIL
          (\NSMT.LIST.OBJECTS (QUOTE MAIL.SERVICE)))))

(\NSMT.LIST.OBJECTS
  (LAMBDA (CHP)                                              (* jwo: " 8-Jul-85 14:10")

          (* * (given a clearinghouse property, lookup all objects with a user-specified pattern that have that property))


    (PROG (FNAME)
          (COND
	    ((SETQ FNAME (\NSMT.READFNAME " by pattern: " LASTNAME))
	      (PRIN1 "..." T)
	      (MAPRINT (CH.LIST.OBJECTS FNAME CHP)
		       T NIL (QUOTE %.)
		       (QUOTE ,% ))
	      (TERPRI T))))))

(\NSMT.LIST.USERS
  (LAMBDA NIL                                                (* jwo: " 8-Jul-85 14:10")

          (* * list users by pattern)


    (\NSMT.LIST.OBJECTS (QUOTE USER))))

(\NSMT.READFNAME
  [LAMBDA (PROMPT DEFAULT DOMAINFLG)                         (* jwo: "24-Jun-85 13:05")
    (LET [(SUFFIX (COND
		    (DOMAINFLG CH.DEFAULT.ORGANIZATION)
		    (T CH.DEFAULT.DOMAIN)))
       (NAME (PROMPTFORWORD PROMPT DEFAULT NIL T NIL NIL (CHARCODE (EOL]
      [COND
	((NULL NAME)
	  (printout T " xxx" T))
	((NOT (STRPOS ":" NAME))
	  (printout T ":" SUFFIX)
	  (SETQ NAME (CONCAT NAME ":" SUFFIX]
      NAME])

(\NSMT.READREMARK
  [LAMBDA (USER)                                             (* jwo: "24-Jun-85 11:19")
    (CH.RETRIEVE.ITEM USER (QUOTE USER)
		      (QUOTE STRING])

(\NSMT.REMOVE.ALIAS
  [LAMBDA NIL
    (DECLARE (USEDFREE (LASTSTRING)))                        (* jwo: "24-Jun-85 15:14")
    (LET ((ALIAS (\NSMT.READFNAME " alias: ")))
      (COND
	(ALIAS (CH.DELETE.ALIAS ALIAS])

(\NSMT.REMOVE.DOMAIN.ADMINISTRATOR
  (LAMBDA NIL                                                (* jwo: "13-Jun-85 16:15")
    (\NSMT.CHANGE.DOMAIN (FUNCTION CH.DELETE.MEMBER.FROM.DOMAIN.ACL)
			 (QUOTE REMOVE))))

(\NSMT.REMOVE.USER
  (LAMBDA NIL                                                (* jwo: " 8-Jul-85 14:05")
    (LET ((USER (\NSMT.READFNAME ": ")))
      (CH.DELETE.OBJECT USER))))

(\NSMT.SHOW.DOMAIN
  (LAMBDA NIL                                                (* jwo: " 9-Jul-85 11:04")
    (DECLARE (USEDFREE (LASTSTRING)))
    (LET ((DOMAIN (\NSMT.READFNAME " domain: " LASTSTRING T)))
      (COND
	(DOMAIN (TERPRI T)
		(MAPRINT (CH.RETRIEVE.DOMAIN.ACL DOMAIN (QUOTE Administrators))
			 T "Administrators: " (QUOTE %.)
			 (QUOTE ,% ))
		(TERPRI T))))))

(\NSMT.SHOW.GROUP.ACCESS
  (LAMBDA NIL
    (DECLARE (USEDFREE (LASTGROUP)))                         (* jwo: "13-Jul-85 15:50")
    (LET ((GROUP (\NSMT.READFNAME " of group: " LASTGROUP)))
      (COND
	(GROUP (TERPRI T)
	       (MAPRINT (CH.RETRIEVE.PROPERTY.ACL GROUP (QUOTE MEMBERS)
						  (QUOTE Administrators))
			T "Administrators: " (QUOTE %.)
			(QUOTE ,% ))
	       (TERPRI T)
	       (MAPRINT (CH.RETRIEVE.PROPERTY.ACL GROUP (QUOTE MEMBERS)
						  (QUOTE selfControllers))
			T "SelfControllers: " (QUOTE %.)
			(QUOTE ,% ))
	       (TERPRI T)
	       (SETQ LASTGROUP GROUP))))))

(\NSMT.TELLABOUT
  (LAMBDA (FNAME CHP)                                        (* jwo: " 8-Jul-85 13:30")
                                                             (* Called by \NSMT.HUMANIZE.ENTRY to show one 
							     particular property.)
    (SELECTQ (SETQ CHP (OR (CH.NUMBER.TO.PROPERTY CHP)
			   CHP))
	     (MEMBERS (printout T "Members: " (LENGTH (CH.RETRIEVE.MEMBERS FNAME (QUOTE MEMBERS)))
				"." T))
	     (USERGROUP (printout T "Group of: " (CADR (CH.RETRIEVE.ITEM FNAME (QUOTE USERGROUP)
									 (QUOTE STRING)))
				  "." T))
	     (MAILBOXES (printout T "Mailbox at: " (COURIER.FETCH (CLEARINGHOUSE . MAILBOX.VALUES)
								  MAIL.SERVICE of
								  (CADR (CH.RETRIEVE.ITEM
									  FNAME
									  (QUOTE MAILBOXES)
									  (QUOTE MAILBOX.VALUES))))
				  "." T))
	     (FILE.SERVICE (printout T "File Server." T))
	     (PRINT.SERVICE (printout T FNAME "Print Server." T))
	     (USER (printout T "Remark: " (CADR (CH.RETRIEVE.ITEM FNAME (QUOTE USER)
								  (QUOTE STRING)))
			     "." T))
	     (MAIL.SERVICE (printout T "Mail Server." T))
	     (WORKSTATION (printout T FNAME " is a workstation." T))
	     (NETWORK (printout T FNAME " is a network." T))
	     (CLEARINGHOUSE.SERVICE (printout T FNAME " is a clearinghouse." T))
	     (USERDATA (printout T "Home File Service at: " (COURIER.FETCH
				   (CLEARINGHOUSE . USERDATA.VALUE)
				   FILE.SERVICE of (CADR (CH.RETRIEVE.ITEM FNAME (QUOTE USERDATA)
									   (QUOTE USERDATA.VALUE))))
				 "." T))
	     (ADDRESS.LIST (printout T "Network Addresses: " (CADR (CH.RETRIEVE.ITEM FNAME
										     (QUOTE 
										     ADDRESS.LIST)
										     (QUOTE 
									     NETWORK.ADDRESS.LIST)))
				     "." T))
	     (AUTHENTICATION.KEYS)
	     (7)
	     (USERPASSWORD)
	     (FILESERVER)
	     (PRINTSERVER)
	     (PROG NIL
	           (printout T FNAME " also has property " CHP "." T)))))
)
(DEFINEQ

(\NSMT.ADD.FRIEND
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 12:12")
    (\NSMT.CHANGE.GROUP.COMPONENT (FUNCTION GV.ADDFRIEND)
				  (QUOTE ADD))))

(\NSMT.ADD.MEMBER
  (LAMBDA NIL                                                (* jwo: " 7-Jul-85 17:06")
    (\NSMT.CHANGE.GROUP.COMPONENT (FUNCTION CH.ADD.MEMBER)
				  (QUOTE ADD))))

(\NSMT.ADD.OWNER
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 12:12")
    (\NSMT.CHANGE.GROUP.COMPONENT (FUNCTION GV.ADDOWNER)
				  (QUOTE ADD))))

(\NSMT.CHANGE.REMARK
  (LAMBDA NIL                                                (* jwo: "23-Jul-85 07:52")
    (PROG (USER RESULT NEWREMARK)
          (DECLARE (USEDFREE LASTSTRING))
          (if (SETQ USER (\NSMT.READFNAME " for user: " LASTSTRING))
	      then (if (SETQ RESULT (CADR (\NSMT.READREMARK USER)))
		       then (printout T " to be (type remark, terminate with <cr>)" T)
			    (if (SETQ NEWREMARK (PROMPTFORWORD "Remark: " RESULT NIL T NIL NIL
							       (CHARCODE (CR))))
				then (PRIN1 "..." T)
				     (SETQ RESULT (CH.DELETE.PROPERTY USER (QUOTE USER)))
				     (if (EQ (CAR RESULT)
					     (QUOTE ERROR))
					 then (printout T (CDR RESULT))
				       else (SETQ RESULT (CH.ADD.ITEM.PROPERTY USER (QUOTE USER)
									       NEWREMARK
									       (QUOTE STRING)))
					    (if (EQ (CAR RESULT)
						    (QUOTE ERROR))
						then (printout T (CDR RESULT)))
					    (SETQ LASTSTRING USER)))
		     else (printout T " not a user!"))))))

(\NSMT.CHANGE.GROUP.COMPONENT
  (LAMBDA (CHACCESSFN OPERATION)                             (* jwo: " 7-Jul-85 17:06")
    (PROG (GROUP INDIVIDUAL RESULT)
          (DECLARE (USEDFREE LASTNAME LASTGROUP LASTSTRING))
          (COND
	    ((AND (SETQ INDIVIDUAL (\NSMT.READFNAME " name: " LASTNAME))
		  (SETQ GROUP (\NSMT.READFNAME (SELECTQ OPERATION
							(ADD " to group: ")
							(REMOVE " from group: ")
							(SHOULDNT))
					       LASTGROUP)))
	      (PRIN1 "..." T)
	      (SETQ RESULT (APPLY* CHACCESSFN GROUP (QUOTE MEMBERS)
				   INDIVIDUAL))
	      (printout T (COND
			  ((EQ RESULT T)
			    "done")
			  (T RESULT))
			T)
	      (SETQ LASTNAME INDIVIDUAL)
	      (SETQ LASTSTRING (SETQ LASTGROUP GROUP)))))))

(\NSMT.LIST.GROUPS
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 20:03")

          (* * list groups by pattern)


    (PROG NIL
          (\NSMT.LIST.OBJECTS (QUOTE MEMBERS)))))

(\NSMT.LOGIN
  (LAMBDA (QUIET)                                            (* jwo: "13-Jun-85 13:51")
    (DECLARE (USEDFREE LASTNAME LASTSTRING))
    (PROG ((ALWAYSASK (NULL QUIET))
	   LOGINFO UPNAME PASSKEY EC)
      LP  (COND
	    ((NOT (SETQ LOGINFO (\INTERNAL/GETPASSWORD (QUOTE GV)
						       ALWAYSASK)))
	      (RETURN)))
          (SETQ UPNAME (\CHECKNAME (CAR LOGINFO)))
          (COND
	    ((EQ (SETQ EC (GV.AUTHENTICATE UPNAME (SETQ PASSKEY (GV.MAKEKEY (CDR LOGINFO)))))
		 T)
	      (printout T T "User " (SETQ LASTSTRING (SETQ LASTNAME (CONCAT (CAR UPNAME)
									    "."
									    (CDR UPNAME))))
			" logged in." T)
	      (SETQ GVUSERNAME UPNAME)
	      (SETQ GVPASSWORD PASSKEY))
	    (T (printout T EC)
	       (SETQ ALWAYSASK T)
	       (GO LP)))
          (RETURN LASTNAME))))

(\NSMT.REMOVE.FRIEND
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 12:12")
    (\NSMT.CHANGE.GROUP.COMPONENT (FUNCTION GV.REMOVEFRIEND)
				  (QUOTE REMOVE))))

(\NSMT.REMOVE.MEMBER
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 19:42")
    (\NSMT.CHANGE.GROUP.COMPONENT (FUNCTION CH.DELETE.MEMBER)
				  (QUOTE REMOVE))))

(\NSMT.REMOVE.OWNER
  (LAMBDA NIL                                                (* ejs: "10-Jun-85 12:12")
    (\NSMT.CHANGE.GROUP.COMPONENT (FUNCTION GV.REMOVEOWNER)
				  (QUOTE REMOVE))))

(\NSMT.TYPE.ENTRY
  [LAMBDA NIL                                                (* jwo: "24-Jun-85 16:03")
    (PROG (FNAME)
          (DECLARE (SPECVARS FNAME)
		   (USEDFREE LASTSTRING))
          (if (SETQ FNAME (\NSMT.READFNAME " for: " LASTSTRING))
	      then (PRIN1 "..." T)
		   (if (SETQ FNAME (CH.LOOKUP.OBJECT FNAME))
		       then (SETQ CHPLIST (CADR (CH.LIST.PROPERTIES FNAME)))
			    (\NSMT.HUMANIZE.ENTRY FNAME CHPLIST)
			    (SETQ LASTSTRING FNAME)
		     else (printout T T "Name not found" T])

(\NSMT.TYPE.MEMBERS
  (LAMBDA NIL                                                (* jwo: " 8-Jul-85 13:34")
    (PROG (NAME)
          (DECLARE (USEDFREE LASTGROUP LASTSTRING))
          (COND
	    ((SETQ NAME (\NSMT.READFNAME " of group: " (OR LASTGROUP LASTSTRING)))
	      (PRIN1 "..." T)
	      (MAPRINT (CH.RETRIEVE.MEMBERS NAME (QUOTE MEMBERS))
		       T NIL (QUOTE %.)
		       (QUOTE ,% ))
	      (TERPRI T)
	      (SETQ LASTGROUP (SETQ LASTSTRING NAME)))))))
)
(FILESLOAD CLEARINGHOUSE)
(PUTPROPS NSMAINTAIN COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1145 16439 (NSMAINTAIN 1155 . 1533) (\GETNSMAINTAINCOMMAND 1535 . 3679) (
\NSMT.ADD.ALIAS 3681 . 4008) (\NSMT.ADD.DOMAIN.ADMINISTRATOR 4010 . 4232) (\NSMT.ADD.GROUP 4234 . 5786
) (\NSMT.ADD.USER 5788 . 6868) (\NSMT.CHANGE.DOMAIN 6870 . 7709) (\NSMT.CHANGE.PASSWORD 7711 . 8640) (
\NSMT.HUMANIZE.ENTRY 8642 . 9238) (\NSMT.JOIN.GROUP 9240 . 9851) (\NSMT.LEAVE.GROUP 9853 . 10468) (
\NSMT.LIST.CHS 10470 . 10725) (\NSMT.LIST.FILESERVERS 10727 . 10977) (\NSMT.LIST.MAILSERVERS 10979 . 
11231) (\NSMT.LIST.OBJECTS 11233 . 11752) (\NSMT.LIST.USERS 11754 . 11960) (\NSMT.READFNAME 11962 . 
12436) (\NSMT.READREMARK 12438 . 12627) (\NSMT.REMOVE.ALIAS 12629 . 12871) (
\NSMT.REMOVE.DOMAIN.ADMINISTRATOR 12873 . 13106) (\NSMT.REMOVE.USER 13108 . 13304) (\NSMT.SHOW.DOMAIN 
13306 . 13734) (\NSMT.SHOW.GROUP.ACCESS 13736 . 14414) (\NSMT.TELLABOUT 14416 . 16437)) (16440 21993 (
\NSMT.ADD.FRIEND 16450 . 16654) (\NSMT.ADD.MEMBER 16656 . 16861) (\NSMT.ADD.OWNER 16863 . 17065) (
\NSMT.CHANGE.REMARK 17067 . 18207) (\NSMT.CHANGE.GROUP.COMPONENT 18209 . 19026) (\NSMT.LIST.GROUPS 
19028 . 19264) (\NSMT.LOGIN 19266 . 20207) (\NSMT.REMOVE.FRIEND 20209 . 20422) (\NSMT.REMOVE.MEMBER 
20424 . 20638) (\NSMT.REMOVE.OWNER 20640 . 20851) (\NSMT.TYPE.ENTRY 20853 . 21449) (\NSMT.TYPE.MEMBERS
 21451 . 21991)))))
STOP