! Copyright (c) 2021 Approximatrix, LLC ! ! Permission is hereby granted, free of charge, to any person obtaining a copy ! of this software and associated documentation files (the "Software"), to deal ! in the Software without restriction, including without limitation the rights ! to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ! copies of the Software, and to permit persons to whom the Software is ! furnished to do so, subject to the following conditions: ! ! The above copyright notice and this permission notice shall be included in ! all copies or substantial portions of the Software. ! ! The Software shall be used for Good, not Evil. ! ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ! AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ! OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ! SOFTWARE. program captain use captain_db use config use logging, only: initialize_log => initialize, shutdown_log => shutdown use gemini, only: handle_gemini => handle_request use web, only: handle_web => handle_request implicit none integer::mode integer, parameter::MODE_GEMINI = 1, & MODE_CGI_HTML = 2 call random_seed() ! For possible crypto call parse_options() call initialize_log(log_filename, loglevel) call initialize_db(database_filename) select case(mode) case(MODE_GEMINI) call handle_gemini() case(MODE_CGI_HTML) call handle_web() end select call shutdown_db() call shutdown_log() contains subroutine usage() implicit none character(len=256)::pname call get_command_argument(0, pname) Print *, "Usage: "//trim(pname)//" " Print *, " " Print *, "Options:" Print *, " -h Display this help" Print *, " -c Use the specified config file" Print *, " -g Operate in Gemini mode" Print *, " -w Operate in CGI mode (default)" end subroutine usage subroutine parse_options use config implicit none character(len=1024)::option logical::config_loaded integer::i config_loaded = .false. mode = MODE_CGI_HTML loglevel = 3 i = 1 do while(i <= command_argument_count()) call get_command_argument(i, option) if(trim(option) == "-h") then call usage() stop else if(trim(option) == "-g") then mode = MODE_GEMINI else if(trim(option) == "-c") then i = i + 1 call get_command_argument(i, option) call load_configuration(trim(option)) config_loaded = .true. end if i = i + 1 end do ! Assign working directory from command if not specified if(.not. config_loaded) then Print *, "No configuration file specified" stop end if end subroutine parse_options end program captain