summaryrefslogtreecommitdiff
path: root/modules/parallel/sci_gateway
diff options
context:
space:
mode:
authorShashank2017-05-29 12:40:26 +0530
committerShashank2017-05-29 12:40:26 +0530
commit0345245e860375a32c9a437c4a9d9cae807134e9 (patch)
treead51ecbfa7bcd3cc5f09834f1bb8c08feaa526a4 /modules/parallel/sci_gateway
downloadscilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.gz
scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.bz2
scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.zip
CMSCOPE changed
Diffstat (limited to 'modules/parallel/sci_gateway')
-rwxr-xr-xmodules/parallel/sci_gateway/c/.deps/.dirstamp0
-rwxr-xr-xmodules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo274
-rwxr-xr-xmodules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo267
-rwxr-xr-xmodules/parallel/sci_gateway/c/.dirstamp0
-rwxr-xr-xmodules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.obin0 -> 6384 bytes
-rwxr-xr-xmodules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.obin0 -> 6104 bytes
-rwxr-xr-xmodules/parallel/sci_gateway/c/gw_parallel.c38
-rwxr-xr-xmodules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo12
-rwxr-xr-xmodules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo12
-rwxr-xr-xmodules/parallel/sci_gateway/c/sci_parallel_concurrency.c32
-rwxr-xr-xmodules/parallel/sci_gateway/cpp/.deps/.dirstamp0
-rwxr-xr-xmodules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo642
-rwxr-xr-xmodules/parallel/sci_gateway/cpp/.dirstamp0
-rwxr-xr-xmodules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.obin0 -> 558776 bytes
-rwxr-xr-xmodules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo12
-rwxr-xr-xmodules/parallel/sci_gateway/cpp/sci_parallel_run.cpp996
-rwxr-xr-xmodules/parallel/sci_gateway/parallel_gateway.xml27
17 files changed, 2312 insertions, 0 deletions
diff --git a/modules/parallel/sci_gateway/c/.deps/.dirstamp b/modules/parallel/sci_gateway/c/.deps/.dirstamp
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/.deps/.dirstamp
diff --git a/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo
new file mode 100755
index 000000000..013fb983a
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-gw_parallel.Plo
@@ -0,0 +1,274 @@
+sci_gateway/c/libsciparallel_la-gw_parallel.lo: \
+ sci_gateway/c/gw_parallel.c /usr/include/stdc-predef.h \
+ /usr/include/string.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \
+ /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h \
+ ../../modules/api_scilab/includes/api_scilab.h \
+ ../../modules/core/includes/stack-c.h \
+ ../../modules/core/includes/core_math.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/math.h \
+ /usr/include/x86_64-linux-gnu/bits/math-vector.h \
+ /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+ /usr/include/x86_64-linux-gnu/bits/inf.h \
+ /usr/include/x86_64-linux-gnu/bits/nan.h \
+ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+ ../../modules/core/includes/stack-def.h \
+ ../../modules/core/includes/machine.h \
+ ../../modules/core/includes/stackTypeVariable.h \
+ ../../modules/core/includes/BOOL.h \
+ ../../modules/core/includes/doublecomplex.h \
+ ../../modules/core/includes/stack1.h \
+ ../../modules/core/includes/scisparse.h \
+ ../../modules/core/includes/stack2.h \
+ ../../modules/core/includes/stack3.h \
+ ../../modules/core/includes/stack-optional.h \
+ ../../modules/core/includes/sci_types.h \
+ ../../modules/api_scilab/includes/api_common.h \
+ ../../modules/api_scilab/includes/api_scilab.h \
+ ../../modules/api_scilab/includes/api_double.h \
+ ../../modules/core/includes/doublecomplex.h \
+ ../../modules/api_scilab/includes/api_string.h /usr/include/wchar.h \
+ /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+ ../../modules/api_scilab/includes/api_int.h \
+ ../../modules/api_scilab/includes/api_poly.h \
+ ../../modules/api_scilab/includes/api_sparse.h \
+ ../../modules/api_scilab/includes/api_boolean.h \
+ ../../modules/api_scilab/includes/api_boolean_sparse.h \
+ ../../modules/api_scilab/includes/api_pointer.h \
+ ../../modules/api_scilab/includes/api_list.h \
+ ../../modules/api_scilab/includes/api_error.h \
+ ../../modules/api_scilab/includes/api_handle.h \
+ ../../modules/api_scilab/includes/api_optional.h \
+ ../../modules/core/includes/stack-optional.h \
+ ../../modules/api_scilab/includes/api_hypermat.h \
+ ../../modules/core/includes/core_math.h \
+ ../../modules/core/includes/sci_types.h includes/gw_parallel.h \
+ includes/dynlib_parallel.h ../../modules/core/includes/MALLOC.h \
+ ../../modules/core/includes/sci_mem_alloc.h \
+ ../../modules/core/includes/callFunctionFromGateway.h
+
+/usr/include/stdc-predef.h:
+
+/usr/include/string.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+../../modules/api_scilab/includes/api_scilab.h:
+
+../../modules/core/includes/stack-c.h:
+
+../../modules/core/includes/core_math.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/math.h:
+
+/usr/include/x86_64-linux-gnu/bits/math-vector.h:
+
+/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+
+/usr/include/x86_64-linux-gnu/bits/inf.h:
+
+/usr/include/x86_64-linux-gnu/bits/nan.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+../../modules/core/includes/stack-def.h:
+
+../../modules/core/includes/machine.h:
+
+../../modules/core/includes/stackTypeVariable.h:
+
+../../modules/core/includes/BOOL.h:
+
+../../modules/core/includes/doublecomplex.h:
+
+../../modules/core/includes/stack1.h:
+
+../../modules/core/includes/scisparse.h:
+
+../../modules/core/includes/stack2.h:
+
+../../modules/core/includes/stack3.h:
+
+../../modules/core/includes/stack-optional.h:
+
+../../modules/core/includes/sci_types.h:
+
+../../modules/api_scilab/includes/api_common.h:
+
+../../modules/api_scilab/includes/api_scilab.h:
+
+../../modules/api_scilab/includes/api_double.h:
+
+../../modules/core/includes/doublecomplex.h:
+
+../../modules/api_scilab/includes/api_string.h:
+
+/usr/include/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+
+../../modules/api_scilab/includes/api_int.h:
+
+../../modules/api_scilab/includes/api_poly.h:
+
+../../modules/api_scilab/includes/api_sparse.h:
+
+../../modules/api_scilab/includes/api_boolean.h:
+
+../../modules/api_scilab/includes/api_boolean_sparse.h:
+
+../../modules/api_scilab/includes/api_pointer.h:
+
+../../modules/api_scilab/includes/api_list.h:
+
+../../modules/api_scilab/includes/api_error.h:
+
+../../modules/api_scilab/includes/api_handle.h:
+
+../../modules/api_scilab/includes/api_optional.h:
+
+../../modules/core/includes/stack-optional.h:
+
+../../modules/api_scilab/includes/api_hypermat.h:
+
+../../modules/core/includes/core_math.h:
+
+../../modules/core/includes/sci_types.h:
+
+includes/gw_parallel.h:
+
+includes/dynlib_parallel.h:
+
+../../modules/core/includes/MALLOC.h:
+
+../../modules/core/includes/sci_mem_alloc.h:
+
+../../modules/core/includes/callFunctionFromGateway.h:
diff --git a/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo
new file mode 100755
index 000000000..971b5bac3
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/.deps/libsciparallel_la-sci_parallel_concurrency.Plo
@@ -0,0 +1,267 @@
+sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo: \
+ sci_gateway/c/sci_parallel_concurrency.c /usr/include/stdc-predef.h \
+ includes/gw_parallel.h includes/dynlib_parallel.h includes/concurrency.h \
+ ../../modules/api_scilab/includes/api_scilab.h \
+ ../../modules/core/includes/stack-c.h /usr/include/string.h \
+ /usr/include/features.h /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h /usr/include/xlocale.h \
+ /usr/include/x86_64-linux-gnu/bits/string.h \
+ /usr/include/x86_64-linux-gnu/bits/string2.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/string3.h \
+ ../../modules/core/includes/core_math.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h /usr/include/math.h \
+ /usr/include/x86_64-linux-gnu/bits/math-vector.h \
+ /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+ /usr/include/x86_64-linux-gnu/bits/inf.h \
+ /usr/include/x86_64-linux-gnu/bits/nan.h \
+ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+ /usr/include/x86_64-linux-gnu/bits/mathinline.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+ ../../modules/core/includes/stack-def.h \
+ ../../modules/core/includes/machine.h \
+ ../../modules/core/includes/stackTypeVariable.h \
+ ../../modules/core/includes/BOOL.h \
+ ../../modules/core/includes/doublecomplex.h \
+ ../../modules/core/includes/stack1.h \
+ ../../modules/core/includes/scisparse.h \
+ ../../modules/core/includes/stack2.h \
+ ../../modules/core/includes/stack3.h \
+ ../../modules/core/includes/stack-optional.h \
+ ../../modules/core/includes/sci_types.h \
+ ../../modules/api_scilab/includes/api_common.h \
+ ../../modules/api_scilab/includes/api_scilab.h \
+ ../../modules/api_scilab/includes/api_double.h \
+ ../../modules/core/includes/doublecomplex.h \
+ ../../modules/api_scilab/includes/api_string.h /usr/include/wchar.h \
+ /usr/include/stdio.h /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+ ../../modules/api_scilab/includes/api_int.h \
+ ../../modules/api_scilab/includes/api_poly.h \
+ ../../modules/api_scilab/includes/api_sparse.h \
+ ../../modules/api_scilab/includes/api_boolean.h \
+ ../../modules/api_scilab/includes/api_boolean_sparse.h \
+ ../../modules/api_scilab/includes/api_pointer.h \
+ ../../modules/api_scilab/includes/api_list.h \
+ ../../modules/api_scilab/includes/api_error.h \
+ ../../modules/api_scilab/includes/api_handle.h \
+ ../../modules/api_scilab/includes/api_optional.h \
+ ../../modules/core/includes/stack-optional.h \
+ ../../modules/api_scilab/includes/api_hypermat.h \
+ ../../modules/core/includes/core_math.h \
+ ../../modules/core/includes/sci_types.h
+
+/usr/include/stdc-predef.h:
+
+includes/gw_parallel.h:
+
+includes/dynlib_parallel.h:
+
+includes/concurrency.h:
+
+../../modules/api_scilab/includes/api_scilab.h:
+
+../../modules/core/includes/stack-c.h:
+
+/usr/include/string.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string.h:
+
+/usr/include/x86_64-linux-gnu/bits/string2.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+../../modules/core/includes/core_math.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/math.h:
+
+/usr/include/x86_64-linux-gnu/bits/math-vector.h:
+
+/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+
+/usr/include/x86_64-linux-gnu/bits/inf.h:
+
+/usr/include/x86_64-linux-gnu/bits/nan.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+../../modules/core/includes/stack-def.h:
+
+../../modules/core/includes/machine.h:
+
+../../modules/core/includes/stackTypeVariable.h:
+
+../../modules/core/includes/BOOL.h:
+
+../../modules/core/includes/doublecomplex.h:
+
+../../modules/core/includes/stack1.h:
+
+../../modules/core/includes/scisparse.h:
+
+../../modules/core/includes/stack2.h:
+
+../../modules/core/includes/stack3.h:
+
+../../modules/core/includes/stack-optional.h:
+
+../../modules/core/includes/sci_types.h:
+
+../../modules/api_scilab/includes/api_common.h:
+
+../../modules/api_scilab/includes/api_scilab.h:
+
+../../modules/api_scilab/includes/api_double.h:
+
+../../modules/core/includes/doublecomplex.h:
+
+../../modules/api_scilab/includes/api_string.h:
+
+/usr/include/wchar.h:
+
+/usr/include/stdio.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+
+../../modules/api_scilab/includes/api_int.h:
+
+../../modules/api_scilab/includes/api_poly.h:
+
+../../modules/api_scilab/includes/api_sparse.h:
+
+../../modules/api_scilab/includes/api_boolean.h:
+
+../../modules/api_scilab/includes/api_boolean_sparse.h:
+
+../../modules/api_scilab/includes/api_pointer.h:
+
+../../modules/api_scilab/includes/api_list.h:
+
+../../modules/api_scilab/includes/api_error.h:
+
+../../modules/api_scilab/includes/api_handle.h:
+
+../../modules/api_scilab/includes/api_optional.h:
+
+../../modules/core/includes/stack-optional.h:
+
+../../modules/api_scilab/includes/api_hypermat.h:
+
+../../modules/core/includes/core_math.h:
+
+../../modules/core/includes/sci_types.h:
diff --git a/modules/parallel/sci_gateway/c/.dirstamp b/modules/parallel/sci_gateway/c/.dirstamp
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/.dirstamp
diff --git a/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o
new file mode 100755
index 000000000..12e712215
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-gw_parallel.o
Binary files differ
diff --git a/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o
new file mode 100755
index 000000000..42b25a9c3
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/.libs/libsciparallel_la-sci_parallel_concurrency.o
Binary files differ
diff --git a/modules/parallel/sci_gateway/c/gw_parallel.c b/modules/parallel/sci_gateway/c/gw_parallel.c
new file mode 100755
index 000000000..7c78dafac
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/gw_parallel.c
@@ -0,0 +1,38 @@
+/*
+* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+* Copyright (C) 2010 - DIGITEO - Allan CORNET
+*
+* This file must be used under the terms of the CeCILL.
+* This source file is licensed as described in the file COPYING, which
+* you should have received as part of this distribution. The terms
+* are also available at
+* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+*
+*/
+#include <string.h>
+#include "api_scilab.h"
+#include "gw_parallel.h"
+#include "MALLOC.h"
+#include "callFunctionFromGateway.h"
+
+/*--------------------------------------------------------------------------*/
+static gw_generic_table Tab[] =
+{
+ {sci_parallel_run, "parallel_run"}
+ , {sci_parallel_concurrency, "parallel_concurrency"}
+};
+/*--------------------------------------------------------------------------*/
+int gw_parallel(void)
+{
+ Rhs = Max(0, Rhs);
+
+ if (pvApiCtx == NULL)
+ {
+ pvApiCtx = (StrCtx*)MALLOC(sizeof(StrCtx));
+ }
+
+ pvApiCtx->pstName = (char*)Tab[Fin - 1].name;
+ callFunctionFromGateway(Tab, SIZE_CURRENT_GENERIC_TABLE(Tab));
+ return 0;
+}
+/*--------------------------------------------------------------------------*/
diff --git a/modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo b/modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo
new file mode 100755
index 000000000..47c5a21f2
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/libsciparallel_la-gw_parallel.lo
@@ -0,0 +1,12 @@
+# sci_gateway/c/libsciparallel_la-gw_parallel.lo - a libtool object file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/libsciparallel_la-gw_parallel.o'
+
+# Name of the non-PIC object
+non_pic_object=none
+
diff --git a/modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo b/modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo
new file mode 100755
index 000000000..0f389c2f7
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo
@@ -0,0 +1,12 @@
+# sci_gateway/c/libsciparallel_la-sci_parallel_concurrency.lo - a libtool object file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/libsciparallel_la-sci_parallel_concurrency.o'
+
+# Name of the non-PIC object
+non_pic_object=none
+
diff --git a/modules/parallel/sci_gateway/c/sci_parallel_concurrency.c b/modules/parallel/sci_gateway/c/sci_parallel_concurrency.c
new file mode 100755
index 000000000..3255f0a4d
--- /dev/null
+++ b/modules/parallel/sci_gateway/c/sci_parallel_concurrency.c
@@ -0,0 +1,32 @@
+/*
+* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+* Copyright (C) 2010 - DIGITEO - Bernard HUGUENEY
+*
+* This file must be used under the terms of the CeCILL.
+* This source file is licensed as described in the file COPYING, which
+* you should have received as part of this distribution. The terms
+* are also available at
+* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+*
+*/
+
+#include "gw_parallel.h"
+#include "concurrency.h" /* prototype for concurrency query function */
+#include "api_scilab.h"
+
+
+/* Just a simple scilab wrapper to parallelConcurrency():
+* returns non zero when called from a concurrent execution context
+*/
+
+int sci_parallel_concurrency(char *fname, unsigned long fname_len)
+{
+ CheckRhs(0, 0);
+ CheckLhs(1, 1);
+
+ createScalarDouble(pvApiCtx, Rhs + 1, (double)parallelConcurrency());
+
+ LhsVar(1) = Rhs + 1;
+ PutLhsVar();
+ return 0;
+}
diff --git a/modules/parallel/sci_gateway/cpp/.deps/.dirstamp b/modules/parallel/sci_gateway/cpp/.deps/.dirstamp
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/parallel/sci_gateway/cpp/.deps/.dirstamp
diff --git a/modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo b/modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo
new file mode 100755
index 000000000..5e4f9f83c
--- /dev/null
+++ b/modules/parallel/sci_gateway/cpp/.deps/libsciparallel_la-sci_parallel_run.Plo
@@ -0,0 +1,642 @@
+sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo: \
+ sci_gateway/cpp/sci_parallel_run.cpp /usr/include/stdc-predef.h \
+ /usr/include/stdio.h /usr/include/features.h \
+ /usr/include/x86_64-linux-gnu/sys/cdefs.h \
+ /usr/include/x86_64-linux-gnu/bits/wordsize.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs.h \
+ /usr/include/x86_64-linux-gnu/gnu/stubs-64.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h \
+ /usr/include/x86_64-linux-gnu/bits/types.h \
+ /usr/include/x86_64-linux-gnu/bits/typesizes.h /usr/include/libio.h \
+ /usr/include/_G_config.h /usr/include/wchar.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/sys_errlist.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio.h \
+ /usr/include/x86_64-linux-gnu/bits/stdio2.h \
+ ../../modules/api_scilab/includes/api_scilab.h \
+ ../../modules/core/includes/stack-c.h /usr/include/string.h \
+ /usr/include/xlocale.h /usr/include/x86_64-linux-gnu/bits/string3.h \
+ ../../modules/core/includes/core_math.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h \
+ /usr/include/limits.h /usr/include/x86_64-linux-gnu/bits/posix1_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/local_lim.h \
+ /usr/include/linux/limits.h \
+ /usr/include/x86_64-linux-gnu/bits/posix2_lim.h \
+ /usr/include/x86_64-linux-gnu/bits/xopen_lim.h /usr/include/math.h \
+ /usr/include/x86_64-linux-gnu/bits/math-vector.h \
+ /usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_val.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_valf.h \
+ /usr/include/x86_64-linux-gnu/bits/huge_vall.h \
+ /usr/include/x86_64-linux-gnu/bits/inf.h \
+ /usr/include/x86_64-linux-gnu/bits/nan.h \
+ /usr/include/x86_64-linux-gnu/bits/mathdef.h \
+ /usr/include/x86_64-linux-gnu/bits/mathcalls.h \
+ /usr/include/x86_64-linux-gnu/bits/mathinline.h /usr/include/stdlib.h \
+ /usr/include/x86_64-linux-gnu/bits/waitflags.h \
+ /usr/include/x86_64-linux-gnu/bits/waitstatus.h /usr/include/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/endian.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap.h \
+ /usr/include/x86_64-linux-gnu/bits/byteswap-16.h \
+ /usr/include/x86_64-linux-gnu/sys/types.h /usr/include/time.h \
+ /usr/include/x86_64-linux-gnu/sys/select.h \
+ /usr/include/x86_64-linux-gnu/bits/select.h \
+ /usr/include/x86_64-linux-gnu/bits/sigset.h \
+ /usr/include/x86_64-linux-gnu/bits/time.h \
+ /usr/include/x86_64-linux-gnu/bits/select2.h \
+ /usr/include/x86_64-linux-gnu/sys/sysmacros.h \
+ /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h /usr/include/alloca.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib-float.h \
+ /usr/include/x86_64-linux-gnu/bits/stdlib.h \
+ ../../modules/core/includes/stack-def.h \
+ ../../modules/core/includes/machine.h \
+ ../../modules/core/includes/stackTypeVariable.h \
+ ../../modules/core/includes/BOOL.h \
+ ../../modules/core/includes/doublecomplex.h \
+ ../../modules/core/includes/stack1.h \
+ ../../modules/core/includes/scisparse.h \
+ ../../modules/core/includes/stack2.h \
+ ../../modules/core/includes/stack3.h \
+ ../../modules/core/includes/stack-optional.h \
+ ../../modules/core/includes/sci_types.h \
+ ../../modules/api_scilab/includes/api_common.h \
+ ../../modules/api_scilab/includes/api_scilab.h \
+ ../../modules/api_scilab/includes/api_double.h \
+ ../../modules/core/includes/doublecomplex.h \
+ ../../modules/api_scilab/includes/api_string.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar.h \
+ /usr/include/x86_64-linux-gnu/bits/wchar2.h \
+ ../../modules/api_scilab/includes/api_int.h \
+ ../../modules/api_scilab/includes/api_poly.h \
+ ../../modules/api_scilab/includes/api_sparse.h \
+ ../../modules/api_scilab/includes/api_boolean.h \
+ ../../modules/api_scilab/includes/api_boolean_sparse.h \
+ ../../modules/api_scilab/includes/api_pointer.h \
+ ../../modules/api_scilab/includes/api_list.h \
+ ../../modules/api_scilab/includes/api_error.h \
+ ../../modules/api_scilab/includes/api_handle.h \
+ ../../modules/api_scilab/includes/api_optional.h \
+ ../../modules/core/includes/stack-optional.h \
+ ../../modules/api_scilab/includes/api_hypermat.h \
+ ../../modules/core/includes/core_math.h \
+ ../../modules/core/includes/sci_types.h includes/gw_parallel.h \
+ includes/dynlib_parallel.h \
+ ../../modules/dynamic_link/includes/dynamic_link.h \
+ ../../modules/dynamic_link/includes/dynlib_dynamic_link.h \
+ ../../modules/core/includes/BOOL.h ../../modules/core/includes/machine.h \
+ ../../modules/core/includes/MALLOC.h \
+ ../../modules/core/includes/sci_mem_alloc.h \
+ ../../modules/output_stream/includes/Scierror.h \
+ ../../modules/output_stream/includes/do_error_number.h \
+ ../../modules/localization/includes/localization.h \
+ /usr/include/libintl.h ../../modules/parameters/includes/parameters.h \
+ ../../modules/core/includes/Thread_Wrapper.h /usr/include/pthread.h \
+ /usr/include/sched.h /usr/include/x86_64-linux-gnu/bits/sched.h \
+ /usr/include/x86_64-linux-gnu/bits/timex.h \
+ /usr/include/x86_64-linux-gnu/bits/setjmp.h \
+ ../../modules/core/includes/stack-def.h \
+ /usr/include/x86_64-linux-gnu/sys/mman.h \
+ /usr/include/x86_64-linux-gnu/bits/mman.h \
+ /usr/include/x86_64-linux-gnu/bits/mman-linux.h includes/concurrency.h \
+ /usr/include/c++/5/cstdlib \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/cpu_defines.h \
+ /usr/include/c++/5/cstring src/cpp/parallel_run.hxx \
+ /usr/include/c++/5/algorithm /usr/include/c++/5/utility \
+ /usr/include/c++/5/bits/stl_relops.h /usr/include/c++/5/bits/stl_pair.h \
+ /usr/include/c++/5/bits/move.h /usr/include/c++/5/bits/concept_check.h \
+ /usr/include/c++/5/bits/stl_algobase.h \
+ /usr/include/c++/5/bits/functexcept.h \
+ /usr/include/c++/5/bits/exception_defines.h \
+ /usr/include/c++/5/bits/cpp_type_traits.h \
+ /usr/include/c++/5/ext/type_traits.h \
+ /usr/include/c++/5/ext/numeric_traits.h \
+ /usr/include/c++/5/bits/stl_iterator_base_types.h \
+ /usr/include/c++/5/bits/stl_iterator_base_funcs.h \
+ /usr/include/c++/5/debug/debug.h /usr/include/c++/5/bits/stl_iterator.h \
+ /usr/include/c++/5/bits/ptr_traits.h \
+ /usr/include/c++/5/bits/predefined_ops.h \
+ /usr/include/c++/5/bits/stl_algo.h \
+ /usr/include/c++/5/bits/algorithmfwd.h \
+ /usr/include/c++/5/bits/stl_heap.h /usr/include/c++/5/bits/stl_tempbuf.h \
+ /usr/include/c++/5/bits/stl_construct.h /usr/include/c++/5/new \
+ /usr/include/c++/5/exception \
+ /usr/include/c++/5/bits/atomic_lockfree_defines.h \
+ /usr/include/c++/5/ext/alloc_traits.h \
+ /usr/include/c++/5/bits/allocator.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h \
+ /usr/include/c++/5/ext/new_allocator.h \
+ /usr/include/c++/5/bits/memoryfwd.h /usr/include/c++/5/vector \
+ /usr/include/c++/5/bits/stl_uninitialized.h \
+ /usr/include/c++/5/bits/stl_vector.h \
+ /usr/include/c++/5/bits/stl_bvector.h \
+ /usr/include/c++/5/bits/range_access.h \
+ /usr/include/c++/5/bits/vector.tcc /usr/include/c++/5/iterator \
+ /usr/include/c++/5/ostream /usr/include/c++/5/ios \
+ /usr/include/c++/5/iosfwd /usr/include/c++/5/bits/stringfwd.h \
+ /usr/include/c++/5/bits/postypes.h /usr/include/c++/5/cwchar \
+ /usr/include/c++/5/bits/char_traits.h \
+ /usr/include/c++/5/bits/localefwd.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/c++locale.h \
+ /usr/include/c++/5/clocale /usr/include/locale.h \
+ /usr/include/x86_64-linux-gnu/bits/locale.h /usr/include/c++/5/cctype \
+ /usr/include/ctype.h /usr/include/c++/5/bits/ios_base.h \
+ /usr/include/c++/5/ext/atomicity.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/gthr.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/gthr-default.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/atomic_word.h \
+ /usr/include/c++/5/bits/locale_classes.h /usr/include/c++/5/string \
+ /usr/include/c++/5/bits/ostream_insert.h \
+ /usr/include/c++/5/bits/cxxabi_forced.h \
+ /usr/include/c++/5/bits/stl_function.h \
+ /usr/include/c++/5/backward/binders.h \
+ /usr/include/c++/5/bits/basic_string.h \
+ /usr/include/c++/5/bits/basic_string.tcc \
+ /usr/include/c++/5/bits/locale_classes.tcc /usr/include/c++/5/stdexcept \
+ /usr/include/c++/5/streambuf /usr/include/c++/5/bits/streambuf.tcc \
+ /usr/include/c++/5/bits/basic_ios.h \
+ /usr/include/c++/5/bits/locale_facets.h /usr/include/c++/5/cwctype \
+ /usr/include/wctype.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/ctype_base.h \
+ /usr/include/c++/5/bits/streambuf_iterator.h \
+ /usr/include/x86_64-linux-gnu/c++/5/bits/ctype_inline.h \
+ /usr/include/c++/5/bits/locale_facets.tcc \
+ /usr/include/c++/5/bits/basic_ios.tcc \
+ /usr/include/c++/5/bits/ostream.tcc /usr/include/c++/5/istream \
+ /usr/include/c++/5/bits/istream.tcc \
+ /usr/include/c++/5/bits/stream_iterator.h /usr/include/c++/5/iostream \
+ /usr/lib/gcc/x86_64-linux-gnu/5/include/omp.h \
+ ../../modules/core/includes/scilabmode.h /usr/include/semaphore.h \
+ /usr/include/x86_64-linux-gnu/bits/semaphore.h /usr/include/signal.h \
+ /usr/include/x86_64-linux-gnu/bits/signum.h \
+ /usr/include/x86_64-linux-gnu/bits/siginfo.h \
+ /usr/include/x86_64-linux-gnu/bits/sigaction.h \
+ /usr/include/x86_64-linux-gnu/bits/sigcontext.h \
+ /usr/include/x86_64-linux-gnu/bits/sigstack.h \
+ /usr/include/x86_64-linux-gnu/sys/ucontext.h \
+ /usr/include/x86_64-linux-gnu/bits/sigthread.h /usr/include/unistd.h \
+ /usr/include/x86_64-linux-gnu/bits/posix_opt.h \
+ /usr/include/x86_64-linux-gnu/bits/environments.h \
+ /usr/include/x86_64-linux-gnu/bits/confname.h /usr/include/getopt.h \
+ /usr/include/x86_64-linux-gnu/bits/unistd.h \
+ /usr/include/c++/5/functional /usr/include/c++/5/limits
+
+/usr/include/stdc-predef.h:
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/x86_64-linux-gnu/sys/cdefs.h:
+
+/usr/include/x86_64-linux-gnu/bits/wordsize.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs.h:
+
+/usr/include/x86_64-linux-gnu/gnu/stubs-64.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h:
+
+/usr/include/x86_64-linux-gnu/bits/types.h:
+
+/usr/include/x86_64-linux-gnu/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/sys_errlist.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdio2.h:
+
+../../modules/api_scilab/includes/api_scilab.h:
+
+../../modules/core/includes/stack-c.h:
+
+/usr/include/string.h:
+
+/usr/include/xlocale.h:
+
+/usr/include/x86_64-linux-gnu/bits/string3.h:
+
+../../modules/core/includes/core_math.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix1_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix2_lim.h:
+
+/usr/include/x86_64-linux-gnu/bits/xopen_lim.h:
+
+/usr/include/math.h:
+
+/usr/include/x86_64-linux-gnu/bits/math-vector.h:
+
+/usr/include/x86_64-linux-gnu/bits/libm-simd-decl-stubs.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_val.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_valf.h:
+
+/usr/include/x86_64-linux-gnu/bits/huge_vall.h:
+
+/usr/include/x86_64-linux-gnu/bits/inf.h:
+
+/usr/include/x86_64-linux-gnu/bits/nan.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathdef.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathcalls.h:
+
+/usr/include/x86_64-linux-gnu/bits/mathinline.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitflags.h:
+
+/usr/include/x86_64-linux-gnu/bits/waitstatus.h:
+
+/usr/include/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/endian.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap.h:
+
+/usr/include/x86_64-linux-gnu/bits/byteswap-16.h:
+
+/usr/include/x86_64-linux-gnu/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/x86_64-linux-gnu/sys/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/select.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigset.h:
+
+/usr/include/x86_64-linux-gnu/bits/time.h:
+
+/usr/include/x86_64-linux-gnu/bits/select2.h:
+
+/usr/include/x86_64-linux-gnu/sys/sysmacros.h:
+
+/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h:
+
+/usr/include/alloca.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-bsearch.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib-float.h:
+
+/usr/include/x86_64-linux-gnu/bits/stdlib.h:
+
+../../modules/core/includes/stack-def.h:
+
+../../modules/core/includes/machine.h:
+
+../../modules/core/includes/stackTypeVariable.h:
+
+../../modules/core/includes/BOOL.h:
+
+../../modules/core/includes/doublecomplex.h:
+
+../../modules/core/includes/stack1.h:
+
+../../modules/core/includes/scisparse.h:
+
+../../modules/core/includes/stack2.h:
+
+../../modules/core/includes/stack3.h:
+
+../../modules/core/includes/stack-optional.h:
+
+../../modules/core/includes/sci_types.h:
+
+../../modules/api_scilab/includes/api_common.h:
+
+../../modules/api_scilab/includes/api_scilab.h:
+
+../../modules/api_scilab/includes/api_double.h:
+
+../../modules/core/includes/doublecomplex.h:
+
+../../modules/api_scilab/includes/api_string.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar.h:
+
+/usr/include/x86_64-linux-gnu/bits/wchar2.h:
+
+../../modules/api_scilab/includes/api_int.h:
+
+../../modules/api_scilab/includes/api_poly.h:
+
+../../modules/api_scilab/includes/api_sparse.h:
+
+../../modules/api_scilab/includes/api_boolean.h:
+
+../../modules/api_scilab/includes/api_boolean_sparse.h:
+
+../../modules/api_scilab/includes/api_pointer.h:
+
+../../modules/api_scilab/includes/api_list.h:
+
+../../modules/api_scilab/includes/api_error.h:
+
+../../modules/api_scilab/includes/api_handle.h:
+
+../../modules/api_scilab/includes/api_optional.h:
+
+../../modules/core/includes/stack-optional.h:
+
+../../modules/api_scilab/includes/api_hypermat.h:
+
+../../modules/core/includes/core_math.h:
+
+../../modules/core/includes/sci_types.h:
+
+includes/gw_parallel.h:
+
+includes/dynlib_parallel.h:
+
+../../modules/dynamic_link/includes/dynamic_link.h:
+
+../../modules/dynamic_link/includes/dynlib_dynamic_link.h:
+
+../../modules/core/includes/BOOL.h:
+
+../../modules/core/includes/machine.h:
+
+../../modules/core/includes/MALLOC.h:
+
+../../modules/core/includes/sci_mem_alloc.h:
+
+../../modules/output_stream/includes/Scierror.h:
+
+../../modules/output_stream/includes/do_error_number.h:
+
+../../modules/localization/includes/localization.h:
+
+/usr/include/libintl.h:
+
+../../modules/parameters/includes/parameters.h:
+
+../../modules/core/includes/Thread_Wrapper.h:
+
+/usr/include/pthread.h:
+
+/usr/include/sched.h:
+
+/usr/include/x86_64-linux-gnu/bits/sched.h:
+
+/usr/include/x86_64-linux-gnu/bits/timex.h:
+
+/usr/include/x86_64-linux-gnu/bits/setjmp.h:
+
+../../modules/core/includes/stack-def.h:
+
+/usr/include/x86_64-linux-gnu/sys/mman.h:
+
+/usr/include/x86_64-linux-gnu/bits/mman.h:
+
+/usr/include/x86_64-linux-gnu/bits/mman-linux.h:
+
+includes/concurrency.h:
+
+/usr/include/c++/5/cstdlib:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/c++config.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/os_defines.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/cpu_defines.h:
+
+/usr/include/c++/5/cstring:
+
+src/cpp/parallel_run.hxx:
+
+/usr/include/c++/5/algorithm:
+
+/usr/include/c++/5/utility:
+
+/usr/include/c++/5/bits/stl_relops.h:
+
+/usr/include/c++/5/bits/stl_pair.h:
+
+/usr/include/c++/5/bits/move.h:
+
+/usr/include/c++/5/bits/concept_check.h:
+
+/usr/include/c++/5/bits/stl_algobase.h:
+
+/usr/include/c++/5/bits/functexcept.h:
+
+/usr/include/c++/5/bits/exception_defines.h:
+
+/usr/include/c++/5/bits/cpp_type_traits.h:
+
+/usr/include/c++/5/ext/type_traits.h:
+
+/usr/include/c++/5/ext/numeric_traits.h:
+
+/usr/include/c++/5/bits/stl_iterator_base_types.h:
+
+/usr/include/c++/5/bits/stl_iterator_base_funcs.h:
+
+/usr/include/c++/5/debug/debug.h:
+
+/usr/include/c++/5/bits/stl_iterator.h:
+
+/usr/include/c++/5/bits/ptr_traits.h:
+
+/usr/include/c++/5/bits/predefined_ops.h:
+
+/usr/include/c++/5/bits/stl_algo.h:
+
+/usr/include/c++/5/bits/algorithmfwd.h:
+
+/usr/include/c++/5/bits/stl_heap.h:
+
+/usr/include/c++/5/bits/stl_tempbuf.h:
+
+/usr/include/c++/5/bits/stl_construct.h:
+
+/usr/include/c++/5/new:
+
+/usr/include/c++/5/exception:
+
+/usr/include/c++/5/bits/atomic_lockfree_defines.h:
+
+/usr/include/c++/5/ext/alloc_traits.h:
+
+/usr/include/c++/5/bits/allocator.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/c++allocator.h:
+
+/usr/include/c++/5/ext/new_allocator.h:
+
+/usr/include/c++/5/bits/memoryfwd.h:
+
+/usr/include/c++/5/vector:
+
+/usr/include/c++/5/bits/stl_uninitialized.h:
+
+/usr/include/c++/5/bits/stl_vector.h:
+
+/usr/include/c++/5/bits/stl_bvector.h:
+
+/usr/include/c++/5/bits/range_access.h:
+
+/usr/include/c++/5/bits/vector.tcc:
+
+/usr/include/c++/5/iterator:
+
+/usr/include/c++/5/ostream:
+
+/usr/include/c++/5/ios:
+
+/usr/include/c++/5/iosfwd:
+
+/usr/include/c++/5/bits/stringfwd.h:
+
+/usr/include/c++/5/bits/postypes.h:
+
+/usr/include/c++/5/cwchar:
+
+/usr/include/c++/5/bits/char_traits.h:
+
+/usr/include/c++/5/bits/localefwd.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/c++locale.h:
+
+/usr/include/c++/5/clocale:
+
+/usr/include/locale.h:
+
+/usr/include/x86_64-linux-gnu/bits/locale.h:
+
+/usr/include/c++/5/cctype:
+
+/usr/include/ctype.h:
+
+/usr/include/c++/5/bits/ios_base.h:
+
+/usr/include/c++/5/ext/atomicity.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/gthr.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/gthr-default.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/atomic_word.h:
+
+/usr/include/c++/5/bits/locale_classes.h:
+
+/usr/include/c++/5/string:
+
+/usr/include/c++/5/bits/ostream_insert.h:
+
+/usr/include/c++/5/bits/cxxabi_forced.h:
+
+/usr/include/c++/5/bits/stl_function.h:
+
+/usr/include/c++/5/backward/binders.h:
+
+/usr/include/c++/5/bits/basic_string.h:
+
+/usr/include/c++/5/bits/basic_string.tcc:
+
+/usr/include/c++/5/bits/locale_classes.tcc:
+
+/usr/include/c++/5/stdexcept:
+
+/usr/include/c++/5/streambuf:
+
+/usr/include/c++/5/bits/streambuf.tcc:
+
+/usr/include/c++/5/bits/basic_ios.h:
+
+/usr/include/c++/5/bits/locale_facets.h:
+
+/usr/include/c++/5/cwctype:
+
+/usr/include/wctype.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/ctype_base.h:
+
+/usr/include/c++/5/bits/streambuf_iterator.h:
+
+/usr/include/x86_64-linux-gnu/c++/5/bits/ctype_inline.h:
+
+/usr/include/c++/5/bits/locale_facets.tcc:
+
+/usr/include/c++/5/bits/basic_ios.tcc:
+
+/usr/include/c++/5/bits/ostream.tcc:
+
+/usr/include/c++/5/istream:
+
+/usr/include/c++/5/bits/istream.tcc:
+
+/usr/include/c++/5/bits/stream_iterator.h:
+
+/usr/include/c++/5/iostream:
+
+/usr/lib/gcc/x86_64-linux-gnu/5/include/omp.h:
+
+../../modules/core/includes/scilabmode.h:
+
+/usr/include/semaphore.h:
+
+/usr/include/x86_64-linux-gnu/bits/semaphore.h:
+
+/usr/include/signal.h:
+
+/usr/include/x86_64-linux-gnu/bits/signum.h:
+
+/usr/include/x86_64-linux-gnu/bits/siginfo.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigaction.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigcontext.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigstack.h:
+
+/usr/include/x86_64-linux-gnu/sys/ucontext.h:
+
+/usr/include/x86_64-linux-gnu/bits/sigthread.h:
+
+/usr/include/unistd.h:
+
+/usr/include/x86_64-linux-gnu/bits/posix_opt.h:
+
+/usr/include/x86_64-linux-gnu/bits/environments.h:
+
+/usr/include/x86_64-linux-gnu/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/x86_64-linux-gnu/bits/unistd.h:
+
+/usr/include/c++/5/functional:
+
+/usr/include/c++/5/limits:
diff --git a/modules/parallel/sci_gateway/cpp/.dirstamp b/modules/parallel/sci_gateway/cpp/.dirstamp
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/modules/parallel/sci_gateway/cpp/.dirstamp
diff --git a/modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o b/modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o
new file mode 100755
index 000000000..193c57803
--- /dev/null
+++ b/modules/parallel/sci_gateway/cpp/.libs/libsciparallel_la-sci_parallel_run.o
Binary files differ
diff --git a/modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo b/modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo
new file mode 100755
index 000000000..9a7dc3668
--- /dev/null
+++ b/modules/parallel/sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo
@@ -0,0 +1,12 @@
+# sci_gateway/cpp/libsciparallel_la-sci_parallel_run.lo - a libtool object file
+# Generated by libtool (GNU libtool) 2.4.2
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/libsciparallel_la-sci_parallel_run.o'
+
+# Name of the non-PIC object
+non_pic_object=none
+
diff --git a/modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp b/modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp
new file mode 100755
index 000000000..b4a914ac1
--- /dev/null
+++ b/modules/parallel/sci_gateway/cpp/sci_parallel_run.cpp
@@ -0,0 +1,996 @@
+/*
+* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+* Copyright (C) 2010 - DIGITEO - Bernard HUGUENEY
+*
+* This file must be used under the terms of the CeCILL.
+* This source file is licensed as described in the file COPYING, which
+* you should have received as part of this distribution. The terms
+* are also available at
+* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+*
+*/
+extern "C" {
+
+#ifdef _MSC_VER
+#include <windows.h>
+#endif
+#include <stdio.h>
+#include "api_scilab.h"
+#include "gw_parallel.h"
+#include "dynamic_link.h"
+#include "MALLOC.h"
+#include "Scierror.h"
+#include "localization.h"
+#include "parameters.h"
+#include "Thread_Wrapper.h" /* locks for concurrency access */
+#include "stack-def.h" /* #define nlgh nsiz*4 */
+#include "stack-c.h"
+
+#ifdef _MSC_VER
+#include "mmapWindows.h"
+#include "strdup_windows.h"
+#else
+#include <sys/mman.h>
+#ifndef MAP_ANONYMOUS
+# define MAP_ANONYMOUS MAP_ANON
+#endif
+#endif
+
+#include "concurrency.h" /* prototype for concurrency query function */
+}
+
+#include <cstdlib>
+#include <cstring>
+/*#include <sstream> for debug purposes only */
+#include "parallel_run.hxx"
+
+
+
+#include <utility>
+#include <vector>
+#include <iostream>
+#include <algorithm>
+#include <functional>
+#include <limits>
+#include <iterator>
+/*
+*
+We can handle k Rhs et m Lhs. Currently, only real (double) matrix are implemented.
+In fact, from a performance point of view, only Random-Acces data types where it is possible to "extract" a column in O(1)
+(plus memcpy for macro a args) are making sense. This rules out most Scilab data types except for matrices of double / int.
+
+
+[R1, ... , Rm] = parallel_run(A1, ... , Ak, f [,Types] [,Dims])
+
+If Args are of différent sizes, the smallest are recycled.
+
+Types : matrix of <=m strings of the names (as in typeof()) of the m lhs fo 'f'. default to "constant"
+Rows : matrix of doubles 1 x <=m or 2 x <=m giving the nb of rows (or rows and columns) of the m lhs of f. default to 1
+
+/!\ due to matrix data layout in Scilab (i.e. Fortran columnswise storage)
+, a matrix [a11,a12,a13;a21,a22,a23] contains 3 (ncols) arguments of 2 (nrows) elements;
+*/
+
+extern "C"
+{
+ int sci_parallel_run(char *fname, unsigned long fname_len);
+}
+
+namespace
+{
+int threadConcurrencyLevel;
+int processConcurrencyLevel;
+
+/* to distinguish scilab variable 'address' from usual int* */
+typedef int* scilabVar_t;
+
+int currentTop; /* Top is fragile : this var mimics Top to avoid touching the real one */
+char* currentFname = 0; /* name of the current Scilab function, to be used un error messages btw, what is the api_scilab equivalent of get_fname()?*/
+
+SciErr err; /* store error status from api_scilab functions */
+
+/* often, we handle nb of dimensions (rows and cols) at once.
+* I'd have gone for std::size_t but Scilab uses int :( */
+typedef std::pair<int, int> dim_t;
+
+/* A scilab variable description is a typename and a matric dimension, just to add a default constructor on the inherited struct
+* character string a static (no dynamic alloc/destruction)
+*/
+struct scilabDesc_t : std::pair<char const*, dim_t>
+{
+ scilabDesc_t(char const* name = "constant", dim_t dim = dim_t(1, 1)) /* default variable is a scalar i.e. 1x1 matrix of typename "constant" */
+ : std::pair<char const*, dim_t>(name, dim)
+ {
+ }
+ /* for debug purposes only
+ std::string toString() const
+ {
+ std::stringstream buf;
+ buf<<std::pair<char const*, dim_t>::first<<" :"<<std::pair<char const*, dim_t>::second.first
+ <<" x "<<std::pair<char const*, dim_t>::second.second;
+ return buf.str();
+ }
+ */
+};
+
+/* types to be used in unions of function pointers */
+typedef void (*functionToCall_t)(char const*const*, char*const*);
+typedef void (*wrapperFunction_t)(double const*, double*);
+typedef void (*loadedFunction_t)();
+typedef void (*simpleFunction_t)(int );
+
+/* ptr to data type */
+typedef union
+{
+ double* doublePtr;
+ int* intPtr;
+ char* bytePtr;
+ char** strArrayPtr;
+ void* opaquePtr;
+ int sciCFunction;
+} unionOfPtrs_t;
+
+/* a functional version of getVarType that can be composed
+* @param int* address of the scilab var
+* @return the type (0 on error)
+*/
+int getVarType(scilabVar_t var)
+{
+ int res(0);
+ err = getVarType(pvApiCtx, var, &res);
+ return res;
+}
+
+/* return the typename (as in typeof() )
+* @param int* address of the scilab var
+* @return the name
+* only implements the current valid types for parallel_run args.
+*/
+char const* getTypeName(scilabVar_t var)
+{
+ char const* res;
+ switch (getVarType(var))
+ {
+ case sci_matrix:
+ {
+ res = "constant";
+ break;
+ }
+ default:
+ {
+ res = "unimplemented type in getTypeName";
+ }
+ }
+ return res;
+}
+/* get nb of Rows & Cols of a Scilab var : a fonctional version of getVarDimension that can be composed.
+* @param the address of the variable
+* @return the dimensions in a std::pair<int,int> of nb of rows, nb of columns. (0,0) on error.
+*/
+dim_t getRowsCols(scilabVar_t var)
+{
+ dim_t res(0, 0);
+ err = getVarDimension(pvApiCtx, var, &res.first, &res.second);
+ return res;
+}
+/* get nb of Rows of a Scilab var (would not be needed with tr1)
+* @param the address of the variable
+* @return the nb of rows, 0 on error.
+*/
+int getRows(scilabVar_t var)
+{
+ return getRowsCols(var).first;
+}
+/* get nb of Columns of a Scilab var (would not be needed with tr1)
+* @param the address of the variable
+* @return the nb of columns, 0 on error.
+*/
+int getCols(scilabVar_t var)
+{
+ return getRowsCols(var).second;
+}
+
+/* test if the scilab var can be a function (either because it *is* one or because it can be the name of a function : 1x1 string marix)
+* @param var the scilab var
+* @return bool true iff it can be a function
+*/
+bool isFunctionOrString(scilabVar_t var)
+{
+ bool res;
+ switch (getVarType(var))
+ {
+ case sci_u_function :
+ case sci_c_function :
+ {
+ res = true;
+ break;
+ }
+ case sci_strings :
+ {
+ res = (getRows(var) == 1) && (getCols(var) == 1);
+ break;
+ }
+ default :
+ {
+ res = false;
+ }
+ }
+ return res;
+}
+/* get ptr to data of a Scilab variable
+* @param var 'address' of the scilab var
+* @return ptr to the data
+*/
+unionOfPtrs_t getData(scilabVar_t var)
+{
+ unionOfPtrs_t res = {0};
+ switch (getVarType(var)) // unhandled data types should be caught during arg validation
+ {
+ case sci_matrix :
+ {
+ if (!isVarComplex(pvApiCtx, var))
+ {
+ int unused;
+ err = getMatrixOfDouble(pvApiCtx, var, &unused, &unused, &res.doublePtr);
+ }
+ else
+ {
+ /* TODO suggest workaround in tutorial */
+
+ // std::cerr<<"complex data not yet implemented var @"<<var<<std::endl;
+ }
+ break;
+ }
+ case sci_strings :
+ {
+ // std::cerr<<"getData() string data not yet implemented"<<std::endl;
+ break;
+ }
+ default :
+ {
+ // std::cerr<<"getData() data type"<<getVarType(var)<<" not yet implemented"<<std::endl;
+ // abort();
+ }
+ }
+ return res;
+}
+/* get size of an element in a scilab matrix data structure.
+* @param var 'address' of the scilab var
+* @return the size in bytes, 0 on error.
+*/
+std::size_t getSizeOfElement(scilabVar_t var)
+{
+ std::size_t res(0);
+ switch (getVarType(var))
+ {
+ case sci_matrix :
+ {
+ res = sizeof(double);
+ break;
+ }
+ default : /* returns 0 */
+ {
+ // std::cerr<<"getSizeOfElt() @"<<var<<":data type not yet implemented"<<std::endl;
+ }
+ }
+ return res;
+}
+
+/* get size of a columns in a scilab matrix data structure.
+* @param var 'address' of the scilab var
+* @return the size in bytes, 0 on error.
+*/
+std::size_t getSizeOfColumn(scilabVar_t var)
+{
+ return getSizeOfElement(var) * getRows(var) ;
+}
+
+/* get size of the data in a scilab matrix data structure.
+* @param var 'address' of the scilab var
+* @return the size in bytes, 0 on error.
+*/
+std::size_t getSizeOfData(scilabVar_t var)
+{
+ return getSizeOfColumn(var) * getCols(var) ;
+}
+
+/* computes a dimension that is either
+* a slice (one column), or the concatenation of n matrix
+* For n=1, the dimension is untouched.
+* @param d dimension to slice or concatenate
+* @return the new dimension
+*/
+dim_t sliceOrConcat(dim_t d, std::size_t n = 1)
+{
+ switch (n)
+ {
+ case 0 :
+ {
+ d.second = 1; /* slice : one column */
+ break;
+ }
+ case 1:
+ break;
+ default :
+ {
+ d.first *= d.second;
+ d.second = static_cast<int>(n);
+ }
+ }
+ return d;
+}
+
+/* Get the description from a scilab variable.
+* If n is provided, it instead returns the description of
+* either a slice (n==0) or a concatenation (n>1) of the variable.
+* @param var scilab variable address
+* @param n either slice or concatenation
+* @return the description
+*/
+scilabDesc_t getDesc(scilabVar_t var, std::size_t n = 1)
+{
+ return scilabDesc_t( getTypeName(var), sliceOrConcat(getRowsCols(var), n));
+}
+
+/* allocate a scilab variable according to a provided description.
+* If n is provided, it instead allocates
+* either a slice (n==0) or a concatenation (n>1) of the variable.
+* @param d scilab variable description
+* @param n either slice or concatenation
+* @return the variable address
+* only real matrices are implemented yet.
+*/
+scilabVar_t allocVar(scilabDesc_t d, std::size_t n = 1)
+{
+ scilabVar_t res(0);
+ if (std::strcmp(d.first, "constant") == 0)
+ {
+ double* unused;
+ dim_t toAlloc(sliceOrConcat(d.second, n));
+ err = allocMatrixOfDouble(pvApiCtx, ++currentTop, toAlloc.first, toAlloc.second, &unused);
+ ++Nbvars;
+ // std::cerr<<"alloc var :"<<d.toString()<<" @"<<(currentTop)<<" with Nbvars="<<Nbvars<<std::endl;
+ err = getVarAddressFromPosition(pvApiCtx, currentTop, &res);
+ }
+ else /* unhandled type should be caught at arg validation time */
+ {
+ // std::cerr<<"allocVar() "<<d.first<<" data type not yet implemented"<<std::endl;
+ }
+ return res;
+}
+/* Ensures that the complete expected var is filled with reasonable default values
+* when the returned var was smaller than expected
+*
+* i.e. we just copied the data from a resultVar @ varData
+* when we were expecting an expectedVar : we fill the rest.
+*
+* @param d scilab variable description
+* @param n either slice or concatenation
+* @return the variable address
+* only real matrices are implemented yet.
+*/
+void fillUndefinedData(void* varData, scilabDesc_t resultVar, scilabDesc_t expectedVar)
+{
+ if (!std::strcmp(resultVar.first, expectedVar.first))
+ {
+ if (!strcmp(resultVar.first, "constant"))
+ {
+ std::size_t const nbFilled(resultVar.second.first * resultVar.second.second);
+ std::fill_n(static_cast<double *>(varData) + nbFilled
+ , expectedVar.second.first * expectedVar.second.second - nbFilled
+ , std::numeric_limits<double>::quiet_NaN() );
+
+ }
+ }
+}
+/*
+wrapper on a native c function or a scilab macro called on scilab variables.
+
+constructed on :
+- scilab variable for the function (external native function name, sci_c_function (buggy) or macro name)scilab matrices of arguments
+- expected lhs
+
+upon construction, allocate scilab result variables and computes all necessary meta data.
+*/
+struct wrapper
+{
+
+ typedef std::vector<std::size_t> sizes_container;
+
+ /* wrapper contructor
+ * @param args_begin iterator to the first args of parallel_run
+ * @param function_it iterator to the function argument of parallel_run
+ * @param args_end iterator past the end of parallel_run args
+ * @param function_lhs number of lhs (of parallel_run and of the function: it is the same)
+ */
+ template<typename VarsIt>
+ wrapper(VarsIt begin, VarsIt functionIt, VarsIt end, std::size_t functionLhs)
+ {
+ registerArgs(begin, functionIt);
+ n = *std::max_element(argsNb.begin(), argsNb.end());
+ getFunction(*functionIt);
+ allocCompleteResults(begin, functionIt + 1, end, functionLhs);
+ }
+
+ /* the member function performing the call to the function (foreign function of Scilab macro)
+ * @ param args array of ptrs to args data
+ * @ param res array of ptrs to res data
+ */
+ void operator()(char const** args, char ** res)
+ {
+ (*this.*(this->fPtr))(args, res);
+ }
+
+ /* It is idiomatic to pass functors by value in C++, but our wrapper is heavy,
+ * so we provide a lightweight handle */
+ struct handle
+ {
+ handle(wrapper& r) : w(r)
+ {
+ }
+ /* just forward to the underlying wrapper */
+ void operator()(char const** args, char ** res) const
+ {
+ w(args, res);
+ }
+ wrapper& w;
+ };
+ handle getHandle()
+ {
+ return handle(*this);
+ }
+ /* @return begin iterator to the array of pointers to arguments data */
+ char const*const* argsDataBegin() const
+ {
+ return &argsData[0].bytePtr;
+ }
+ /* @return begin iterator to the array of arguments sizes */
+ std::size_t const* argsSizesBegin() const
+ {
+ return &argsSizes[0];
+ }
+ /* @return begin iterator to the array of arguments number of elements (they are not requires to have the same nb of elements */
+ std::size_t const* argsNbBegin() const
+ {
+ return &argsNb[0];
+ }
+ /* @return nb of tasks (calls) to perform = max(args_nb_begin(), args_nb_begin()+rhs) */
+ std::size_t tasksNb() const
+ {
+ return n;
+ }
+ /* @return begin iterator to the array of pointers to result data */
+ char * const* resDataBegin()
+ {
+ return &resData[0].bytePtr;
+ }
+ /* @return begin iterator to the array of results sizes */
+ std::size_t const* resSizesBegin() const
+ {
+ return &resSizes[0];
+ }
+ /* @return nb of rhs vars of the function */
+ std::size_t nbRhs() const
+ {
+ return rhsDesc.size();
+ }
+ /* @return true if the underlying function is a foreign function, false if it is a Scilab macro */
+ bool isForeignFunction() const
+ {
+ return function.toCall != 0 ;
+ }
+
+private:
+ /* ptr to foreign function (types used where storing, calling or wrapping) */
+ union
+ {
+ functionToCall_t toCall;
+ loadedFunction_t toLoad;
+ wrapperFunction_t wrapper;
+ } function;
+ /* register a matrix of arguments to be used as rhs) */
+ template<typename ArgIt>
+ void registerArgs(ArgIt it, ArgIt end)
+ {
+ std::transform(it, end, std::back_inserter(argsData), &getData);
+ std::transform(it, end, std::back_inserter(argsSizes), &getSizeOfColumn);
+ std::transform(it, end, std::back_inserter(argsNb), &getCols);
+ std::transform(it, end, std::back_inserter(rhsDesc), std::bind2nd(std::ptr_fun(&getDesc), 0)); /* get a slice as model for function rhs*/
+ }
+
+ /* alloc the scilab variables that will hold the complete collection of results
+ * @param first_arg_position only used to compute the args positions for error messages
+ * @param res_types_begin, res_types_end iterator range on the args describing result, can be empty
+ * @param nb_lhs number of lhs */
+ template<typename VarPtrIt>
+ void allocCompleteResults(VarPtrIt begin, VarPtrIt resBegin, VarPtrIt resEnd, std::size_t nbLhs)
+ {
+ lhsDesc.resize(nbLhs);
+ if (resBegin != resEnd)
+ {
+ if (getVarType(*resBegin) == sci_strings)
+ {
+ // std::cerr<<"we have a type lhs arg\n";
+ ++resBegin;
+ }
+ if (resBegin != resEnd)
+ {
+ if (getVarType(*resBegin) == sci_matrix)
+ {
+ // std::cerr<<"we have a dim lhs arg\n";
+ dim_t const tmp(getRowsCols(*resBegin));
+ double const*const data(getData(*resBegin).doublePtr);
+ switch (tmp.second)
+ {
+
+ case 2:
+ {
+ // std::cerr<<"we have rows and cols\n";
+ for (int i(0); i < tmp.first && i < tmp.first * tmp.second; ++i)
+ {
+ lhsDesc[i].second.first = static_cast<int>(data[i]);
+ lhsDesc[i].second.second = static_cast<int>(data[i + tmp.first]);
+ }
+ break;
+ }
+ case 1:
+ {
+ // std::cerr<<"we have rows \n";
+ for (int i(0); i < tmp.first && i < tmp.first * tmp.second; ++i)
+ {
+ lhsDesc[i].second.first = static_cast<int>(data[i]);
+ }
+ break;
+ }
+ default :
+ {
+ Scierror(999, _("%s: Wrong size of input argument #%d: Number of columns are incompatible ")
+ , currentFname, std::distance(begin, resBegin));
+ }
+ }
+ }
+ }
+ }
+ /* we want to have to result var at hand before calling the scilab macro so we must create it now before the args */
+ std::transform(lhsDesc.begin(), lhsDesc.end(), std::back_inserter(scilabCollectionsOfLhs), std::bind2nd(std::ptr_fun(&allocVar), n));
+ /* we store addr of result data and the size for the parallel wrapper */
+ std::transform(scilabCollectionsOfLhs.begin(), scilabCollectionsOfLhs.end(), std::back_inserter(resData), &getData);
+ std::transform(scilabCollectionsOfLhs.begin(), scilabCollectionsOfLhs.end(), std::back_inserter(resSizes), &getSizeOfColumn);
+ }
+
+ /* extract the function form the scilab variable (i.e.string) reprensenting it.
+ * @param v the variable
+ * @return nothing useful but GetRhsVar() macro wants to be able to return an int :(
+ */
+ int getFunction(scilabVar_t var)
+ {
+ function.toCall = 0;
+ switch (getVarType(var))
+ {
+ case sci_c_function :
+ {
+ int unused[2];
+ GetRhsVar(2, EXTERNAL_DATATYPE, unused, unused + 1, &scilabFunction);
+ fPtr = &wrapper::macro<false>;
+ break;
+ }
+ case sci_strings :
+ {
+ char* funName;
+ getAllocatedSingleString(pvApiCtx, var, &funName);
+ int found;
+ found = SearchInDynLinks(funName, &function.toLoad);
+ fPtr = &wrapper::nativeFunction;
+ if (found == -1)
+ {
+ /* should check amongst defined macros with getmacroslist (cf dans core/src/c/getvariablesname.c) and check that type is sci_XXX */
+ function.toCall = 0;
+ scilabFunctionName = funName;
+ scilabFunctionNameLength = std::strlen(scilabFunctionName);
+ fPtr = &wrapper::macro<true>;
+ }
+ }
+ }
+ return 0;
+ }
+
+ /* performs the Scilab macro call
+ * @param byName bool template parameter tells if the macro is called by name or by ptr (ptr is currently broken).
+ * @param args array of ptrs to args data
+ * @param res array of ptr to res data
+ */
+ template<bool byName>
+ void macro(char const** args, char ** res)
+ {
+ /* rhs models from */
+ int saveNbvars = Nbvars, saveTop = currentTop;
+ for ( std::vector<scilabDesc_t>::const_iterator it(rhsDesc.begin())
+ ; it != rhsDesc.end(); ++it, ++args)
+ {
+ scilabVar_t scilabArg = allocVar(*it); /* create a var for a slice (col)of the parallel_run Rhs arg */
+ memcpy(getData(scilabArg).bytePtr, *args, getSizeOfData(scilabArg));
+ }
+
+ int sciRhs = static_cast<int>(rhsDesc.size());
+ int sciLhs = static_cast<int>(lhsDesc.size());
+
+ std::size_t dummyVars(0); /* alloc safety variable to ensure space on the stack upon return*/
+ int sciArgPos = saveTop + 1;
+ for ( ; sciRhs + dummyVars < sciLhs + maxSafetyLhs; ++dummyVars, ++Nbvars)
+ {
+ double* unused;
+ err = allocMatrixOfDouble(pvApiCtx, ++currentTop, 0, 0, &unused);
+ }
+ Nbvars = Rhs + Lhs + sciRhs;
+ bool success(byName
+ ? C2F(scistring)(&sciArgPos, scilabFunctionName, &sciLhs, &sciRhs, static_cast<unsigned long>(scilabFunctionNameLength))
+ : C2F(scifunction)(&sciArgPos, &scilabFunction, &sciLhs, &sciRhs)
+ );
+ // result r is now on first position on stack
+ {
+ Nbvars = static_cast<int>(Rhs + Lhs + sciRhs + dummyVars);
+ int resPos = Rhs + Lhs + 1; //+1
+
+ for ( std::vector<scilabDesc_t>::iterator it(lhsDesc.begin())
+ ; it != lhsDesc.end(); ++it, ++resPos, ++res)
+ {
+ scilabVar_t scilabRes;
+ if (success)
+ {
+ err = getVarAddressFromPosition(pvApiCtx, resPos, &scilabRes);
+ }
+ scilabDesc_t resDesc;
+ if (!success || err.iErr)
+ {
+ /* there was an error getting the result variable */
+ resDesc = *it; /* pretend we got the right type */
+ resDesc.second.first = resDesc.second.second = 0; /* but 0 elements */
+ }
+ else
+ {
+ /* copy the returned data */
+ memcpy(*res, getData(scilabRes).bytePtr, getSizeOfData(scilabRes));
+ resDesc = getDesc(scilabRes);
+ }
+ fillUndefinedData(*res, resDesc, *it);
+ }
+ Nbvars = saveNbvars;
+ currentTop = saveTop;
+ }
+ }
+ void nativeFunction(char const** args, char ** res)
+ {
+ function.toCall(args, res);
+ }
+
+ /* we prealloc as much scilab var more than requested lhs in case the scilab macro call back returns more thant requested.*/
+ static unsigned int const maxSafetyLhs = 20;
+
+ std::size_t n; /* nb of calls to perform */
+ sizes_container argsSizes, argsNb, resSizes; /* sizes of arguments, nb of elements for each argument, sizes for results */
+ std::vector<unionOfPtrs_t> argsData; /* ptrs to args data */
+ std::vector<unionOfPtrs_t> resData; /* ptrs to res data */
+
+ /* the member function to call, dispatches to macro of foreign function */
+ void(wrapper::*fPtr)(char const** args, char ** res);
+
+ int scilabFunction; /* the scilab function 'ptr' for scifunction */
+ char* scilabFunctionName;/* the scilab function name for scistring */
+ std::size_t scilabFunctionNameLength;/* the scilab function name length for scistring */
+
+ /* store models of scilab lhs and rhs variables */
+ std::vector<scilabDesc_t> lhsDesc, rhsDesc;
+ std::vector<scilabVar_t> scilabCollectionsOfLhs; /* lhs vars of the parallel_run function : collections of the lhs form the function*/
+
+};
+/* Checks if the function parallel_run arguments are valid.
+* 1 or more matrices of doubles
+* 1 matrix of 1 string
+* 0 or 1 matrix of strings and/or 1 matrix of doubles with 1 ou 2 columns
+* 0 or 1 configuration plist
+*
+* @retun true is the args are valid */
+bool check_args(void)
+{
+ {
+ if (Rhs < 2)
+ {
+ return false;
+ }
+ bool before_function(true), at_least_one_arg(false);
+ bool ok(true);
+ for ( int pos(1); pos <= Rhs && ok; ++pos)
+ {
+ int* addr;
+ err = getVarAddressFromPosition(pvApiCtx, pos, &addr);
+ int type;
+ err = getVarType( pvApiCtx, addr, &type );
+ if (before_function)
+ {
+ switch (type)
+ {
+ case sci_matrix :
+ {
+ /* check not complex "%s: This feature has not been implemented.\n" */
+ ok = !isVarComplex( pvApiCtx, addr);
+ at_least_one_arg = true;
+ break;
+ }
+ case sci_strings :
+ {
+ /* check dim = 1x1 */
+ int rows, cols;
+ err = getMatrixOfString(pvApiCtx, addr, &rows, &cols, 0, 0);
+ ok = (rows == 1) && (cols == 1);
+ }/* no break */
+ case sci_c_function:
+ {
+ before_function = false;
+ break;
+ }
+ default :
+ {
+ Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), currentFname, 1);
+ ok = false;
+ }
+ }
+ }
+ else
+ {
+ switch (type)
+ {
+ case sci_strings :
+ {
+ break;
+ }
+ case sci_matrix :
+ {
+ /* check not complex and ncol <=2 */
+ ok = !isVarComplex( pvApiCtx, addr);
+ if (ok)
+ {
+ int rows, cols;
+ double* unused;
+ err = getMatrixOfDouble(pvApiCtx, addr, &rows, &cols, &unused);
+ ok = (cols <= 2);
+ break;
+ }
+ }
+ case sci_mlist : /* config plist (which is a mlist) */
+ {
+ break;
+ }
+
+ default :
+ {
+ ok = false;
+ }
+ }
+ }
+ }
+ return ok && at_least_one_arg && (!before_function);
+ }
+}
+
+/* Get configuration options form the config parameter
+*
+* in :
+* @param config_arg_pos position where the config arg can be
+*
+* in/out:
+*
+* @param nb_workers int config value for the key "nb_workers"
+* @param shared_memory bool config value for the key "shared_memory"
+* @param dynamic_scheduling bool config value for the key "dynamic_scheduling"
+* @param chunk_size int config value for the key "chunk_size"
+* @param prologue char* config value for the key "prologue"
+* @param prologue char* config value for the key "epilogue"
+*
+* @return bool true if there was a configuration argument in position config_arg_pos.
+*/
+bool getConfigParameters
+(int config_arg_pos, int& nb_workers, bool& shared_memory, bool& dynamic_scheduling, int& chunk_size, char const*& prologue, char const*& epilogue)
+{
+ int log(0);
+ int* addr = NULL;
+ getVarAddressFromPosition(pvApiCtx, config_arg_pos, &addr);
+ bool has_config_arg(checkPList(pvApiCtx, addr) != 0);
+ if (has_config_arg)
+ {
+ int found;
+ getIntInPList(pvApiCtx, addr, "nb_workers", &nb_workers, &found, nb_workers, log, CHECK_NONE);
+ int tmp;
+ getIntInPList(pvApiCtx, addr, "shared_memory", &tmp, &found, shared_memory ? 1 : 0, log, CHECK_NONE);
+ shared_memory = (tmp != 0);
+ getIntInPList(pvApiCtx, addr, "dynamic_scheduling", &tmp, &found, dynamic_scheduling ? 1 : 0, log, CHECK_NONE);
+ dynamic_scheduling = (tmp != 0);
+ getIntInPList(pvApiCtx, addr, "chunk_size", &chunk_size, &found, chunk_size, log, CHECK_NONE);
+ getStringInPList(pvApiCtx, addr, "prologue", const_cast<char**>(&prologue), &found, const_cast<char*>(prologue), log, CHECK_NONE);
+ getStringInPList(pvApiCtx, addr, "epilogue", const_cast<char**>(&epilogue), &found, const_cast<char*>(epilogue), log, CHECK_NONE);
+ }
+ return has_config_arg;
+}
+
+/*
+A simple wrapper just wraps prologues and epilogues, each taking only a scalar argument (the process number).
+*/
+struct simple_wrapper
+{
+ /* the constructor
+ * @param the macro or foreign function name, empty string allowed: the function then does nothing.
+ */
+ explicit simple_wrapper(char const* name): fun(name)
+ {
+ }
+ /* the operator : calls the function or macro passing a scalar argument on the stack
+ * @param i the scalar to pass on the stack as a real value.
+ */
+ void operator()(int i)
+ {
+ if (*fun)
+ {
+ /* do nothing on empty name */
+ union
+ {
+ loadedFunction_t toLoad;
+ simpleFunction_t toCall;
+ } function;
+ int found = SearchInDynLinks(const_cast<char*>(fun), &function.toLoad);
+ if (found != -1)
+ {
+ function.toCall(i);
+ }
+ else
+ {
+ double* tmpPtr;
+ err = allocMatrixOfDouble(pvApiCtx, ++Top, 1, 1, &tmpPtr);
+ *tmpPtr = static_cast<double>(i);
+ ++Nbvars;
+ int lhs(0), rhs(1);
+ C2F(scistring)(&(Top), const_cast<char*>(fun), &lhs, &rhs, static_cast<unsigned long>(strlen(fun)));
+ --Nbvars;
+ --Top;
+ }
+ }
+ }
+ char const* fun;
+};
+
+struct ConcurrencyState
+{
+ ConcurrencyState()
+ {
+ lock = static_cast<__threadSignalLock*>(mmap(0, sizeof( __threadSignalLock), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0));
+ processConcurrencyLevelPtr = static_cast<int*>(mmap(0, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0));
+ __InitSignalLock(lock);
+ }
+
+ struct ScopedUpdater
+ {
+ ScopedUpdater(ConcurrencyState& c, bool threads)
+ : lock(c.lock), countPtr( threads
+ ? &c.threadConcurrencyLevel
+ : c.processConcurrencyLevelPtr)
+ {
+ __LockSignal(lock);
+ ++(*countPtr);
+ __UnLockSignal(lock);
+ }
+ ~ScopedUpdater()
+ {
+ __LockSignal(lock);
+ --(*countPtr);
+ __UnLockSignal(lock);
+ }
+ __threadSignalLock* lock;
+ int* countPtr;
+ };
+ ScopedUpdater scopedUpdater(bool threads)
+ {
+ return ScopedUpdater(*this, threads);
+ }
+
+ int get() const
+ {
+ __LockSignal(lock);
+ int res((threadConcurrencyLevel ? 1 : 0) | (*processConcurrencyLevelPtr ? 2 : 0));
+ __UnLockSignal(lock);
+ return res;
+ }
+
+ ~ConcurrencyState()/* called by exit() for static variables */
+ {
+ __UnLockSignal(lock);
+ }
+ __threadSignalLock* lock;
+ int* processConcurrencyLevelPtr; /* must be in shared mem */
+ int threadConcurrencyLevel;
+};
+
+
+}
+
+ConcurrencyState concurrencyState;
+
+int parallelConcurrency()
+{
+ return concurrencyState.get();
+}
+
+int parallelForbidden(char const* fname)
+{
+ Scierror(999, _("%s: This function is forbidden in a concurrent execution context.\n"), fname);
+ return 0;
+}
+
+
+
+/* Calling point from Scilab.
+* checking args and contruction a wrapper around function call of a foreign function or a Scilab macro.
+* this wrapper (in fact, a handle) is then passed to another wrapper that will parallelize the calls.
+* the parallel wrapper is independant of Scilab (thanks to this wrapper) and is implemented in parallel_wrapper.hpp.
+*
+* Calling parallel_run is
+* 1 checking args
+* 2 constructing wrapper pre allocating result Scilab vars and abstracting arrays of args and results pointers
+* (in parallel_wrapper )
+* 3 contructing a parallel_wrapper
+* 4 calling the parallel_wrapper according to config options (i.e. nb of workers)
+* 4.1 for each call to be made, adjusting the args and res ptr
+* 4.2 calling the wrapper
+*
+*/
+int sci_parallel_run(char *fname, unsigned long fname_len)
+{
+ typedef std::vector<scilabVar_t> varsContainer_t;
+ currentFname = fname; //get_fname(fname, fname_len); uses a static buffer :(
+ currentTop = Rhs;
+#ifdef _MSC_VER
+ Nbvars = max(Rhs, Top);
+#else
+ Nbvars = std::max(Rhs, Top);
+#endif
+ if ( !check_args())
+ {
+ Scierror(999, _("%s: Wrong number of input argument(s).\n"), fname); /* need a better error message */
+ return 0;
+ }
+
+
+ int nbArgsToHandle(Rhs);
+ /* parameters default values */
+ int nbWorkers(0), chunkSize(1);
+ bool sharedMemory(false), dynamicScheduling(false);
+ char const* prologueName("");
+ char const* epilogueName("");
+ /* If there is a config parameter, use it to update the parameters value */
+ if ( getConfigParameters(Rhs, nbWorkers, sharedMemory, dynamicScheduling, chunkSize, prologueName, epilogueName))
+ {
+ --nbArgsToHandle;
+ }
+ varsContainer_t stack(nbArgsToHandle);
+ for (int i(0); i != nbArgsToHandle; ++i)
+ {
+ err = getVarAddressFromPosition(pvApiCtx, i + 1, &stack[i]);
+ }
+ varsContainer_t::iterator functionArg = std::find_if(stack.begin(), stack.end(), &isFunctionOrString);
+ wrapper w(stack.begin(), functionArg, stack.end(), Lhs);
+ bool const withThreads(w.isForeignFunction() && sharedMemory);
+
+ ConcurrencyState::ScopedUpdater u(concurrencyState.scopedUpdater(withThreads));
+
+ simple_wrapper prologue(prologueName), epilogue(epilogueName);
+
+ make_parallel_wrapper(w.argsDataBegin(), w.argsSizesBegin(), w.argsNbBegin(), w.nbRhs(), w.tasksNb()
+ , w.resDataBegin(), w.resSizesBegin()
+ , Lhs, w.getHandle(), prologue, epilogue)(withThreads, nbWorkers, dynamicScheduling, chunkSize);
+
+ for (int i(0); i != Lhs; ++i)
+ {
+ LhsVar(i + 1) = Rhs + i + 1;
+ }
+
+ PutLhsVar(); /* to be moved to gateway */
+
+ return 0;
+}
diff --git a/modules/parallel/sci_gateway/parallel_gateway.xml b/modules/parallel/sci_gateway/parallel_gateway.xml
new file mode 100755
index 000000000..0ec701a99
--- /dev/null
+++ b/modules/parallel/sci_gateway/parallel_gateway.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+
+<!DOCTYPE GATEWAY SYSTEM "../../functions/xml/gateway.dtd">
+<GATEWAY name="parallel">
+ <!-- =================== -->
+ <!--
+ Scilab
+ Interface description. In this file, we define the list of the function which
+ will be available into Scilab and the link to the "native" function.
+
+ gatewayId is the position in the hashtable 'Interfaces' defined in the
+ file SCI/modules/core/src/c/callinterf.h
+
+ primitiveId is the position in the hashtable '<module>Table Tab[]' defined
+ in the file modules/<module>/sci_gateway/c/gw_<module>.c
+
+ primitiveName is the name of the Scilab function
+
+ @author Allan CORNET
+ @date DIGITEO 2010
+ ===================
+ Don't touch if you do not know what you are doing
+-->
+ <!-- =================== -->
+ <PRIMITIVE gatewayId="66" primitiveId="1" primitiveName="parallel_run" />
+ <PRIMITIVE gatewayId="66" primitiveId="2" primitiveName="parallel_concurrency" />
+</GATEWAY>