1*ce0a2cd1SBarry Smith #include "private/fortranimpl.h" 255fcb7f5SSatish Balay #include "petsc.h" 355fcb7f5SSatish Balay 455fcb7f5SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 555fcb7f5SSatish Balay #define petscfprintf_ PETSCFPRINTF 655fcb7f5SSatish Balay #define petscprintf_ PETSCPRINTF 755fcb7f5SSatish Balay #define petscsynchronizedfprintf_ PETSCSYNCHRONIZEDFPRINTF 855fcb7f5SSatish Balay #define petscsynchronizedprintf_ PETSCSYNCHRONIZEDPRINTF 955fcb7f5SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1055fcb7f5SSatish Balay #define petscfprintf_ petscfprintf 1155fcb7f5SSatish Balay #define petscprintf_ petscprintf 1255fcb7f5SSatish Balay #define petscsynchronizedfprintf_ petscsynchronizedfprintf 1355fcb7f5SSatish Balay #define petscsynchronizedprintf_ petscsynchronizedprintf 1455fcb7f5SSatish Balay #endif 1555fcb7f5SSatish Balay 1655fcb7f5SSatish Balay EXTERN_C_BEGIN 1755fcb7f5SSatish Balay 181850a936SBarry Smith static PetscErrorCode PetscFixSlashN(const char *in, char **out) 191850a936SBarry Smith { 201850a936SBarry Smith PetscErrorCode ierr; 211850a936SBarry Smith PetscInt i; 221850a936SBarry Smith size_t len; 231850a936SBarry Smith 241850a936SBarry Smith PetscFunctionBegin; 251850a936SBarry Smith ierr = PetscStrallocpy(in,out);CHKERRQ(ierr); 261850a936SBarry Smith ierr = PetscStrlen(*out,&len);CHKERRQ(ierr); 2751c0b0ecSMatthew Knepley for (i=0; i<(int)len-1; i++) { 281850a936SBarry Smith if ((*out)[i] == '\\' && (*out)[i+1] == 'n') {(*out)[i] = ' '; (*out)[i+1] = '\n';} 291850a936SBarry Smith } 301850a936SBarry Smith PetscFunctionReturn(0); 311850a936SBarry Smith } 321850a936SBarry Smith 3355fcb7f5SSatish Balay void PETSC_STDCALL petscfprintf_(MPI_Comm *comm,FILE **file,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 3455fcb7f5SSatish Balay { 351850a936SBarry Smith char *c1,*tmp; 3655fcb7f5SSatish Balay 3755fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 381850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 391850a936SBarry Smith *ierr = PetscFPrintf((MPI_Comm)PetscToPointerComm(*comm),*file,tmp);if (*ierr) return; 401850a936SBarry Smith *ierr = PetscStrfree(tmp);if (*ierr) return; 4155fcb7f5SSatish Balay FREECHAR(fname,c1); 4255fcb7f5SSatish Balay } 4355fcb7f5SSatish Balay 4455fcb7f5SSatish Balay void PETSC_STDCALL petscprintf_(MPI_Comm *comm,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 4555fcb7f5SSatish Balay { 461850a936SBarry Smith char *c1,*tmp; 4755fcb7f5SSatish Balay 4855fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 491850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 501850a936SBarry Smith *ierr = PetscPrintf((MPI_Comm)PetscToPointerComm(*comm),tmp);if (*ierr) return; 511850a936SBarry Smith *ierr = PetscStrfree(tmp);if (*ierr) return; 5255fcb7f5SSatish Balay FREECHAR(fname,c1); 5355fcb7f5SSatish Balay } 5455fcb7f5SSatish Balay 5555fcb7f5SSatish Balay void PETSC_STDCALL petscsynchronizedfprintf_(MPI_Comm *comm,FILE **file,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 5655fcb7f5SSatish Balay { 571850a936SBarry Smith char *c1,*tmp; 5855fcb7f5SSatish Balay 5955fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 601850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 611850a936SBarry Smith *ierr = PetscSynchronizedFPrintf((MPI_Comm)PetscToPointerComm(*comm),*file,tmp);if (*ierr) return; 621850a936SBarry Smith *ierr = PetscStrfree(tmp);if (*ierr) return; 6355fcb7f5SSatish Balay FREECHAR(fname,c1); 6455fcb7f5SSatish Balay } 6555fcb7f5SSatish Balay 6655fcb7f5SSatish Balay void PETSC_STDCALL petscsynchronizedprintf_(MPI_Comm *comm,CHAR fname PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 6755fcb7f5SSatish Balay { 681850a936SBarry Smith char *c1,*tmp; 6955fcb7f5SSatish Balay 7055fcb7f5SSatish Balay FIXCHAR(fname,len1,c1); 711850a936SBarry Smith *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 721850a936SBarry Smith *ierr = PetscSynchronizedPrintf((MPI_Comm)PetscToPointerComm(*comm),tmp);if (*ierr) return; 731850a936SBarry Smith *ierr = PetscStrfree(tmp);if (*ierr) return; 7455fcb7f5SSatish Balay FREECHAR(fname,c1); 7555fcb7f5SSatish Balay } 7655fcb7f5SSatish Balay 7755fcb7f5SSatish Balay EXTERN_C_END 78