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