Configuration Records
Config Defaults
Override When Present
A configuration value often starts with a default and is replaced only when an override is present.
Program
Play the program to change the override timeout and see the selected timeout.
config_defaults.f90
Replay: real traced execution (multi-file project)
program config_defaults_demo
implicit none
integer :: default_timeout
integer :: override_timeout
integer :: timeout
default_timeout = 20
override_timeout = 15
timeout = default_timeout
if (override_timeout > 0) timeout = override_timeout
print '(I0, 1X, I0)', override_timeout, timeout
end program config_defaults_demo
program config_defaults_demo
implicit none
integer :: default_timeout
integer :: override_timeout
integer :: timeout
default_timeout = 20
override_timeout = 0
timeout = default_timeout
if (override_timeout > 0) timeout = override_timeout
print '(I0, 1X, I0)', override_timeout, timeout
end program config_defaults_demo
program config_defaults_demo
implicit none
integer :: default_timeout
integer :: override_timeout
integer :: timeout
default_timeout = 20
override_timeout = 30
timeout = default_timeout
if (override_timeout > 0) timeout = override_timeout
print '(I0, 1X, I0)', override_timeout, timeout
end program config_defaults_demo
default_timeout ← 20
7default_timeout = 208override_timeout = 15values this step20default_timeoutoverride_timeout ← 15
7default_timeout = 208override_timeout = 159timeout = default_timeoutvalues this step15override_timeouttimeout ← 20
8override_timeout = 159timeout = default_timeout10if (override_timeout > 0) timeout = override_timeoutvalues this step20timeouttimeout ← 15
9timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout11print '(I0, 1X, I0)', override_timeout, timeoutvalues this step15timeout.true.override_timeout > 0print '(I0, 1X, I0)', override_timeout, timeout
10 if (override_timeout > 0) timeout = override_timeout11 print '(I0, 1X, I0)', override_timeout, timeout12end program config_defaults_demooutput15 15values this step15override_timeout15timeout
default_timeout ← 20
7default_timeout = 208override_timeout = 0values this step20default_timeoutoverride_timeout ← 0
7default_timeout = 208override_timeout = 09timeout = default_timeoutvalues this step0override_timeouttimeout ← 20
8override_timeout = 09timeout = default_timeout10if (override_timeout > 0) timeout = override_timeoutvalues this step20timeoutif (override_timeout > 0) timeout = override_timeout
9timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout11print '(I0, 1X, I0)', override_timeout, timeoutvalues this step.false.override_timeout > 0print '(I0, 1X, I0)', override_timeout, timeout
10 if (override_timeout > 0) timeout = override_timeout11 print '(I0, 1X, I0)', override_timeout, timeout12end program config_defaults_demooutput0 20values this step0override_timeout20timeout
default_timeout ← 20
7default_timeout = 208override_timeout = 30values this step20default_timeoutoverride_timeout ← 30
7default_timeout = 208override_timeout = 309timeout = default_timeoutvalues this step30override_timeouttimeout ← 20
8override_timeout = 309timeout = default_timeout10if (override_timeout > 0) timeout = override_timeoutvalues this step20timeouttimeout ← 30
9timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout11print '(I0, 1X, I0)', override_timeout, timeoutvalues this step30timeout.true.override_timeout > 0print '(I0, 1X, I0)', override_timeout, timeout
10 if (override_timeout > 0) timeout = override_timeout11 print '(I0, 1X, I0)', override_timeout, timeout12end program config_defaults_demooutput30 30values this step30override_timeout30timeout
Follow the Timeout
default_timeoutstarts at20.override_timeoutstarts at15.timeoutfirst copies the default value, so it is20.- Because
override_timeout > 0is true,timeoutchanges to15. - The program prints
15 15. | override_timeout | override > 0 | selected timeout | output | | ---: | --- | ---: | --- | | 0 | false | 20 | 0 20 | | 15 | true | 15 | 15 15 | | 30 | true | 30 | 30 30 |
default value
`default_timeout` is the fallback when no override is active.
override
A positive override replaces the default value.
selected config
`timeout` is the final value used by later code.
Exercise: config_defaults.f90
Reproduce 15 15, then use override_timeout 0 and 30 to predict 0 20 and 30 30.