xref: /petsc/src/sys/classes/viewer/impls/ascii/ftn-custom/zfilevf.c (revision b0dcfd164860a975c76f90dabf1036901aab1c4e)
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 
PetscFixSlashN(const char * in,char ** out)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 
petscviewerasciiprintf_(PetscViewer * viewer,char * str,PetscErrorCode * ierr,PETSC_FORTRAN_CHARLEN_T len1)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 
petscviewerasciisynchronizedprintf_(PetscViewer * viewer,char * str,PetscErrorCode * ierr,PETSC_FORTRAN_CHARLEN_T len1)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