.TITLE STD .SBTTL DESC PAGE ;SUB TO GIVE FULL LIST OF THE STD FOR A GIVEN TASK ; ;COMMAND LINE EXAMPLE ; ;MCR>INF SDT XXXXXX (XXXXXX IS TASK NAME) ; .MCALL QIOW$,DIR$ .PAGE .SBTTL MAIN CODE STDL:: 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 ;CONVERT 2ND HALF OF NAME 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 #NAMES,R4 ;POINT AT TAG LINES MOV #S.SIZ,R5 ;SIZE OF AN STD ENTRY ASR R5 ;CONVERT TO WORD COUNT MOV R0,R3 ;MAKE R3 STD POINTER MOV #1,R2 ;SET R2 AS $CBOMG FLAG 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 STD WORD CLR BYTFLA ;CLEAR BYTE FLAG CMP (R4),#"DP ;DEF PRI & SY DISK INDICATOR BNE 111$ ;NO INC BYTFLA ;YES SET BYTE FLAG 111$: CMP (R4),#"AV ;# OF VERSIONS AND POOL LIMIT ? BNE 222$ ;NO INC BYTFLA ;YES 222$: 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 ASCII 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 S.SIZ LINES BLE 777$ JMP LOOP1 777$: RTS PC ;ALL DONE, LEAVE .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 DATA AREAS TASNAM: .BLKW 2 ;ROOM FOR TASK NAME ; HDRDPB: QIOW$ IO.WVB,5,1,,,,
HEAD: .ASCII <12><15>/STD FOR TASK / HEAD1: .ASCII / / HEADLN=.-HEAD .EVEN QIODPB: QIOW$ IO.WVB,5,1,,,,