forked from boutell/cgic
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcgiftest.f90
36 lines (36 loc) · 1.14 KB
/
cgiftest.f90
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
! added by venovako
PROGRAM CGIFTEST
USE, INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
INTERFACE
FUNCTION CGICMAIN(ARGC, ARGV) BIND(C,NAME='cgicMain')
USE, INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
INTEGER(KIND=c_int), INTENT(IN), VALUE :: ARGC
TYPE(c_ptr), INTENT(IN) :: ARGV(ARGC)
INTEGER(KIND=c_int) :: CGICMAIN
END FUNCTION CGICMAIN
END INTERFACE
INTERFACE
FUNCTION CGIMAIN() BIND(C,NAME='cgiMain')
USE, INTRINSIC :: ISO_C_BINDING
IMPLICIT NONE
INTEGER(KIND=c_int) :: CGIMAIN
END FUNCTION CGIMAIN
END INTERFACE
! TODO: this supposes that strlen(argv[0]) <= 255
CHARACTER(LEN=256,KIND=c_char), TARGET :: ARGV0
! This is just a demo, so only send argv[0], since the
! command-line arguments are not used in cgic anyway.
TYPE(c_ptr) :: ARGV(1)
INTEGER :: RET
CALL GET_COMMAND(COMMAND=ARGV0, STATUS=RET)
IF (RET .LE. 0) THEN
ARGV0 = TRIM(ARGV0)//c_null_char
ARGV(1) = C_LOC(ARGV0)
RET = INT(CGICMAIN(1_c_int, ARGV))
IF (RET .EQ. 0) RET = INT(CGIMAIN())
ELSE ! TODO: add some error handling
ARGV(1) = c_null_ptr
END IF
END PROGRAM CGIFTEST