.TITLE IOR .SBTTL DESC PAGE ;SUB TO GIVE FULL LIST OF THE POSSIBLE IO NODES FOR A GIVEN TASK ; ;COMMAND LINE EXAMPLE ; ;MCR>INF IOR XXXXXX (XXXXXX IS TASK NAME) ; .MCALL QIOW$,DIR$ .enable lc .PAGE .SBTTL ERROR EXITS ERROR: ;SYNTAX ERROR DIR$ #BADDPB ;DO SYNTAX ERROR MESS RTS PC ERROR1: ;TASK NOT IN STD MOV #BAD1,BADDPB+Q.IOPL MOV #BADLN1,BADDPB+Q.IOPL+2 DIR$ #BADDPB RTS PC .PAGE .SBTTL MAIN CODE IOR:: MOV #MCRBUF,R0 ;POINT TO COMMAND LINE MOV R0,R1 ;SET TO MAKE END OF LINE POINTER ADD MCRSIZ,R1 ;NOW HAVE IT 1$: CMPB (R0)+,#40 ;FOUND FIRST SPACE AFTER "INF" BEQ 2$ ;YES CMP R0,R1 ;PAST END OF COMMAND BLE 1$ ;YES JMP ERROR ;NO, AN ERROR 2$: CMPB (R0)+,#40 ;DO AGAIN TO GET PAST "STD" BEQ 3$ CMP R0,R1 ;STILL IN COMMAND LINE ? BLE 2$ JMP ERROR 3$: ;POINTING AT TASK NAME MOV #1,R1 ;. IS LEGAL CHARACTER JSR PC,$CAT5 ;CONVERT TO RAD 50 MOV R1,TASNAM ;SAVE FIRST HALF OF TASK NAME MOV #1,R1 ;DO AGAIN FOR 2ND HALF JSR PC,$CAT5 MOV R1,TASNAM+2 ;FILL IN 2ND HALF FINDTA: ;NOW CAN SEARCH STD FOR TASK MOV .STDTA,R0 ;POINT R0 TO STD ALPHA TABLE LOOP: MOV (R0)+,R1 ;GET NEXT STD ADDRESS CMP S.TN(R1),TASNAM ;DO NAMES MATCH BLO LOOP ;NOT THERE YET BHI ERROR1 ;IF GREATER, PAST NAME IN STD CMP S.TN+2(R1),TASNAM+2 ;CHECK 2ND HALF BLO LOOP ;NOT THERE YET BHI ERROR1 ;IF PAST, NOT IN STD ;MATCHED, LIST STD TST -(R0) ;BUMP R0 BACK TO RIGHT ALPHA TABLE ENTRY MOV (R0)+,R0 ;GO FROM STD ALPHA TABLE TO STD MOV R0,-(SP) ;SAVE STD ADDRESS MOV #HEAD1,R0 ;POINT TO HEADER LINE MOV TASNAM,R1 ;GET FIRST HALF OF TASK NAME JSR PC,$C5TA MOV TASNAM+2,R1 JSR PC,$C5TA MOV (SP)+,R0 ;RESTORE STD ADDRESS DIR$ #HDRDPB ;DO HEADER LINE MOV .POLBE,R1 ;START AT START OF POOL ADD #4,R1 ;BUMP TO WORD 2 (STD ADDR OF ACCOUNTED TASK) MOV #SAVE,R3 ;R2 POINTS TO SAVE AREA LOOK: CMP (R1),R0 ;THIS NODE ACCOUNTED TO TASK ? BNE NO ;NO MOV R1,(R3)+ ;SAVE ADDRESS OF NODE CMP R3,#SAVEEN ;END OF SAVE AREA BGE PRINT ;IF SO PRINT NODES WE FOUND NO: ADD #20,R1 ;BUMP R1 TO NEXT POSSIBLE NODE CMP R1,#.SG.BS ;PAST END OF POOL ? BLO LOOK ;NO CONTINUE PRINT: MOV #SAVE,R2 ;RESET TO SAVE AREA PRINT1: MOV (R2)+,R3 ;NODE ADDRESS TO R3 BEQ DONE SUB #4,R3 ;RESET TO START OF NODE MOV R.AT(R3),R4 ;GET ATL OF REQUESTOR IN R4 BEQ 1$ ;IF 0 COULD BE EXEC REQUEST CMP R4,.POLBE ;CHECK FOR VALID ATL ADDRESS BLO PRINT1 ;IF TO LOW, NOT AN IO REQUEST NODE CMP R4,#.SG.BS ;IF TOO HIGH, ALSO NOT VALID BHI PRINT1 1$: MOV #NAMES,R4 ;POINT AT TAG LINES MOV #R.SIZ,R5 ;SIZE OF AN IO REQUEST NODE DIR$ #DIVDPB ;DO DIVIDING LINE ASR R5 ;CONVERT TO WORDS LOOP1: MOV #LINE,R0 ;POINT TO ASCII OUTPUT LINE MOV R3,R1 ;NODE ADDRESS TO R1 JSR PC,$CBOMG ;CONVERT NODE ADDRESS TST (R0)+ ;BUMP POINTER PAST " " MOV (R4)+,(R0)+ ;FILL IN NAME OF IRQ WORD CLR BYTFLA ;CLEAR BYTE FLAG CMP (R4),#"PR ;PRI & DPB SIZE BNE 111$ ;NO INC BYTFLA ;YES SET BYTE FLAG 111$: CMP (R4),#"LU ;LUN & EV FLAG # ? BNE 222$ ;NO INC BYTFLA ;YES 222$: CMP (R4),#"PC ;PROGRAMMER & GROUP CODE ? BNE 333$ ;NO INC BYTFLA ;YES 333$: MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ MOV (R3)+,R1 ;CONTENTS OF NODE TO R1 TST BYTFLA ;BYTE PRINTOUT ? BEQ 99$ ;NO BIC #177400,R1 ;YES, CLEAR UPPER BYTE 99$: JSR PC,$CBOMG ;CONVERT CONTENTS TO OCTAL ASCII STRING TST BYTFLA ;ARE THESE BYTE VALUES ? BEQ 444$ ;NO MOVB #' ,-6(R0) ;MAKE 3 DIGIT OUTPUT MOVB #' ,-5(R0) MOVB #' ,-4(R0) ADD #2,R0 ;BUMP OVER TO 2ND VALUE AREA MOV (R4)+,(R0)+ ;FILL IN 2ND R.XX STRING MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ MOV -2(R3),R1 ;GET CONTENTS OF NODE AGAIN SWAB R1 ;GET UPPER BYTE BIC #177400,R1 ;CLEAR LOWER JSR PC,$CBOMG ;CONVERT IT AGAIN MOVB #' ,-6(R0) MOVB #' ,-5(R0) MOVB #' ,-4(R0) ;MAKE 3 DIGIT PRINTOUT MOV #LINEXL,QIODPB+Q.IOPL+2 ;CHANGE LENGTH OF PRINTOUT 444$: DIR$ #QIODPB ;WRITE LINE MOV #LINELN,QIODPB+Q.IOPL+2 ;CHANGE BACK TO SHORT LINE DEC R5 ;DO R.SIZ LINES BLE 777$ JMP LOOP1 777$: BR PRINT1 ;TRY FOR ANOTHER IO NODE DONE: DIR$ #DIVDPB ;PRINT DIVIDING LINE RTS PC ;AND RETURN .PAGE .SBTTL DATA AREAS TASNAM: .BLKW 2 ;ROOM FOR TASK NAME SAVE: .BLKW 20 ;ROOM TO SAVE 16. NODE ADDRESSES SAVEEN: .WORD 0 ;END OF SAVE AREA POINTER ; HDRDPB: QIOW$ IO.WVB,5,1,,,,
HEAD: .ASCII <12><15>/IO nodes for task / HEAD1: .ASCII / / HEADLN=.-HEAD .EVEN QIODPB: QIOW$ IO.WVB,5,1,,,,