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.

override_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
  1. default_timeout ← 20

    7default_timeout = 208override_timeout = 15
    values this step20default_timeout
  2. override_timeout ← 15

    7default_timeout = 208override_timeout = 159timeout = default_timeout
    values this step15override_timeout
  3. timeout ← 20

    8override_timeout = 159timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout
    values this step20timeout
  4. timeout ← 15

    9timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout11print '(I0, 1X, I0)', override_timeout, timeout
    values this step15timeout.true.override_timeout > 0
  5. print '(I0, 1X, I0)', override_timeout, timeout

    10    if (override_timeout > 0) timeout = override_timeout11    print '(I0, 1X, I0)', override_timeout, timeout12end program config_defaults_demo
    output15 15
    values this step15override_timeout15timeout
  1. default_timeout ← 20

    7default_timeout = 208override_timeout = 0
    values this step20default_timeout
  2. override_timeout ← 0

    7default_timeout = 208override_timeout = 09timeout = default_timeout
    values this step0override_timeout
  3. timeout ← 20

    8override_timeout = 09timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout
    values this step20timeout
  4. if (override_timeout > 0) timeout = override_timeout

    9timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout11print '(I0, 1X, I0)', override_timeout, timeout
    values this step.false.override_timeout > 0
  5. print '(I0, 1X, I0)', override_timeout, timeout

    10    if (override_timeout > 0) timeout = override_timeout11    print '(I0, 1X, I0)', override_timeout, timeout12end program config_defaults_demo
    output0 20
    values this step0override_timeout20timeout
  1. default_timeout ← 20

    7default_timeout = 208override_timeout = 30
    values this step20default_timeout
  2. override_timeout ← 30

    7default_timeout = 208override_timeout = 309timeout = default_timeout
    values this step30override_timeout
  3. timeout ← 20

    8override_timeout = 309timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout
    values this step20timeout
  4. timeout ← 30

    9timeout = default_timeout10if (override_timeout > 0) timeout = override_timeout11print '(I0, 1X, I0)', override_timeout, timeout
    values this step30timeout.true.override_timeout > 0
  5. print '(I0, 1X, I0)', override_timeout, timeout

    10    if (override_timeout > 0) timeout = override_timeout11    print '(I0, 1X, I0)', override_timeout, timeout12end program config_defaults_demo
    output30 30
    values this step30override_timeout30timeout

Follow the Timeout

  1. default_timeout starts at 20.
  2. override_timeout starts at 15.
  3. timeout first copies the default value, so it is 20.
  4. Because override_timeout > 0 is true, timeout changes to 15.
  5. 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.