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 petscviewerasciipushsynchronized_ PETSCVIEWERASCIIPUSHSYNCHRONIZE 9 #define petscviewerasciipopsynchronized_ PETSCVIEWERASCIIPOPSYNCHRONIZE 10 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 11 #define petscviewerfilesetname_ petscviewerfilesetname 12 #define petscviewerasciiprintf_ petscviewerasciiprintf 13 #define petscviewerasciisynchronizedprintf_ petscviewerasciisynchronizedprintf 14 #define petscviewerasciipushsynchronized_ petscviewerasciipushsynchronized 15 #define petscviewerasciipopsynchronized_ petscviewerasciipopsynchronized 16 #endif 17 18 PETSC_EXTERN 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 PETSC_EXTERN 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 FREECHAR(str,c1); 54 *ierr = PetscViewerASCIIPrintf(v,tmp);if (*ierr) return; 55 *ierr = PetscFree(tmp); 56 } 57 58 PETSC_EXTERN 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 FREECHAR(str,c1); 67 *ierr = PetscViewerASCIISynchronizedPrintf(v,tmp);if (*ierr) return; 68 *ierr = PetscFree(tmp); 69 } 70 71 PETSC_EXTERN void PETSC_STDCALL petscviewerasciipushsynchronized_(PetscViewer *viewer,PetscErrorCode *ierr) 72 { 73 PetscViewer v; 74 75 PetscPatchDefaultViewers_Fortran(viewer,v); 76 *ierr = PetscViewerASCIIPushSynchronized(v); 77 } 78 79 PETSC_EXTERN void PETSC_STDCALL petscviewerasciipopsynchronized_(PetscViewer *viewer,PetscErrorCode *ierr) 80 { 81 PetscViewer v; 82 83 PetscPatchDefaultViewers_Fortran(viewer,v); 84 *ierr = PetscViewerASCIIPopSynchronized(v); 85 } 86