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