Localization (fileio)
[scilab.git] / scilab / modules / fileio / sci_gateway / c / sci_fprintfMat.c
1 /*--------------------------------------------------------------------------*/
2 /* INRIA 2006 */
3 /*--------------------------------------------------------------------------*/
4 #include <stdio.h>
5 #include "machine.h"
6 #include "MALLOC.h"
7 #include "stack-c.h"
8 #include "gw_fileio.h"
9 #include "fileio.h"
10 #include "Scierror.h"
11 #include "localization.h"
12 #include "freeArrayOfString.h"
13 /*--------------------------------------------------------------------------*/
14 int int_objfprintfMat(char *fname,unsigned long fname_len)
15 {
16         int l1 = 0, m1 = 0, n1 = 0,l2 = 0,m2 = 0,n2 = 0,m3 = 0,n3 = 0,l3 = 0,i = 0,j = 0,mS = 0,nS = 0;
17         FILE  *f;
18         char **Str2 = NULL;
19         char *Format = NULL;
20         Nbvars = 0;
21         CheckRhs(1,4);
22         CheckLhs(1,1);
23
24         if (GetType(1) == sci_strings)
25         {
26                 GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);/* file name */
27         }
28         else
29         {
30                 Scierror(999,_("%s: Wrong type for input argument #%d: String expected.\n"),fname,1);
31                 return 0;
32         }
33
34         if (GetType(2) == sci_matrix)
35         {
36                 #define COMPLEXPART 1
37                 int *header=NULL;
38                 int Cmplx;
39
40                 header = (int *) GetData(2);
41                 Cmplx=header[3];
42
43                 if (Cmplx != COMPLEXPART)
44                 {
45                         GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE,&m2,&n2,&l2); /* data */
46                 }
47                 else
48                 {
49                         Scierror(999,_("%s: Wrong type for input argument #%d: Real values expected.\n"),fname,2);
50                         return 0;
51                 }
52         }
53         else
54         {
55                 Scierror(999,_("%s: Wrong type for input argument #%d: Matrix of floating point numbers expected.\n"),fname,2);
56                 return 0;
57         }
58
59         if ( Rhs >= 3)
60         {
61                 GetRhsVar(3,STRING_DATATYPE,&m3,&n3,&l3);/* format */
62                 StringConvert(cstk(l3));  /* conversion */
63                 Format = cstk(l3);
64         }
65         else
66         {
67                 Format = "%f";
68         }
69
70         if ( Rhs >= 4 )
71         {
72                 GetRhsVar(4,MATRIX_OF_STRING_DATATYPE,&mS,&nS,&Str2);
73         }
74
75         if (( f = fopen(cstk(l1),"w")) == (FILE *)0)
76         {
77                 Scierror(999,_("%s: Cannot open file %s.\n"),fname,cstk(l1));
78                 return 0;
79         }
80
81         if ( Rhs >= 4 )
82         {
83                 for ( i=0 ; i < mS*nS ; i++) fprintf(f,"%s\n",Str2[i]);
84         }
85
86         for (i = 0 ; i < m2 ; i++ )
87         {
88                 for ( j = 0 ; j < n2 ; j++)
89                 {
90                         fprintf(f,Format,*stk(l2+i + m2*j));
91                         fprintf(f," ");
92                 }
93
94                 fprintf(f,"\n");
95         }
96         fclose(f);
97         LhsVar(1)=0 ; /** no return value **/
98         if ( Rhs >= 4)
99         {
100                 freeArrayOfString(Str2,mS*nS);
101         }
102         PutLhsVar();
103         return 0;
104 }
105 /*--------------------------------------------------------------------------*/