.TITLE RCVQIO - PRINT THE I/O PACKET DATA ; WRITTEN BY: JOHN WOOD ; LAWRENCE BERKELEY LABORATORY ; BERKELEY, CALIFORNIA 94720 ; (415) 486-5972 ; ; ; THIS TASK IS A COOPERATING TASK WITH THE DRIVER QT:. ; ITS RESPONSIBILITY IS TO PRINT ON A TERMINAL THE RECEIVE PACKETS ; THAT QT: QUEUES TO IT. ; ; THE TASK FIRST ASKS THE USER FOR THE DEVICE AND UNIT TO WATCH. ; THIS INFORMATION IS SENT TO THE QT: DRIVER AS A QIO REQUEST. ; IF ACCEPTED, THE TASK THEN TRIES TO RECEIVE FROM ITS RECIEVE ; QUEUE. IF THERE IS DATA, IT IS PRINTED. IF NOT, A ONE SECOND ; MARK TIME IS EXECUTED AND IT TRIES AGAIN. ; ; THE DATA AS PRINTED IS THE TASK NAME THAT ISSUED THE QIO, THE ; FUNCTION CODE AND MODIFIER, AND THE 8 PARAMETERS. ; .PAGE .MCALL DIR$,RCVD$,QIOW$,MRKT$,WTSE$,EXIT$S ; START: DIR$ #ODPB ;SEND THE QUERY MESSAGE DIR$ #IDPB ;INPUT THE DEVICE AND UNIT MOV #ODPB,R0 ;SEND THE CLEAR SCREEN CHARACTER MOV #CBUF,Q.IOPL(R0); MOV #CBUFL,Q.IOPL+2(R0) ; DIR$ #ODPB ; CALL PARCE ;INSURE LEGAL CHARACTER STRING MOV #QDPB,R0 ;SET UP ARGUMENTS FOR CALL TO QT: MOV TBUF,Q.IOPL(R0) ; MOV UNIT,Q.IOPL+2(R0); DIR$ #QDPB ;SEND THE START COMMAND TO THE QT: DRIVER CMP IOSB,#1 ;DID WE SUCCEED? BEQ AGAIN ;BRANCH IF YES CMP IOSB,#201 ;'ALREADY IN USE' BNE 20$ ;BRANCH IF NOT MOV IOSB+2,ANAM ;REPORT WHO IS BEING WATCHED DIR$ #ADPB ;PRINT THE MESSAGE BR 30$ ;EXIT TASK 20$: DIR$ #ERRDPB ;PRINT ERROR MESSAGE 30$: EXIT$S ; AGAIN: CLR BUFN ;CLEAR FIRST WORD OF MESSAGE DIR$ #RDPB ;GET DATA TO PRINT FROM RECEIVE QUEUE TST BUFN ;DID WE GET ANY DATA BNE 20$ ;BRANCH IF YES DIR$ #TIME ;WAIT 1 SECOND DIR$ #WAIT ; BR AGAIN ;TRY AGAIN 20$: MOV #BUF,R5 ;POINT AT SOURCE DATA MOV #NAM1,R0 ;PRINT THE TASK NAME MOV (R5)+,R1 ; CALL $C5TA ; MOV #NAM2,R0 ; MOV (R5)+,R1 ; CALL $C5TA ; MOV #MOD,R0 ;PRINT THE MODIFIER MOVB (R5)+,R1 ; MOV #1,R2 ; CALL $CBTMG ; MOV #FCN,R0 ;PRINT THE FUNCTION CODE MOVB (R5)+,R1 ; MOV #1,R2 ; CALL $CBTMG ; MOV #PRM1,R0 ;PRINT PARAMETER 1 CALL CNVT ; MOV #PRM2,R0 ;PRINT PARAMETER 2 CALL CNVT ; MOV #PRM3,R0 ;PRINT PARAMETER 3 CALL CNVT ; MOV #PRM4,R0 ;PRINT PARAMETER 4 CALL CNVT ; MOV #PRM5,R0 ;PRINT PARAMETER 5 CALL CNVT ; MOV #PRM6,R0 ;PRINT PARAMETER 6 CALL CNVT ; MOV #PRM7,R0 ;PRINT PARAMETER 7 CALL CNVT ; MOV #PRM8,R0 ;PRINT PARAMETER 8 CALL CNVT ; DIR$ #TDPB ;SEND CHARACTERS TO TERMINAL JMP AGAIN ;GO AGAIN .PAGE ; PARCE - LOOK AT THE INPUT CHARACTER STRING AND MAKE SURE THAT THE ; FIRST TWO CHARACTERS ARE LETTERS, THE NEXT ONE OR TWO ARE NUMBERS ; AND THE LAST IS A COLON. ; CONVERT THE NUMBERS TO BINARY, THE LETTERS TO UPPER CASE AND ABORT ; IF NOT. UNIT: .WORD 0 ;STORAGE FOR THE UNIT NUMBER PARCE: MOV #TBUF,R0 ;POINT AT INPUT BUFFER BIC #120240,(R0) ;MASK FOR UPPER CASE AND SIGN BITS CMPB (R0),#'A ;TEST FOR LEGAL LETTER BLT PER ; CMPB 1(R0),#'A ; BLT PER ; CMPB (R0),#'Z ; BGT PER ; CMPB 1(R0),#'Z ; BGT PER ; CLR UNIT ;INITIALIZE UNIT NUMBER CMPB #':,2(R0) ;IF COLON, UNIT IS 0 BNE 10$ ;BRANCH IF NOT COLON RETURN ; 10$: CMPB 2(R0),#'0 ;TEST FOR LEGAL NUMBER BLT PER ; CMPB 2(R0),#'7 ; BGT PER ; MOVB 2(R0),R1 ;GET ASCII NUMBER BIC #370,R1 ;CONVERT TO BINARY ADD R1,UNIT ; CMPB #':,3(R0) ;IF COLON RETURN BNE 20$ ;BRANCH IF NOT COLON RETURN ; 20$: CMPB 3(R0),#'0 ;TEST FOR LEGAL NUMBER BLT PER ; CMPB 3(R0),#'7 ; BGT PER ; MOVB 3(R0),R1 ;GET ASCII CHARACTER BIC #370,R1 ;CONVERT TO BINARY ASL UNIT ; ASL UNIT ; ASL UNIT ; ADD R1,UNIT ; CMPB #':,4(R0) ;MUST BE COLON BNE PER ; RETURN ; PER: TST (SP)+ ;POP STACK DIR$ #ERRDPB ;SEND ERROR MESSAGE EXIT$S ;END TASK .PAGE ; BUFFERS BUFN: .BLKW 2 ;NAME OF CALLING TASK (IGNORED) BUF: .BLKW 13. ;DATA BUFFER TO PRINT OBUF: .ASCII / / NAM1: .ASCII /000/ NAM2: .ASCII /000 / FCN: .ASCII /000 / MOD: .ASCII /000 / PRM1: .ASCII /000000 / PRM2: .ASCII /000000 / PRM3: .ASCII /000000 / PRM4: .ASCII /000000 / PRM5: .ASCII /000000 / PRM6: .ASCII /000000 / PRM7: .ASCII /000000 / PRM8: .ASCII /000000/<15><12> .EVEN OBUFL= .-OBUF .PAGE ; CNVT: MOV (R5)+,R1 ;GET SOURCE DATA POINTER MOV #1,R2 ;NO ZERO SUPPRESSION CALL $CBOMG ;CONVERT THE DATA RETURN ; RDPB: RCVD$ ,BUFN ;RECEIVE DPB TDPB: QIOW$ IO.WAL,5,5,,,, ;TERMINAL DPB TIME: MRKT$ 10,1,2 WAIT: WTSE$ 10 QDPB: QIOW$ 401,1,1,,IOSB IOSB: .WORD 0,0 TBUF: .BLKW 8. ;TTY INPUT BUFFER ODPB: QIOW$ IO.WVB,5,5,,IOSB,, IDPB: QIOW$ IO.RVB,5,5,,,, OTBUF: .ASCII <15><12>/ ENTER DEVICE MNEMONIC AND UNIT: / OTBUFL= .-OTBUF .EVEN CBUF: .ASCII <32> CBUFL= .-CBUF .EVEN ERRDPB: QIOW$ IO.WVB,5,5,,,, ERBF: .ASCII / INVALID ARGUMENT/<15><12> ERBFL= .-ERBF .EVEN ABUF: .ASCII <15><12>/ALREADY CATCHING PACKETS FROM / ANAM: .ASCII / : /<15><12> ALEN= .-ABUF .EVEN ADPB: QIOW$ IO.WVB,5,5,,,, .END START