diff options
author | Jeffrey Armstrong <jeff@approximatrix.com> | 2021-05-06 10:17:52 -0400 |
---|---|---|
committer | Jeffrey Armstrong <jeff@approximatrix.com> | 2021-05-06 10:17:52 -0400 |
commit | b9cac9bb26fe388abff34fa4fc562b0804cabb2e (patch) | |
tree | ef226cdcb40e627b74f013ff7fc962a72054debb /captain/captain.f90 | |
parent | 8ca6d21882c521fb78f1325e9a88a558364b3ad4 (diff) | |
download | levitating-b9cac9bb26fe388abff34fa4fc562b0804cabb2e.tar.gz levitating-b9cac9bb26fe388abff34fa4fc562b0804cabb2e.zip |
Fixed spelling of captain.
Diffstat (limited to 'captain/captain.f90')
-rw-r--r-- | captain/captain.f90 | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/captain/captain.f90 b/captain/captain.f90 new file mode 100644 index 0000000..76ea768 --- /dev/null +++ b/captain/captain.f90 @@ -0,0 +1,140 @@ +! Copyright (c) 2021 Approximatrix, LLC <support@approximatrix.com> +! +! 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, write_log, LOG_INFO +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 write_log("Process complete", LOG_INFO) + + call shutdown_log() + +contains + + subroutine usage() + implicit none + + character(len=256)::pname + + call get_command_argument(0, pname) + + Print *, "Usage: "//trim(pname)//" <options>" + Print *, " " + + Print *, "Options:" + Print *, " -h Display this help" + Print *, " -c <configfile> Use the specified config file" + Print *, " -g Operate in Gemini mode" + Print *, " -w Operate in CGI mode (default)" + Print *, " " + Print *, "Config file can also be specified via the environment variables:" + Print *, " LEVITATING_CONFIG_CGI Path to config for CGI mode" + Print *, " LEVITATING_CONFIG_GEMINI Path to config for Gemini mode" + + 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 + + if(.not. config_loaded) then + call get_environment_variable("LEVITATING_CONFIG_CGI", value=option, status=i) + if(i == 0) then + call load_configuration(trim(option)) + config_loaded = .true. + mode = MODE_CGI_HTML + end if + end if + + if(.not. config_loaded) then + call get_environment_variable("LEVITATING_CONFIG_GEMINI", value=option, status=i) + if(i == 0) then + call load_configuration(trim(option)) + config_loaded = .true. + mode = MODE_GEMINI + end if + end if + + ! 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
\ No newline at end of file |