Comment line goes on 80 chars only
[scilab.git] / scilab / modules / fileio / sci_gateway / c / sci_mfprintf.c
1 /*--------------------------------------------------------------------------*/ 
2 /* INRIA 2006 */
3 /*--------------------------------------------------------------------------*/ 
4 #include "Scierror.h"
5 #include "machine.h"
6 #include "stack-c.h"
7 #include "do_xxprintf.h"
8 #include "gw_fileio.h"
9 #include "filesmanagement.h"
10 #include "localization.h"
11 /*--------------------------------------------------------------------------*/ 
12 int int_objfprintf __PARAMS((char *fname,unsigned long fname_len))
13 {
14         FILE *f;
15         static int l1, m1, n1,l2,m2,n2,lcount,rval, mx, mk, nk, k;
16         char *ptrFormat=NULL;
17         int i=0;
18         int NumberPercent=0;
19         int param1=0;
20
21         Nbvars = 0;
22         CheckRhs(1,1000);
23         CheckLhs(0,1);
24         if ( Rhs < 2 ) 
25         { 
26                 Scierror(999,_("Error:\tInput parameters (RHS) must be >= 2\n"));
27                 return 0;
28         }
29         for (k=3;k<=Rhs;k++) 
30         {
31                 if (VarType(k) !=sci_matrix && VarType(k) !=sci_strings) {OverLoad(k);return 0;}
32         }
33         GetRhsVar(1,MATRIX_OF_INTEGER_DATATYPE,&m1,&n1,&l1); /* file id */
34         GetRhsVar(2,STRING_DATATYPE,&m2,&n2,&l2); /* format */
35         ptrFormat=cstk(l2);
36
37         param1=*istk(l1);
38
39         if ((f= GetFileOpenedInScilab(param1)) == (FILE *)0)
40         {
41                 Scierror(999,_("mfprintf:\t wrong file descriptor %d\n"),*istk(l1));
42                 return 0;
43         }
44
45         for(i=0;i<(int)strlen(ptrFormat);i++)
46         {
47                 if (ptrFormat[i]=='%') 
48                 {
49                         NumberPercent++;
50                         if (ptrFormat[i+1]=='%') {NumberPercent--;i++;}
51                 }
52         }
53
54         if (NumberPercent<Rhs-2)
55         {
56                 Scierror(999,_("mfprintf: Invalid format.\n"));
57                 return 0;
58         }
59
60         mx=0;
61         if (Rhs>=3) 
62         {
63                 GetMatrixdims(3,&mx,&nk);
64                 for (k=4;k<=Rhs;k++) 
65                 {
66                         GetMatrixdims(k,&mk,&nk);
67                         mx = Min(mx,mk);
68                 }
69         }
70         lcount=1;
71         if (Rhs == 2) 
72                 rval=do_xxprintf("fprintf",f,cstk(l2),Rhs,2,lcount,(char **)0);
73         else while (1) 
74         {
75                 if ((rval=do_xxprintf("fprintf",f,cstk(l2),Rhs,2,lcount,(char **)0)) < 0) break;
76                 lcount++;
77                 if (lcount>mx) break;
78         }
79         if (rval == RET_BUG) return 0;
80         LhsVar(1)=0; /** No return value **/
81         PutLhsVar();
82         return 0;
83
84 /*--------------------------------------------------------------------------*/