.TITLE CALC_DECODE .IDENT /V01.0/ ;****************************************************************************** ; ; UNIT NAME: CALC_DECODE ; ; PURPOSE: TO DECODE A SYMBOL TABLE ENTRY ; ; INVOCATION METHOD: ; CALL CALC_DECODE(SYMENT,[ITYPE],[FLAGS],[VALUE],[NAME],[NAME_LEN]) ; ; ARGUMENT LIST: ; NAME TYPE USE FULL NAME:DESCRIPTION ; -------------------- ---- --- --------------------- SYMENT = 4 ;*** I SYMBOL TABLE ADDRESS ITYPE = 8 ;I*2 O TYPE OF VARIABLE (OPTIONAL) FLAGS = 12 ;I*2 O FLAGS (OPTIONAL) VALUE = 16 ;I*4 O VALUE (OPTIONAL) NAME = 20 ;C*(*) O NAME STRING (OPTIONAL) NAME_LEN= 24 ;I*4 O LENGTH OF NAME STRING (OPTIONAL) ; ; ; REGISTER USAGE: ; R0 ADDR. OF NAME DESCR. FROM SYMTAB ; R1 ADDR. OF NAME DESCR. FROM ARGUMENT LIST ; R2 USED BY CALLED MODULE ; R3 USED BY CALLED MODULE ; R4 USED BY CALLED MODULE ; R5 USED BY CALLED MODULE ; R5 USED BY CALLED MODULE ; R6 USED BY CALLED MODULE ; R7 SYMBOL TABLE ADDRESS ; R8 NUMBER OF ARGUMENTS ; ; MODULES CALLED: ; NAME PURPOSE ; ------------- -------------------------------------- ; LIB$SCOPY_DXDX6 TO COPY NAME STRING ; ; DEVELOPMENT HISTORY: ; AUTHOR DATE COMMENTS ; D. FITZGERALD 4/14/83 ; ;****************************************************************************** ; ; .PSECT CALC_DECODE PIC,CON,LCL,SHR,NOWRT,EXE,LONG ; _STDEF ;DEFINE SYMBOL TABLE ENTRY FIELDS ; ; ; .ENTRY CALC_DECODE,^M ; MOVL (AP),R8 ;GET NUMBER OF ARGUMENTS MOVL SYMENT(AP),R7 ;GET SYMBOL TABLE BASE ADDRESS ; ; COPY TYPE ; CMPL R8,#1 ;IF ANYTHING SPECIFIED BLEQ 100$ ;THEN TSTL ITYPE(AP) ;IF TYPE SPECIFIED BEQL 10$ ;THEN MOVW ST_W_TYPE(R7),@ITYPE(AP) ;COPY TYPE BACK 10$: ;ENDIF ; ; COPY FLAGS ; CMPL R8,#2 ;IF FLAGS SPECIFIED BLEQ 100$ TSTL FLAGS(AP) BEQL 20$ ;THEN MOVW ST_W_FLAGS(R7),@FLAGS(AP) ;COPY FLAGS BACK 20$: ;ENDIF ; ; COPY VALUE ; CMPL R8,#3 ;IF VALUE SPECIFIED BLEQ 100$ TSTL VALUE(AP) BEQL 30$ ;THEN MOVL ST_L_VALUE(R7),@VALUE(AP) ;COPY VALUE BACK 30$: ;ENDIF ; ; COPY NAME STRING ; CMPL R8,#4 ;IF NAME SPECIFIED BLEQ 100$ TSTL NAME(AP) BEQL 40$ ;THEN MOVAL ST_Q_NAME(R7),R0 ; ALL SCOPY TO COPY NAME MOVAL @NAME(AP),R1 JSB G^LIB$SCOPY_DXDX6 SIGNAL R0 40$: ;ENDIF ; ; COPY NAME_LEN ; CMPL R8,#5 ;IF NAME_LEN SPECIFIED BLEQ 100$ TSTL NAME_LEN(AP) BEQL 50$ ;THEN MOVZWL ST_Q_NAME(R7),@NAME_LEN(AP) ;COPY NAME_LEN TO USER 50$: ;ENDIF 100$: ;ENDIF RET ;RETURN .END