xref: /petsc/src/sys/classes/viewer/impls/ascii/ftn-custom/zfilevf.c (revision 2205254efee3a00a594e5e2a3a70f74dcb40bc03)
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