1*6dd63270SBarry Smith #include <petsc/private/ftnimpl.h> 2665c2dedSJed Brown #include <petscviewer.h> 35c6c1daeSBarry Smith 45c6c1daeSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS) 55c6c1daeSBarry Smith #define petscviewerasciiprintf_ PETSCVIEWERASCIIPRINTF 65c6c1daeSBarry Smith #define petscviewerasciisynchronizedprintf_ PETSCVIEWERASCIISYNCHRONIZEDPRINTF 75c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 85c6c1daeSBarry Smith #define petscviewerasciiprintf_ petscviewerasciiprintf 95c6c1daeSBarry Smith #define petscviewerasciisynchronizedprintf_ petscviewerasciisynchronizedprintf 105c6c1daeSBarry Smith #endif 115c6c1daeSBarry Smith 125c6c1daeSBarry Smith static PetscErrorCode PetscFixSlashN(const char *in, char **out) 135c6c1daeSBarry Smith { 145c6c1daeSBarry Smith PetscInt i; 155c6c1daeSBarry Smith size_t len; 165c6c1daeSBarry Smith 175c6c1daeSBarry Smith PetscFunctionBegin; 189566063dSJacob Faibussowitsch PetscCall(PetscStrallocpy(in, out)); 199566063dSJacob Faibussowitsch PetscCall(PetscStrlen(*out, &len)); 205c6c1daeSBarry Smith for (i = 0; i < (int)len - 1; i++) { 215975b3b6SBarry Smith if ((*out)[i] == '\\' && (*out)[i + 1] == 'n') { 225975b3b6SBarry Smith (*out)[i] = ' '; 235975b3b6SBarry Smith (*out)[i + 1] = '\n'; 245975b3b6SBarry Smith } 255c6c1daeSBarry Smith } 263ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 275c6c1daeSBarry Smith } 285c6c1daeSBarry Smith 2919caf8f3SSatish Balay PETSC_EXTERN void petscviewerasciiprintf_(PetscViewer *viewer, char *str, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1) 305c6c1daeSBarry Smith { 315c6c1daeSBarry Smith char *c1, *tmp; 325c6c1daeSBarry Smith PetscViewer v; 335c6c1daeSBarry Smith 345c6c1daeSBarry Smith PetscPatchDefaultViewers_Fortran(viewer, v); 355c6c1daeSBarry Smith FIXCHAR(str, len1, c1); 365975b3b6SBarry Smith *ierr = PetscFixSlashN(c1, &tmp); 375975b3b6SBarry Smith if (*ierr) return; 385c6c1daeSBarry Smith FREECHAR(str, c1); 395975b3b6SBarry Smith *ierr = PetscViewerASCIIPrintf(v, "%s", tmp); 405975b3b6SBarry Smith if (*ierr) return; 418bceffaeSBarry Smith *ierr = PetscFree(tmp); 425c6c1daeSBarry Smith } 435c6c1daeSBarry Smith 4419caf8f3SSatish Balay PETSC_EXTERN void petscviewerasciisynchronizedprintf_(PetscViewer *viewer, char *str, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len1) 455c6c1daeSBarry Smith { 465c6c1daeSBarry Smith char *c1, *tmp; 475c6c1daeSBarry Smith PetscViewer v; 485c6c1daeSBarry Smith 495c6c1daeSBarry Smith PetscPatchDefaultViewers_Fortran(viewer, v); 505c6c1daeSBarry Smith FIXCHAR(str, len1, c1); 515975b3b6SBarry Smith *ierr = PetscFixSlashN(c1, &tmp); 525975b3b6SBarry Smith if (*ierr) return; 535c6c1daeSBarry Smith FREECHAR(str, c1); 545975b3b6SBarry Smith *ierr = PetscViewerASCIISynchronizedPrintf(v, "%s", tmp); 555975b3b6SBarry Smith if (*ierr) return; 568bceffaeSBarry Smith *ierr = PetscFree(tmp); 575c6c1daeSBarry Smith } 58