The main documentation of the Basename_Shell_Utils Procedure contains additional explanation of this code listing.
function Basename_Shell_Utils (Filename, Suffix_Strip) result(Basename) ! Input variables. type(character,*), intent(in) :: Filename ! Filename. type(logical), intent(in), optional :: Suffix_Strip ! Suffix strip toggle. ! Output variables. type(character,255) :: Basename ! The basename of the filename. ! Internal variables. integer :: basename_left ! Left extent of the basename. integer :: basename_right ! Right extent of the basename. logical :: A_Suffix_Strip ! Actual suffix strip toggle. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(Filename),5) ! Filename is valid. VERIFY(LEN_TRIM(Filename) /= 0,5) ! Filename is non-null. ! Set suffix strip toggle. if (PRESENT(Suffix_Strip)) then A_Suffix_Strip = Suffix_Strip else A_Suffix_Strip = .true. end if ! Determine first character in basename. basename_left = MAX(1, INDEX(Filename, '/', .true.) + 1) ! Determine final character in basename. if (A_Suffix_Strip) then basename_right = INDEX(Filename, '.', .true.) - 1 if (basename_right == -1 .or. basename_right < basename_left) then basename_right = LEN_TRIM(Filename) end if else basename_right = LEN_TRIM(Filename) end if ! Set basename. Basename = Filename(basename_left:basename_right) ! Verify guarantees. VERIFY(Valid_State(Basename),5) ! Basename is valid. return end function Basename_Shell_Utils