diff --git a/IPhreeqc_interface.F90 b/IPhreeqc_interface.F90 new file mode 100644 index 00000000..7f66f11d --- /dev/null +++ b/IPhreeqc_interface.F90 @@ -0,0 +1,1116 @@ +#ifdef IPHREEQC_MODULE +MODULE IPhreeqc +implicit none +SAVE +CONTAINS + +INTEGER FUNCTION AccumulateLine(id, line) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION AccumulateLineF(id, line) & + BIND(C, NAME='AccumulateLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: line(*) + END FUNCTION AccumulateLineF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: line + AccumulateLine = AccumulateLineF(id, trim(line)//C_NULL_CHAR) + return +END FUNCTION AccumulateLine + +INTEGER FUNCTION AddError(id, error_msg) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION AddErrorF(id, error_msg) & + BIND(C, NAME='AddErrorF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: error_msg(*) + END FUNCTION AddErrorF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: error_msg + AddError = AddErrorF(id, trim(error_msg)//C_NULL_CHAR) + return +END FUNCTION AddError + +INTEGER FUNCTION AddWarning(id, warn_msg) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION AddWarningF(id, warn_msg) & + BIND(C, NAME='AddWarningF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: warn_msg(*) + END FUNCTION AddWarningF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: warn_msg + AddWarning = AddWarningF(id, trim(warn_msg)//C_NULL_CHAR) + return +END FUNCTION AddWarning + +INTEGER FUNCTION ClearAccumulatedLines(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION ClearAccumulatedLinesF(id) & + BIND(C, NAME='ClearAccumulatedLinesF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION ClearAccumulatedLinesF + END INTERFACE + INTEGER, INTENT(in) :: id + ClearAccumulatedLines = ClearAccumulatedLinesF(id) + return +END FUNCTION ClearAccumulatedLines + +INTEGER FUNCTION CreateIPhreeqc() + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION CreateIPhreeqcF() & + BIND(C, NAME='CreateIPhreeqcF') + USE ISO_C_BINDING + IMPLICIT NONE + END FUNCTION CreateIPhreeqcF + END INTERFACE + CreateIPhreeqc = CreateIPhreeqcF() + return +END FUNCTION CreateIPhreeqc + +INTEGER FUNCTION DestroyIPhreeqc(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION DestroyIPhreeqcF(id) & + BIND(C, NAME='DestroyIPhreeqcF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION DestroyIPhreeqcF + END INTERFACE + INTEGER, INTENT(in) :: id + DestroyIPhreeqc = DestroyIPhreeqcF(id) + return +END FUNCTION DestroyIPhreeqc + +INTEGER FUNCTION GetComponentCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetComponentCountF(id) & + BIND(C, NAME='GetComponentCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetComponentCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetComponentCount = GetComponentCountF(id) + return +END FUNCTION GetComponentCount + +SUBROUTINE GetComponent(id, n, comp) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetComponentF(id, n, comp, l) & + BIND(C, NAME='GetComponentF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: comp(*) + END SUBROUTINE GetComponentF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: comp + call GetComponentF(id, n, comp, len(comp)) + return +END SUBROUTINE GetComponent + +INTEGER FUNCTION GetCurrentSelectedOutputUserNumber(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetCurrentSelectedOutputUserNumberF(id) & + BIND(C, NAME='GetCurrentSelectedOutputUserNumberF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetCurrentSelectedOutputUserNumberF + END INTERFACE + INTEGER, INTENT(in) :: id + GetCurrentSelectedOutputUserNumber = GetCurrentSelectedOutputUserNumberF(id) + return +END FUNCTION GetCurrentSelectedOutputUserNumber + +SUBROUTINE GetDumpFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetDumpFileNameF(id, fname, l) & + BIND(C, NAME='GetDumpFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: fname(*) + END SUBROUTINE GetDumpFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: fname + call GetDumpFileNameF(id, fname, len(fname)) + return +END SUBROUTINE GetDumpFileName + +LOGICAL FUNCTION GetDumpFileOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetDumpFileOnF(id) & + BIND(C, NAME='GetDumpFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetDumpFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetDumpFileOn = (GetDumpFileOnF(id) .ne. 0) + return +END FUNCTION GetDumpFileOn + +INTEGER FUNCTION GetDumpStringLineCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetDumpStringLineCountF(id) & + BIND(C, NAME='GetDumpStringLineCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetDumpStringLineCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetDumpStringLineCount = GetDumpStringLineCountF(id) + return +END FUNCTION GetDumpStringLineCount + +SUBROUTINE GetDumpStringLine(id, n, line) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetDumpStringLineF(id, n, line, l) & + BIND(C, NAME='GetDumpStringLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: line(*) + END SUBROUTINE GetDumpStringLineF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: line + call GetDumpStringLineF(id, n, line, len(line)) + return +END SUBROUTINE GetDumpStringLine + + +LOGICAL FUNCTION GetDumpStringOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetDumpStringOnF(id) & + BIND(C, NAME='GetDumpStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetDumpStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetDumpStringOn = (GetDumpStringOnF(id) .ne. 0) + return +END FUNCTION GetDumpStringOn + +SUBROUTINE GetErrorFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetErrorFileNameF(id, fname, l) & + BIND(C, NAME='GetErrorFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: fname(*) + END SUBROUTINE GetErrorFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: fname + call GetErrorFileNameF(id, fname, len(fname)) + return +END SUBROUTINE GetErrorFileName + +LOGICAL FUNCTION GetErrorFileOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetErrorFileOnF(id) & + BIND(C, NAME='GetErrorFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetErrorFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetErrorFileOn = (GetErrorFileOnF(id) .ne. 0) + return +END FUNCTION GetErrorFileOn + +INTEGER FUNCTION GetErrorStringLineCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetErrorStringLineCountF(id) & + BIND(C, NAME='GetErrorStringLineCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetErrorStringLineCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetErrorStringLineCount = GetErrorStringLineCountF(id) + return +END FUNCTION GetErrorStringLineCount + +SUBROUTINE GetErrorStringLine(id, n, line) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetErrorStringLineF(id, n, line, l) & + BIND(C, NAME='GetErrorStringLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: line(*) + END SUBROUTINE GetErrorStringLineF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: line + call GetErrorStringLineF(id, n, line, len(line)) + return +END SUBROUTINE GetErrorStringLine + +LOGICAL FUNCTION GetErrorStringOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetErrorStringOnF(id) & + BIND(C, NAME='GetErrorStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetErrorStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetErrorStringOn = (GetErrorStringOnF(id) .ne. 0) + return +END FUNCTION GetErrorStringOn + +SUBROUTINE GetLogFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetLogFileNameF(id, fname, l) & + BIND(C, NAME='GetLogFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: fname(*) + END SUBROUTINE GetLogFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: fname + call GetLogFileNameF(id, fname, len(fname)) + return +END SUBROUTINE GetLogFileName + +LOGICAL FUNCTION GetLogFileOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetLogFileOnF(id) & + BIND(C, NAME='GetLogFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetLogFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetLogFileOn = (GetLogFileOnF(id) .ne. 0) + return +END FUNCTION GetLogFileOn + +INTEGER FUNCTION GetLogStringLineCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetLogStringLineCountF(id) & + BIND(C, NAME='GetLogStringLineCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetLogStringLineCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetLogStringLineCount = GetLogStringLineCountF(id) + return +END FUNCTION GetLogStringLineCount + +SUBROUTINE GetLogStringLine(id, n, line) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetLogStringLineF(id, n, line, l) & + BIND(C, NAME='GetLogStringLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: line(*) + END SUBROUTINE GetLogStringLineF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: line + call GetLogStringLineF(id, n, line, len(line)) + return +END SUBROUTINE GetLogStringLine + +LOGICAL FUNCTION GetLogStringOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetLogStringOnF(id) & + BIND(C, NAME='GetLogStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetLogStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetLogStringOn = (GetLogStringOnF(id) .ne. 0) + return +END FUNCTION GetLogStringOn + +INTEGER FUNCTION GetNthSelectedOutputUserNumber(id, n) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetNthSelectedOutputUserNumberF(id, n) & + BIND(C, NAME='GetNthSelectedOutputUserNumberF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n + END FUNCTION GetNthSelectedOutputUserNumberF + END INTERFACE + INTEGER, INTENT(in) :: id, n + GetNthSelectedOutputUserNumber = GetNthSelectedOutputUserNumberF(id, n) + return +END FUNCTION GetNthSelectedOutputUserNumber + +SUBROUTINE GetOutputFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetOutputFileNameF(id, fname, l) & + BIND(C, NAME='GetOutputFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: fname(*) + END SUBROUTINE GetOutputFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: fname + call GetOutputFileNameF(id, fname, len(fname)) + return +END SUBROUTINE GetOutputFileName + +LOGICAL FUNCTION GetOutputFileOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetOutputFileOnF(id) & + BIND(C, NAME='GetOutputFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetOutputFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetOutputFileOn = (GetOutputFileOnF(id) .ne. 0) + return +END FUNCTION GetOutputFileOn + +INTEGER FUNCTION GetOutputStringLineCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetOutputStringLineCountF(id) & + BIND(C, NAME='GetOutputStringLineCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetOutputStringLineCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetOutputStringLineCount = GetOutputStringLineCountF(id) + return +END FUNCTION GetOutputStringLineCount + +SUBROUTINE GetOutputStringLine(id, n, line) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetOutputStringLineF(id, n, line, l) & + BIND(C, NAME='GetOutputStringLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: line(*) + END SUBROUTINE GetOutputStringLineF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: line + call GetOutputStringLineF(id, n, line, len(line)) + return +END SUBROUTINE GetOutputStringLine + +LOGICAL FUNCTION GetOutputStringOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetOutputStringOnF(id) & + BIND(C, NAME='GetOutputStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetOutputStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetOutputStringOn = (GetOutputStringOnF(id) .ne. 0) + return +END FUNCTION GetOutputStringOn + +INTEGER FUNCTION GetSelectedOutputColumnCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputColumnCountF(id) & + BIND(C, NAME='GetSelectedOutputColumnCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetSelectedOutputColumnCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetSelectedOutputColumnCount = GetSelectedOutputColumnCountF(id) + return +END FUNCTION GetSelectedOutputColumnCount + +INTEGER FUNCTION GetSelectedOutputCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputCountF(id) & + BIND(C, NAME='GetSelectedOutputCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetSelectedOutputCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetSelectedOutputCount = GetSelectedOutputCountF(id) + return +END FUNCTION GetSelectedOutputCount + +SUBROUTINE GetSelectedOutputFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetSelectedOutputFileNameF(id, fname, l) & + BIND(C, NAME='GetSelectedOutputFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: fname(*) + END SUBROUTINE GetSelectedOutputFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: fname + call GetSelectedOutputFileNameF(id, fname, len(fname)) + return +END SUBROUTINE GetSelectedOutputFileName + +LOGICAL FUNCTION GetSelectedOutputFileOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputFileOnF(id) & + BIND(C, NAME='GetSelectedOutputFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetSelectedOutputFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetSelectedOutputFileOn = (GetSelectedOutputFileOnF(id) .ne. 0) + return +END FUNCTION GetSelectedOutputFileOn + +INTEGER FUNCTION GetSelectedOutputStringLineCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputStringLineCountF(id) & + BIND(C, NAME='GetSelectedOutputStringLineCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetSelectedOutputStringLineCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetSelectedOutputStringLineCount = GetSelectedOutputStringLineCountF(id) + return +END FUNCTION GetSelectedOutputStringLineCount + +SUBROUTINE GetSelectedOutputStringLine(id, n, line) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetSelectedOutputStringLineF(id, n, line, l) & + BIND(C, NAME='GetSelectedOutputStringLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: line(*) + END SUBROUTINE GetSelectedOutputStringLineF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: line + call GetSelectedOutputStringLineF(id, n, line, len(line)) + return +END SUBROUTINE GetSelectedOutputStringLine + +LOGICAL FUNCTION GetSelectedOutputStringOn(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputStringOnF(id) & + BIND(C, NAME='GetSelectedOutputStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetSelectedOutputStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + GetSelectedOutputStringOn = (GetSelectedOutputStringOnF(id) .ne. 0) + return +END FUNCTION GetSelectedOutputStringOn + +INTEGER FUNCTION GetSelectedOutputRowCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputRowCountF(id) & + BIND(C, NAME='GetSelectedOutputRowCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetSelectedOutputRowCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetSelectedOutputRowCount = GetSelectedOutputRowCountF(id) + return +END FUNCTION GetSelectedOutputRowCount + +INTEGER FUNCTION GetSelectedOutputValue(id, row, col, vtype, dvalue, svalue) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetSelectedOutputValueF(id, row, col, vtype, dvalue, svalue, l) & + BIND(C, NAME='GetSelectedOutputValueF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, row, col, l + INTEGER(KIND=C_INT), INTENT(out) :: vtype + REAL(KIND=C_DOUBLE), INTENT(out) :: dvalue + CHARACTER(KIND=C_CHAR), INTENT(out) :: svalue(*) + END FUNCTION GetSelectedOutputValueF + END INTERFACE + INTEGER, INTENT(in) :: id, row, col + INTEGER, INTENT(out) :: vtype + DOUBLE PRECISION, INTENT(out) :: dvalue + CHARACTER(len=*), INTENT(out) :: svalue + INTEGER :: l + l = len(svalue) + GetSelectedOutputValue = GetSelectedOutputValueF(id, row, col, vtype, dvalue, svalue, l) + return +END FUNCTION GetSelectedOutputValue + +SUBROUTINE GetVersionString(version) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetVersionStringF(version, l) & + BIND(C, NAME='GetVersionStringF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: l + CHARACTER(KIND=C_CHAR), INTENT(out) :: version(*) + END SUBROUTINE GetVersionStringF + END INTERFACE + CHARACTER(len=*), INTENT(inout) :: version + call GetVersionStringF(version, len(version)) + return +END SUBROUTINE GetVersionString + +INTEGER FUNCTION GetWarningStringLineCount(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION GetWarningStringLineCountF(id) & + BIND(C, NAME='GetWarningStringLineCountF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION GetWarningStringLineCountF + END INTERFACE + INTEGER, INTENT(in) :: id + GetWarningStringLineCount = GetWarningStringLineCountF(id) + return +END FUNCTION GetWarningStringLineCount + + +SUBROUTINE GetWarningStringLine(id, n, line) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE GetWarningStringLineF(id, n, line, l) & + BIND(C, NAME='GetWarningStringLineF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n, l + CHARACTER(KIND=C_CHAR), INTENT(out) :: line(*) + END SUBROUTINE GetWarningStringLineF + END INTERFACE + INTEGER, INTENT(in) :: id, n + CHARACTER(len=*), INTENT(inout) :: line + call GetWarningStringLineF(id, n, line, len(line)) + return +END SUBROUTINE GetWarningStringLine + +INTEGER FUNCTION LoadDatabase(id, filename) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION LoadDatabaseF(id, filename) & + BIND(C, NAME='LoadDatabaseF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: filename(*) + END FUNCTION LoadDatabaseF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: filename + LoadDatabase = LoadDatabaseF(id, trim(filename)//C_NULL_CHAR) + return +END FUNCTION LoadDatabase + +INTEGER FUNCTION LoadDatabaseString(id, input) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION LoadDatabaseStringF(id, input) & + BIND(C, NAME='LoadDatabaseStringF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: input(*) + END FUNCTION LoadDatabaseStringF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: input + LoadDatabaseString = LoadDatabaseStringF(id, trim(input)//C_NULL_CHAR) + return +END FUNCTION LoadDatabaseString + +SUBROUTINE OutputAccumulatedLines(id) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE OutputAccumulatedLinesF(id) & + BIND(C, NAME='OutputAccumulatedLinesF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END SUBROUTINE OutputAccumulatedLinesF + END INTERFACE + INTEGER, INTENT(in) :: id + call OutputAccumulatedLinesF(id) + return +END SUBROUTINE OutputAccumulatedLines + +SUBROUTINE OutputErrorString(id) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE OutputErrorStringF(id) & + BIND(C, NAME='OutputErrorStringF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END SUBROUTINE OutputErrorStringF + END INTERFACE + INTEGER, INTENT(in) :: id + call OutputErrorStringF(id) + return +END SUBROUTINE OutputErrorString + +SUBROUTINE OutputWarningString(id) + USE ISO_C_BINDING + INTERFACE + SUBROUTINE OutputWarningStringF(id) & + BIND(C, NAME='OutputWarningStringF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END SUBROUTINE OutputWarningStringF + END INTERFACE + INTEGER, INTENT(in) :: id + call OutputWarningStringF(id) + return +END SUBROUTINE OutputWarningString + +INTEGER FUNCTION RunAccumulated(id) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION RunAccumulatedF(id) & + BIND(C, NAME='RunAccumulatedF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + END FUNCTION RunAccumulatedF + END INTERFACE + INTEGER, INTENT(in) :: id + RunAccumulated = RunAccumulatedF(id) + return +END FUNCTION RunAccumulated + +INTEGER FUNCTION RunFile(id, filename) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION RunFileF(id, filename) & + BIND(C, NAME='RunFileF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: filename(*) + END FUNCTION RunFileF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: filename + RunFile = RunFileF(id, trim(filename)//C_NULL_CHAR) + return +END FUNCTION RunFile + +INTEGER FUNCTION RunString(id, input) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION RunStringF(id, input) & + BIND(C, NAME='RunStringF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: input(*) + END FUNCTION RunStringF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(inout) :: input + RunString = RunStringF(id, trim(input)//C_NULL_CHAR) + return +END FUNCTION RunString + +INTEGER FUNCTION SetBasicFortranCallback(id, fcn) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetBasicFortranCallbackF(id, fcn) & + BIND(C, NAME='SetBasicFortranCallbackF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + INTERFACE + INTEGER(KIND=C_INT) FUNCTION fcn(x1, x2, str, l) BIND(C) + USE ISO_C_BINDING + INTEGER(KIND=C_INT), INTENT(inout) :: l + REAL(KIND=C_DOUBLE), INTENT(inout) :: x1, x2 + CHARACTER(KIND=C_CHAR), INTENT(out) :: str(*) + END FUNCTION fcn + END INTERFACE + END FUNCTION SetBasicFortranCallbackF + END INTERFACE + INTEGER, INTENT(in) :: id + INTERFACE + INTEGER(KIND=C_INT) FUNCTION fcn(x1, x2, str, l) BIND(C) + USE ISO_C_BINDING + INTEGER(KIND=C_INT), INTENT(inout) :: l + REAL(KIND=C_DOUBLE), INTENT(inout) :: x1, x2 + CHARACTER(KIND=C_CHAR), INTENT(out) :: str(*) + END FUNCTION fcn + END INTERFACE + SetBasicFortranCallback = SetBasicFortranCallbackF(id, fcn) + return +END FUNCTION SetBasicFortranCallback + +INTEGER FUNCTION SetCurrentSelectedOutputUserNumber(id, n) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetCurrentSelectedOutputUserNumberF(id, n) & + BIND(C, NAME='SetCurrentSelectedOutputUserNumberF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, n + END FUNCTION SetCurrentSelectedOutputUserNumberF + END INTERFACE + INTEGER, INTENT(in) :: id, n + SetCurrentSelectedOutputUserNumber = SetCurrentSelectedOutputUserNumberF(id, n) + return +END FUNCTION SetCurrentSelectedOutputUserNumber + +INTEGER FUNCTION SetDumpFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetDumpFileNameF(id, fname) & + BIND(C, NAME='SetDumpFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: fname(*) + END FUNCTION SetDumpFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: fname + SetDumpFileName = SetDumpFileNameF(id, trim(fname)//C_NULL_CHAR) + return +END FUNCTION SetDumpFileName + +INTEGER FUNCTION SetDumpFileOn(id, dump_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetDumpFileOnF(id, dump_on) & + BIND(C, NAME='SetDumpFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, dump_on + END FUNCTION SetDumpFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: dump_on + INTEGER :: tf = 0 + if (dump_on) tf = 1 + SetDumpFileOn = SetDumpFileOnF(id, tf) + return +END FUNCTION SetDumpFileOn + +INTEGER FUNCTION SetDumpStringOn(id, dump_string_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetDumpStringOnF(id, dump_string_on) & + BIND(C, NAME='SetDumpStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, dump_string_on + END FUNCTION SetDumpStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: dump_string_on + INTEGER :: tf = 0 + if (dump_string_on) tf = 1 + SetDumpStringOn = SetDumpStringOnF(id, tf) + return +END FUNCTION SetDumpStringOn + +INTEGER FUNCTION SetErrorFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetErrorFileNameF(id, fname) & + BIND(C, NAME='SetErrorFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: fname(*) + END FUNCTION SetErrorFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: fname + SetErrorFileName = SetErrorFileNameF(id, trim(fname)//C_NULL_CHAR) + return +END FUNCTION SetErrorFileName + +INTEGER FUNCTION SetErrorFileOn(id, error_file_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetErrorFileOnF(id, error_file_on) & + BIND(C, NAME='SetErrorFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, error_file_on + END FUNCTION SetErrorFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: error_file_on + INTEGER :: tf = 0 + if (error_file_on) tf = 1 + SetErrorFileOn = SetErrorFileOnF(id, tf) + return +END FUNCTION SetErrorFileOn + +INTEGER FUNCTION SetErrorStringOn(id, error_string_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetErrorStringOnF(id, error_string_on) & + BIND(C, NAME='SetErrorStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, error_string_on + END FUNCTION SetErrorStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: error_string_on + INTEGER :: tf = 0 + if (error_string_on) tf = 1 + SetErrorStringOn = SetErrorStringOnF(id, tf) + return +END FUNCTION SetErrorStringOn + +INTEGER FUNCTION SetLogFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetLogFileNameF(id, fname) & + BIND(C, NAME='SetLogFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: fname(*) + END FUNCTION SetLogFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: fname + SetLogFileName = SetLogFileNameF(id, trim(fname)//C_NULL_CHAR) + return +END FUNCTION SetLogFileName + +INTEGER FUNCTION SetLogFileOn(id, log_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetLogFileOnF(id, log_on) & + BIND(C, NAME='SetLogFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, log_on + END FUNCTION SetLogFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: log_on + INTEGER :: tf = 0 + if (log_on) tf = 1 + SetLogFileOn = SetLogFileOnF(id, tf) + return +END FUNCTION SetLogFileOn + +INTEGER FUNCTION SetLogStringOn(id, log_string_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetLogStringOnF(id, log_string_on) & + BIND(C, NAME='SetLogStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, log_string_on + END FUNCTION SetLogStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: log_string_on + INTEGER :: tf = 0 + if (log_string_on) tf = 1 + SetLogStringOn = SetLogStringOnF(id, tf) + return +END FUNCTION SetLogStringOn + +INTEGER FUNCTION SetOutputFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetOutputFileNameF(id, fname) & + BIND(C, NAME='SetOutputFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: fname(*) + END FUNCTION SetOutputFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: fname + SetOutputFileName = SetOutputFileNameF(id, trim(fname)//C_NULL_CHAR) + return +END FUNCTION SetOutputFileName + +INTEGER FUNCTION SetOutputFileOn(id, output_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetOutputFileOnF(id, output_on) & + BIND(C, NAME='SetOutputFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, output_on + END FUNCTION SetOutputFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: output_on + INTEGER :: tf = 0 + if (output_on) tf = 1 + SetOutputFileOn = SetOutputFileOnF(id, tf) + return +END FUNCTION SetOutputFileOn + +INTEGER FUNCTION SetOutputStringOn(id, output_string_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetOutputStringOnF(id, output_string_on) & + BIND(C, NAME='SetOutputStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, output_string_on + END FUNCTION SetOutputStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: output_string_on + INTEGER :: tf = 0 + if (output_string_on) tf = 1 + SetOutputStringOn = SetOutputStringOnF(id, tf) + return +END FUNCTION SetOutputStringOn + +INTEGER FUNCTION SetSelectedOutputFileName(id, fname) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetSelectedOutputFileNameF(id, fname) & + BIND(C, NAME='SetSelectedOutputFileNameF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id + CHARACTER(KIND=C_CHAR), INTENT(in) :: fname(*) + END FUNCTION SetSelectedOutputFileNameF + END INTERFACE + INTEGER, INTENT(in) :: id + CHARACTER(len=*), INTENT(in) :: fname + SetSelectedOutputFileName = SetSelectedOutputFileNameF(id, trim(fname)//C_NULL_CHAR) + return +END FUNCTION SetSelectedOutputFileName + +INTEGER FUNCTION SetSelectedOutputFileOn(id, sel_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetSelectedOutputFileOnF(id, sel_on) & + BIND(C, NAME='SetSelectedOutputFileOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, sel_on + END FUNCTION SetSelectedOutputFileOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: sel_on + INTEGER :: tf = 0 + if (sel_on) tf = 1 + SetSelectedOutputFileOn = SetSelectedOutputFileOnF(id, tf) + return +END FUNCTION SetSelectedOutputFileOn + +INTEGER FUNCTION SetSelectedOutputStringOn(id, selected_output_string_on) + USE ISO_C_BINDING + INTERFACE + INTEGER(KIND=C_INT) FUNCTION SetSelectedOutputStringOnF(id, selected_output_string_on) & + BIND(C, NAME='SetSelectedOutputStringOnF') + USE ISO_C_BINDING + IMPLICIT NONE + INTEGER(KIND=C_INT), INTENT(in) :: id, selected_output_string_on + END FUNCTION SetSelectedOutputStringOnF + END INTERFACE + INTEGER, INTENT(in) :: id + LOGICAL, INTENT(in) :: selected_output_string_on + INTEGER :: tf = 0 + if (selected_output_string_on) tf = 1 + SetSelectedOutputStringOn = SetSelectedOutputStringOnF(id, tf) + return +END FUNCTION SetSelectedOutputStringOn + +END MODULE +#endif \ No newline at end of file diff --git a/IPhreeqc_interface_F.cpp b/IPhreeqc_interface_F.cpp new file mode 100644 index 00000000..47f78bd2 --- /dev/null +++ b/IPhreeqc_interface_F.cpp @@ -0,0 +1,512 @@ +#ifdef IPHREEQC_MODULE +#include /* isgraph */ +#include /* malloc */ +#include /* memcpy */ +#include /* assert */ +#include /* sprintf */ +#include "phrqtype.h" +#include "IPhreeqc.h" + +#include "IPhreeqc_interface_F.h" +#ifdef SKIP +char * +f2cstring(char* fstring, size_t len) +{ + char *cstr, *str; + long i; + + str = fstring; + for (i = (long) len - 1; i >= 0 && !isgraph((int) str[i]); i--); + cstr = (char *) malloc((size_t) (i + 2)); + if (!cstr) return 0; + + cstr[i + 1] = '\0'; + if ((i + 1) > 0) memcpy(cstr, str, (size_t) (i + 1)); + return cstr; +} +#endif +void +padfstring(char *dest, const char *src, int* len) +{ + size_t sofar; + + for (sofar = 0; (sofar < *len) && (*src != '\0'); ++sofar) + *dest++ = *src++; + + while (sofar++ < *len) + *dest++ = ' '; +} + +IPQ_RESULT +AccumulateLineF(int *id, char *line) +{ + IPQ_RESULT n; + n = ::AccumulateLine(*id, line); + return n; +} +int +AddErrorF(int *id, char *error_msg) +{ + int n; + n = ::AddError(*id, error_msg); + return n; +} + +int +AddWarningF(int *id, char *warn_msg) +{ + int n; + n = ::AddWarning(*id, warn_msg); + return n; +} + +IPQ_RESULT +ClearAccumulatedLinesF(int *id) +{ + return ::ClearAccumulatedLines(*id); +} + +int +CreateIPhreeqcF(void) +{ + return ::CreateIPhreeqc(); +} + +int +DestroyIPhreeqcF(int *id) +{ + return ::DestroyIPhreeqc(*id); +} + +int +GetComponentCountF(int *id) +{ + return ::GetComponentCount(*id); +} + +void +GetComponentF(int *id, int *n, char* comp, int* line_length) +{ + padfstring(comp, ::GetComponent(*id, (*n) - 1), line_length); +} + +int +GetCurrentSelectedOutputUserNumberF(int *id) +{ + return ::GetCurrentSelectedOutputUserNumber(*id); +} + +void +GetDumpFileNameF(int *id, char* fname, int* fname_length) +{ + padfstring(fname, ::GetDumpFileName(*id), fname_length); +} + +int +GetDumpFileOnF(int *id) +{ + return ::GetDumpFileOn(*id); +} + +/* +GetDumpStringF +*/ + +int +GetDumpStringLineCountF(int *id) +{ + return ::GetDumpStringLineCount(*id); +} + +void +GetDumpStringLineF(int *id, int* n, char* line, int* line_length) +{ + padfstring(line, ::GetDumpStringLine(*id, (*n) - 1), line_length); +} + +int +GetDumpStringOnF(int *id) +{ + return ::GetDumpStringOn(*id); +} + +void +GetErrorFileNameF(int *id, char* fname, int* fname_length) +{ + padfstring(fname, ::GetErrorFileName(*id), fname_length); +} + +int +GetErrorFileOnF(int *id) +{ + return ::GetErrorFileOn(*id); +} + +/* +GetErrorStringF +*/ + +int +GetErrorStringLineCountF(int *id) +{ + return ::GetErrorStringLineCount(*id); +} + +void +GetErrorStringLineF(int *id, int* n, char* line, int* line_length) +{ + padfstring(line, ::GetErrorStringLine(*id, (*n) - 1), line_length); +} + +int +GetErrorStringOnF(int *id) +{ + return ::GetErrorStringOn(*id); +} + +void +GetLogFileNameF(int *id, char* fname, int* fname_length) +{ + padfstring(fname, ::GetLogFileName(*id), fname_length); +} + +int +GetLogFileOnF(int *id) +{ + return ::GetLogFileOn(*id); +} + +int +GetLogStringLineCountF(int *id) +{ + return ::GetLogStringLineCount(*id); +} + +void +GetLogStringLineF(int *id, int* n, char* line, int* line_length) +{ + padfstring(line, ::GetLogStringLine(*id, (*n) - 1), line_length); +} + +int +GetLogStringOnF(int *id) +{ + return ::GetLogStringOn(*id); +} + +int +GetNthSelectedOutputUserNumberF(int *id, int* n) +{ + return ::GetNthSelectedOutputUserNumber(*id, (*n) - 1); +} + +void +GetOutputFileNameF(int *id, char* fname, int* fname_length) +{ + padfstring(fname, ::GetOutputFileName(*id), fname_length); +} + +int +GetOutputStringLineCountF(int *id) +{ + return ::GetOutputStringLineCount(*id); +} + +void +GetOutputStringLineF(int *id, int* n, char* line, int* line_length) +{ + padfstring(line, ::GetOutputStringLine(*id, (*n) - 1), line_length); +} + +int +GetOutputStringOnF(int *id) +{ + return ::GetOutputStringOn(*id); +} + +int +GetOutputFileOnF(int *id) +{ + return ::GetOutputFileOn(*id); +} + +int +GetSelectedOutputColumnCountF(int *id) +{ + return ::GetSelectedOutputColumnCount(*id); +} + +int +GetSelectedOutputCountF(int *id) +{ + return ::GetSelectedOutputCount(*id); +} + +void +GetSelectedOutputFileNameF(int *id, char* fname, int* fname_length) +{ + padfstring(fname, ::GetSelectedOutputFileName(*id), fname_length); +} + +int +GetSelectedOutputFileOnF(int *id) +{ + return ::GetSelectedOutputFileOn(*id); +} + +/* +GetSelectedOutputStringF +*/ + +int +GetSelectedOutputStringLineCountF(int *id) +{ + return ::GetSelectedOutputStringLineCount(*id); +} + +void +GetSelectedOutputStringLineF(int *id, int* n, char* line, int* line_length) +{ + padfstring(line, ::GetSelectedOutputStringLine(*id, (*n) - 1), line_length); +} + +int +GetSelectedOutputStringOnF(int *id) +{ + return ::GetSelectedOutputStringOn(*id); +} + +int +GetSelectedOutputRowCountF(int *id) +{ + int rows = ::GetSelectedOutputRowCount(*id); + if (rows > 0) + { + rows -= 1; + } + return rows; +} + +IPQ_RESULT +GetSelectedOutputValueF(int *id, int *row, int *col, int *vtype, double* dvalue, char* svalue, int* svalue_length) +{ + IPQ_RESULT result; + VAR v; + VarInit(&v); + char buffer[100]; + + int adjcol = *col - 1; + result = ::GetSelectedOutputValue(*id, *row, adjcol, &v); + + switch (v.type) + { + case TT_EMPTY: + *vtype = v.type; + break; + case TT_ERROR: + *vtype = v.type; + break; + case TT_LONG: + *vtype = TT_DOUBLE; + *dvalue = (double)v.lVal; + ::sprintf(buffer, "%ld", v.lVal); + padfstring(svalue, buffer, svalue_length); + break; + case TT_DOUBLE: + *vtype = v.type; + *dvalue = v.dVal; + ::sprintf(buffer, "%23.15e", v.dVal); + padfstring(svalue, buffer, svalue_length); + break; + case TT_STRING: + *vtype = v.type; + padfstring(svalue, v.sVal, svalue_length); + break; + default: + assert(0); + } + ::VarClear(&v); + return result; +} + +void +GetVersionStringF(char* version, int* version_length) +{ + padfstring(version, ::GetVersionString(), version_length); +} + +/* +GetWarningStringF +*/ + +int +GetWarningStringLineCountF(int *id) +{ + return ::GetWarningStringLineCount(*id); +} + +void +GetWarningStringLineF(int *id, int* n, char* line, int* line_length) +{ + padfstring(line, ::GetWarningStringLine(*id, (*n) - 1), line_length); +} + +int +LoadDatabaseF(int *id, char* filename) +{ + int n = ::LoadDatabase(*id, filename); + return n; +} + +int +LoadDatabaseStringF(int *id, char* input) +{ + int n = ::LoadDatabaseString(*id, input); + return n; +} + +void +OutputAccumulatedLinesF(int *id) +{ + ::OutputAccumulatedLines(*id); +} + +void +OutputErrorStringF(int *id) +{ + ::OutputErrorString(*id); +} + +void +OutputWarningStringF(int *id) +{ + ::OutputWarningString(*id); +} + +int +RunAccumulatedF(int *id) +{ + return ::RunAccumulated(*id); +} + +int +RunFileF(int *id, char* filename) +{ + int n = ::RunFile(*id, filename); + return n; +} + +int +RunStringF(int *id, char* input) +{ + int n = ::RunString(*id, input); + return n; +} + +IPQ_RESULT +SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)) +{ + return ::SetBasicFortranCallback(*id, fcn); +} + +IPQ_RESULT +SetCurrentSelectedOutputUserNumberF(int *id, int *n) +{ + return ::SetCurrentSelectedOutputUserNumber(*id, *n); +} + +IPQ_RESULT +SetDumpFileNameF(int *id, char* fname) +{ + IPQ_RESULT n = ::SetDumpFileName(*id, fname); + return n; +} + +IPQ_RESULT +SetDumpFileOnF(int *id, int* dump_on) +{ + return ::SetDumpFileOn(*id, *dump_on); +} + +IPQ_RESULT +SetDumpStringOnF(int *id, int* dump_string_on) +{ + return ::SetDumpStringOn(*id, *dump_string_on); +} + +IPQ_RESULT +SetErrorFileNameF(int *id, char* fname) +{ + IPQ_RESULT n = ::SetErrorFileName(*id, fname); + return n; +} + +IPQ_RESULT +SetErrorFileOnF(int *id, int* error_file_on) +{ + return ::SetErrorFileOn(*id, *error_file_on); +} + +IPQ_RESULT +SetErrorStringOnF(int *id, int* error_string_on) +{ + return ::SetErrorStringOn(*id, *error_string_on); +} + +IPQ_RESULT +SetLogFileNameF(int *id, char* fname) +{ + IPQ_RESULT n = ::SetLogFileName(*id, fname); + return n; +} + +IPQ_RESULT +SetLogFileOnF(int *id, int* log_on) +{ + return ::SetLogFileOn(*id, *log_on); +} + +IPQ_RESULT +SetLogStringOnF(int *id, int* log_string_on) +{ + return ::SetLogStringOn(*id, *log_string_on); +} + +IPQ_RESULT +SetOutputFileNameF(int *id, char* fname) +{ + IPQ_RESULT n = ::SetOutputFileName(*id, fname); + return n; +} + +IPQ_RESULT +SetOutputFileOnF(int *id, int* output_on) +{ + return ::SetOutputFileOn(*id, *output_on); +} + +IPQ_RESULT +SetOutputStringOnF(int *id, int* output_string_on) +{ + return ::SetOutputStringOn(*id, *output_string_on); +} + +IPQ_RESULT +SetSelectedOutputFileNameF(int *id, char* fname) +{ + IPQ_RESULT n = ::SetSelectedOutputFileName(*id, fname); + return n; +} + +IPQ_RESULT +SetSelectedOutputFileOnF(int *id, int* sel_on) +{ + return ::SetSelectedOutputFileOn(*id, *sel_on); +} + +IPQ_RESULT +SetSelectedOutputStringOnF(int *id, int* selected_output_string_on) +{ + return ::SetSelectedOutputStringOn(*id, *selected_output_string_on); +} +#endif \ No newline at end of file diff --git a/IPhreeqc_interface_F.h b/IPhreeqc_interface_F.h new file mode 100644 index 00000000..3314463d --- /dev/null +++ b/IPhreeqc_interface_F.h @@ -0,0 +1,157 @@ +#ifndef __IPHREEQC_INTERFACE__H +#define __IPHREEQC_INTERFACE__H + +#if defined(_WINDLL) +#define IPQ_DLL_EXPORT __declspec(dllexport) +#else +#define IPQ_DLL_EXPORT +#endif + +#if defined(FC_FUNC) +#define AccumulateLineF FC_FUNC (accumulatelinef, ACCUMULATELINEF) +#define AddErrorF FC_FUNC (adderrorf, ADDERRORF) +#define AddWarningF FC_FUNC (addwarningf, ADDWARNINGF) +#define ClearAccumulatedLinesF FC_FUNC (clearaccumulatedlinesf, CLEARACCUMULATEDLINESF) +#define CreateIPhreeqcF FC_FUNC (createiphreeqcf, CREATEIPHREEQCF) +#define DestroyIPhreeqcF FC_FUNC (destroyiphreeqcf, DESTROYIPHREEQCF) +#define GetComponentF FC_FUNC (getcomponentf, GETCOMPONENTF) +#define GetComponentCountF FC_FUNC (getcomponentcountf, GETCOMPONENTCOUNTF) +#define GetCurrentSelectedOutputUserNumberF FC_FUNC (getcurrentselectedoutputusernumberf, GETCURRENTSELECTEDOUTPUTUSERNUMBERF) +#define GetDumpFileNameF FC_FUNC (getdumpfilenamef, GETDUMPFILENAMEF) +#define GetDumpFileOnF FC_FUNC (getdumpfileonf, GETDUMPFILEONF) +#define GetDumpStringLineF FC_FUNC (getdumpstringlinef, GETDUMPSTRINGLINEF) +#define GetDumpStringLineCountF FC_FUNC (getdumpstringlinecountf, GETDUMPSTRINGLINECOUNTF) +#define GetDumpStringOnF FC_FUNC (getdumpstringonf, GETDUMPSTRINGONF) +#define GetErrorFileNameF FC_FUNC (geterrorfilenamef, GETERRORFILENAMEF) +#define GetErrorFileOnF FC_FUNC (geterrorfileonf, GETERRORFILEONF) +#define GetErrorStringLineF FC_FUNC (geterrorstringlinef, GETERRORSTRINGLINEF) +#define GetErrorStringLineCountF FC_FUNC (geterrorstringlinecountf, GETERRORSTRINGLINECOUNTF) +#define GetErrorStringOnF FC_FUNC (geterrorstringonf, GETERRORSTRINGONF) +#define GetLogFileNameF FC_FUNC (getlogfilenamef, GETLOGFILENAMEF) +#define GetLogFileOnF FC_FUNC (getlogfileonf, GETLOGFILEONF) +#define GetLogStringLineF FC_FUNC (getlogstringlinef, GETLOGSTRINGLINEF) +#define GetLogStringLineCountF FC_FUNC (getlogstringlinecountf, GETLOGSTRINGLINECOUNTF) +#define GetLogStringOnF FC_FUNC (getlogstringonf, GETLOGSTRINGONF) +#define GetNthSelectedOutputUserNumberF FC_FUNC (getnthselectedoutputusernumberf, GETNTHSELECTEDOUTPUTUSERNUMBERF) +#define GetOutputFileNameF FC_FUNC (getoutputfilenamef, GETOUTPUTFILENAMEF) +#define GetOutputFileOnF FC_FUNC (getoutputfileonf, GETOUTPUTFILEONF) +#define GetOutputStringLineF FC_FUNC (getoutputstringlinef, GETOUTPUTSTRINGLINEF) +#define GetOutputStringLineCountF FC_FUNC (getoutputstringlinecountf, GETOUTPUTSTRINGLINECOUNTF) +#define GetOutputStringOnF FC_FUNC (getoutputstringonf, GETOUTPUTSTRINGONF) +#define GetSelectedOutputColumnCountF FC_FUNC (getselectedoutputcolumncountf, GETSELECTEDOUTPUTCOLUMNCOUNTF) +#define GetSelectedOutputCountF FC_FUNC (getselectedoutputcountf, GETSELECTEDOUTPUTCOUNTF) +#define GetSelectedOutputFileNameF FC_FUNC (getselectedoutputfilenamef, GETSELECTEDOUTPUTFILENAMEF) +#define GetSelectedOutputFileOnF FC_FUNC (getselectedoutputfileonf, GETSELECTEDOUTPUTFILEONF) +#define GetSelectedOutputRowCountF FC_FUNC (getselectedoutputrowcountf, GETSELECTEDOUTPUTROWCOUNTF) +#define GetSelectedOutputStringLineF FC_FUNC (getselectedoutputstringlinef, GETSELECTEDOUTPUTSTRINGLINEF) +#define GetSelectedOutputStringLineCountF FC_FUNC (getselectedoutputstringlinecountf, GETSELECTEDOUTPUTSTRINGLINECOUNTF) +#define GetSelectedOutputStringOnF FC_FUNC (getselectedoutputstringonf, GETSELECTEDOUTPUTSTRINGONF) +#define GetSelectedOutputValueF FC_FUNC (getselectedoutputvaluef, GETSELECTEDOUTPUTVALUEF) +#define GetVersionStringF FC_FUNC (getversionstringf, GETVERSIONSTRINGF) +#define GetWarningStringLineF FC_FUNC (getwarningstringlinef, GETWARNINGSTRINGLINEF) +#define GetWarningStringLineCountF FC_FUNC (getwarningstringlinecountf, GETWARNINGSTRINGLINECOUNTF) +#define LoadDatabaseF FC_FUNC (loaddatabasef, LOADDATABASEF) +#define LoadDatabaseStringF FC_FUNC (loaddatabasestringf, LOADDATABASESTRINGF) +#define OutputAccumulatedLinesF FC_FUNC (outputaccumulatedlinesf, OUTPUTACCUMULATEDLINESF) +#define OutputErrorStringF FC_FUNC (outputerrorstringf, OUTPUTERRORSTRINGF) +#define OutputWarningStringF FC_FUNC (outputwarningstringf, OUTPUTWARNINGSTRINGF) +#define RunAccumulatedF FC_FUNC (runaccumulatedf, RUNACCUMULATEDF) +#define RunFileF FC_FUNC (runfilef, RUNFILEF) +#define RunStringF FC_FUNC (runstringf, RUNSTRINGF) +#define SetBasicFortranCallbackF FC_FUNC (setbasicfortrancallbackf, SETFOTRANBASICCALLBACKF) +#define SetCurrentSelectedOutputUserNumberF FC_FUNC (setcurrentselectedoutputusernumberf, SETCURRENTSELECTEDOUTPUTUSERNUMBERF) +#define SetDumpFileNameF FC_FUNC (setdumpfilenamef, SETDUMPFILENAMEF) +#define SetDumpFileOnF FC_FUNC (setdumpfileonf, SETDUMPFILEONF) +#define SetDumpStringOnF FC_FUNC (setdumpstringonf, SETDUMPSTRINGONF) +#define SetErrorFileNameF FC_FUNC (seterrorfilenamef, SETERRORFILENAMEF) +#define SetErrorFileOnF FC_FUNC (seterrorfileonf, SETERRORFILEONF) +#define SetErrorStringOnF FC_FUNC (seterrorstringonf, SETERRORSTRINGONF) +#define SetLogFileNameF FC_FUNC (setlogfilenamef, SETLOGFILENAMEF) +#define SetLogFileOnF FC_FUNC (setlogfileonf, SETLOGFILEONF) +#define SetLogStringOnF FC_FUNC (setlogstringonf, SETLOGSTRINGONF) +#define SetOutputFileNameF FC_FUNC (setoutputfilenamef, SETOUTPUTFILENAMEF) +#define SetOutputFileOnF FC_FUNC (setoutputfileonf, SETOUTPUTFILEONF) +#define SetOutputStringOnF FC_FUNC (setoutputstringonf, SETOUTPUTSTRINGONF) +#define SetSelectedOutputFileNameF FC_FUNC (setselectedoutputfilenamef, SETSELECTEDOUTPUTFILENAMEF) +#define SetSelectedOutputFileOnF FC_FUNC (setselectedoutputfileonf, SETSELECTEDOUTPUTFILEONF) +#define SetSelectedOutputStringOnF FC_FUNC (setselectedoutputstringonf, SETSELECTEDOUTPUTSTRINGONF) +#endif /* FC_FUNC */ + +#if defined(__cplusplus) +extern "C" { +#endif + + IPQ_RESULT AccumulateLineF(int *id, char *line); + int AddErrorF(int *id, char *error_msg); + int AddWarningF(int *id, char *warn_msg); + IPQ_RESULT ClearAccumulatedLinesF(int *id); + int CreateIPhreeqcF(void); + int DestroyIPhreeqcF(int *id); + void GetComponentF(int *id, int* n, char* line, int* line_length); + int GetComponentCountF(int *id); + int GetCurrentSelectedOutputUserNumberF(int *id); + void GetDumpFileNameF(int *id, char* filename, int* filename_length); + int GetDumpFileOnF(int *id); + void GetDumpStringLineF(int *id, int* n, char* line, int* line_length); + int GetDumpStringLineCountF(int *id); + int GetDumpStringOnF(int *id); + void GetErrorFileNameF(int *id, char* filename, int* filename_length); + int GetErrorFileOnF(int *id); + void GetErrorStringLineF(int *id, int* n, char* line, int* line_length); + int GetErrorStringLineCountF(int *id); + int GetErrorStringOnF(int *id); + void GetLogFileNameF(int *id, char* filename, int* filename_length); + int GetLogFileOnF(int *id); + void GetLogStringLineF(int *id, int* n, char* line, int* line_length); + int GetLogStringLineCountF(int *id); + int GetLogStringOnF(int *id); + int GetNthSelectedOutputUserNumberF(int *id, int* n); + void GetOutputFileNameF(int *id, char* filename, int* filename_length); + int GetOutputFileOnF(int *id); + void GetOutputStringLineF(int *id, int* n, char* line, int* line_length); + int GetOutputStringLineCountF(int *id); + int GetOutputStringOnF(int *id); + int GetSelectedOutputColumnCountF(int *id); + int GetSelectedOutputCountF(int *id); + void GetSelectedOutputFileNameF(int *id, char* filename, int* filename_length); + int GetSelectedOutputFileOnF(int *id); + int GetSelectedOutputRowCountF(int *id); + void GetSelectedOutputStringLineF(int *id, int* n, char* line, int* line_length); + int GetSelectedOutputStringLineCountF(int *id); + int GetSelectedOutputStringOnF(int *id); + IPQ_RESULT GetSelectedOutputValueF(int *id, int *row, int *col, int *vtype, double* dvalue, char* svalue, int* svalue_length); + void GetVersionStringF(char* version, int* version_length); + void GetWarningStringLineF(int *id, int* n, char* line, int* line_length); + int GetWarningStringLineCountF(int *id); + int LoadDatabaseF(int *id, char* filename); + int LoadDatabaseStringF(int *id, char* input); + void OutputAccumulatedLinesF(int *id); + void OutputErrorStringF(int *id); + void OutputWarningStringF(int *id); + int RunAccumulatedF(int *id); + int RunFileF(int *id, char* filename); + int RunStringF(int *id, char* input); + IPQ_RESULT SetBasicFortranCallbackF(int *id, double (*fcn)(double *x1, double *x2, char *str, size_t l)); + IPQ_RESULT SetCurrentSelectedOutputUserNumberF(int *id, int *n); + IPQ_RESULT SetDumpFileNameF(int *id, char* fname); + IPQ_RESULT SetDumpFileOnF(int *id, int* dump_on); + IPQ_RESULT SetDumpStringOnF(int *id, int* dump_string_on); + IPQ_RESULT SetErrorFileNameF(int *id, char* fname); + IPQ_RESULT SetErrorFileOnF(int *id, int* error_file_on); + IPQ_RESULT SetErrorStringOnF(int *id, int* error_string_on); + IPQ_RESULT SetLogFileNameF(int *id, char* fname); + IPQ_RESULT SetLogFileOnF(int *id, int* log_file_on); + IPQ_RESULT SetLogStringOnF(int *id, int* log_string_on); + IPQ_RESULT SetOutputFileNameF(int *id, char* fname); + IPQ_RESULT SetOutputFileOnF(int *id, int* output_on); + IPQ_RESULT SetOutputStringOnF(int *id, int* output_string_on); + IPQ_RESULT SetSelectedOutputFileNameF(int *id, char* fname); + IPQ_RESULT SetSelectedOutputFileOnF(int *id, int* selected_output_file_on); + IPQ_RESULT SetSelectedOutputStringOnF(int *id, int* selected_output_string_on); + + +#if defined(__cplusplus) +} +#endif +void padfstring(char *dest, const char *src, unsigned int len); +#endif /* __IPHREEQC_INTERFACE__H */ diff --git a/fwrap.cpp b/fwrap.cpp index 83c1ac59..e7266c1c 100644 --- a/fwrap.cpp +++ b/fwrap.cpp @@ -1,3 +1,5 @@ + +#ifndef IPHREEQC_MODULE #include /* isgraph */ #include /* malloc */ #include /* memcpy */ @@ -629,3 +631,4 @@ SetSelectedOutputStringOnF(int *id, int* selected_output_string_on) { return ::SetSelectedOutputStringOn(*id, *selected_output_string_on); } +#endif \ No newline at end of file diff --git a/fwrap.h b/fwrap.h index 38cda61b..66332c92 100644 --- a/fwrap.h +++ b/fwrap.h @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #ifndef __FWRAP__H #define __FWRAP__H @@ -155,3 +156,4 @@ extern "C" { #endif void padfstring(char *dest, const char *src, unsigned int len); #endif /* __FWRAP__H */ +#endif \ No newline at end of file diff --git a/fwrap2.cpp b/fwrap2.cpp index 358b12ab..eaca047c 100644 --- a/fwrap2.cpp +++ b/fwrap2.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -19,4 +20,5 @@ extern "C" { } #endif +#endif #endif \ No newline at end of file diff --git a/fwrap3.cpp b/fwrap3.cpp index f464e63a..198e0bc9 100644 --- a/fwrap3.cpp +++ b/fwrap3.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -20,3 +21,4 @@ extern "C" { #endif #endif +#endif diff --git a/fwrap4.cpp b/fwrap4.cpp index 0c6417df..a4aff5b7 100644 --- a/fwrap4.cpp +++ b/fwrap4.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -20,3 +21,4 @@ extern "C" { #endif #endif +#endif \ No newline at end of file diff --git a/fwrap5.cpp b/fwrap5.cpp index e33acd0e..88f4ac55 100644 --- a/fwrap5.cpp +++ b/fwrap5.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -20,3 +21,4 @@ extern "C" { #endif #endif +#endif \ No newline at end of file diff --git a/fwrap6.cpp b/fwrap6.cpp index dbf2003d..ab95e8a3 100644 --- a/fwrap6.cpp +++ b/fwrap6.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -20,4 +21,5 @@ extern "C" { #endif #endif // _WIN32 +#endif diff --git a/fwrap7.cpp b/fwrap7.cpp index 3b3714d0..d961654a 100644 --- a/fwrap7.cpp +++ b/fwrap7.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -20,4 +21,5 @@ extern "C" { #endif #endif // _WIN32 +#endif diff --git a/fwrap8.cpp b/fwrap8.cpp index fce9476e..705ab22e 100644 --- a/fwrap8.cpp +++ b/fwrap8.cpp @@ -1,3 +1,4 @@ +#ifndef IPHREEQC_MODULE #include "IPhreeqc.h" #include "fwrap.h" @@ -20,4 +21,4 @@ extern "C" { #endif #endif // _WIN32 - +#endif