Bug 11958 fixed: axesflag=0 was not taken into account in plot2d3
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_plot2d1.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  * 
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at    
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 /*------------------------------------------------------------------------*/
15 /* file: sci_plot2d1.c                                                    */
16 /* desc : interface for plot2d1, plot2d2, plot2d3 and plot2d4 routines    */
17 /*------------------------------------------------------------------------*/
18
19 #include "gw_graphics.h"
20 #include "stack-c.h"
21 #include "GetCommandArg.h"
22 #include "DefaultCommandArg.h"
23 #include "sciCall.h"
24 #include "localization.h"
25 #include "Scierror.h"
26 /*--------------------------------------------------------------------------*/
27 int sci_plot2d1_1 (char *fname,unsigned long fname_len)
28 {
29   return sci_plot2d1_G("plot2d1",1,fname_len);/* NG */
30 }
31 /*--------------------------------------------------------------------------*/
32 int sci_plot2d1_2 (char *fname,unsigned long fname_len)
33 {
34   return sci_plot2d1_G("plot2d2",2,fname_len); /* NG */
35 }
36 /*--------------------------------------------------------------------------*/
37 int sci_plot2d1_3 (char *fname,unsigned long fname_len)
38 {
39   return sci_plot2d1_G("plot2d3",3,fname_len);/* NG */
40 }
41 /*--------------------------------------------------------------------------*/
42 int sci_plot2d1_4 (char *fname,unsigned long fname_len)
43 {
44   return sci_plot2d1_G("plot2d4",4,fname_len);/* NG */
45 }
46 /*--------------------------------------------------------------------------*/
47 int sci_plot2d1_G( char * fname, int ptype, unsigned long fname_len )
48 {
49   int frame_def=8;
50   int *frame=&frame_def;
51   int axes_def=1;
52   int *axes=&axes_def;
53   int iskip = 0, test  = 0;
54   int m1 = 0,n1 = 0,l1 = 0, m2 = 0, n2 = 0, l2 = 0, lt = 0, i = 0, j = 0;
55
56   static rhs_opts opts[]= { {-1,"axesflag","?",0,0,0},
57                             {-1,"frameflag","?",0,0,0},
58                             {-1,"leg","?",0,0,0},
59                             {-1,"logflag","?",0,0,0},
60                             {-1,"nax","?",0,0,0},
61                             {-1,"rect","?",0,0,0},
62                             {-1,"strf","?",0,0,0},
63                             {-1,"style","?",0,0,0},
64                             {-1,NULL,NULL,0,0}       };
65
66   int    * style    = NULL  ;
67   double * rect     = NULL  ;
68   int    * nax      = NULL  ;
69   BOOL     flagNax  = FALSE ;
70   char   * strf     = NULL  ;
71   char   * legend   = NULL  ;
72   char   * logFlags = NULL  ;
73   char     strfl[4];
74
75   if (Rhs <= 0) {
76     /* lauch the default routines depending on the name of the calling funtion */
77     sci_demo(fname, fname_len);
78     return 0;
79   }
80   CheckRhs(1,9); /* to allow plot2dxx(y) */
81
82
83   iskip=0;
84   if ( get_optionals(fname,opts) == 0) 
85   {
86           PutLhsVar();
87           return 0;
88   }
89
90   if (GetType(1)==sci_strings) {
91     /* logflags */
92     GetLogflags(fname,1,opts,&logFlags);
93     iskip=1;
94   }
95
96   /* added to support plot2dxx([logflags],y) */
97   if ( Rhs == 1 + iskip )
98   {
99     if ( FirstOpt() <= Rhs)
100     {
101       Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),fname,1, 3+iskip);
102       return(0);
103     }
104
105     GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
106     CreateVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &l1);
107     if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
108     m1 = m2;  n1 = n2;
109     for (i = 0; i < m2 ; ++i) 
110       for (j = 0 ; j < n2 ;  ++j)
111         *stk( l1 + i + m2*j) = (double) i+1;
112   }
113
114
115   if (Rhs >= 2+iskip)
116   {
117     if ( FirstOpt() < 3+iskip) 
118     {
119       Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),
120         fname,1, 3+iskip);
121       return(0);
122     }
123
124
125     /* x */
126     GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
127     if (iskip==1) 
128     {
129       if (logFlags[0]=='e')
130       {
131         m1 = 0 ;
132         n1 = 0 ;
133       }
134     }
135
136     /* y */
137     GetRhsVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
138     /* if (m2 * n2 == 0) { m1 = 0; n1 = 0;}  */
139
140     test = (m1*n1 == 0) /* x = [] */
141       /* x,y vectors of same length */  
142       || ((m1 == 1 || n1 == 1) && (m2 == 1 || n2 ==1) && (m1*n1 == m2*n2))
143       || ((m1 == m2) && (n1 == n2)) /* size(x) == size(y) */
144       /* x vector size(y)==[size(x),.] */
145       || ((m1 == 1 && n1 == m2) || (n1 == 1 && m1 == m2)); 
146
147     CheckDimProp(1+iskip,2+iskip,!test);
148
149     if (m1*n1 == 0) 
150     { /* default x=1:n */
151       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
152       if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
153       for (i = 0; i < m2 ; ++i)
154       {
155         for (j = 0 ; j < n2 ;  ++j)
156         {
157           *stk( lt + i + m2*j) = (double) i+1;
158         }
159       }
160       m1 = m2;
161       n1 = n2;
162       l1 = lt;
163     }
164     else if ((m1 == 1 || n1 == 1) && (m2 != 1 && n2 != 1) ) {
165       /* a single x vector for mutiple columns for y */
166       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
167       for (i = 0; i < m2 ; ++i)
168       {
169         for (j = 0 ; j < n2 ;  ++j)
170         {
171           *stk( lt + i + m2*j) = *stk(l1 +i);
172         }
173       }
174       m1 = m2;
175       n1 = n2;
176       l1 = lt;
177     }
178     else if ((m1 == 1 && n1 == 1) && (n2 != 1) ) {
179       /* a single y row vector  for a single x */
180       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n2, &lt);
181       for (j = 0 ; j < n2 ;  ++j)
182       {
183         *stk( lt + j ) = *stk(l1);
184       }
185       n1 = n2;
186       l1 = lt;
187     }
188     else {
189       if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
190       if (m1 == 1 && n1 > 1) { m1 = n1; n1 = 1;}
191     }
192   }
193
194   sciGetStyle(fname,3+iskip,n1,opts,&style);
195   GetStrf(fname,4+iskip,opts,&strf);
196   GetLegend(fname,5+iskip,opts,&legend);
197   GetRect(fname,6+iskip,opts,&rect);
198   GetNax(7+iskip,opts,&nax,&flagNax);
199   if (iskip==0) GetLogflags(fname,8,opts,&logFlags);
200
201   if ( isDefStrf( strf ) ) {
202     strcpy(strfl,DEFSTRFN);
203
204     strf = strfl;
205     if ( !isDefRect( rect ) )
206     {
207       strfl[1]='7';
208     }
209     if ( !isDefLegend( legend ) )
210     {
211       strfl[0]='1';
212     }
213     GetOptionalIntArg(fname,9,"frameflag",&frame,1,opts);
214     if(frame != &frame_def)
215     {
216       strfl[1] = (char)(*frame+48);
217     }
218     GetOptionalIntArg(fname,9,"axesflag",&axes,1,opts);
219     if(axes != &axes_def)
220     {
221       strfl[2] = (char)(*axes+48);
222     }
223   }
224
225   if(ptype == 0) { ptype = 1 ; }
226
227   Objplot2d (ptype,logFlags,stk(l1), stk(l2), &n1, &m1, style, strf,legend,rect, nax, flagNax);
228
229
230   LhsVar(1) = 0;
231   PutLhsVar();
232   return 0;
233 }
234 /*--------------------------------------------------------------------------*/