.TITLE GETSYM ;+ ;GETSYM---GET SYMBOL TABLE CONTENTS ; ;THIS ROUTINE IS CALL TO FILL IN VALUES SUPPLIED FROM THE CONTENTS ;OF THE SYMBOL TABLE RELATING TO A SPECIFIED ITEM ; ;CALL: ; ; GETSYM(ITEM,KODE,INDX,ICNT) ; ;WHERE: ; ITEM=2 ;ADDRESS OF RELATED ITEM IN SYMBOL TABLE KODE=4 ;ADDRESS TO RETURN KODED SYMBOL NAME INDX=6 ;RETURN REFERENCES AS WORD PAIRS,RECNUM-TYPE ICNT=10 ;RETURN TOTAL NUMBER OF REFERENCES IMAX=12 ;MAX REFERENCES PERMITTED ; ; .MCALL CALL,RETURN .ENABL LSB GETSYM::MOV ITEM(R5),R0 ;GET ADDRESS OF SYM. DEF. MOV (R0)+,R1 ;SAVE LINK MOV KODE(R5),R2 ;GET ADR OF NAME DST MOV (R0)+,(R2)+ ;COPY 1/2 NAME MOV (R0)+,(R2)+ ;...OTHER 1/2 CLR @ICNT(R5) ;INIT COUNT OF REG. TO ZERO MOV INDX(R5),R4 ;GETOUTPUT ARRAY MOV #1,R3 ;SET INITIAL LOOP COUNT BR 20$ ;JOIN COMMON CODE 10$: MOV R1,R0 ;COPY LINK BEQ 40$ ;BR IF NO-MORE MOV (R0)+,R1 ;GET LINK TO NEXT MOV #3,R3 ;SET LOOP COUNT 20$: MOV (R0),R2 ;GET VALUE BIC #174000,R2 ;REDUCE TO STATMENT # MOV R2,(R4)+ ;RETURN IT BEQ 40$ ;ZERO INDICATES END MOV (R0)+,R2 ;GET VALUE AGAIN SWAB R2 ;ASH ASR R2 ;-11 ASR R2 ; ASR R2 BIC #177740,R2 ;REMOVE POSSIBLE SIGN-EXTND MOV R2,(R4)+ ;INSERT THAT INC @ICNT(R5) ;COUNT UP REFERENCES CMP @ICNT(R5),@IMAX(R5) ;CHECK AGAINST LIMIT BHIS 30$ ;BR IF FULL DEC R3 ;LOOP DONE BNE 20$ ;BR IF NO BR 10$ ;YES-GET NEXT ELEMENT 30$: NEG @ICNT(R5) ;INDICATE OVERFLOW 40$: CLR (R4)+ ;SET SENTENAL WORD RETURN ;GO-BACK ; .END