Screwed by patch ... enable libscihelptools{.la,-disable.la}.
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_helpbrowser.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Vincent COUVERT
4  * 
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at    
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include "gw_gui.h"
14 #include "stack-c.h"
15 #include "localization.h"
16 #include "CallHelpBrowser.h"
17 #include "Scierror.h"
18 #include "getPropertyAssignedValue.h"
19 #include "sciprint.h"
20 #include "freeArrayOfString.h"
21 #include "loadOnUseClassPath.h"
22 /*--------------------------------------------------------------------------*/
23 static BOOL loadedDep = FALSE;
24 /*--------------------------------------------------------------------------*/
25 int sci_helpbrowser(char *fname,unsigned long fname_len)
26 {
27   int nbRow = 0, nbCol = 0;
28   char **keywordAdr = NULL;
29
30   int nbRowHelp = 0, nbColHelp = 0;
31   char **helpAdr = NULL;
32   char **languageAdr = NULL;
33   int fullTextAdr = 0;
34   
35   CheckRhs(2,4);
36   CheckLhs(0,1);
37
38   /* We load SciNotes when calling javahelp because we have no way to know
39    * to load it when using Javahelp because it can call SciNotes directly */
40   if (!loadedDep) 
41   {
42           loadOnUseClassPath("SciNotes");
43           loadedDep = TRUE;
44   }
45
46   if (VarType(1) == sci_strings)
47     {
48       GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRowHelp, &nbColHelp, &helpAdr);
49     }
50   else
51     {
52       if (VarType(1) == sci_matrix)
53         {
54           if (nbRow*nbCol == 0)
55             {
56               helpAdr = NULL; /* No toolboxes installed */
57             }
58           else
59             {
60               Scierror(999, _("%s: Wrong size for input argument #%d: Matrix of strings expected.\n"), fname, 1);
61               return FALSE;
62             }
63         }
64       else
65         {
66           Scierror(999, _("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"), fname, 1);
67           return FALSE;
68         }
69     }
70   
71   if (Rhs == 2)
72     {
73       if (VarType(2) == sci_strings)
74         {
75           GetRhsVar(2, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &languageAdr);
76           if (nbRow*nbCol != 1)
77             {
78               if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
79               freeArrayOfString(languageAdr, nbRow*nbCol);
80               Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 2);
81               return FALSE;
82             }
83         }
84       else
85         {
86           if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
87           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
88           return FALSE;
89         }
90
91       if (helpAdr == NULL) /* No toolboxes loaded */
92         {
93           launchHelpBrowser(NULL, nbRowHelp*nbColHelp, getStringMatrixFromStack((size_t)languageAdr)[0]);
94         }
95       else
96         {
97           launchHelpBrowser(getStringMatrixFromStack((size_t)helpAdr), nbRowHelp*nbColHelp, getStringMatrixFromStack((size_t)languageAdr)[0]);
98           freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
99         }
100       freeArrayOfString(languageAdr, nbRow*nbCol);
101     }
102   else if (Rhs == 4)
103     {
104       if (VarType(2) == sci_strings)
105         {
106           GetRhsVar(2, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &keywordAdr);
107           if (nbRow*nbCol != 1)
108             {
109               if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
110               freeArrayOfString(keywordAdr, nbRow * nbCol);
111               Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 2);
112               return FALSE;
113             }
114         }
115       else
116         {
117           if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
118           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
119           return FALSE;
120         }
121       
122       if (VarType(3) == sci_strings)
123         {
124           GetRhsVar(3, MATRIX_OF_STRING_DATATYPE, &nbRow, &nbCol, &languageAdr);
125           if (nbRow*nbCol != 1)
126             {
127               if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
128               freeArrayOfString(keywordAdr, 1);
129               freeArrayOfString(languageAdr, nbRow * nbCol);
130               Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 3);
131               return FALSE;
132             }
133         }
134       else
135         {
136           if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
137           freeArrayOfString(keywordAdr, 1);
138           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 3);
139           return FALSE;
140         }
141       
142       if (VarType(4) == sci_boolean)
143         {
144           GetRhsVar(4, MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &fullTextAdr);
145           if (nbRow*nbCol != 1)
146             {
147               if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
148               freeArrayOfString(keywordAdr, 1);
149               freeArrayOfString(languageAdr, 1);
150               Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 4);
151               return FALSE;
152             }
153         }
154       else
155         {
156           if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
157           freeArrayOfString(keywordAdr, 1);
158           freeArrayOfString(languageAdr, 1);
159           Scierror(999, _("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 4);
160           return FALSE;
161         }
162       
163       if (helpAdr == NULL) /* No toolboxes loaded */
164         {
165           searchKeyword(NULL, nbRowHelp*nbColHelp, getStringMatrixFromStack((size_t)keywordAdr)[0], getStringMatrixFromStack((size_t)languageAdr)[0], *istk(fullTextAdr)==1);
166         }
167       else
168         {
169           searchKeyword(getStringMatrixFromStack((size_t)helpAdr), nbRowHelp*nbColHelp, getStringMatrixFromStack((size_t)keywordAdr)[0], getStringMatrixFromStack((size_t)languageAdr)[0], *istk(fullTextAdr)==1);
170           if (helpAdr) freeArrayOfString(helpAdr, nbRowHelp*nbColHelp);
171         }
172       freeArrayOfString(keywordAdr, 1);
173       freeArrayOfString(languageAdr, 1);
174     }
175   else
176     {
177       Scierror(999, _("%s: Wrong number of input arguments: %d or %d expected.\n"), fname, 2, 4);
178       return FALSE;
179     }
180   
181   LhsVar(1) = 0;
182     
183   PutLhsVar();
184
185   return TRUE;
186
187 }
188 /*--------------------------------------------------------------------------*/