.TITLE OUTPUT .GLOBL USED,SRCSYM,LINCTR,NOLINE,GETLIN,ERRCNT,SNAME,VARTYP .GLOBL VAR,PRSTAT,ENTCTR,NAMCTR,PAGE,HIGPT,LOWPT,NMAIN .GLOBL OUTPUT,VRSTPT,RAD50U,PRTLIN,DECOUT,HIGHAV,DOFLOW .GLOBL LOWAV,HIGPTR,LOWPTR,$ZZ,DUMP,LINENO,CHRWD,VNM50 .GLOBL ENDLIN,BLNK,SNGCOM,SAVSUP,SUPER,PNAME,GLOB,STOFLO .IF NDF,RSX .MCALL .PRINT,.RCTRLO .IFF .MCALL QIOW$S .ENDC .PSECT OUT,I,RO,GBL .PAGE OUTPUT: INC SRCSYM CLR LINCTR MOV #NOLINE,R0 JSR PC,PRTLIN ; INT HEADER MOV #VRSTPT-4,R4 ; SET UP FOR OUTPUT VARLB: MOV 4(R4),R4 ; GET NEXT VAR NAM ELEMNT BNE 71$ JMP OUTDNE ; IF ZERO DONE 71$: MOV 6(R4),R5 ; GET 1ST USE ELEMENT TST DOFLOW BNE 19$ TST SNGCOM ; LIST ALL ?? BEQ 1$ ; NO A SUBSET MOV 10(R4),R0 ; GET LAST USE CMP #"CM,-2(R0) ; IS ITS LAST USE IN COMMON BLOCK BEQ 4$ ; IF YES SKIP TO NEXT VARIABLE CMP #"BY,-2(R0) BEQ 4$ ; IS IT A TYPE ONLY DECLARARTION CMP #"CH,-2(R0) ; CHARACTER BEQ 4$ CMP #"LG,-2(R0) BEQ 4$ CMP #"IN,-2(R0) BEQ 4$ CMP #"RL,-2(R0) BEQ 4$ CMP #"DP,-2(R0) BEQ 4$ CMP #"CX,-2(R0) BEQ 4$ CMP #"EQ,-2(R0) ;TREAT EQIVALENCE SAME AS TYPE DEC BEQ 4$ ; WE HAVE A VAR THAT IS USED IN PROGRAM, IS IT TO BE INDEXED TST SNGCOM BGT 1$ ; IF GT 0 THEN YES BR VARLB ; ELSE NO 4$: TST SNGCOM ; DECLARED BUT UNUSED-IS IT TO BE INDEXED BGE VARLB ; NO 1$: TST GLOB ; GLOBALS ??? BEQ 16$ ; NOTHING SPECIAL MOV R5,R0 ; GET FIRST HOW USED 17$: CMP #"CM,-2(R0) ; DEFINED IN COMMON? BEQ 18$ ; YES CMP #"CN,-2(R0) ; COMMON NAMES ALSO?? BEQ 18$ ; YES MOV (R0),R0 ; NEXT HOW USED BNE 17$ ; REPEAT UNTILL FIND COMMON OR ; COMMON NAME OR NO MORE HOW USED ; VARIABLE IS NAME THAT DOES NOT ; APPEAR IN COMMON AS VAR OR COMMON NAME TST GLOB ; INDEX LOCAL?? BGE VARLB ; NO BR 16$ ; YES 18$: TST GLOB ; TEST TO SEE IF GLOBAL NAME TO BE ; INDEXED BLE VARLB ; NO 16$: TST SUPER ; SUPER INDEX THIS VAR NAME BEQ 2$ ; NO 19$: JSR PC,SAVSUP ; YES-SAVE VARIABLE TST DOFLOW BNE VARLB 2$: MOV #VAR,R0 ; SET UP TO CONVERT RAD 50 VAR NM RO ASCII MOV R4,R1 JSR PC,RAD50U ADD #2,R1 JSR PC,RAD50U MOV #VAR,R0 ; PRINT OUT VAR NAME JSR PC,PRTLIN BR OUTUSED USELB: MOV #BLNK,R0 ; FOR CASES WHERE HOWUSEDS DONT FIT ON ; ONE OUTPUT LINE-FILL IN WHERE VAR NAME WOULD GO ; WITH BLANK JSR PC,PRTLIN OUTUSED: MOV CHRWD,-(SP) ; SET COUNTER ; FOR THE NUMBER OF HOW USED TO PUT ON LINE ; 7 FOR TTY OR 13 FOR LP-SET BY SWITCH IN OPEN USELB2: MOV -4(R5),R0 ; GET LINE NUMBER FROM USE ELEMENT MOV R4,-(SP) JSR PC,DECOUT ; PRINT IT OUT MOV (SP)+,R4 MOV -2(R5),USED ; GET HOW USED NEMONIC MOV #USED,R0 JSR PC,PRTLIN ; PRINT OUT NEMONIC OF HOW USED MOV (R5),R5 ; GET NEXT ELEMENT BEQ DNEVAR ; IF ZERO-ALL ELEMNTS FOR VARNAME OUTPUTED DEC (SP) ; DEC CTR BNE USELB2;IF NOT 0 GET ANOTHER ELEMENT CLR (SP)+ MOV #ENDLIN,R0 JSR PC,PRTLIN ; BR USELB DNEVAR: MOV #ENDLIN,R0 JSR PC,PRTLIN ; CLR (SP)+ JMP VARLB ; START ON NEW VARIABLE OUTDNE: MOV HIGPTR,HIGPT MOV LOWPTR,LOWPT MOV HIGHAV,HIGPTR ; RESET POINTERS FOR EMPTY TABLE MOV LOWAV,LOWPTR CLR VRSTPT CLR SRCSYM CLR LINCTR RTS PC BLNK: .ASCII / / .BYTE 200 .EVEN ENDLIN: .WORD 0 .PAGE $ZZ: JSR PC,OUTPUT CLR LINENO ; RESET LINE NUMBER IN CASE MANY SOURCES ; COCATONATED IN ONE FILE TST PRSTAT ; PRINT STATISTICS??? BEQ EXIT CLR LINCTR MOV #-1,SRCSYM MOV #NOLINE,R0 JSR PC,PRTLIN MOV #SIZ,R0 JSR PC,PRTLIN MOV HIGHAV,R0 SUB LOWAV,R0 ASR R0 BIC #100000,R0 JSR PC,DECOUT MOV #UNUSD,R0 JSR PC,PRTLIN MOV HIGPT,R0 SUB LOWPT,R0 ASR R0 BIC #100000,R0 JSR PC,DECOUT MOV #UNM,R0 JSR PC,PRTLIN MOV NAMCTR,R0 JSR PC,DECOUT MOV #NOTIM,R0 JSR PC,PRTLIN MOV ENTCTR,R0 JSR PC,DECOUT MOV #ENDLIN,R0 JSR PC,PRTLIN CLR LINCTR EXIT: TST DOFLOW BEQ 6$ CMP PNAME,NMAIN BNE 6$ CMP PNAME+2,NMAIN+2 BNE 6$ MOV NMAIN,VNM50 MOV NMAIN+2,VNM50+2 MOV #"PG,VARTYP CALL STOFLO 6$: MOV #PNAME,R1 MOV #PNM,R0 JSR PC,RAD50U MOV #PNAME+2,R1 MOV #PNM+3,R0 JSR PC,RAD50U MOV ERRCNT,R1 BIC #100000,R1 MOV #P10,R2 CLR R4 MOV #ERCT,R5 1$: MOVB #'0,R0 5$: SUB (R2),R1 BLT 2$ INC R0 BR 5$ 2$: ADD (R2)+,R1 TST R4 BNE 3$ CMPB #'0,R0 BNE 4$ MOVB #' ,R0 BR 3$ 4$: INC R4 3$: MOVB R0,(R5)+ TST (R2) BNE 1$ ADD #60,R1 MOVB R1,(R5) .IF NDF,RSX .RCTRLO .PRINT #BERRM .IFF QIOW$S #IO.CCO,#9.,#1,,,,<#BERRM,#36.,#0> .ENDC CLR ERRCNT CLR SRCSYM CLR ENTCTR CLR PAGE CLR NAMCTR MOV NMAIN,PNAME MOV NMAIN+2,PNAME+2 JSR PC,GETLIN RTS PC P10: .WORD 10000.,1000.,100.,10.,0 BERRM: .ASCII <15><12>/'/ PNM: .ASCII / / .ASCII /' ERRORS DETECTED: / ERCT: .ASCII / /<15><12><200> SIZ: .BYTE 15,12,12 .ASCII / BUFFER SIZE / .BYTE 200 .EVEN UNUSD: .ASCII / WORDS/ .BYTE 15,12 .ASCII / UNUSED BUFFER SPACE / .BYTE 200 .EVEN UNM: .ASCII / WORDS/ .BYTE 15,12 .ASCII ? VARIABLES/LABELS DEFINED ? .BYTE 200 .EVEN NOTIM: .BYTE 15,12 .ASCII / HOW USED ENTRIES / .BYTE 200 .EVEN .PAGE DUMP: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) INC SRCSYM MOV #MSGOVL,R0 ; STORE REGISTERS SO OPS IN ACTION ; USEING REGISTERS ARE NOT DITERBED JSR PC,PRTLIN ; INFORM USER OF OVERFLOW JSR PC,OUTPUT MOV #NOLINE,R0 JSR PC,PRTLIN .IF NDF,RSX BISB #4,@#53 .PRINT #MSGOVL .IFF QIOW$S #IO.CCO,#9.,#1,,,,<#MSGOVL+2,#39.,#40> .ENDC INC ERRCNT MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RTS PC MSGOVL: .BYTE 15,12 .ASCII / INDEX SYMBOL TABLE FULL-/ .ASCII /PARTIAL CROSS REFERENCE LISTING/ .BYTE 15,12,200 .EVEN .END