TITLE SNDSTAT - Ask the SNDSRV daemon for statistics SUBTTL David Eppstein / Stanford University / 16 April 1982 SEARCH MONSYM,MACSYM,SNDDEF .TEXT "SNDSTA/SAVE" ;Save as SNDSTAT.EXE ASUPPRESS ; Accumulators A=:1 ;Scratch B=:2 C=:3 D=:4 ; Storage OURPID: BLOCK 1 ;PID for ourself SRVPID: BLOCK 1 ;PID for SNDSRV SNDARG: BLOCK 4 ;IPCF block for INFO PACLEN==7 ;Length of IPCF block PACKET: BLOCK PACLEN ;IPCF block SNDPAG==100 ;Where to build IPCF page for SNDSRV SNDADR==SNDPAG*1000 ;Address of page ; Main program START: RESET% ;Clean up the world MOVX A,IP%CPD ;Get create pid flag into place MOVEM A,.IPCFL+PACKET ;Set up flag word SETZM .IPCFS+PACKET ;We are sender, no PID yet SETZM .IPCFR+PACKET ;INFO is the receiver MOVEI A,SNDARG HRLI A,4 MOVEM A,.IPCFP+PACKET ;Set up pointer to argument block MOVX A,.IPCIW MOVEM A,.IPCI0+SNDARG ;Get pid for this name SETZM .IPCI1+SNDARG ;No duplicate DMOVE A,[ASCIZ/SNDSRV/] ;Point to string for SNDSRV's PID name DMOVEM A,.IPCI2+SNDARG ;Stash the id MOVEI A,PACLEN MOVEI B,PACKET MSEND% ;Ask info for server PID, maybe create our PID ERJMP IPCERR MOVE A,.IPCFS+PACKET ;Fetch our PID MOVEM A,OURPID ;Save it in case it was just created SETZM .IPCFL+PACKET MOVE A,OURPID ;We are receiver this time MOVEM A,.IPCFR+PACKET MOVEI A,PACLEN MOVEI B,PACKET MRECV% ;Receive reply from INFO ERJMP IPCERR LDB A,[POINT 6,.IPCFL+PACKET,29] ;Get INFO error code field IFN. A CAIE A,76 ;Couldn't find it? JRST IPCERR TMSG <Server not running> HALTF% JRST START ENDIF. MOVE A,.IPCI1+SNDARG MOVEM A,SRVPID ;Store server's PID MOVX A,IP%CFV MOVEM A,.IPCFL+PACKET ;Sending a page of data MOVE A,OURPID MOVEM A,.IPCFS+PACKET ;We are the sender MOVE A,SRVPID MOVEM A,.IPCFR+PACKET ;The server is the receiver MOVEI A,SNDPAG ;From the data page HRLI A,1000 ;A whole page full MOVEM A,.IPCFP+PACKET MOVE A,['SNDSTA'] ;SIXBIT function code MOVEM A,SNDADR+SN$HDR ;Set up in IPCF page SETZM SNDADR+SN$FLG ;No format flags MOVEI A,PACLEN MOVEI B,PACKET MSEND% ;Send off the request ERJMP IPCERR MOVX A,IP%CFV MOVEM A,.IPCFL+PACKET ;Receiving a page of data MOVE A,SRVPID MOVEM A,.IPCFS+PACKET ;From the server MOVE A,OURPID MOVEM A,.IPCFR+PACKET ;To our own PID MOVEI A,SNDPAG ;Back to the same data page HRLI A,1000 MOVEM A,.IPCFP+PACKET MOVEI A,PACLEN MOVEI B,PACKET MRECV% ;Receive a reply ERJMP IPCERR SKIPN SNDADR+SN$HDR ;Error? IFSKP. HRROI A,SNDADR+SN$STR ;Yes, point to error string PSOUT% ;And type it ENDIF. HALTF% JRST START IPCERR: TMSG <Unexpected IPCF error> HALTF% JRST START END START