(FILECREATED "18-Sep-85 16:45:18" {DSK}<LISPFILES>SOURCES>FINGER.;2 18294 changes to: (FNS FINGER.MENU.SELECTED FINGER.SETUP.WINDOW FINGER.SETUP.MENU) previous date: "17-Aug-85 10:39:44" {DSK}<LISPFILES>SOURCES>FINGER.;1) (* 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 REFINGER 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]) (REFINGER [LAMBDA (W) (* jow "17-Aug-85 10:37") (* dummy fun to call finger w/ no args, so can use as redisplayfn, etc.) (FINGER]) (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) (* jow "18-Sep-85 16:30") (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 "18-Sep-85 16:19") (SETQ FINGER.WINDOW (CREATEW (CREATEREGION (fetch XCOORD of FINGER.DISPLAY.POSITION) (fetch YCOORD of FINGER.DISPLAY.POSITION) FINGER.DISPLAY.WIDTH (HEIGHTIFWINDOW FINGER.DISPLAY.HEIGHT T)) "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 "18-Sep-85 16:43") [SETQ FINGER.MENU (create MENU ITEMS ←(QUOTE ((Update NIL "Will update the finger display."))) WHENSELECTEDFN ←(QUOTE FINGER.MENU.SELECTED) CENTERFLG ← T MENUOUTLINESIZE ←(IDIFFERENCE WBorder 3) MENUFONT ←(FONTCREATE (QUOTE (HELVETICA 8 BOLD] (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 (1615 13839 (END.FINGER 1625 . 1952) (FINGER 1954 . 3535) (REFINGER 3537 . 3814) ( FINGER.CONTAINS? 3816 . 4307) (FINGER.MENU.SELECTED 4309 . 4550) (FINGER.MERGE.USERS 4552 . 4998) ( FINGER.SERVER 5000 . 5706) (FINGER.SETUP.WINDOW 5708 . 7212) (FINGER.UPDATE 7214 . 7431) ( FINGER.SETUP.MENU 7433 . 7907) (FORMAT.RESPONSE 7909 . 9076) (NETS.WITHIN 9078 . 9465) ( SEND.FINGER.REQUEST 9467 . 11503) (STRING.NOT.NUMERIC 11505 . 11730) (TRACE.FINGER 11732 . 11942) ( WAIT.FOR.FINGER.PACKET 11944 . 13837))))) STOP