(FILECREATED " 5-Aug-85 12:52:05" {ERIS}<LISPCORE>LISPUSERS>FINGER.;3 17825  

      changes to:  (FNS FINGER.SETUP.WINDOW FINGER.SETUP.MENU REFINGER)
		   (VARS FINGERCOMS)

      previous date: "21-Jun-85 17:12:19" {ERIS}<WOZENCRAFT>FINGER.;7)


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

(PRETTYCOMPRINT FINGERCOMS)

(RPAQQ FINGERCOMS ([DECLARE: EVAL@LOAD DONTCOPY (P (LOADCOMP (QUOTE LLNS]
	(P (IF (BOUNDP (QUOTE FINGER.WINDOW))
	       THEN
	       (END.FINGER)))
	(FNS END.FINGER FINGER FINGER.CONTAINS? FINGER.MENU.SELECTED FINGER.MERGE.USERS FINGER.SERVER 
	     FINGER.SETUP.WINDOW FINGER.UPDATE FINGER.SETUP.MENU FORMAT.RESPONSE NETS.WITHIN 
	     SEND.FINGER.REQUEST STRING.NOT.NUMERIC TRACE.FINGER WAIT.FOR.FINGER.PACKET)
	(BITMAPS FINGER.ICON.BITMAP FINGER.ICON.MASK FINGER.INFINITY.BITMAP)
	(FILES ICONW)
	(VARS (FINGER.MENU))
	(INITVARS (FINGER.ICON.POSITION (CREATE POSITION XCOORD ← 900 YCOORD ← 500))
		  (FINGER.ICON (ICONW FINGER.ICON.BITMAP FINGER.ICON.MASK FINGER.ICON.POSITION T))
		  (FINGER.TIMEOUT 1500)
		  (FINGER.RESPONSE.TYPE 20)
		  (FINGER.NET.HOPS 2)
		  (FINGER.REQUEST.TYPE 21)
		  (FINGER.SERVER.SOCKET# 199)
		  (FINGER.DISPLAY.POSITION (CREATE POSITION XCOORD ← 650 YCOORD ← 325))
		  (FINGER.DISPLAY.WIDTH 290)
		  (FINGER.DISPLAY.HEIGHT 140)
		  (FINGER.BASE.DATE (IDATE "14-Mar-84 00:00:00"))
		  (FINGER.CROWD)
		  (FINGER.INFINITY.BITMAP (EDITBM))
		  (FINGER.INFINITY.MINUTES 90))
	(P (FINGER.SERVER)
	   (FINGER))))
(DECLARE: EVAL@LOAD DONTCOPY 
(LOADCOMP (QUOTE LLNS))
)
(IF (BOUNDP (QUOTE FINGER.WINDOW))
    THEN
    (END.FINGER))
(DEFINEQ

(END.FINGER
  [LAMBDA NIL                                                (* gbn "20-Mar-84 11:13")
    (CLOSENSOCKET FINGER.SERVER.SOCKET T)
    (CLOSEW FINGER.WINDOW)
    (CLOSEW FINGER.ICON)
    (SETQ FINGER.WINDOW (QUOTE NOBIND))
    (DEL.PROCESS (FIND.PROCESS (QUOTE Finger% Server])

(FINGER
  [LAMBDA (WHO HOST HOPS ICON?)                              (* gbn "18-Mar-84 17:34")
    (PROG ((USERS (SEND.FINGER.REQUEST (OR HOPS FINGER.NET.HOPS)))
	   (WHOM (OR WHO FINGER.CROWD)))
          (if (NOT (BOUNDP (QUOTE FINGER.WINDOW)))
	      then (FINGER.SETUP.WINDOW ICON?))
          (if ICON?
	      then (if (NOT (OPENWP FINGER.ICON))
		       then (TOTOPW FINGER.ICON))
		   (RETURN))                                 (* if the icon? is true then just set up the window 
							     without opening it or sending a request)
          (CLEARW FINGER.WINDOW)
          (printout FINGER.WINDOW "User" 15 "Etherhost" 30 "Idle Time" T T)
          (WINDOWPROP FINGER.WINDOW (QUOTE TITLE)
		      (CONCAT "Finger Display at " (SUBSTRING (DATE)
							      11 15)))
          (COND
	    [(AND WHOM HOST)
	      (for P in USERS do (FORMAT.RESPONSE P FINGER.WINDOW) when (OR (FINGER.CONTAINS?
									      (CADR P)
									      WHOM)
									    (FINGER.CONTAINS?
									      (CAR P)
									      HOST]
	    (WHOM (for P in USERS do (FORMAT.RESPONSE P FINGER.WINDOW) when (FINGER.CONTAINS?
									      (CADR P)
									      WHOM)))
	    (HOST (for P in USERS do (FORMAT.RESPONSE P FINGER.WINDOW) when (FINGER.CONTAINS?
									      (CAR P)
									      HOST)))
	    (T (for P in USERS do (FORMAT.RESPONSE P FINGER.WINDOW])

(FINGER.CONTAINS?
  [LAMBDA (ELEMENT L)                                        (* gbn "18-Mar-84 17:14")
                                                             (* returns non-nil if element is list or is contained 
							     in list. case-insensitive compare used)
    (COND
      [(TYPENAMEP L (QUOTE LISTP))
	(MEMB (U-CASE ELEMENT)
	      (for X in L collect (U-CASE X]
      (T (EQ (U-CASE ELEMENT)
	     (U-CASE L])

(FINGER.MENU.SELECTED
  [LAMBDA (ITEM MENU MOUSE)                                  (* edited: "21-Jun-85 17:12")
    (SHADEITEM ITEM MENU 4680)
    (CLEARW FINGER.WINDOW)
    (FINGER)
    (SHADEITEM ITEM MENU WHITESHADE])

(FINGER.MERGE.USERS
  [LAMBDA (L1 L2)                                            (* gbn "15-Mar-84 16:20")
                                                             (* takes two lists of the form returned by 
							     SEND.FINGER.REQUEST and produces one list without 
							     repitions)
    (APPEND L1 (for TRIPLE in L2 when (NOT (ASSOC (CAR TRIPLE)
						  L1))
		  collect TRIPLE])

(FINGER.SERVER
  [LAMBDA NIL                                                (* gbn "13-Mar-84 19:07")
                                                             (* Milliseconds to wait for responses)
                                                             (* net radius to search)
    (SETQ FINGER.SERVER.SOCKET (OPENNSOCKET FINGER.SERVER.SOCKET#))
    (DISCARDXIPS FINGER.SERVER.SOCKET)                       (* flush any request already there)
    (ADD.PROCESS (QUOTE (WAIT.FOR.FINGER.PACKET))
		 (QUOTE NAME)
		 (QUOTE Finger% Server))                     (* spawn the process which will wait for finger 
							     requests)
    NIL])

(FINGER.SETUP.WINDOW
  [LAMBDA (ICON?)                                            (* jow " 5-Aug-85 12:38")
    (SETQ FINGER.WINDOW (CREATEW (CREATEREGION (fetch XCOORD of FINGER.DISPLAY.POSITION)
					       (fetch YCOORD of FINGER.DISPLAY.POSITION)
					       FINGER.DISPLAY.WIDTH FINGER.DISPLAY.HEIGHT)
				 "Finger Display Window" NIL NIL))
                                                             (* jow: don't use buttoneventfn now, cuz have menu 
							     (WINDOWPROP FINGER.WINDOW (QUOTE BUTTONEVENTFN) 
							     (QUOTE FINGER.BUTTONEVENTFN)))
    (WINDOWPROP FINGER.WINDOW (QUOTE ICON)
		FINGER.ICON)
    (WINDOWPROP FINGER.WINDOW (QUOTE EXPANDFN)
		(QUOTE REFINGER))                            (* REFINGER is a dummy fn to call FINGER with no 
							     arguments.)
    (WINDOWPROP FINGER.WINDOW (QUOTE REPAINTFN)
		(QUOTE REFINGER))
    (WINDOWPROP FINGER.WINDOW (QUOTE RESHAPEFN)
		(QUOTE REFINGER))
    (FINGER.SETUP.MENU FINGER.WINDOW)                        (* jow: create update menu for finger)
    (if ICON?
	then (SHRINKW FINGER.WINDOW NIL FINGER.ICON.POSITION)
      else                                                   (* shouldn't need to open this, but for the moment, one
							     has to)
	   (OPENW FINGER.ICON)
	   (MOVEW FINGER.ICON FINGER.ICON.POSITION)
	   (CLOSEW FINGER.ICON])

(FINGER.UPDATE
  [LAMBDA (ITEM MENU MOUSE)                                  (* jow "21-Jun-85 14:40")
    (SHADEITEM ITEM FINGER.MENU 4680)
    (FINGER)
    (SHADEITEM ITEM FINGER.MENU WHITESHADE])

(FINGER.SETUP.MENU
  [LAMBDA (WINDOW)                                           (* jow " 5-Aug-85 12:24")
    (SETQ FINGER.MENU (create MENU
			      ITEMS ←(QUOTE (UPDATE))
			      CENTERFLG ← T
			      WHENSELECTEDFN ←(QUOTE FINGER.MENU.SELECTED)))
    (ATTACHMENU FINGER.MENU WINDOW])

(FORMAT.RESPONSE
  [LAMBDA (TRIPLE FINGERWINDOW)                              (* edited: " 3-Aug-84 10:34")
                                                             (* Takes a list containing hostname, username, and 
							     \lastuseraction)
    (PROG ((IDLE (CADDR TRIPLE))
	   (INFINITE.IDLE NIL))                              (* seconds of idle time)
          (if (IGEQ (IQUOTIENT IDLE 60)
		    FINGER.INFINITY.MINUTES)
	      then (SETQ INFINITE.IDLE T)
	    else (SETQ IDLE (SUBSTRING (GDATE (IPLUS FINGER.BASE.DATE IDLE))
				       11 15)))
          (printout FINGERWINDOW (CADR TRIPLE)
		    15
		    (L-CASE (CAR TRIPLE)
			    T)
		    30)
          (if INFINITE.IDLE
	      then (BITBLT FINGER.INFINITY.BITMAP NIL NIL FINGER.WINDOW (DSPXPOSITION NIL 
										    FINGER.WINDOW)
			   (DSPYPOSITION NIL FINGER.WINDOW))
		   (DSPXPOSITION (IPLUS (BITMAPWIDTH FINGER.INFINITY.BITMAP)
					(DSPXPOSITION NIL FINGER.WINDOW))
				 FINGER.WINDOW)
	    else (PRIN1 IDLE FINGER.WINDOW))
          (TERPRI FINGER.WINDOW])

(NETS.WITHIN
  [LAMBDA (HOPS)                                             (* gbn " 5-Mar-84 22:20")
                                                             (* returns all nets within HOPS hops of me)
    (for ENTRY in (CDR \NS.ROUTING.TABLE) collect (fetch RTNET# of ENTRY)
       when (ILEQ (fetch RTHOPCOUNT of ENTRY)
		  HOPS])

(SEND.FINGER.REQUEST
  [LAMBDA (NET.HOPS)                                         (* gbn "13-Jan-85 15:37")
    (PROG (FINGER.PACKET FINGER.USER.SOCKET BASE TRIPLES NETS RESPONSES UNIQUERESULTS)
          (RETURN (RESETLST [RESETSAVE NIL (LIST (QUOTE CLOSENSOCKET)
						 (SETQ FINGER.USER.SOCKET (OPENNSOCKET]
                                                             (* Allocate a socket to send on)
			    (SETQ NETS (NETS.WITHIN NET.HOPS))
                                                             (* send this to every one on the net in question TWICE)
			    (for NET in (APPEND NETS NETS)
			       do (SETQ FINGER.PACKET (ALLOCATE.XIP)
                                                             (* Get the xip)
				    )
				  (\FILLINXIP FINGER.REQUEST.TYPE FINGER.USER.SOCKET 
					      BROADCASTNSHOSTNUMBER FINGER.SERVER.SOCKET# NET 
					      \XIPOVLEN FINGER.PACKET)
				  (SENDXIP FINGER.USER.SOCKET FINGER.PACKET)
				  (RELEASE.XIP FINGER.PACKET))
			    (BLOCK)
			    [SETQ RESPONSES (for P in (bind PACKET while (SETQ PACKET
									   (GETXIP FINGER.USER.SOCKET 
										   FINGER.TIMEOUT))
							 collect PACKET)
					       collect (SETQ BASE (fetch XIPCONTENTS of P))
						       (SETQ LENGTH (IDIFFERENCE (fetch XIPLENGTH
										    of P)
										 \XIPOVLEN))
						       (SETQ PACKET.STREAM
							 (OPENSTRINGSTREAM (\GETBASESTRING BASE 0 
											   LENGTH)))
						       (PROG1 (READ PACKET.STREAM)
							      (CLOSEF PACKET.STREAM]
                                                             (* The responses are not necessarily eq for the same 
							     machine)
			    (for TRIPLE in RESPONSES when (NOT (SASSOC (CAR TRIPLE)
								       UNIQUERESULTS))
			       do (SETQ UNIQUERESULTS (CONS TRIPLE UNIQUERESULTS)))
			    UNIQUERESULTS])

(STRING.NOT.NUMERIC
  [LAMBDA (S)                                                (* edited: " 3-Aug-84 10:21")
    (AND (STRPOSL (CONSTANT (MAKEBITTABLE (CHCON "0123456789")
					  T))
		  S)
	 S])

(TRACE.FINGER
  [LAMBDA NIL                                                (* gbn " 5-Mar-84 20:38")
    (SETQ XIPONLYTYPES (LIST FINGER.REQUEST.TYPE FINGER.RESPONSE.TYPE))
    (XIPTRACE T])

(WAIT.FOR.FINGER.PACKET
  [LAMBDA NIL                                                (* gbn "13-Jan-85 15:26")

          (* this function wakes up each time a finger request packet is received, it then sends back etherhostname 
	  (or address if no (pup) nameserver) ,the username, and the time since the last keyboard or mouse action.)


    (while T
       do (AWAIT.EVENT (NSOCKETEVENT FINGER.SERVER.SOCKET))
	  (PROG (RESPONSE.XIP DATA IDLETIME)
	        (SETQ RESPONSE.XIP (GETXIP FINGER.SERVER.SOCKET))
	        (if (OR (NOT RESPONSE.XIP)
			(NEQ (fetch XIPTYPE of RESPONSE.XIP)
			     FINGER.REQUEST.TYPE))
		    then                                     (* false alarm, go back to sleep)
			 (RETURN))                           (* format of response is a string containing a list of 
							     the data elements)
	        (replace XIPLENGTH of RESPONSE.XIP with \XIPOVLEN)
	        (SETQ IDLETIME (IDIFFERENCE (IDATE)
					    (ALTO.TO.LISP.DATE \LASTUSERACTION)))
	        (SETQ DATA (MKSTRING (LIST (OR (STRING.NOT.NUMERIC (ETHERHOSTNAME NIL T))
					       (PORTSTRING (ETHERHOSTNUMBER)))
					   (USERNAME NIL NIL T)
					   IDLETIME)))
	        (XIPAPPEND.STRING RESPONSE.XIP DATA)
	        (SWAPXIPADDRESSES RESPONSE.XIP)              (* now have to set the correct source since original 
							     dest was nsbroadcastnumber)
	        (replace XIPTYPE of RESPONSE.XIP with FINGER.RESPONSE.TYPE)
	        (replace XIPSOURCEHOST of RESPONSE.XIP with \MY.NSHOSTNUMBER)
	        (replace XIPSOURCENET of RESPONSE.XIP with 0)
	        (replace XIPSOURCESOCKET of RESPONSE.XIP with FINGER.SERVER.SOCKET#)
	        (SENDXIP FINGER.SERVER.SOCKET# RESPONSE.XIP])
)

(RPAQ FINGER.ICON.BITMAP (READBITMAP))
(93 61
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@GN@@@@@@@@@@@@"
"@@@@@@@@@@GOH@@@@@@@@@@@"
"@@@@@@@@@@GAL@@@@@@@@@@@"
"@@@@@@@@@@C@N@@@@@@@@@@@"
"@@@@@@@@@@C@N@@@@@@@@@@@"
"@@@@@@@@@@C@F@@@@@@@@@@@"
"@@@@@@@@@@G@F@@@@@@@@@@@"
"@@@@@@@@@@G@F@@@@@@@@@@@"
"@@@@@@@@@@N@F@@@@@@@@@@@"
"@@@@@@@@@ANDF@@@@@@@@@@@"
"@@@@@@@@@CHGF@@@@@@@@@@@"
"@@@@@@@@@GH@F@@@@@@@@@@@"
"@@@@@@@@@O@@N@@@@@@GN@@@"
"@@@@@@@@AN@AL@@@@AOOOH@@"
"@@@@@@@@OL@CH@@@GOONCL@@"
"@@@@@@@AOH@C@@COOOL@AL@@"
"@@@@@@@CL@@GGOOON@A@@L@@"
"@@@@@@@OH@@GOOO@@@AH@L@@"
"@@@@@@AO@@@GL@@@D@@HGH@@"
"@@@@@@CL@@@@@@@@F@@OOH@@"
"@@@@@@GH@@@@@@@@B@OOL@@@"
"@@@@@@G@@@D@@@@@GOOL@@@@"
"@@@@@@F@@@D@@@@GOOL@@@@@"
"@@@COOL@@@L@@@@GN@@@@@@@"
"@@@COOL@@AH@@@@OO@@@@@@@"
"@@@AH@@@@C@@@@OHG@@@@@@@"
"@@@@L@@@@D@@COH@C@@@@@@@"
"@@@@L@@@@H@CN@@@C@@@@@@@"
"@@@@L@@@C@HD@@@@C@@@@@@@"
"@@@@L@@@NAHIL@@@N@@@@@@@"
"@@@@F@@GHAACN@@OL@@@@@@@"
"@@@@F@@L@AACLAOHO@@@@@@@"
"@@@@F@@@@AAHAN@@C@@@@@@@"
"@@@@F@@@@A@OO@@@C@@@@@@@"
"@@@@F@@@@B@AHH@@C@@@@@@@"
"@@@@F@@@@B@CCL@@N@@@@@@@"
"@@@@F@@@@F@CGLAON@@@@@@@"
"@@@@F@@@@D@AC@O@G@@@@@@@"
"@@@@F@@@@L@AHGH@C@@@@@@@"
"@@@@F@@@@H@@OH@@C@@@@@@@"
"@@@@F@@@@H@@ACL@C@@@@@@@"
"@@@@F@@@@H@@BGL@O@@@@@@@"
"@@@@F@GN@@@@CGHCL@@@@@@@"
"@@@@FCOOH@@@A@COH@@@@@@@"
"@@@@GOLCN@@@AOOO@@@@@@@@"
"@@@@GN@@OOOOOON@@@@@@@@@"
"@@@@F@@@GOOOOH@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@")

(RPAQ FINGER.ICON.MASK (READBITMAP))
(93 64
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@GN@@@@@@@@@@@@"
"@@@@@@@@@@GOH@@@@@@@@@@@"
"@@@@@@@@@@GOL@@@@@@@@@@@"
"@@@@@@@@@@CON@@@@@@@@@@@"
"@@@@@@@@@@CON@@@@@@@@@@@"
"@@@@@@@@@@CON@@@@@@@@@@@"
"@@@@@@@@@@GON@@@@@@@@@@@"
"@@@@@@@@@@GON@@@@@@@@@@@"
"@@@@@@@@@@OON@@@@@@@@@@@"
"@@@@@@@@@AOON@@@@@@@@@@@"
"@@@@@@@@@COON@@@@@@@@@@@"
"@@@@@@@@@GOON@@@@@@@@@@@"
"@@@@@@@@@OOON@@@@@@GN@@@"
"@@@@@@@@AOOOL@@@@AOOOH@@"
"@@@@@@@@OOOOH@@@GOOOOL@@"
"@@@@@@@AOOOO@@COOOOOOL@@"
"@@@@@@@COOOOGOOOOOOOOL@@"
"@@@@@@@OOOOOOOOOOOOOOL@@"
"@@@@@@AOOOOOOOOOOOOOOH@@"
"@@@@@@COOOOOOOOOOOOOOH@@"
"@@@@@@GOOOOOOOOOOOOOL@@@"
"@@@@@@GOOOOOOOOOOOOL@@@@"
"@@@@@@GOOOOOOOOOOOL@@@@@"
"@@@COOOOOOOOOOOON@@@@@@@"
"@@@COOOOOOOOOOOOO@@@@@@@"
"@@@AOOOOOOOOOOOOO@@@@@@@"
"@@@@OOOOOOOOOOOOO@@@@@@@"
"@@@@OOOOOOOOOOOOO@@@@@@@"
"@@@@OOOOOOOOOOOOO@@@@@@@"
"@@@@OOOOOOOOOOOON@@@@@@@"
"@@@@GOOOOOOOOOOOL@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOON@@@@@@@"
"@@@@GOOOOOOOOOOON@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOO@@@@@@@"
"@@@@GOOOOOOOOOOOL@@@@@@@"
"@@@@GOOOOOOOOOOOH@@@@@@@"
"@@@@GOLCOOOOOOOO@@@@@@@@"
"@@@@GN@@OOOOOON@@@@@@@@@"
"@@@@F@@@GOOOOH@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@"
"@@@@@@@@@@@@@@@@@@@@@@@@")

(RPAQ FINGER.INFINITY.BITMAP (READBITMAP))
(20 10
"@@@@@@@@"
"@@@@@@@@"
"CL@O@@@@"
"GNCOH@@@"
"LCG@L@@@"
"LAN@L@@@"
"LAL@L@@@"
"LCN@L@@@"
"GOCAH@@@"
"CLAO@@@@")
(FILESLOAD ICONW)

(RPAQQ FINGER.MENU NIL)

(RPAQ? FINGER.ICON.POSITION (CREATE POSITION XCOORD ← 900 YCOORD ← 500))

(RPAQ? FINGER.ICON (ICONW FINGER.ICON.BITMAP FINGER.ICON.MASK FINGER.ICON.POSITION T))

(RPAQ? FINGER.TIMEOUT 1500)

(RPAQ? FINGER.RESPONSE.TYPE 20)

(RPAQ? FINGER.NET.HOPS 2)

(RPAQ? FINGER.REQUEST.TYPE 21)

(RPAQ? FINGER.SERVER.SOCKET# 199)

(RPAQ? FINGER.DISPLAY.POSITION (CREATE POSITION XCOORD ← 650 YCOORD ← 325))

(RPAQ? FINGER.DISPLAY.WIDTH 290)

(RPAQ? FINGER.DISPLAY.HEIGHT 140)

(RPAQ? FINGER.BASE.DATE (IDATE "14-Mar-84 00:00:00"))

(RPAQ? FINGER.CROWD )

(RPAQ? FINGER.INFINITY.BITMAP (EDITBM))

(RPAQ? FINGER.INFINITY.MINUTES 90)
(FINGER.SERVER)
(FINGER)
(PUTPROPS FINGER COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1613 13370 (END.FINGER 1623 . 1950) (FINGER 1952 . 3533) (FINGER.CONTAINS? 3535 . 4026)
 (FINGER.MENU.SELECTED 4028 . 4273) (FINGER.MERGE.USERS 4275 . 4721) (FINGER.SERVER 4723 . 5429) (
FINGER.SETUP.WINDOW 5431 . 6900) (FINGER.UPDATE 6902 . 7119) (FINGER.SETUP.MENU 7121 . 7438) (
FORMAT.RESPONSE 7440 . 8607) (NETS.WITHIN 8609 . 8996) (SEND.FINGER.REQUEST 8998 . 11034) (
STRING.NOT.NUMERIC 11036 . 11261) (TRACE.FINGER 11263 . 11473) (WAIT.FOR.FINGER.PACKET 11475 . 13368))
)))
STOP