Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlDelete.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - Scilab Enterprises - Calixte DENIZET
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 "XMLObject.hxx"
14 #include "XMLDocument.hxx"
15 #include "XMLValidation.hxx"
16
17 extern "C"
18 {
19 #include "gw_xml.h"
20 #include "Scierror.h"
21 #include "api_scilab.h"
22 #include "xml_mlist.h"
23 #include "localization.h"
24 }
25
26 using namespace org_modules_xml;
27
28 /*--------------------------------------------------------------------------*/
29 int sci_xmlDelete(char *fname, unsigned long fname_len)
30 {
31     int id;
32     SciErr err;
33     int *addr = 0;
34
35     org_modules_xml::XMLDocument * doc = 0;
36     XMLValidation *vf = 0;
37     char *com = 0;
38
39     CheckLhs(1, 1);
40
41     if (Rhs == 0)
42     {
43         Scierror(999, gettext("%s: Wrong number of input arguments: at least %d expected.\n"), fname, 1);
44         return 0;
45     }
46
47     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
48     if (err.iErr)
49     {
50         printError(&err, 0);
51         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
52         return 0;
53     }
54
55     if (isStringType(pvApiCtx, addr))
56     {
57         if (!checkVarDimension(pvApiCtx, addr, 1, 1))
58         {
59             Scierror(999, gettext("%s: Wrong dimension for input argument #%d: A string expected.\n"), fname, 1);
60             return 0;
61         }
62
63         if (getAllocatedSingleString(pvApiCtx, addr, &com) != 0)
64         {
65             Scierror(999, _("%s: No more memory.\n"), fname);
66             return 0;
67         }
68         if (!strcmp(com, "all"))
69         {
70             org_modules_xml::XMLDocument::closeAllDocuments();
71             XMLValidation::closeAllValidationFiles();
72         }
73         freeAllocatedSingleString(com);
74     }
75     else
76     {
77         for (int pos = 1; pos <= Rhs; pos++)
78         {
79             err = getVarAddressFromPosition(pvApiCtx, pos, &addr);
80             if (err.iErr)
81             {
82                 printError(&err, 0);
83                 Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, pos);
84                 return 0;
85             }
86
87             if (isXMLDoc(addr, pvApiCtx))
88             {
89                 id = getXMLObjectId(addr, pvApiCtx);
90                 doc = XMLObject::getFromId < org_modules_xml::XMLDocument > (id);
91                 if (!doc)
92                 {
93                     Scierror(999, gettext("%s: XML document does not exist.\n"), fname);
94                     return 0;
95                 }
96                 delete doc;
97             }
98             else if (isXMLValid(addr, pvApiCtx))
99             {
100                 id = getXMLObjectId(addr, pvApiCtx);
101                 vf = XMLObject::getFromId < XMLValidation > (id);
102                 if (!vf)
103                 {
104                     Scierror(999, gettext("%s: XML validation file does not exist.\n"), fname);
105                     return 0;
106                 }
107                 delete vf;
108             }
109             else
110             {
111                 Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected\n"), fname, 1, "XMLDoc");
112                 return 0;
113             }
114         }
115     }
116
117     LhsVar(1) = 0;
118     PutLhsVar();
119     return 0;
120 }
121
122 /*--------------------------------------------------------------------------*/