.TITLE WHODIS - FORTRAN SUBROUTINE TO GET INFO FROM TLOGGR ; ;WRITTEN BY J. NEELAND ;LAST MODIFIED 790413. ; ;PURPOSE: TO GET BASIC INFORMATION FROM TERCOM DATABASE ABOUT THIS ; TASK'S TI: ;INFORMATION RETURNED INCLUDES TERMINAL NAME, #, LOGIN UIC, AND LOGIN NAME ; ;CALLING SEQUENCE: ; CALL WHODIS(BUFFER,ISTAT) ;WHERE: ; BUFFER=BYTE ARRAY OF 13. WORDS TO HOLD RECEIVE MESSAGE ; ISTAT=STATUS OF VARIOUS DIRECTIVES & ERROR CODE RETURNED FROM TLOGGR. ; WILL BE +1 IF EVERYTHING OK. ; ;CONTENTS OF BUFFER: ; BYTE 0: FLAGS INCLUDING: 1=MAIL CHECK OFF ; 2=LOGGED-IN (BETTER BE) ; 4=COULDN'T FIND TERMINAL IN TERCOM ; BYTE 1: TERMINAL DEVICE # ; BYTE 2-3: TERMINAL NAME IN ASCII ; BYTE 4-5: LOGIN UIC ; BYTE 6-19: LOGIN NAME ; BYTE 20-23: LOGIN SY: DEVICE ; BYTE 24-25: CURRENTLY UNDEFINED ; ;THE FOLLOWING ERROR CODES ARE USED BY THIS ROUTINE FOR INTERNAL ERRORS: ; +4=TLOGGR COULDN'T FIND TERMINAL ; +10(8)=NOT MARKED AS A LOGGED-IN TERMINAL ;NOTE: USES EVENT-FLAG #1 TO WAIT FOR RESPONSE FROM TLOGGR ; .MCALL DIR$,SDAT$,WTSE$S,SETF$S,RCVD$ .MCALL RQST$,SRDA$S,ASTX$S,CLEF$S ; WHODIS::MOVB #3,SNDBUF ;SET FOR OPCODE 3 TO TLOGGR SRDA$S #RCVAST ;SPECIFY RECEIVE AST ENTRY POINT CLEF$S #1 ;CLEAR EVENT FLAG TO WAIT FOR RESPONSE MOV #1,ASTFLG ;SET FOR AST EXPECTED DIR$ #SND ;SEND MESSAGE (JUST OPCODE) TO TLOGGR BCS DIRERR ;MAKE SURE THAT WENT OK (TLOGGR MIGHT NOT EXIST) DIR$ #INITLO ;INITIATE TLOGGR SINCE PROBABLY NOT RUNNING NOW WTSE$S #1 ;WAIT FOR RESPONSE DIR$ #RCV ;GET THE MESSAGE? BIT #4,RCVTXT ;IS IT A GOOD RESPONSE? BNE BADDEV ;NO, COULDN'T FIND THIS TERMINAL!!! BIT #2,RCVTXT ;IS THE TERMINAL MARKED AS LOGGED-IN? BEQ BADTRM ;NO, RETURN THAT ERROR CODE MOV #26.,R2 ;YES, COPY RESPONSE BACK TO USER BUFFER MOV 2(R5),R1 ;ADDRESS OF BUFFER IS 1ST USER PARAMETER MOV #RCVTXT,R0 CPYLUP: MOVB (R0)+,(R1)+ ;COPY ALL 26. BYTES SOB R2,CPYLUP ; MOV #1,@4(R5) ;RETURN SUCCESSFUL STATUS RETURN ;DONE! ; BADDEV: MOV #4,@4(R5) ;RETURN LOCAL ERROR CODE RETURN ; BADTRM: MOV #10,@4(R5) ;RETURN ERROR CODE FOR NOT LOGGED-IN RETURN ; DIRERR: MOV $DSW,@4(R5) ;RETURN DIRECTIVE STATUS WORD VALUE RETURN ; TO SHOW WHY ERROR RETURN ; RCVAST: ;REF. LABEL FOR RECEIVE AST ENTRY POINT ROR ASTFLG ;CHECK IF WE EXPECTED A MESSAGE BCC 10$ ;NO IF BIT NOT NO SETF$S #1 ;SET EVENT FLAG THAT THIS ROUTINE IS WAITING FOR 10$: ASTX$S ; & EXIT FROM AST STATE ;+ ;DATA AREA ;- ASTFLG: .WORD 0 ;FLAG TO SHOW WE EXPECT A RECEIVE AST SND: SDAT$ TLOGGR,SNDBUF ;SEND TO TLOGGR TASK ONLY RCV: RCVD$ TLOGGR,RCVBUF ;RECEIVE FROM TLOGGR ONLY INITLO: RQST$ TLOGGR ;REQUEST TLOGGR TO START IF NOT RUNNING RCVBUF: .BLKW 2 ;START OF BUFFER CONTAINS TASK NAME RCVTXT: ;REFERENCE LABEL SNDBUF: .BLKW 13. ;USE SAME BUFFER FOR SEND AND RECEIVE ; .END