aboutsummaryrefslogtreecommitdiff
path: root/captain/config.f90
blob: e66d42fa62b830643345e86384d4843a459246bf (plain)
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