1 #include <petsc/private/fortranimpl.h> 2 #include <petscviewer.h> 3 4 #if defined(PETSC_HAVE_FORTRAN_CAPS) 5 #define petscviewerfilesetname_ PETSCVIEWERFILESETNAME 6 #define petscviewerfilegetname_ PETSCVIEWERFILEGETNAME 7 #define petscviewerasciiprintf_ PETSCVIEWERASCIIPRINTF 8 #define petscviewerasciisynchronizedprintf_ PETSCVIEWERASCIISYNCHRONIZEDPRINTF 9 #define petscviewerasciipushsynchronized_ PETSCVIEWERASCIIPUSHSYNCHRONIZED 10 #define petscviewerasciipopsynchronized_ PETSCVIEWERASCIIPOPSYNCHRONIZED 11 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 12 #define petscviewerfilesetname_ petscviewerfilesetname 13 #define petscviewerfilegetname_ petscviewerfilegetname 14 #define petscviewerasciiprintf_ petscviewerasciiprintf 15 #define petscviewerasciisynchronizedprintf_ petscviewerasciisynchronizedprintf 16 #define petscviewerasciipushsynchronized_ petscviewerasciipushsynchronized 17 #define petscviewerasciipopsynchronized_ petscviewerasciipopsynchronized 18 #endif 19 20 PETSC_EXTERN void PETSC_STDCALL petscviewerfilesetname_(PetscViewer *viewer,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 21 { 22 char *c1; 23 PetscViewer v; 24 PetscPatchDefaultViewers_Fortran(viewer,v); 25 FIXCHAR(name,len,c1); 26 *ierr = PetscViewerFileSetName(v,c1); 27 FREECHAR(name,c1); 28 } 29 30 PETSC_EXTERN void PETSC_STDCALL petscviewerfilegetname_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len)) 31 { 32 const char *c1; 33 34 *ierr = PetscViewerGetType(*viewer, &c1); 35 *ierr = PetscStrncpy(name, c1, len); 36 FIXRETURNCHAR(PETSC_TRUE, name, len); 37 } 38 39 static PetscErrorCode PetscFixSlashN(const char *in, char **out) 40 { 41 PetscErrorCode ierr; 42 PetscInt i; 43 size_t len; 44 45 PetscFunctionBegin; 46 ierr = PetscStrallocpy(in,out);CHKERRQ(ierr); 47 ierr = PetscStrlen(*out,&len);CHKERRQ(ierr); 48 for (i=0; i<(int)len-1; i++) { 49 if ((*out)[i] == '\\' && (*out)[i+1] == 'n') {(*out)[i] = ' '; (*out)[i+1] = '\n';} 50 } 51 PetscFunctionReturn(0); 52 } 53 54 PETSC_EXTERN void PETSC_STDCALL petscviewerasciiprintf_(PetscViewer *viewer,char* str PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 55 { 56 char *c1, *tmp; 57 PetscViewer v; 58 59 PetscPatchDefaultViewers_Fortran(viewer,v); 60 FIXCHAR(str,len1,c1); 61 *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 62 FREECHAR(str,c1); 63 *ierr = PetscViewerASCIIPrintf(v,tmp);if (*ierr) return; 64 *ierr = PetscFree(tmp); 65 } 66 67 PETSC_EXTERN void PETSC_STDCALL petscviewerasciisynchronizedprintf_(PetscViewer *viewer,char* str PETSC_MIXED_LEN(len1),PetscErrorCode *ierr PETSC_END_LEN(len1)) 68 { 69 char *c1, *tmp; 70 PetscViewer v; 71 72 PetscPatchDefaultViewers_Fortran(viewer,v); 73 FIXCHAR(str,len1,c1); 74 *ierr = PetscFixSlashN(c1,&tmp);if (*ierr) return; 75 FREECHAR(str,c1); 76 *ierr = PetscViewerASCIISynchronizedPrintf(v,tmp);if (*ierr) return; 77 *ierr = PetscFree(tmp); 78 } 79 80 PETSC_EXTERN void PETSC_STDCALL petscviewerasciipushsynchronized_(PetscViewer *viewer,PetscErrorCode *ierr) 81 { 82 PetscViewer v; 83 84 PetscPatchDefaultViewers_Fortran(viewer,v); 85 *ierr = PetscViewerASCIIPushSynchronized(v); 86 } 87 88 PETSC_EXTERN void PETSC_STDCALL petscviewerasciipopsynchronized_(PetscViewer *viewer,PetscErrorCode *ierr) 89 { 90 PetscViewer v; 91 92 PetscPatchDefaultViewers_Fortran(viewer,v); 93 *ierr = PetscViewerASCIIPopSynchronized(v); 94 } 95