aboutsummaryrefslogtreecommitdiff
path: root/src/main.f90
blob: a5a0a559569c34f0a866d8177e4aaf4b3e8b5621 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
program fortran_fcgi

   use fcgi_protocol

   implicit none

   type(DICT_STRUCT), pointer :: dict => null()
   integer :: outUnit
   character(len=11) :: statusHeader
   integer :: statusCode
   integer :: rc

   outUnit = getpid()

   open (unit=outUnit, status='scratch')

   do while (fcgip_accept_environment_variables() >= 0)

      statusCode = 200
      call fcgip_make_dictionary(dict, outUnit)
      call respond(dict, statusCode, outUnit)
      write(statusHeader, '("Status: ", i3)') statusCode
      rc = fcgip_put_string(statusHeader//NUL)
      call fcgip_put_file(outUnit)

   end do

contains

   subroutine respond(dict, statusCode, outUnit)
      type(DICT_STRUCT), pointer, intent(in) :: dict
      integer, intent(out) :: statusCode
      integer, intent(in) :: outUnit
      character(len=80) :: scriptName

      call cgi_get(dict, 'DOCUMENT_URI', scriptName)

      select case (trim(scriptName))

         case ('/foo')
            write(outUnit, '(a)') scriptName
         case default
            statusCode = 404

      end select
   end subroutine respond

end program fortran_fcgi