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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
module config
implicit none
character(*), parameter::TEMPLATE_DIRECTORY_VARIABLE = "template-directory"
character(1024)::template_directory
character(*), parameter::DATABASE_VARIABLE = "database"
character(1024)::database_filename
character(*), parameter::LOGFILE_VARIABLE = "log-filename"
character(1024)::log_filename
character(*), parameter::PROJECT_NAME_VARIABLE = "project"
character(32)::project
character(*), parameter::DESCRIPTION_VARIABLE = "description"
character(1024)::description
character(*), parameter::PUBLIC_CERT_VARIABLE = "public-cert"
character(1024)::pubcert
character(*), parameter::PRIVATE_CERT_VARIABLE = "private-cert"
character(1024)::privcert
contains
subroutine get_variable(str, v)
implicit none
character(*), intent(in)::str
character(*), intent(out)::v
integer::i
v = " "
i = index(str, '=')
if(i > 0) then
v = adjustl(str(1:i))
end if
end subroutine get_variable
subroutine get_value(str, v)
implicit none
character(*), intent(in)::str
character(*), intent(out)::v
integer::i,n
v = " "
i = index(str, '=')
n = len_trim(str)
if(i > 0) then
v = adjustl(str(i+1:n))
end if
end subroutine get_value
subroutine assign_config(cvariable, cvalue)
implicit none
character(*), intent(in)::cvariable, cvalue
if(cvariable == TEMPLATE_DIRECTORY_VARIABLE) then
template_directory = cvalue
else if(cvariable == DATABASE_VARIABLE) then
database_filename = cvalue
else if(cvariable == PROJECT_NAME_VARIABLE) then
project = cvalue
else if(cvariable == DESCRIPTION_VARIABLE) then
description = cvalue
else if(cvariable == PUBLIC_CERT_VARIABLE) then
pubcert = cvalue
else if(cvariable == PRIVATE_CERT_VARIABLE) then
privcert = cvalue
else if(cvariable == LOGFILE_VARIABLE) then
log_filename = cvalue
end if
end subroutine assign_config
subroutine load_configuration(filename)
implicit none
character(*), intent(in)::filename
integer::unit_number, istatus
character(1024)::line, cvalue
character(64)::cvariable
open(newunit=unit_number, file=trim(filename), status='old', &
action="read", iostat=istatus)
read(unit_number, '(A)', iostat=istatus) line
do while(istatus == 0)
if(len_trim(line) > 0 .and. line(1:1) /= '#') then
call get_variable(line, cvariable)
call get_value(line, cvalue)
call assign_config(trim(cvariable), trim(cvalue))
end if
read(unit_number, '(A)', iostat=istatus) line
end do
close(unit_number)
end subroutine load_configuration
end module config
|