.SBTTL $NAM - TRACEBACK NAME ROUTINE ;+ ; THIS ROUTINE IS A VERSION OF DIGITAL'S $NAM ROUTINE. IT PERFORMS ; THE SAME FUNCTION BUT ALSO FLAGS THE START AND END OF ROUTINES. ; ; THE CHAIN IS CREATED ON THE RUN-TIME STACK AND LINKED TO THE PREVIOUS ; NAME. THE ROUTINES DOES A CO-ROUTINE CALL AND ON RETURN, UNLINKS THE ; CHAIN AND RETURNS TO THE CALLER. ; ; INPUT: ; ; (SP)+00 = FIRST PART OF NAME (RAD50) ; (SP)+02 = SECOND PART OF NAME (RAD50) ; ; R4 = RETURN ADDRESS. ; ; OUTPUT: ; ; NAME TRACE BLOCK SETUP. ON FINAL RETURN, PREVIOUS ; CHAIN SETUP. ;- NAM$:: ;REF. LABEL MOV #TR.BEG,FLAG ;FLAG START OF SUBROUTINE MOV @#$OTSV,R3 ;GET OTS POINTER MOV (R3)+,-(SP) ;OLD SEQUENCE NUMBER MOV @R3,-(SP) ;OLD NAME POINTER MOV SP,@R3 ;NEW NAME POINTER CLR -(R3) ;INIT SEQUENCE NUMBER CALL @R4 ;CALL CALLER BACK ; ; R0-R3 ARE UNTOUCHED FOR RETURN SINCE THEY MAY CONTAIN FUNCTION VALUE. ; MOV @#$OTSV,R4 ;GET OTS POINTER MOV (SP)+,2(R4) ;W.NAMC MOV (SP)+,@R4 ;W.SEQC CMP (SP)+,(SP)+ ;CLEAN STACK MOV #TR.END,FLAG ;FLAG END OF SUBROUTINE RETURN ;TAKE FINAL RETURN .END