1 #include <petsc-private/fortranimpl.h> 2 #include <petscviewer.h> 3 4 #if defined(PETSC_HAVE_FORTRAN_CAPS) 5 #define petscviewerfilesetname_ PETSCVIEWERFILESETNAME 6 #define petscviewerasciiprintf_ PETSCVIEWERASCIIPRINTF 7 #define petscviewerasciisynchronizedprintf_ PETSCVIEWERASCIISYNCHRONIZEDPRINTF 8 #define petscviewerasciisynchronizedallow_ PETSCVIEWERASCIISYNCHRONIZEALLOW 9 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 10 #define petscviewerfilesetname_ petscviewerfilesetname 11 #define petscviewerasciiprintf_ petscviewerasciiprintf 12 #define petscviewerasciisynchronizedprintf_ petscviewerasciisynchronizedprintf 13 #define petscviewerasciisynchronizedallow_ petscviewerasciisynchronizedallow 14 #endif 15 16 EXTERN_C_BEGIN 17 18 void PETSC_STDCALL petscviewerfilesetname_(PetscViewer *viewer,CHAR name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 19 { 20 char *c1; 21 PetscViewer v; 22 PetscPatchDefaultViewers_Fortran(viewer,v); 23 FIXCHAR(name,len,c1); 24 *ierr = PetscViewerFileSetName(v,c1); 25 FREECHAR(name,c1); 26 } 27 28 #undef __FUNCT__ 29 #define __FUNCT__ "PetscFixSlashN" 30 static PetscErrorCode PetscFixSlashN(const char *in, char **out) 31 { 32 PetscErrorCode ierr; 33 PetscInt i; 34 size_t len; 35 36 PetscFunctionBegin; 37 ierr = PetscStrallocpy(in,out);CHKERRQ(ierr); 38 ierr = PetscStrlen(*out,&len);CHKERRQ(ierr); 39 for (i=0; i<(int)len-1; i++) { 40 if ((*out)[i] == '\\' && (*out)[i+1] == 'n') {(*out)[i] = ' '; (*out)[i+1] = '\n';} 41 } 42 PetscFunctionReturn(0); 43 } 44 45 void PETSC_STDCALL petscviewerasciiprintf_(PetscViewer *viewer,CHAR str PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 46 { 47 char *c1, *tmp; 48 PetscViewer v; 49 50 PetscPatchDefaultViewers_Fortran(viewer,v); 51 FIXCHAR(str,len1,c1); 52 *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 53 *ierr = PetscViewerASCIIPrintf(v,tmp);if (*ierr) return; 54 *ierr = PetscFree(tmp);if (*ierr) return; 55 FREECHAR(str,c1); 56 } 57 58 void PETSC_STDCALL petscviewerasciisynchronizedprintf_(PetscViewer *viewer,CHAR str PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 59 { 60 char *c1, *tmp; 61 PetscViewer v; 62 63 PetscPatchDefaultViewers_Fortran(viewer,v); 64 FIXCHAR(str,len1,c1); 65 *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 66 *ierr = PetscViewerASCIISynchronizedPrintf(v,tmp);if (*ierr) return; 67 *ierr = PetscFree(tmp);if (*ierr) return; 68 FREECHAR(str,c1); 69 } 70 71 void PETSC_STDCALL petscviewerasciisynchronizedallow_(PetscViewer *viewer,PetscBool *allow,PetscErrorCode *ierr) 72 { 73 PetscViewer v; 74 75 PetscPatchDefaultViewers_Fortran(viewer,v); 76 *ierr = PetscViewerASCIISynchronizedAllow(v,*allow); 77 } 78 79 EXTERN_C_END 80