int sci_create_list(char * fname) { int m_list_out, n_list_out; int m_var1, n_var1, l_var1, l_list_var1; int m_var2, n_var2, l_var2, l_list_var2; int m_mlist, n_mlist, l_mlist; // The labels of our mlist static const char * ListLabels [] = {"mylist", "var1", "var2"}; // First, we create the variables using a classical way // The size of the Scilab variables m_var1 = 1; n_var1 = strlen("a string") + 1; // a null terminated string m_var2 = 2; n_var2 = 2; // A 2x2 double matrix m_mlist = 3; n_mlist = 1; // A mlist with 3 elements // Creation of the Scilab variables // A('var1') CreateVar(1, "c", &m_var1, &n_var1, &l_var1); // A('var2') CreateVar(2, "d", &m_var2, &n_var2, &l_var2); // A CreateVar(3, "m", &m_mlist, &n_mlist, &l_mlist); // We store values in the create variables // The matrix will be stored in A('var2') *stk(l_var2 + 0) = 1; *stk(l_var2 + 1) = 2; *stk(l_var2 + 2) = 3; *stk(l_var2 + 3) = 4; // The string will be stored in A('var1') strncpy(cstk(l_var1), "a string\0", n_var1); m_list_out = 3; n_list_out = 1; // now, affect the variable to the mlist // The labels (it corresponds to A = mlist(['mylist','var1','var2'], ... CreateListVarFromPtr(3, 1, "S", &m_list_out, &n_list_out, ListLabels); // The value stored in A('var1') (it corresponds to A = ...,'a string', ... CreateListVarFrom(3, 2, "c", &m_var1, &n_var1, &l_list_var1, &l_var1); // The value stored in A('var2') (it corresponds to A = ...,[1 2,3 4]); CreateListVarFrom(3, 3, "d", &m_var2, &n_var2, &l_list_var2, &l_var2); // We return only the mlist which has been created at position 3 LhsVar(1) = 3; return 0; }
static int cre_hmat(int pos, HyperMat *H) { /* dans cette version, seuls les champs dimsize, size et it sont definis * et on alloue alors la memoire des champs dims, R (et I si it=1) dans * la pile scilab (juste � la place occupee par la variable). */ static char *Str[] = { "hm", "dims", "entries"}; int m1 = 1, n1 = 3; int mL = 3, nL = 1, lL, one = 1, lr, lc, lar, lac; CreateVar(pos, MATRIX_ORIENTED_TYPED_LIST_DATATYPE, &mL, &nL, &lL); CreateListVarFromPtr(pos, 1, MATRIX_OF_STRING_DATATYPE, &m1, &n1, Str); lr = 4; lar = -1; CreateListVarFrom(pos, 2, MATRIX_OF_VARIABLE_SIZE_INTEGER_DATATYPE, &one, &H->dimsize, &lr, &lar); H->dims = istk(lr); lar = -1; lac = -1; switch (H->type) { case (sci_matrix): CreateListCVarFrom(pos, 3, MATRIX_OF_DOUBLE_DATATYPE, &H->it, &H->size, &one , &lr, &lc, &lar, &lac); H->R = stk(lr); if ( H->it == 1) { H->I = stk(lc); } return 1; case (sci_boolean): CreateListVarFrom(pos, 3, MATRIX_OF_BOOLEAN_DATATYPE, &H->size, &one, &lr, &lar); H->P = (void *) istk(lr); return 1; case (sci_ints): lr = H->it; CreateListVarFrom(pos, 3, MATRIX_OF_VARIABLE_SIZE_INTEGER_DATATYPE, &H->size, &one, &lr, &lar); H->P = (void *) istk(lr); return 1; } /* Ajout Allan CORNET Correction Warning */ /* warning C4715: 'cre_hmat' : not all control paths return a value */ return 1; }
/*--------------------------------------------------------------------------*/ int intsplin3d(char * fname,unsigned long fname_len) { /* * [tlist] = splin3d(x, y, z, v [,orderxyz]) */ static char *Str[] = {"tensbs3d", "tx", "ty", "tz", "order", "bcoef", "xyzminmax"}; int minrhs = 4, maxrhs = 5, minlhs = 1, maxlhs = 1; int mx = 0, nx = 0, lx = 0, my = 0, ny = 0, ly = 0, mz = 0, nz = 0, lz = 0, mo = 0; int no = 0, lo = 0, kx = 0, ky = 0, kz = 0; int ntx = 0, nty = 0, ntz = 0, ltx = 0, lty = 0, ltz = 0, lbcoef = 0, lxyzminmax = 0; int mwk = 0, mwkx = 0, mwky = 0, mwkz = 0; int flag = 0, one = 1, three = 3, six = 6, seven = 7, ltlist = 0, nxyz = 0, lwork = 0; int lar = 0, lorder = 0, *order = NULL; double *x = NULL, *y = NULL, *z = NULL, *xyzminmax = NULL; int i = 0; RealHyperMat V; CheckRhs(minrhs, maxrhs); CheckLhs(minlhs, maxlhs); GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &mx, &nx, &lx); CheckVector(1, mx, nx); x = stk(lx); GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &my, &ny, &ly); CheckVector(2, my, ny); y = stk(ly); GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &mz, &nz, &lz); CheckVector(2, mz, nz); z = stk(lz); for (i = 1; i <= minrhs - 1; i++) { SciErr sciErr; int *piAddressVar = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, i, &piAddressVar); if(sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i); return 0; } if (isVarComplex(pvApiCtx, piAddressVar)) { Scierror(202, _("%s: Wrong type for argument #%d: Real matrix expected.\n"), fname, i); return 0; } } nx = mx * nx; ny = my * ny; nz = mz * nz; if (nx < 3 || ny < 3 || nz < 3) { Scierror(999,_("%s: Wrong size for input arguments: x, y and z grids must have at least %d points.\n"), fname, 3); return 0; } GetRhsRealHMat(4, &V); if ( V.dimsize != 3 ) { Scierror(999,_("%s: Wrong size for input argument #%d: A real 3-dimension hypermatrix expected.\n"),fname,4); return 0; } if ( V.dims[0] != nx || V.dims[1] != ny || V.dims[2] != nz ) { Scierror(999,"%s: Wrong value for input argument: Size incompatibility between grid points and grid values.\n", fname); return 0; } if ( Rhs == 5 ) { GetRhsVar(5,MATRIX_OF_DOUBLE_DATATYPE, &mo, &no, &lo); if ( (mo != 1 && no != 1) || mo*no != 3 ) { Scierror(999,_("%s: Wrong value for input argument #%d: Vector with %d components expected.\n"),fname,4,3); return 0; } kx = (int)*stk(lo); ky = (int)*stk(lo+1); kz = (int)*stk(lo+2); if ( kx < 2 || kx >= nx || ky < 2 || ky >= ny || kz < 2 || kz >= nz ) { Scierror(999,_("%s: Wrong values for input argument #%d.\n"), fname, 5); return 0; } } else { kx = 4; ky = 4; kz = 4; } ntx = nx + kx; nty = ny + ky; ntz = nz + kz; mwkx = kx*(nx+1); mwky = ky*(ny+1); mwkz = kz*(nz+1); mwkx = Max(mwkx, mwky); mwk = nx*ny*nz + 2*(Max(mwkx, mwkz)); nxyz = nx*ny*nz; CreateVar(Rhs+1,TYPED_LIST_DATATYPE, &seven, &one, <list); CreateListVarFromPtr(Rhs+1, 1,MATRIX_OF_STRING_DATATYPE, &one, &seven, Str); lar = -1; CreateListVarFrom(Rhs+1, 2,MATRIX_OF_DOUBLE_DATATYPE, &ntx, &one, <x, &lar); lar = -1; CreateListVarFrom(Rhs+1, 3,MATRIX_OF_DOUBLE_DATATYPE, &nty, &one, <y, &lar); lar = -1; CreateListVarFrom(Rhs+1, 4,MATRIX_OF_DOUBLE_DATATYPE, &ntz, &one, <z, &lar); lorder = 4; lar = -1; CreateListVarFrom(Rhs+1, 5,MATRIX_OF_VARIABLE_SIZE_INTEGER_DATATYPE, &three, &one, &lorder, &lar); order = istk(lorder); order[0] = kx; order[1] = ky; order[2] = kz; lar = -1; CreateListVarFrom(Rhs+1, 6,MATRIX_OF_DOUBLE_DATATYPE, &nxyz, &one, &lbcoef, &lar); lar = -1; CreateListVarFrom(Rhs+1, 7,MATRIX_OF_DOUBLE_DATATYPE, &six, &one, &lxyzminmax, &lar); xyzminmax = stk(lxyzminmax); xyzminmax[0] = x[0]; xyzminmax[1] = x[nx - 1]; xyzminmax[2] = y[0]; xyzminmax[3] = y[ny - 1]; xyzminmax[4] = z[0]; xyzminmax[5] = z[nz - 1]; CreateVar(Rhs + 2, MATRIX_OF_DOUBLE_DATATYPE, &mwk, &one, &lwork); flag = 0; C2F(db3ink) ( stk(lx), &nx, stk(ly), &ny, stk(lz), &nz, V.R, &nx, &ny, &kx, &ky, &kz, stk(ltx), stk(lty), stk(ltz), stk(lbcoef), stk(lwork), &flag); if ( flag != 1 ) { Scierror(999, _("%s: Problem with 'flag' = %d\n"), fname, flag); return 0; } /* Return only the tlist */ LhsVar(1) = Rhs+1; PutLhsVar(); return 0; }