From 6079fa849f2ffcde986b5bc28be5d9d39ffb27d3 Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Sat, 4 May 2024 16:43:57 +0100 Subject: [PATCH 1/5] Create gnoll.f90 Signed-off-by: Ian Hunter --- src/FORTRAN/gnoll.f90 | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/FORTRAN/gnoll.f90 diff --git a/src/FORTRAN/gnoll.f90 b/src/FORTRAN/gnoll.f90 new file mode 100644 index 000000000..5434247de --- /dev/null +++ b/src/FORTRAN/gnoll.f90 @@ -0,0 +1,18 @@ +program main + interface + function roll_and_write(s, f) bind(c, name="roll_and_write") + import :: C_CHAR + character(kind=C_CHAR), dimension(*), intent(in) :: s, f + integer :: roll_and_write + end function roll_and_write + end interface + + character(len=100) :: s, f + integer :: result + + s = "d20" + f = "output.die" + + result = roll_and_write(s, f) + print *, "Result:", result +end program main From 8214984efc820ff280e15c9d2303d16f468c7579 Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Sat, 4 May 2024 18:14:16 +0100 Subject: [PATCH 2/5] Update test_language_bindings.yml Signed-off-by: Ian Hunter --- .github/workflows/test_language_bindings.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/test_language_bindings.yml b/.github/workflows/test_language_bindings.yml index 06f1de288..88810457c 100644 --- a/.github/workflows/test_language_bindings.yml +++ b/.github/workflows/test_language_bindings.yml @@ -16,6 +16,7 @@ jobs: needs: - test_Cpp - test_csharp + - test_fortran - test_go - test_haskell - test_java @@ -66,6 +67,18 @@ jobs: run: | make cs + test_fortran: + name: "Test: FORTRAN" + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + submodules: true + - name: fortran install + run: sudo apt-get install gfortran + - name: make go + run: make fortran + test_go: name: "Test: GoLang" From e99daf2de1f5876bd5916e1f1e43b105ce17ca79 Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Sat, 4 May 2024 18:18:32 +0100 Subject: [PATCH 3/5] Create target.mk Signed-off-by: Ian Hunter --- src/FORTRAN/target.mk | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/FORTRAN/target.mk diff --git a/src/FORTRAN/target.mk b/src/FORTRAN/target.mk new file mode 100644 index 000000000..d185909f1 --- /dev/null +++ b/src/FORTRAN/target.mk @@ -0,0 +1,7 @@ + +.PHONY: fortran +fortran: all + cp build/dice.so build/libdice.so + cd src/FORTRAN && ln -s ../../build c_build + cd src/FORTRAN && ln -s ../../src/grammar c_includes + cd src/FORTRAN && LD_LIBRARY_PATH="${PWD}/build:${LD_LIBRARY_PATH}" gfortran -o main gnoll.f90 -lroll_and_write && ls output.die From 5ffed54b517ceead4f775998f3db753491744995 Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Sat, 4 May 2024 18:19:32 +0100 Subject: [PATCH 4/5] Update .github/workflows/test_language_bindings.yml Signed-off-by: Ian Hunter --- .github/workflows/test_language_bindings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test_language_bindings.yml b/.github/workflows/test_language_bindings.yml index 88810457c..aea732b3e 100644 --- a/.github/workflows/test_language_bindings.yml +++ b/.github/workflows/test_language_bindings.yml @@ -76,7 +76,7 @@ jobs: submodules: true - name: fortran install run: sudo apt-get install gfortran - - name: make go + - name: make FORTRAN run: make fortran From 693614834001a80165688a6ca9ef88234de9a61b Mon Sep 17 00:00:00 2001 From: Ian Hunter Date: Sat, 18 May 2024 18:27:35 +0100 Subject: [PATCH 5/5] Update gnoll.f90 Signed-off-by: Ian Hunter --- src/FORTRAN/gnoll.f90 | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/FORTRAN/gnoll.f90 b/src/FORTRAN/gnoll.f90 index 5434247de..509359284 100644 --- a/src/FORTRAN/gnoll.f90 +++ b/src/FORTRAN/gnoll.f90 @@ -1,18 +1,22 @@ program main + use, intrinsic :: iso_c_binding, only: c_char, c_int + implicit none + interface function roll_and_write(s, f) bind(c, name="roll_and_write") - import :: C_CHAR - character(kind=C_CHAR), dimension(*), intent(in) :: s, f - integer :: roll_and_write + import :: c_char, c_int + character(kind=c_char), dimension(*), intent(in) :: s, f + integer(c_int) :: roll_and_write end function roll_and_write end interface - - character(len=100) :: s, f - integer :: result - - s = "d20" - f = "output.die" - + + character(len=4, kind=c_char), target :: s + character(len=11, kind=c_char), target :: f + integer(c_int) :: result + + s = 'd20'C + f = 'output.die'C + result = roll_and_write(s, f) print *, "Result:", result end program main