c fstrings.for c*******************************************************************************
c fstrings.for -- routines for converting between FORTRAN and C character
c strings.
c
c Mark Showalter, PDS Ring-Moon Systems Node, September 2002
c*******************************************************************************
c
c*******************************************************************************
c$ Component_name:
c FORT_CSTRING (fstrings.for)
c$ Abstract:
c Converts a FORTRAN character string to a null-terminated byte array,
c for passage to a C function.
c$ Keywords:
c UTILITY, FORTRAN_C
c FORTRAN, INTERNAL, SUBROUTINE
c$ Declarations:
c subroutine FORT_CSTRING(string, array, nbytes)
c character*(*) string
c integer*1 array(*)
c integer*4 nbytes
c$ Inputs:
c string character string to convert.
c nbytes dimensioned length of byte array.
c$ Outputs:
c array(1...) string of bytes with terminal null.
c$ Returns:
c none
c$ Detailed_description:
c This subroutine converts a FORTRAN character string to a null-terminated
c byte array, for passage to a C function. Blank characters at the end of
c the character string are not considered significant. The string is
c truncated if necessary to fit into the array.
c$ External_references:
c none
c$ Examples:
c none
c$ Error_handling:
c none
c$ Limitations:
c The dimensioned length of the byte array must be at least one greater
c than the effective length of the character string.
c$ Author_and_institution:
c Mark R. Showalter
c PDS Ring-Moon Systems Node, NASA/Ames Research Center
c$ Version_and_date:
c 1.0: January 1994
c 1.2: September 2002
c$ Change_history:
c 1.2: Changed logical*1 declaration to integer*1 because the former does
c not operate correctly under Absoft FORTRAN for Macintosh.
c*******************************************************************************
subroutine FORT_CSTRING(string, array, nbytes)
character*(*) string
integer*1 array(*)
integer*4 nbytes
integer last, i
c Search for the last character actually used.
do 100 last = len(string), 1, -1
if (string(last:last) .ne. ' ') goto 101
100 continue
101 continue
c Truncate string if necessary
if (last .gt. nbytes-1) last = nbytes-1
c Copy bytes from character string
do 200 i = 1, last
array(i) = ichar( string(i:i) )
200 continue
c Append null terminator
array(last+1) = 0
return
end
c
c*******************************************************************************
c$ Component_name:
c FORT_FSTRING (fstrings.for)
c$ Abstract:
c Converts a null-terminated byte array returned from a C function to a
c FORTRAN character string.
c$ Keywords:
c UTILITY, FORTRAN_C
c FORTRAN, INTERNAL, SUBROUTINE
c$ Declarations:
c subroutine FORT_FSTRING(array, string)
c integer*1 array(*)
c character*(*) string
c$ Inputs:
c array(1...) string of bytes with terminal null.
c$ Outputs:
c string FORTRAN character string.
c$ Returns:
c none
c$ Detailed_description:
c This subroutine converts a null-terminated byte array returned from a C
c function to a FORTRAN character string. The string is truncated if
c necessary.
c$ External_references:
c none
c$ Examples:
c none
c$ Error_handling:
c none
c$ Limitations:
c none
c$ Author_and_institution:
c Mark R. Showalter
c PDS Ring-Moon Systems Node, NASA/Ames Research Center
c$ Version_and_date:
c 1.0: January 1994
c 1.2: September 2002
c$ Change_history:
c 1.2: Changed logical*1 declaration to integer*1 because the former does
c not operate correctly under Absoft FORTRAN for Macintosh.
c*******************************************************************************
subroutine FORT_FSTRING(array, string)
integer*1 array(*)
character*(*) string
integer i
c Copy bytes into string, one by one
do 100 i = 1, len(string)
if (array(i) .eq. 0) goto 101
string(i:i) = char(array(i))
100 continue
return
c Pad remainder of string with blanks
101 continue
string(i:) = ' '
return
end
c*******************************************************************************
c