.TITLE ICALL SUBROUTINE .LIST TTM ; ; MODULE ICALL ENTRY POINT ICALL ; ; AUTHOR L. MOORE ; ; DATE 21OCT76 ; ; CALLING PROCEDURE:- ; CALL ICALL(ARG1,ARG2,ARG3,... ) ; ARG1 = ARG # WHICH IS ADDRESS - MUST BE > 2 ; ARG2 = SUBROUTINE NAME TO BE CALLED ; -MUST BE DEFINED EXTERNAL ; ARG3,... = CALLED SUBROUTINE'S ARGUMENTS (MAX. 5) ; ; ; FUNCTION: THIS ROUTINE ALLOWS A FORTRAN PGM TO CALL A ; ROUTINE WHERE ONE OF THE ARGUMENTS IS THE ADDRESS ; OF THE PARAMETER REQ'D (FROM AN IGETAD CALL) ; ; *********************************************************** ; ; ; .PSECT ICALL:: MOV R0,-(SP) ;SAVE R0 MOV 6(R5),A1 ;MOVE IN ARGS #1 MOV 10(R5),A2 ; #2 MOV 12(R5),A3 ; #3 MOV 14(R5),A4 ; #4 MOV 16(R5),A5 ; #5 ; MOV @2(R5),R0 ;PUT PAR. # IN R0 ASL R0 ;DOUBLE IT = BYTE OFFSET SUB #4,R0 ;DROP FIRST 2 ARG'S ADD #LIST,R0 ;CALC ADDRESS MOV @(R0),(R0) ;PUT ARG IN LIST MOV 4(R5),SBN ;TAKE SUB NAME FROM LIST MOV (R5),LIST ; PUT IT AT TOP OF NEW ARG LIST SUB #2,LIST ;CALC NEW # OF ARG'S ; MOV (SP)+,R0 ;RESTORE R0 ; MOV #LIST,R5 JSR PC,@SBN ;JUMP TO SUB ; RTS PC ; SBN: .WORD 0 LIST: .WORD 0 A1: .WORD 0 A2: .WORD 0 A3: .WORD 0 A4: .WORD 0 A5: .WORD 0 ; .END