Constants Module

module m_ConstantsOnly
  integer, public, parameter :: TENNIS  = 1
  integer, public, parameter :: SWIM    = 2
  integer, public, parameter :: SAUNA   = 3
  integer, public, parameter :: HOT_TUB = 4
  integer, public, parameter :: &
   NUMBER_OF_ACTIVITIES = 4
  integer, public, parameter :: &
   MAX_MONTHLY_ACTIVITIES = 60
endmodule m_ConstantsOnly

Global Variables Module

module m_GlobalVariables
 use m_ConstantsOnly, only: MAX_MONTHLY_ACTIVITIES
 private ! makes sure not to export entities
    ! from m_ConstantsOnly

 integer, public, &
   dimension(MAX_MONTHLY_ACTIVITIES) :: &
   activities_list
 integer, public :: number_of_monthly_activities
endmodule m_GlobalVariables

Types and Procedures Module

module m_types_and_procs
 ! public procedures
 public :: SetActivity, GetActivity
 ! private procedures
 private :: SetStartTime, SetEndTime

 type, private :: t_act_schedule ! This type is
         ! private to this module

           ! yyyymmddhhmmss
  character(len=14) :: start_day_time
  integer :: duration_in_seconds
 endtype t_act_schedule

 type, public :: t_agenda ! This type is available
           ! to users of this module
  private ! The inside parts of this type are
     ! private to this module
   integer :: activity
   type(t_act_schedule) :: act_schedule
 endtype t_agenda

contains ! separates the data entities from the
    ! procedures
 subroutine SetActivity(an_activity)
  integer, intent(in) :: an_activity
  ! ...
 endsubroutine SetActivity

 function GetActivity() result(an_activity)
  ! ...
 subroutine SetStartTime()
  ! ...
 subroutine SetEndTime()
  ! ...
endmodule m_types_and_procs