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