The main documentation of the Dirname_Shell_Utils Procedure contains additional explanation of this code listing.
function Dirname_Shell_Utils (Filename) result(Dirname) ! Input variables. type(character,*), intent(in) :: Filename ! Filename. ! Output variables. type(character,255) :: Dirname ! The dirname of the filename. ! Internal variables. integer :: dirname_right ! Right extent of the dirname. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Verify requirements. VERIFY(Valid_State(Filename),5) ! Filename is valid. VERIFY(LEN_TRIM(Filename) /= 0,5) ! Filename is non-null. ! Determine final character in dirname. dirname_right = INDEX(Filename, '/', .true.) - 1 ! Set dirname. select case (dirname_right) case (0) Dirname = '/' case (-1) Dirname = '.' case default Dirname = Filename(1:dirname_right) end select ! Verify guarantees. VERIFY(Valid_State(Dirname),5) ! Dirname is valid. return end function Dirname_Shell_Utils