1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
module platform
implicit none
#ifdef WINDOWS
character, parameter::dir_sep = '\'
#else
character, parameter::dir_sep = '/'
#endif
character(*), parameter::favorites_file = "favorites.gmi"
contains
subroutine get_settings_directory(dir)
use iso_c_binding
implicit none
character(*), intent(out)::dir
#ifdef WINDOWS
interface
function SHGetFolderPath(hwnd, csidl, htoken, dwflags, path) bind(c, name="SHGetFolderPathA")
use iso_c_binding
type(c_ptr), value::hwnd
integer(kind=c_int), value::csidl
type(c_ptr), value::htoken
integer(kind=c_int32_t), value::dwflags
character(kind=c_char), dimension(260)::path
integer(kind=c_intptr_t)::SHGetFolderPath
end function SHGetFolderPath
end interface
integer(kind=c_intptr_t), parameter::S_OK = 0
integer(kind=c_int), parameter::CSIDL_APPDATA = 26
character(kind=c_char), dimension(260)::path
integer::i
if(SHGetFolderPath(c_null_ptr, CSIDL_APPDATA, c_null_ptr, 0, path) == S_OK) then
dir = " "
i = 1
do while(path(i) /= c_null_char .and. i < 260)
dir(i:i) = path(i)
i = i + 1
end do
else
Print *, "Warning: Could not access CSIDL_APPDATA"
call get_environment_variable("HOME", value=dir)
end if
if(dir(len_trim(dir):len_trim(dir)) /= dir_sep) then
dir = trim(dir)//dir_sep
end if
dir = trim(dir)//"LR-87"
#else
call get_environment_variable("HOME", value=dir)
if(dir(len_trim(dir):len_trim(dir)) /= dir_sep) then
dir = trim(dir)//dir_sep
end if
dir = trim(dir)//".lr87"
#endif
end subroutine get_settings_directory
subroutine get_favorites_file(filename)
implicit none
character(*), intent(out)::filename
call get_settings_directory(filename)
filename = trim(filename)//dir_sep//favorites_file
end subroutine get_favorites_file
end module platform
|