module external_handling implicit none contains function generate_players_gemini() result(res) use captain_db implicit none character(len=:), pointer::res character(len=PLAYER_NAME_LENGTH), dimension(:), pointer::players integer::n, i, nsize character(len=3*PLAYER_NAME_LENGTH)::one_player n = get_player_count() if(n == 0) then allocate(character(len=1024) :: res) res = "None Yet" else res = "## Existing Players" players => get_player_names() nsize = 1024 do i = 1, size(players) nsize = nsize + 16 + 2*len_trim(players(i)) end do allocate(character(len=nsize) :: res) do i = 1, n one_player = "=> /players/"//trim(players(i))//".gmi "//trim(players(i)) res = trim(res)//new_line(res(1:1))//trim(one_player) end do deallocate(players) end if res = trim(res)//new_line(res(1:1))//"## Management"// & new_line(res(1:1))//"=> /players/add.gmi Add Player" end function generate_players_gemini function external_request_gemini(request) result(disk_filename) use page_template use config, only: template_filepath, project use logging, only: write_log implicit none character(*), intent(in)::request character(len=:), pointer::disk_filename character(1024)::template_file type(template)::page character(len=:), pointer::contents ! Open the base template call template_filepath("index.gmi", template_file) call page%init(trim(template_file)) if(trim(request) == "/" .or. trim(request) == "/index.gmi") then call page%assign('title', 'Home') else if(trim(request) == "/releases.gmi") then call page%assign('title', 'Releases') else if(trim(request) == "/jobs.gmi") then call page%assign('title', 'Jobs') else if(trim(request) == "/players.gmi") then call page%assign('title', 'Players') contents => generate_players_gemini() call page%assign('contents', contents) else if(request(1:9) == '/players/') then if(trim(request) == "/players/add.gmi") then ! Need input! else end if else if(trim(request) == "/about.gmi") then call page%assign('title', 'About') else call page%assign('title', 'Not Found') end if call page%assign('project', project) call page%render() disk_filename => page%output_filename end function external_request_gemini end module external_handling