SUBMODULE (ModMain : SubMod1) SubMod2 ! This submodule contains implementation of 'Proc_Main_II' routine. IMPLICIT NONE ! Enforce explicit typing of all variables ABSTRACT INTERFACE !---------------------------------------------------------------------- FUNCTION Proc_CB_ABST2(ByteArr, Offset) RESULT(Res) !^ an abstract procedure for callback routines. IMPORT INTEGER(KIND=1), INTENT(IN) :: ByteArr(0:) INTEGER, INTENT(IN) :: Offset INTEGER(KIND=8) :: Res END FUNCTION Proc_CB_ABST2 !---------------------------------------------------------------------- END INTERFACE CONTAINS !************************************************************************** MODULE FUNCTION Proc_Main_II(Input, Algo) RESULT(Output) ! main procedure II. ! arguments INTEGER(KIND=1), INTENT(IN) :: Input(:) INTEGER, INTENT(IN) :: Algo INTEGER(KIND=8) :: Output ! execution SELECT CASE (Algo) CASE (1) Output = Proc_Engine_II(Input, Proc_CB_I) CASE (2) Output = Proc_Engine_II(Input, Proc_CB_II) CASE (3) Output = Proc_Engine_II(Input, Proc_CB_III) END SELECT RETURN END FUNCTION Proc_Main_II !************************************************************************** FUNCTION Proc_Engine_II(Input, ProcCB) RESULT(Output) ! working procedure II. ! arguments INTEGER(KIND=1), INTENT(IN) :: Input(:) PROCEDURE(Proc_CB_ABST) :: ProcCB ! PROCEDURE(Proc_CB_ABST2) :: ProcCB INTEGER(KIND=8) :: Output ! execution Output = ProcCB(Input, 0) END FUNCTION Proc_Engine_II !************************************************************************** END SUBMODULE SubMod2