summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authormanojgudi2013-07-23 07:54:12 +0530
committermanojgudi2013-07-23 07:54:12 +0530
commit43114165fb5e59c4267991f4922970c897fe2d88 (patch)
treec4cd97ed682dd75c0efa8991243b04b13633e270 /util.c
downloadsciscipy-1.0.0-43114165fb5e59c4267991f4922970c897fe2d88.tar.gz
sciscipy-1.0.0-43114165fb5e59c4267991f4922970c897fe2d88.tar.bz2
sciscipy-1.0.0-43114165fb5e59c4267991f4922970c897fe2d88.zip
initial commit
Diffstat (limited to 'util.c')
-rw-r--r--util.c148
1 files changed, 148 insertions, 0 deletions
diff --git a/util.c b/util.c
new file mode 100644
index 0000000..57c98c3
--- /dev/null
+++ b/util.c
@@ -0,0 +1,148 @@
+#include "Python.h"
+#include "util.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include "api_scilab.h"
+
+const int sci_max_len = 1024 ;
+static const char* SCI_ETC_FILE = "/etc/sciscilab" ;
+
+
+/** Return the scilab type
+ *
+ * Returns the scilab type of the scilab variable name
+ *
+ * */
+int read_sci_type(char *name)
+{
+ char job[BUFSIZE] ;
+ int m, n ;
+ double type[1] ;
+
+ SciErr sciErr;
+
+ snprintf(job, BUFSIZE, "_tmp_value_ = type(%s);", name) ;
+ SendScilabJob(job) ;
+ sciErr = readNamedMatrixOfDouble(pvApiCtx, "_tmp_value_", &m, &n, NULL);
+ if (sciErr.iErr)
+ {
+ printError(&sciErr, 0);
+ }
+
+ if (m*n != 1)
+ {
+ return -1 ;
+ }
+
+
+ sciErr = readNamedMatrixOfDouble(pvApiCtx, "_tmp_value_", &m, &n, &type[0]);
+ if (sciErr.iErr)
+ {
+ printError(&sciErr, 0);
+ }
+
+ return (int) type[0] ;
+} ;
+
+/** Check if a matrix is real or not
+ *
+ * Returns 1 if the matrix is real
+ *
+ */
+int is_real(char *name)
+{
+ return !isNamedVarComplex(pvApiCtx, name);
+}
+
+void sci_debug(const char *format, ...)
+{
+#if SCIDEBUG == 1
+ va_list argp ;
+ va_start(argp, format) ;
+ vprintf(format, argp) ;
+ va_end(argp) ;
+#endif
+}
+
+void sci_error(const char *format, ...)
+{
+ va_list argp ;
+ va_start(argp, format) ;
+ vprintf(format, argp) ;
+ va_end(argp) ;
+}
+
+/** Put a Python object in a list
+ */
+PyObject* create_list(PyObject *obj)
+{
+ PyObject* new_list ;
+
+ new_list = PyList_New(1) ;
+ PyList_SET_ITEM(new_list, 0, obj) ;
+ return new_list ;
+} ;
+
+/** Return the root directory of scilab
+
+Tries to open a file SCI_ETC_FILE and looks
+for a line SCI=where/is/scilab_root
+and return where/is/scilab_root
+
+sci must point to a big enough allocated space
+
+*/
+char *get_SCI(char *sci)
+{
+ FILE* fd = NULL ;
+ char var[sci_max_len] ;
+
+ *sci = '\0' ;
+
+ fd = fopen(SCI_ETC_FILE, "r") ;
+
+ if (!fd)
+ {
+ return sci;
+ }
+ else
+ while (!feof(fd))
+ {
+ char *str = fgets(var, sci_max_len, fd) ;
+ if (str == NULL)
+ {
+ goto finally ;
+ }
+
+ var[sci_max_len - 1] = '\0' ;
+ if (strncmp(var, "SCI", 3) == 0)
+ {
+ char *ptr ;
+ sci = &var[3] ;
+ while (*sci == ' ' || *sci == '=' )
+ {
+ sci++ ;
+ }
+ ptr = sci ;
+ while (*ptr != '\0')
+ if (*ptr == ' ' || *ptr == '\n')
+ {
+ *ptr = '\0' ;
+ }
+ else
+ {
+ ptr++ ;
+ }
+
+ goto finally ;
+ }
+
+ }
+
+finally:
+ fclose(fd) ;
+ return sci ;
+}
+
+