add localization in toolboxes
[scilab.git] / scilab / contrib / toolbox_skeleton / sci_gateway / cpp / sci_cpp_find.cxx
1 /* ==================================================================== */
2 /* Template toolbox_skeleton */
3 /* This file is released under the 3-clause BSD license. See COPYING-BSD. */
4 /* ==================================================================== */
5 #include <string>
6 /* ==================================================================== */
7 extern "C" 
8 {
9 /* ==================================================================== */      
10   #include "api_scilab.h"
11   #include "Scierror.h"
12   #include "MALLOC.h"
13   #include <localization.h>
14
15 /* ==================================================================== */
16   int sci_cpp_find(char *fname) 
17   {
18     SciErr sciErr;
19     
20     int m1 = 0, n1 = 0;
21     int *piAddressVarOne = NULL;
22     char *pStVarOne = NULL;
23     int lenStVarOne = 0;
24     int iType1 = 0;
25     
26     int m2 = 0, n2 = 0;
27     int *piAddressVarTwo = NULL;
28     char *pStVarTwo = NULL;
29     int lenStVarTwo = 0;
30     int iType2 = 0;
31     
32     /* Check the number of input argument */
33     CheckInputArgument(pvApiCtx, 2,2); 
34     
35     /* Check the number of output argument */
36     CheckOutputArgument(pvApiCtx, 1,1);
37     
38     /* get Address of inputs */
39     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddressVarOne);
40     if(sciErr.iErr)
41     {
42       printError(&sciErr, 0);
43       return 0;
44     }     
45     sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddressVarTwo);
46     if(sciErr.iErr)
47     {
48       printError(&sciErr, 0);
49       return 0;
50     } 
51     
52     /* checks types */
53     sciErr = getVarType(pvApiCtx, piAddressVarOne, &iType1);
54     if(sciErr.iErr)
55     {
56       printError(&sciErr, 0);
57       return 0;
58     } 
59     
60     if ( iType1 != sci_strings )
61     {
62       Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,1);
63       return 0;
64     }
65   
66     sciErr = getVarType(pvApiCtx, piAddressVarTwo, &iType2);
67     if(sciErr.iErr)
68     {
69       printError(&sciErr, 0);
70       return 0;
71     } 
72     
73     if ( iType2 != sci_strings )
74     {
75       Scierror(999,_("%s: Wrong type for input argument #%d: A string expected.\n"),fname,2);
76       return 0;
77     }
78     
79     /* get strings */
80     
81     sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne,&m1,&n1,&lenStVarOne,&pStVarOne);
82     if(sciErr.iErr)
83     {
84       printError(&sciErr, 0);
85       return 0;
86     } 
87     
88     /* check size */
89     if ( (m1 != n1) && (n1 != 1) ) 
90     {
91       Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,1);
92       return 0;
93     }
94     /* alloc string */
95     pStVarOne = (char*)MALLOC(sizeof(char)*(lenStVarOne + 1));
96     /* get string One */
97     sciErr = getMatrixOfString(pvApiCtx, piAddressVarOne,&m1,&n1,&lenStVarOne,&pStVarOne);
98     if(sciErr.iErr)
99     {
100       printError(&sciErr, 0);
101       return 0;
102     } 
103     
104     sciErr = getMatrixOfString(pvApiCtx, piAddressVarTwo,&m2,&n2,&lenStVarTwo,&pStVarTwo);
105     if(sciErr.iErr)
106     {
107       printError(&sciErr, 0);
108       return 0;
109     } 
110     
111     if ( (m2 != n2) && (n2 != 1) ) 
112     {
113       Scierror(999,_("%s: Wrong size for input argument #%d: A string expected.\n"),fname,2);
114       return 0;
115     }
116     /* alloc string */
117     pStVarTwo = (char*)MALLOC(sizeof(char)*(lenStVarTwo + 1));
118     /* get string Two */
119     sciErr = getMatrixOfString(pvApiCtx, piAddressVarTwo,&m2,&n2,&lenStVarTwo,&pStVarTwo);
120     if(sciErr.iErr)
121     {
122       printError(&sciErr, 0);
123       return 0;
124     } 
125     
126     
127     std::string myMessage (pStVarOne);
128     if (pStVarOne)
129       {
130         FREE(pStVarOne); 
131         pStVarOne = NULL;
132       }
133         
134     std::string search(pStVarTwo);
135     if (pStVarTwo)
136       {
137         FREE(pStVarTwo);
138         pStVarTwo = NULL;
139       }
140
141     /* Where we will store the position */
142     double dOut = 0.0;
143     if (myMessage.find(search) != std::string::npos) 
144     {
145       /* The actual operation */
146       dOut = myMessage.find(search); 
147     } 
148     else 
149     {
150       dOut = -1; /* Substring not found */
151     }
152     
153     /* create result on stack */
154     int m_out = 1;
155     int n_out = 1;
156     
157     createMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, m_out, n_out, &dOut);
158     
159     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; 
160
161     return 0;
162         }
163 /* ==================================================================== */      
164 } /* extern "C" */
165 /* ==================================================================== */