diff options
Diffstat (limited to 'captain/requtils.f90')
-rw-r--r-- | captain/requtils.f90 | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/captain/requtils.f90 b/captain/requtils.f90 index a6097d2..df365ff 100644 --- a/captain/requtils.f90 +++ b/captain/requtils.f90 @@ -23,6 +23,16 @@ module request_utils implicit none + interface player_link + module procedure player_link_from_name + module procedure player_link_from_id + end interface + + interface instruction_link + module procedure instruction_link_from_name + module procedure instruction_link_from_id + end interface + contains pure function success_code(req) @@ -232,6 +242,125 @@ contains end function build_link + function element_link_from_name(n, category, gemini_mode, prefix) result(res) + implicit none + + character(*), intent(in)::n, category + logical, intent(in)::gemini_mode + character(*), intent(in), optional::prefix + character(len=:), pointer::res + + character(256)::dest + + if(present(prefix)) then + dest = prefix + if(dest(len_trim(dest):len_trim(dest)) /= '/') then + dest = trim(dest)//"/" + end if + else + dest = "/" + end if + + dest = trim(dest)//trim(category)//"/"//trim(n) + + if(gemini_mode) then + dest = trim(dest)//".gmi" + else + dest = trim(dest)//".html" + end if + + res => build_link(trim(dest), trim(n), gemini_mode) + + end function element_link_from_name + + function player_link_from_name(n, gemini_mode, prefix) result(res) + implicit none + + character(*), intent(in)::n + logical, intent(in)::gemini_mode + character(*), intent(in), optional::prefix + + character(64)::internal_prefix + character(len=:), pointer::res + + if(present(prefix)) then + internal_prefix = prefix + else + internal_prefix = "/" + end if + + res => element_link_from_name(n, "players", gemini_mode, internal_prefix) + + end function player_link_from_name + + function player_link_from_id(id, gemini_mode, prefix) result(res) + use captain_db, only: PLAYER_NAME_LENGTH, get_player_name + implicit none + + integer, intent(in)::id + logical, intent(in)::gemini_mode + character(*), intent(in), optional::prefix + character(len=:), pointer::res + + character(64)::internal_prefix + character(PLAYER_NAME_LENGTH)::name + + if(present(prefix)) then + internal_prefix = prefix + else + internal_prefix = "/" + end if + + name = " " + call get_player_name(id, name) + res => player_link_from_name(name, gemini_mode, internal_prefix) + + end function player_link_from_id + + function instruction_link_from_name(n, gemini_mode, prefix) result(res) + implicit none + + character(*), intent(in)::n + logical, intent(in)::gemini_mode + character(*), intent(in), optional::prefix + + character(64)::internal_prefix + character(len=:), pointer::res + + if(present(prefix)) then + internal_prefix = prefix + else + internal_prefix = "/" + end if + + res => element_link_from_name(n, "instructions", gemini_mode, internal_prefix) + + end function instruction_link_from_name + + function instruction_link_from_id(id, gemini_mode, prefix) result(res) + use captain_db, only: PLAYER_NAME_LENGTH, get_instruction_name + implicit none + + integer, intent(in)::id + logical, intent(in)::gemini_mode + character(*), intent(in), optional::prefix + character(len=:), pointer::res + + character(64)::internal_prefix + character(PLAYER_NAME_LENGTH)::name + + if(present(prefix)) then + internal_prefix = prefix + else + internal_prefix = "/" + end if + + name = " " + call get_instruction_name(id, name) + res => instruction_link_from_name(name, gemini_mode, internal_prefix) + + end function instruction_link_from_id + function generate_simple_pager(startindex, stopindex, step, maxcount, page, gemini_mode) result(res) use logging implicit none |