diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/utilities.F90 | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/common/utilities.F90 b/common/utilities.F90 index 981dee3..0c659ac 100644 --- a/common/utilities.F90 +++ b/common/utilities.F90 @@ -285,21 +285,36 @@ contains tempfile => generate_temporary_filename() res => null() - + +#ifdef WINDOWS + call execute_command_line("dir /b/ad-h"//trim(directory)//" > "//trim(tempfile), & + wait=.true.) +#else call execute_command_line("ls -l "//trim(directory)//" > "//trim(tempfile), & wait=.true.) +#endif open(newunit=unum, file=tempfile, action='read') - + +#ifndef WINDOWS ! First line is "total ###" read(unum, '(A)', iostat=ierr) line - +#endif + dcount = 0 read(unum, '(A)', iostat=ierr) line do while(ierr == 0) + +#ifdef WINDOWS + if(len_trim(line) > 0) then + dcount = dcount + 1 + end if +#else if(line(1:1) == 'd') then dcount = dcount + 1 end if +#endif + read(unum, '(A)', iostat=ierr) line end do @@ -308,9 +323,13 @@ contains if(dcount > 0) then allocate(res(dcount)) + ! Windows is all set, don't call anything +#ifndef WINDOWS ! Now call ls, but group directories first call execute_command_line("ls --group-directories-first "//trim(directory)//" > "//trim(tempfile), & wait=.true.) +#endif + open(newunit=unum, file=tempfile, action='read') i = 0 read(unum, '(A)', iostat=ierr) line @@ -338,9 +357,14 @@ contains tempfile => generate_temporary_filename() res => null() - + +#ifdef WINDOWS + call execute_command_line("dir /b/a-d-h"//trim(directory)//" > "//trim(tempfile), & + wait=.true.) +#else call execute_command_line("ls -l "//trim(directory)//" > "//trim(tempfile), & wait=.true.) +#endif open(newunit=unum, file=tempfile, action='read') @@ -350,13 +374,15 @@ contains ! Count directories first read(unum, '(A)', iostat=ierr) line do while(ierr == 0) - + +#ifndef WINDOWS if(line(1:1) == 'd') then dcount = dcount + 1 end if - +#endif + ! ls puts a nonsense entry first. harmless, but we don't want it - if(line(1:6) /= "total ") then + if(line(1:6) /= "total " .and. len_trim(line) > 0) then total_count = total_count + 1 end if @@ -372,9 +398,13 @@ contains allocate(res(n)) !print *, "Size: ", size(res) + ! We don't need to recreate the file on Windows. It's fine. +#ifndef WINDOWS ! Now call ls, but group directories first call execute_command_line("ls --group-directories-first "//trim(directory)//" > "//trim(tempfile), & wait=.true.) +#endif + open(newunit=unum, file=tempfile, action='read') i = 0 |