.TITLE CASE COMPUTED SUBROUTINE CALL .SBTTL GENERAL INFORMATION .IDENT /01/ .LIST ME ;+ ; AUTHOR: KERRY WYCKOFF ;- ;+ ; CHANGES: NONE ;- ;+ ; MODULE FUNCTION: ; ; THIS ROUTINE USES THE SPECIFIED INDEX ; TO CALL THE CORRESPONDING SUBROUTINE IN THE ; PARAMETER LIST. IF THERE IS NO SUCH SUBROUTINE, ; THE ROUTINE SIMPLY RETURNS. ; ;- ;+ ; ASSEMBLY INSTRUCTIONS: ; ; MAC CASE=CASE ; ;- ;+ ; CALL FORMAT: ; ; CALL CASE(INDEX,SUB1,...,SUBN) ; ;- .PAGE .SBTTL SYMBOL, MACRO, DATA DEFINITIONS ;+ ; LOCAL SYMBOL DEFINITIONS: NONE ;- ;+ ; LOCAL MACROS: NONE ;- ;+ ; LOCAL DATA BLOCKS: NONE ;- .PAGE .SBTTL FUNCTION DETAILS ;+ ; FUNCTION DETAILS: ; ; ; INPUTS: ; ; R5 CONTAINS THE ADDRESS OF THE PARAMETER LIST ; 1) WORD: NUMBER OF PARAMETERS ; 2) WORD: ADDRESS OF INDEX ; 3) WORD: ADDRESS OF SUBROUTINE 1 ; . ; . ; . ; N+2) WORD: ADDRESS OF N TH SUBROUTINE ; ; OUTPUTS: NONE ; ; SIDE EFFECTS: ; ; R5 HAS BEEN ALTERED TO INCREASE SPEED ; ;- .PAGE .SBTTL CODE SECTION .PSECT W12COD .ENABL LSB CASE:: MOV @2(R5),R0 ; R0=INDEX BLE 99$ ; IF LE 0, RETURN CMP (R5)+,R0 ; ENOUGH ROUTINES ? BGE 99$ ; IF NOT, RETURN ADD R0,R0 ; DOUBLE FOR WORDS ADD R5,R0 ; R0=ADDRESS OF ADDRESS MOV (R0),PC ; SUBROUTINE ADDRESS TO PC 99$: RTS PC ; RETURN .END