void dictadd(const int dicthandle, const char *key, const int objhandle) { PyObject *d = getObjectFromHandle(dicthandle); PyObject *o = getObjectFromHandle(objhandle); PyObject *k = strLenToUtfPy((char *)key, strlen(key)); PyDict_SetItem(d, k, o); Py_DECREF(k); }
/*--------------------------------------------------------------------------*/ int sci_exportUI(char * fname, unsigned long fname_len) { int iFigureId = 0; // id of the figure to export int iRows = 0; int iCols = 0; size_t stackPointer = 0; CheckLhs(0, 1); CheckRhs(1, 1); if (GetType(1) == sci_handles) // exportUI(figHandle) { const char *pstFigureUID = NULL; int iHandleType = -1; int *piHandleType = &iHandleType; int *piFigureId = &iFigureId; GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &iRows, &iCols, &stackPointer); if (iRows * iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); } pstFigureUID = getObjectFromHandle((unsigned long) * (hstk(stackPointer))); getGraphicObjectProperty(pstFigureUID, __GO_TYPE__, jni_int, (void **)&piHandleType); if (iHandleType == __GO_FIGURE__) { Scierror(999, _("%s: Wrong type for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); return FALSE; } getGraphicObjectProperty(pstFigureUID, __GO_ID__, jni_int, (void **)&piFigureId); } else if (GetType(1) == sci_matrix) // exportUI(figId) { GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &iRows, &iCols, &stackPointer); if (iRows * iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); return FALSE; } iFigureId = (int) * (stk(stackPointer)); } else { Scierror(999, _("%s: Wrong type for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); return FALSE; } // call the export function exportUserInterface(iFigureId); LhsVar(1) = 0; PutLhsVar(); return 0; }
/*------------------------------------------------------------------------*/ int set_current_entity_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol ) { char* curEntity = NULL ; if (pobjUID != NULL) { /* This property should not be called on an handle */ Scierror(999, _("'%s' property does not exist for this handle.\n"), "current_entity"); return -1; } if ( !( valueType == sci_handles ) ) { Scierror(999, _("Wrong type for '%s' property: Handle expected.\n"), "current_entity"); return SET_PROPERTY_ERROR ; } curEntity = (char*)getObjectFromHandle( getHandleFromStack( stackPointer ) ) ; if ( curEntity == NULL ) { Scierror(999, _("Wrong value for '%s' property: Must be a valid handle.\n"), "current_entity"); return SET_PROPERTY_ERROR ; } setCurrentObject(curEntity) ; return SET_PROPERTY_SUCCEED ; }
int dictkeys(const int handle) { PyObject *v; PyObject *obj = getObjectFromHandle(handle); v = PyDict_Keys(obj); return newHandle(v); }
char * handletype(const int handle) { PyObject *obj = getObjectFromHandle(handle); if (PyList_Check(obj) || PyTuple_Check(obj)) return "list"; else if PyDict_Check(obj) return "dict"; else if PyString_Check(obj)
int dictget(const int handle, const char * key) { PyObject *v; PyObject *obj = getObjectFromHandle(handle); PyObject *k = strLenToUtfPy((char *)key, strlen(key)); v = PyDict_GetItem(obj, k); Py_DECREF(k); if (v == NULL) return 0; Py_INCREF(v); return newHandle(v); }
/*------------------------------------------------------------------------*/ int set_current_axes_property(char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol ) { char * curAxesUID = NULL; char * parentFigureUID = NULL; char * type; if (pobjUID != NULL) { /* This property should not be called on a handle */ Scierror(999, _("'%s' property does not exist for this handle.\n"), "current_axes"); return SET_PROPERTY_ERROR; } if ( !isParameterHandle( valueType ) ) { Scierror(999, _("Wrong type for '%s' property: Handle expected.\n"), "current_axes"); return SET_PROPERTY_ERROR; } curAxesUID = getObjectFromHandle( getHandleFromStack( stackPointer ) ); if ( curAxesUID == NULL) { Scierror(999, _("Wrong value for '%s' property: Must be a valid handle.\n"), "current_entity"); return SET_PROPERTY_ERROR; } getGraphicObjectProperty(curAxesUID, __GO_TYPE__, jni_string, &type); if (strcmp(type, __GO_AXES__) != 0) { Scierror(999, _("Wrong value for '%s' property: Must be a handle on a axes.\n"), "current_axes"); return SET_PROPERTY_ERROR; } /* The current Axes' parent Figure's selected child property must be updated */ getGraphicObjectProperty(curAxesUID, __GO_PARENT__, jni_string, &parentFigureUID); setGraphicObjectProperty(parentFigureUID, __GO_SELECTED_CHILD__, curAxesUID, jni_string, 1); setCurrentSubWin(curAxesUID); /* F.Leray 11.02.05 : if the new selected subwin is not inside the current figure, */ /* we must also set the current figure to the subwin's parent */ if (!isCurrentFigure(parentFigureUID)) { setCurrentFigure(parentFigureUID); } return SET_PROPERTY_SUCCEED; }
int runpython(const char *modname, const char * clsname, const char * funcname, const int paramhandle) { PyObject *modstr, *mod, *clsstr, *cls, *funcstr, *func, *plist, *args, *retval; /* convert module, class and func to utf-8 */ modstr = strLenToUtfPy((char *)modname, strlen(modname)); plist = getObjectFromHandle(paramhandle); /* parameters */ if (!PyList_Check(plist)) return newHandle(PyString_FromString("Error: parameters must be a list.")); /* import modules */ mod = PyImport_Import(modstr); if (mod == NULL) { Py_DECREF(modstr); return newHandle(PyString_FromString("Error: module not found.")); } if (clsname != NULL) clsstr = strLenToUtfPy((char *)clsname, strlen(clsname)); funcstr = strLenToUtfPy((char *)funcname, strlen(funcname)); if (clsname != NULL && strlen(clsname) > 0) { cls = PyObject_GetAttr(mod, clsstr); if (cls != NULL) func = PyObject_GetAttr(cls, funcstr); } else { func = PyObject_GetAttr(mod, funcstr); } if (!func || !PyCallable_Check(func)) { Py_XDECREF(cls); Py_XDECREF(mod); return newHandle(PyString_FromString("Error: function not found.")); } args = PyList_AsTuple(plist); retval = PyObject_CallObject(func, args); Py_XDECREF(args); Py_XDECREF(func); Py_XDECREF(funcstr); Py_XDECREF(cls); Py_XDECREF(clsstr); Py_XDECREF(mod); Py_XDECREF(modstr); /* keep the return value */ return newHandle(retval); }
/*--------------------------------------------------------------------------*/ int sci_is_handle_valid(char *fname, unsigned long fname_len) { /* Call isValid = is_handle_valid(h) with h a matrix of handle */ /* and isValid a matrix of boolean */ int nbCol = 0; int nbRow = 0; int nbHandle = 0; int handleStackPointer = 0; int resultStackPointer = 0; int i = 0; CheckRhs(1, 1); CheckLhs(0, 1); /* Get handles matrix */ if (VarType(1) != sci_handles) { Scierror(999, _("%s: Wrong type for input argument #%d: Matrix of handle expected.\n"), fname, 1); return -1; } GetRhsVar(1, (char *)GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &handleStackPointer); nbHandle = nbRow * nbCol; /* create output matrix */ CreateVar(Rhs + 1, (char *)MATRIX_OF_BOOLEAN_DATATYPE, &nbRow, &nbCol, &resultStackPointer); /* Check each handle */ for (i = 0; i < nbHandle; i++) { *istk(resultStackPointer + i) = ((getObjectFromHandle((long)getHandleFromStack((size_t)(handleStackPointer + i))) != NULL) ? TRUE : FALSE); } LhsVar(1) = Rhs + 1; PutLhsVar(); return 0; }
/*--------------------------------------------------------------------------*/ int sci_delete(char *fname, unsigned long fname_len) { SciErr sciErr; int* piAddrl1 = NULL; long long* l1 = NULL; int* piAddrl2 = NULL; char* l2 = NULL; int m1 = 0, n1 = 0, lw = 0; unsigned long hdl = 0; int nb_handles = 0, i = 0, dont_overload = 0; int iObjUID = 0; int iFigureUID = 0; int* piChildrenUID = NULL; int iChildrenCount = 0; int* childrencount = &iChildrenCount; int iHidden = 0; int *piHidden = &iHidden; int iParentUID = 0; int* piParentUID = &iParentUID; int iParentType = -1; int *piParentType = &iParentType; int iObjType = -1; int *piObjType = &iObjType; CheckInputArgument(pvApiCtx, 0, 1); CheckOutputArgument(pvApiCtx, 0, 1); if (nbInputArgument(pvApiCtx) == 0) /* Delete current object */ { iObjUID = getCurrentObject(); if (iObjUID == 0) { //No current object, we can leave AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } hdl = (unsigned long)getHandle(iObjUID); dont_overload = 1; nb_handles = 1; } else { sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } switch (getInputArgumentType(pvApiCtx, 1)) { case sci_matrix: { if (isEmptyMatrix(pvApiCtx, piAddrl1)) { AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 1; } else { Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } break; } case sci_handles: /* delete Entity given by a handle */ // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrl1, &m1, &n1, &l1); /* Gets the Handle passed as argument */ if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } nb_handles = m1 * n1; if (nbInputArgument(pvApiCtx) == 2) { sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 2. if (getAllocatedSingleString(pvApiCtx, piAddrl2, &l2)) /* Gets the command name */ { Scierror(202, _("%s: Wrong type for argument #%d: A string expected.\n"), fname, 2); return 1; } } hdl = (unsigned long) * (l1); /* Puts the value of the Handle to hdl */ break; case sci_strings: /* delete("all") */ CheckInputArgument(pvApiCtx, 1, 1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. if (getAllocatedSingleString(pvApiCtx, piAddrl2, &l2)) { Scierror(202, _("%s: Wrong type for argument #%d: A string expected.\n"), fname, 1); return 1; } if (strcmp((l2), "all") == 0) { int i = 0; int iFigureNumber = sciGetNbFigure(); if (iFigureNumber == 0) { //no graphic windows, we can leave AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } iFigureUID = getCurrentFigure(); getGraphicObjectProperty(iFigureUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&childrencount); getGraphicObjectProperty(iFigureUID, __GO_CHILDREN__, jni_int_vector, (void **)&piChildrenUID); for (i = 0; i < childrencount[0]; ++i) { getGraphicObjectProperty(piChildrenUID[i], __GO_HIDDEN__, jni_bool, (void **)&piHidden); if (iHidden == 0) { deleteGraphicObject(piChildrenUID[i]); } } /* * Clone a new Axes object using the Axes model which is then * attached to the 'cleaned' Figure. */ cloneAxesModel(iFigureUID); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } else { Scierror(999, _("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 1, "all"); return 0; } break; default: // Overload lw = 1 + nbArgumentOnStack(pvApiCtx) - nbInputArgument(pvApiCtx); C2F(overload) (&lw, "delete", 6); return 0; } } for (i = 0; i < nb_handles; i++) { int iTemp = 0; if (nbInputArgument(pvApiCtx) != 0) { hdl = (unsigned long) * (l1 + i); /* Puts the value of the Handle to hdl */ } iObjUID = getObjectFromHandle(hdl); if (iObjUID == 0) { Scierror(999, _("%s: The handle is not valid.\n"), fname); return 0; } if (isFigureModel(iObjUID) || isAxesModel(iObjUID)) { Scierror(999, _("This object cannot be deleted.\n")); return 0; } /* Object type */ getGraphicObjectProperty(iObjUID, __GO_TYPE__, jni_int, (void **)&piObjType); if (iObjType == __GO_AXES__) { /* Parent object */ iParentUID = getParentObject(iObjUID); /* Parent type */ getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType); } if (iObjType == __GO_LABEL__) { Scierror(999, _("A Label object cannot be deleted.\n")); return 0; } //bug #11485 : duplicate pobjUID before delete it. iTemp = iObjUID; deleteGraphicObject(iObjUID); /* ** All figure must have at least one axe child. ** If the last one is removed, add a new default one. */ if (iObjType == __GO_AXES__ && iParentType == __GO_FIGURE__) { int iChild = 0; int iChildCount = 0; int *piChildCount = &iChildCount; char **pstChildren = NULL; int iChildType = -1; int *piChildType = &iChildType; int iAxesFound = 0; int iDefaultAxes = -1; int *piDefaultAxes = &iDefaultAxes; getGraphicObjectProperty(iParentUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&piChildCount); getGraphicObjectProperty(iParentUID, __GO_CHILDREN__, jni_int_vector, (void **)&piChildrenUID); getGraphicObjectProperty(iParentUID, __GO_DEFAULT_AXES__, jni_bool, (void **)&piDefaultAxes); for (iChild = 0; iChild < iChildCount; iChild++) { getGraphicObjectProperty(piChildrenUID[iChild], __GO_TYPE__, jni_int, (void **)&piChildType); if (iChildType == __GO_AXES__) { if (getCurrentSubWin() == iTemp) // Current axes has been deleted { setCurrentSubWin(piChildrenUID[iChild]); } iAxesFound = 1; break; } } if (!iAxesFound && iDefaultAxes != 0) { /* * Clone a new Axes object using the Axes model which is then * attached to the newly created Figure. */ cloneAxesModel(iParentUID); } } } if (!dont_overload) { // Overload lw = 1 + nbArgumentOnStack(pvApiCtx) - nbInputArgument(pvApiCtx); C2F(overload) (&lw, "delete", 6); } else { AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); } if (l2) { freeAllocatedSingleString(l2); } return 0; }
/*-------------------------------------------------------------------------- * sciset(choice-name,x1,x2,x3,x4,x5) * or xset() *-----------------------------------------------------------*/ int sci_set(char *fname, void *pvApiCtx) { SciErr sciErr; int i = 0; int* piAddr1 = NULL; int isMatrixOfString = 0; char* pstNewProperty = NULL; unsigned long hdl; int iObjUID = 0; int iType = 0; int* piType = &iType; int iSetProperty = 0; int iRhs = nbInputArgument(pvApiCtx); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1); if (sciErr.iErr) { Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1); return 1; } if (isMListType(pvApiCtx, piAddr1) || isTListType(pvApiCtx, piAddr1)) { OverLoad(1); return 0; } CheckInputArgumentAtLeast(pvApiCtx, 2); CheckOutputArgument(pvApiCtx, 0, 1); if (isDoubleType(pvApiCtx, piAddr1)) /* tclsci handle */ { /* call "set" for tcl/tk see tclsci/sci_gateway/c/sci_set.c */ OverLoad(1); return 0; } if (iRhs == 2) { #define NB_PROPERTIES_SUPPORTED 7 /* No object specified */ /* ONLY supported properties are */ /* 'current_entity' */ /* 'hdl' */ /* 'current_figure' */ /* 'current_axes' */ /* 'default_values' */ /* 'figure_style' for compatibility but do nothing */ /* others values must return a error */ char *propertiesSupported[NB_PROPERTIES_SUPPORTED] = { "current_entity", "hdl", "current_figure", "current_axes", "figure_style", "default_values", "auto_clear" }; int iPropertyFound = 0; int* piAddr2 = NULL; int iType2 = 0; int iRows2 = 0; int iCols2 = 0; void* pvData = NULL; char* pstProperty = NULL; if (isStringType(pvApiCtx, piAddr1) == 0) { Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, 1); return 0; } if (getAllocatedSingleString(pvApiCtx, piAddr1, &pstProperty)) { Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, 1); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr2); if (sciErr.iErr) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2); return 1; } sciErr = getVarType(pvApiCtx, piAddr2, &iType2); if (sciErr.iErr) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2); return 1; } switch (iType2) { case sci_matrix: sciErr = getMatrixOfDouble(pvApiCtx, piAddr2, &iRows2, &iCols2, (double**)&pvData); if (sciErr.iErr) { freeAllocatedSingleString(pstProperty); printError(&sciErr, 0); Scierror(999, _("%s: Wrong type for input argument #%d: Matrix expected.\n"), fname, 2); return sciErr.iErr; } break; case sci_handles : sciErr = getMatrixOfHandle(pvApiCtx, piAddr2, &iRows2, &iCols2, (long long**)&pvData); if (sciErr.iErr) { freeAllocatedSingleString(pstProperty); printError(&sciErr, 0); Scierror(999, _("%s: Wrong type for input argument #%d: Matrix of handle expected.\n"), fname, 3); return 1; } break; case sci_strings : if (strcmp(pstProperty, "tics_labels") == 0 || strcmp(pstProperty, "auto_ticks") == 0 || strcmp(pstProperty, "axes_visible") == 0 || strcmp(pstProperty, "axes_reverse") == 0 || strcmp(pstProperty, "text") == 0 || strcmp(pstProperty, "ticks_format") == 0) { isMatrixOfString = 1; if (getAllocatedMatrixOfString(pvApiCtx, piAddr2, &iRows2, &iCols2, (char***)&pvData)) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Wrong size for input argument #%d: A matrix of string expected.\n"), fname, 2); return 1; } } else { if (getAllocatedSingleString(pvApiCtx, piAddr2, (char**)&pvData)) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, 2); return 1; } iRows2 = (int)strlen((char*)pvData); iCols2 = 1; isMatrixOfString = 0; } break; } for (i = 0; i < NB_PROPERTIES_SUPPORTED; i++) { if (strcmp(propertiesSupported[i], pstProperty) == 0) { iPropertyFound = 1; } } if (iPropertyFound) { callSetProperty(pvApiCtx, 0, pvData, iType2, iRows2, iCols2, pstProperty); if (iType2 == sci_strings) { //free allocated data if (isMatrixOfString == 1) { freeAllocatedMatrixOfString(iRows2, iCols2, (char**)pvData); } else { freeAllocatedSingleString((char*)pvData); } } } else { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Wrong value for input argument #%d: a valid property expected.\n"), fname, 1); if (iType2 == sci_strings) { if (isMatrixOfString == 1) { freeAllocatedMatrixOfString(iRows2, iCols2, (char**)pvData); } else { freeAllocatedSingleString((char*)pvData); } } return 0; } freeAllocatedSingleString(pstProperty); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } if (iRhs % 2 != 1) { Scierror(999, _("%s: Wrong number of input argument(s) : an odd number is expected.\n"), fname); return 0; } /* after the call to sciSet get the status : 0 <=> OK, */ /* -1 <=> Error, */ /* 1 <=> nothing done */ /* set or create a graphic window */ if (isHandleType(pvApiCtx, piAddr1) == 0 && isStringType(pvApiCtx, piAddr1) == 0) { Scierror(999, _("%s: Wrong type for input argument #%d: A handle or a string expected.\n"), fname, 1); return 0; } if (isStringType(pvApiCtx, piAddr1)) { char* pstPath = NULL; if (getAllocatedSingleString(pvApiCtx, piAddr1, &pstPath)) { Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, 1); return 1; } iObjUID = search_path(pstPath); if (iObjUID == 0) { Scierror(999, _("%s: Unable to find handle for path %s.\n"), fname, pstPath); freeAllocatedSingleString(pstPath); return 1; } } else { //matrix of handle are managed by a %h_set if (isScalar(pvApiCtx, piAddr1) == FALSE) { OverLoad(1); return 0; } if (getScalarHandle(pvApiCtx, piAddr1, (long long*)&hdl)) { Scierror(999, _("%s: Wrong size for input argument #%d: A single handle expected.\n"), fname, 1); return 1; } iObjUID = getObjectFromHandle(hdl); } if (iObjUID == 0) { Scierror(999, _("%s: The handle is not or no more valid.\n"), fname); return 0; } for (i = 1 ; i < iRhs ; i = i + 2) { int setStatus = 0; int* piAddr2 = NULL; int* piAddr3 = NULL; int iPos = i + 1; int isData = 0; int iRows3 = 0; int iCols3 = 0; int iType3 = 0; void* pvData = NULL; char* pstProperty = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, iPos, &piAddr2); if (sciErr.iErr) { Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos); return 1; } if (isStringType(pvApiCtx, piAddr2) == 0) { Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, iPos); return 0; } if (getAllocatedSingleString(pvApiCtx, piAddr2, &pstProperty)) { Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, iPos); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, iPos + 1, &piAddr3); if (sciErr.iErr) { Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1); return 1; } if ((pstProperty[0] == 'd' || pstProperty[0] == 'D') && stricmp("data", pstProperty) == 0) { //send to datamodel isData = 1; } if (stricmp(pstProperty, "user_data") == 0 || stricmp(pstProperty, "userdata") == 0 || stricmp(pstProperty, "display_function_data") == 0 || stricmp(pstProperty, "data") == 0) { /* in this case set_user_data_property * directly uses the third position in the stack * to get the variable which is to be set in * the user_data property (any data type is allowed) S. Steer */ pvData = (void*)piAddr3; /*position in the stack */ iRows3 = -1; /*unused */ iCols3 = -1; /*unused */ iType3 = -1; } else { sciErr = getVarType(pvApiCtx, piAddr3, &iType3); if (sciErr.iErr) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1); return 1; } switch (iType3) { case sci_matrix : sciErr = getMatrixOfDouble(pvApiCtx, piAddr3, &iRows3, &iCols3, (double**)&pvData); break; case sci_boolean : sciErr = getMatrixOfBoolean(pvApiCtx, piAddr3, &iRows3, &iCols3, (int**)&pvData); break; case sci_handles : sciErr = getMatrixOfHandle(pvApiCtx, piAddr3, &iRows3, &iCols3, (long long**)&pvData); break; case sci_strings : if (strcmp(pstProperty, "tics_labels") != 0 && strcmp(pstProperty, "auto_ticks") != 0 && strcmp(pstProperty, "tight_limits") != 0 && strcmp(pstProperty, "axes_visible") != 0 && strcmp(pstProperty, "axes_reverse") != 0 && strcmp(pstProperty, "text") != 0 && stricmp(pstProperty, "string") != 0 && stricmp(pstProperty, "tooltipstring") != 0 && stricmp(pstProperty, "ticks_format") != 0) /* Added for uicontrols */ { if (isScalar(pvApiCtx, piAddr3) == 0) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Wrong size for input argument #%d: A single string expected.\n"), fname, iPos + 1); return 1; } if (getAllocatedSingleString(pvApiCtx, piAddr3, (char**)&pvData)) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1); return 1; } iRows3 = (int)strlen((char*)pvData); iCols3 = 1; isMatrixOfString = 0; } else { isMatrixOfString = 1; getAllocatedMatrixOfString(pvApiCtx, piAddr3, &iRows3, &iCols3, (char***)&pvData); } break; case sci_list : iCols3 = 1; sciErr = getListItemNumber(pvApiCtx, piAddr3, &iRows3); pvData = (void*)piAddr3; /* In this case l3 is the list position in stack */ break; default : pvData = (void*)piAddr3; /* In this case l3 is the list position in stack */ break; } if (sciErr.iErr) { freeAllocatedSingleString(pstProperty); Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, iPos + 1); return 1; } } setStatus = callSetProperty(pvApiCtx, iObjUID, pvData, iType3, iRows3, iCols3, pstProperty); if (iType3 == sci_strings) { //free allacted data if (isMatrixOfString == 1) { freeAllocatedMatrixOfString(iRows3, iCols3, (char**)pvData); } else { freeAllocatedSingleString((char*)pvData); } } freeAllocatedSingleString(pstProperty); } AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*--------------------------------------------------------------------------*/ int sci_xrects(char *fname, void *pvApiCtx) { SciErr sciErr; int* piAddrl1 = NULL; double* l1 = NULL; int* piAddr2 = NULL; int* l2 = NULL; int m1 = 0, n1 = 0, m2 = 0, n2 = 0; long hdl = 0; int i = 0; int iSubwinUID = 0; int foreground = 0; int *piForeground = &foreground; int iCompoundUID = 0; CheckInputArgument(pvApiCtx, 1, 2); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl1, &m1, &n1, &l1); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 1); return 1; } if (m1 != 4) { Scierror(999, _("%s: Wrong size for input argument #%d: %s expected.\n"), fname, 1, "(4,n)"); return 0; } if (nbInputArgument(pvApiCtx) == 2) { sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 2. sciErr = getMatrixOfDoubleAsInteger(pvApiCtx, piAddr2, &m2, &n2, &l2); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 2); return 1; } //CheckVector if (m2 != 1 && n2 != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 2); return 1; } if (m2 * n2 != n1) { Scierror(999, _("%s: Incompatible length for input arguments #%d and #%d.\n"), fname, 1, 2); return 0; } } else { m2 = 1; n2 = n1; sciErr = allocMatrixOfDoubleAsInteger(pvApiCtx, 2, m2, n2, &l2); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } for (i = 0; i < n2; ++i) { l2[i] = 0; } } iSubwinUID = getOrCreateDefaultSubwin(); // Create compound. iCompoundUID = createGraphicObject(__GO_COMPOUND__); /* Sets the parent-child relationship for the Compound */ setGraphicObjectRelationship(iSubwinUID, iCompoundUID); /** Get Subwin line color */ getGraphicObjectProperty(iSubwinUID, __GO_LINE_COLOR__, jni_int, (void**)&piForeground); for (i = 0; i < n1; ++i) { /* j = (i==0) ? 0 : 1; */ if (l2[i] == 0) { /** fil(i) = 0 rectangle i is drawn using the current line style (or color).**/ /* color setting is done now */ Objrect((l1 + (4 * i)), (l1 + (4 * i) + 1), (l1 + (4 * i) + 2), (l1 + (4 * i) + 3), &foreground, NULL, FALSE, TRUE, &hdl); } else { if (l2[i] < 0) { /** fil(i) < 0 rectangle i is drawn using the line style (or color) **/ int tmp = - (*(int*)(l2 + i)); Objrect((l1 + (4 * i)), (l1 + (4 * i) + 1), (l1 + (4 * i) + 2), (l1 + (4 * i) + 3), &tmp, NULL, FALSE, TRUE, &hdl); } else { /** fil(i) > 0 rectangle i is filled using the pattern (or color) **/ Objrect((l1 + (4 * i)), (l1 + (4 * i) + 1), (l1 + (4 * i) + 2), (l1 + (4 * i) + 3), NULL, l2 + i, TRUE, FALSE, &hdl); } } // Add newly created object to Compound setGraphicObjectRelationship(iCompoundUID, getObjectFromHandle(hdl)); } /** make Compound current object **/ setCurrentObject(iCompoundUID); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*--------------------------------------------------------------------------*/ int sci_glue( char * fname, unsigned long fname_len ) { int numrow,numcol,l1,l2,lind,n,cx1=1; unsigned long hdl = 0, parenthdl = 0 ; long *handelsvalue = NULL ; int outindex,i; char *pstCompoundUID = NULL; char *pstParentUID = NULL; char *pstCurrentParentUID = NULL; char *pobjUID = NULL; CheckRhs(1,1); CheckLhs(0,1); /* set or create a graphic window */ GetRhsVar(1,GRAPHICAL_HANDLE_DATATYPE,&numrow,&numcol,&l1); /* We get the scalar value if it is ones */ n=numrow*numcol; CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&numrow,&numcol,&l2); CreateVar(Rhs+2,MATRIX_OF_INTEGER_DATATYPE,&numrow,&numcol,&lind); if (n>1) { C2F(dcopy)(&n, stk(l1), &cx1, stk(l2), &cx1); C2F(dsort)(stk(l2),&n,istk(lind)); for (i = 1; i < n;i++) { long long i1 = (long long)*hstk(l2+i); long long i2 = (long long)*hstk(l2+i-1); if (i1 == i2) { Scierror(999,_("%s: Each handle should not appear twice.\n"),fname); return 0; } } } /* we must change the pobj to the Compound type */ handelsvalue = MALLOC(n*sizeof(long)); for (i = 0 ; i < n ; i++) { handelsvalue[i] = (unsigned long) (hstk(l1))[i]; pobjUID = getObjectFromHandle(handelsvalue[i]); if (pobjUID == NULL) { FREE(handelsvalue); Scierror(999,_("%s: The handle is not or no more valid.\n"),fname); return 0; } getGraphicObjectProperty(pobjUID, __GO_PARENT__, jni_string, &pstCurrentParentUID); if (i == 0) { pstParentUID = pstCurrentParentUID; } if (strcmp(pstParentUID, pstCurrentParentUID) != 0) { FREE(handelsvalue); Scierror(999,_("%s: Objects must have the same parent.\n"),fname); return 0; } } //ret = CheckForCompound (handelsvalue, n); //if (ret>0) //{ // MEM LEAK // Scierror(999,_("%s: Handle %d cannot be glued (invalid parent).\n"),fname,ret); // return 0; //} //if (ret<0) //{ // MEM LEAK // Scierror(999,_("%s: Handle %d cannot be glued (invalid type).\n"),fname,-ret); // return 0; //} pstCompoundUID = ConstructCompound(handelsvalue, n); setCurrentObject(pstCompoundUID); numrow = 1; numcol = 1; CreateVar(Rhs+3,GRAPHICAL_HANDLE_DATATYPE,&numrow,&numcol,&outindex); hstk(outindex)[0] = getHandle(pstCompoundUID); LhsVar(1) = Rhs+3; PutLhsVar(); FREE(handelsvalue); return 0; }
/*--------------------------------------------------------------------------*/ int sci_xpoly(char * fname, unsigned long fname_len) { SciErr sciErr; int* piAddrl1 = NULL; double* l1 = NULL; int* piAddrl2 = NULL; double* l2 = NULL; int* piAddrl3 = NULL; char* l3 = NULL; int* piAddrl4 = NULL; double* l4 = NULL; char *psubwinUID = NULL; char* pobjUID = NULL; int m1 = 0, n1 = 0, m2 = 0 , n2 = 0, m4 = 0, n4 = 0, close = 0, mn2 = 0; long hdl = 0;/* NG */ int mark = 0;/* NG */ int markMode = 0; int lineMode = 0; int foreground = 0; int iTmp = 0; int* piTmp = &iTmp; CheckInputArgument(pvApiCtx, 2, 4); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl1, &m1, &n1, &l1); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 2. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl2, &m2, &n2, &l2); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 2); return 1; } //CheckSameDims if (m1 != m2 || n1 != n2) { Scierror(999, _("%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n"), fname, 1, m1, n1); return 1; } mn2 = m2 * n2; if (nbInputArgument(pvApiCtx) >= 3) { sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddrl3); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 3. if (getAllocatedSingleString(pvApiCtx, piAddrl3, &l3)) { Scierror(202, _("%s: Wrong type for argument #%d: A string expected.\n"), fname, 3); return 1; } if (strcmp((l3), "lines") == 0) { strcpy(C2F(cha1).buf, "xlines"); mark = 1; /* NG */ } else if (strcmp((l3), "marks") == 0) { strcpy(C2F(cha1).buf, "xmarks"); mark = 0; /* NG */ } else { Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 3, "lines", "marks"); return 0; } } else { strcpy(C2F(cha1).buf, "xlines"); mark = 1; /* NG */ } if (nbInputArgument(pvApiCtx) >= 4) { sciErr = getVarAddressFromPosition(pvApiCtx, 4, &piAddrl4); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 4. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl4, &m4, &n4, &l4); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 4); return 1; } //CheckScalar if (m4 != 1 || n4 != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real scalar expected.\n"), fname, 4); return 1; } close = (int) * (l4); } /* NG beg */ psubwinUID = (char*)getOrCreateDefaultSubwin(); Objpoly ((l1), (l2), mn2, close, mark, &hdl); pobjUID = (char*)getObjectFromHandle(hdl); /* the polyline newly created */ setGraphicObjectRelationship(psubwinUID, pobjUID); /* * The contour properties set calls below were * already present and have been updated for the MVC. */ if (mark == 0) { /* marks are enabled but markstyle & foreground is determined by parents' markstyle & foreground */ markMode = 1; lineMode = 0; getGraphicObjectProperty(psubwinUID, __GO_MARK_STYLE__, jni_int, (void**)&piTmp); setGraphicObjectProperty(pobjUID, __GO_MARK_STYLE__, piTmp, jni_int, 1); } else { markMode = 0; lineMode = 1; getGraphicObjectProperty(psubwinUID, __GO_LINE_STYLE__, jni_int, (void**)&piTmp); sciSetLineStyle(pobjUID, iTmp); } getGraphicObjectProperty(psubwinUID, __GO_LINE_COLOR__, jni_int, (void**)&piTmp); foreground = iTmp; setGraphicObjectProperty(pobjUID, __GO_LINE_COLOR__, &foreground, jni_int, 1); setGraphicObjectProperty(pobjUID, __GO_MARK_MODE__, &markMode, jni_bool, 1); setGraphicObjectProperty(pobjUID, __GO_LINE_MODE__, &lineMode, jni_bool, 1); /* NG end */ AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); freeAllocatedSingleString(l3); return 0; }
/*--------------------------------------------------------------------------*/ int sci_uicontrol(char *fname, void* pvApiCtx) { SciErr sciErr; int nbRow = 0, nbCol = 0, k = 0; int setStatus = SET_PROPERTY_SUCCEED; int PARENT_NOT_FOUND = -2; int NOT_FOUND = -1; int inputIndex = 0, beginIndex = 0; char *propertyName = NULL; char *styleProperty = NULL; int iPropertiesCount = sizeof(propertiesNames) / sizeof(char**); unsigned long GraphicHandle = 0; int found = 0; /* Does the property exists ? */ int *propertiesValuesIndices = NULL; int iParentType = -1; int *piParentType = &iParentType; int iParentStyle = -1; int *piParentStyle = &iParentStyle; int iParentUID = 0; int iUicontrol = 0; int iCurrentFigure = 0; CheckOutputArgument(pvApiCtx, 0, 1); //init properties index init_property_index(); if (nbInputArgument(pvApiCtx) == 0) { /* Create a pushbutton in current figure */ /* Create a new pushbutton */ GraphicHandle = getHandle(CreateUIControl(NULL)); /* Set current figure as parent */ iCurrentFigure = getCurrentFigure(); if (iCurrentFigure == 0) { iCurrentFigure = createNewFigureWithAxes(); } iUicontrol = getObjectFromHandle(GraphicHandle); setGraphicObjectRelationship(iCurrentFigure, iUicontrol); } else if (nbInputArgument(pvApiCtx) == 1) { /* Create a pushbutton in figure given as parameter */ /* Or give focus to the uicontrol given as parameter */ int* piAddr = NULL; int iType = 0; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if (sciErr.iErr) { Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1); return 0; } if (isHandleType(pvApiCtx, piAddr) == FALSE && isStringType(pvApiCtx, piAddr) == FALSE) { OverLoad(1); return FALSE; } #if 0 // Allow XML loading else if (isStringType(pvApiCtx, piAddr)) { char* pstXmlfile = NULL; char* pstExpandedPath = NULL; if (isScalar(pvApiCtx, piAddr) == 0) { Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, 1); return FALSE; } if (getAllocatedSingleString(pvApiCtx, piAddr, &pstXmlfile)) { freeAllocatedSingleString(pstXmlfile); Scierror(999, _("%s: No more memory.\n"), fname); return FALSE; } pstExpandedPath = expandPathVariable(pstXmlfile); freeAllocatedSingleString(pstXmlfile); iUicontrol = xmlload(pstExpandedPath); if (iUicontrol < 1) { Scierror(999, _("%s: can not read file %s.\n"), fname, pstExpandedPath); FREE(pstExpandedPath); return 0; } FREE(pstExpandedPath); GraphicHandle = getHandle(iUicontrol); /* Create return variable */ if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, GraphicHandle)) { Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; ReturnArguments(pvApiCtx); return TRUE; } #endif // Allow XML loading else /* Get parent ID */ { int* piAddr = NULL; long long hParent = 0; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (isScalar(pvApiCtx, piAddr) == 0) { Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1); return FALSE; } if (getScalarHandle(pvApiCtx, piAddr, &hParent)) { Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } iParentUID = getObjectFromHandle((long)hParent); if (iParentUID != 0) { getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType); if (iParentType == __GO_UICONTROL__) /* Focus management */ { GraphicHandle = (unsigned long)hParent; requestFocus(iParentUID); } else if (iParentType == __GO_FIGURE__ || iParentType == __GO_UIMENU__) /* PushButton creation */ { /* Create a new pushbutton */ GraphicHandle = getHandle(CreateUIControl(NULL)); iUicontrol = getObjectFromHandle(GraphicHandle); /* First parameter is the parent */ setGraphicObjectRelationship(iParentUID, iUicontrol); setStatus = callSetProperty(pvApiCtx, iUicontrol, &hParent, sci_handles, 1, 1, (char*)propertiesNames[parent_property]); if (setStatus == SET_PROPERTY_ERROR) { Scierror(999, _("%s: Could not set property '%s'.\n"), fname, propertyName); return FALSE; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s', '%s' or '%s' handle expected.\n"), fname, 1, "Uicontrol", "Figure", "Uimenu"); return FALSE; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s', '%s' or '%s' handle expected.\n"), fname, 1, "Uicontrol", "Figure", "Uimenu"); return FALSE; } } } else { if (!checkInputArgumentType(pvApiCtx, 1, sci_handles) && !checkInputArgumentType(pvApiCtx, 1, sci_strings)) { OverLoad(1); return FALSE; } /* Allocate memory to store the position of properties in uicontrol call */ if ((propertiesValuesIndices = (int*)MALLOC(sizeof(int) * iPropertiesCount)) == NULL) { Scierror(999, _("%s: No more memory.\n"), fname); return FALSE; } /* Init all positions to NOT_FOUND */ for (inputIndex = 0; inputIndex < iPropertiesCount; inputIndex++) { propertiesValuesIndices[inputIndex] = NOT_FOUND; /* Property initialized as not found */ } /** * Odd number of input arguments * First input is the parent ID * All event inputs are property names * All odd (except first) inputs are property values */ if (nbInputArgument(pvApiCtx) % 2 == 1) { if ((!checkInputArgumentType(pvApiCtx, 1, sci_handles))) { if ((checkInputArgumentType(pvApiCtx, 1, sci_matrix))) { int* piAddr = NULL; double dblValue = 0; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (isScalar(pvApiCtx, piAddr) == 0) { Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1); return FALSE; } if (getScalarDouble(pvApiCtx, piAddr, &dblValue)) { Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 1); return 1; } iParentUID = getFigureFromIndex((int)dblValue); } else { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or a '%s' handle expected.\n"), fname, 1, "Figure", "Frame uicontrol"); return FALSE; } } else /* Get parent ID */ { int* piAddr = NULL; long long hParent = 0; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (isScalar(pvApiCtx, piAddr) == 0) { Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' or a '%s' handle expected.\n"), fname, 1, "Figure", "Frame uicontrol"); return FALSE; } if (getScalarHandle(pvApiCtx, piAddr, &hParent)) { Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } iParentUID = getObjectFromHandle((long)hParent); } if (iParentUID == 0) { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or a '%s' handle expected.\n"), fname, 1, "Figure", "Frame uicontrol"); return FALSE; } getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType); if (iParentType != __GO_FIGURE__) { getGraphicObjectProperty(iParentUID, __GO_STYLE__, jni_int, (void **)&piParentStyle); if (iParentType != __GO_UICONTROL__ || (iParentStyle != __GO_UI_FRAME__ && iParentStyle != __GO_UI_TAB__ && iParentStyle != __GO_UI_LAYER__)) { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or a '%s' handle expected.\n"), fname, 1, "Figure", "Frame uicontrol"); return FALSE; } } /* First parameter is the parent */ propertiesValuesIndices[parent_property] = 1; // First input parameter which is a property name beginIndex = 2; } /** * Even number of input arguments * All odd inputs are property names * All even inputs are property values */ else { // First input parameter which is a property name beginIndex = 1; } /* Get all properties positions */ for (inputIndex = beginIndex; inputIndex < Rhs; inputIndex = inputIndex + 2) { /* Read property name */ if ((!checkInputArgumentType(pvApiCtx, inputIndex, sci_strings))) { Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, inputIndex); return FALSE; } else { int* piAddr = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, inputIndex, &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (getAllocatedSingleString(pvApiCtx, piAddr, &propertyName)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, inputIndex); return 1; } /* Bug 3031 */ /* We only want to compare propertyName along its length */ /* 'posi' must be matched to 'position' */ found = 0; for (k = 0; k < iPropertiesCount ; k++) { if (strlen(propertyName) <= strlen(propertiesNames[k])) { if (strnicmp(propertyName, propertiesNames[k], strlen(propertyName)) == 0) { propertiesValuesIndices[k] = inputIndex + 1; /* Position of value for property */ found = 1; break; } } } freeAllocatedSingleString(propertyName); if (found == 0) { Scierror(999, _("%s: Unknown property: %s for '%s' handles.\n"), fname, propertyName, "Uicontrol"); return FALSE; } } } if (propertiesValuesIndices[style_property] != NOT_FOUND) /* Style found */ { if ((checkInputArgumentType(pvApiCtx, propertiesValuesIndices[style_property], sci_strings))) { int* piAddr = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, propertiesValuesIndices[style_property], &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (getAllocatedSingleString(pvApiCtx, piAddr, &styleProperty)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[style_property]); return 1; } if (strcmp(styleProperty, "frame") == 0) { //check scrollable property to create a scroll frame instead of normal frame if (propertiesValuesIndices[scrollable_property] != NOT_FOUND) { char* pstScroll = NULL; int iScroll = 0; sciErr = getVarAddressFromPosition(pvApiCtx, propertiesValuesIndices[scrollable_property], &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (isStringType(pvApiCtx, piAddr) == 0 && isBooleanType(pvApiCtx, piAddr) == 0 && isScalar(pvApiCtx, piAddr) == 0) { Scierror(202, _("%s: Wrong type for argument #%d: string or boolean expected.\n"), fname, propertiesValuesIndices[scrollable_property]); return 1; } if (isStringType(pvApiCtx, piAddr)) { if (getAllocatedSingleString(pvApiCtx, piAddr, &pstScroll)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[scrollable_property]); return 1; } if (strcmp(pstScroll, "on") == 0) { iScroll = 1; } freeAllocatedSingleString(pstScroll); } else { if (getScalarBoolean(pvApiCtx, piAddr, &iScroll)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[scrollable_property]); return 1; } } if (iScroll) { freeAllocatedSingleString(styleProperty); styleProperty = os_strdup("framescrollable"); } propertiesValuesIndices[scrollable_property] = NOT_FOUND; } } } else { Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, propertiesValuesIndices[style_property]); return FALSE; } } /* Create a new uicontrol */ iUicontrol = CreateUIControl(styleProperty); freeAllocatedSingleString(styleProperty); if (iUicontrol == 0) /* Error in creation */ { Scierror(999, _("%s: Could not create 'Uicontrol' handle.\n"), fname); return FALSE; } GraphicHandle = getHandle(iUicontrol); /* If no parent given then the current figure is the parent */ if (propertiesValuesIndices[parent_property] == NOT_FOUND) { /* Set the parent */ iCurrentFigure = getCurrentFigure(); if (iCurrentFigure == 0) { iCurrentFigure = createNewFigureWithAxes(); } propertiesValuesIndices[parent_property] = PARENT_NOT_FOUND; } /* Read and set all properties */ for (inputIndex = 1; inputIndex < iPropertiesCount; inputIndex++) /* Style has already been set */ { if (propertiesValuesIndices[inputIndex] == PARENT_NOT_FOUND) { //special case for not specified parent //but set relationship at the good moment. setGraphicObjectRelationship(iCurrentFigure, iUicontrol); } else if (propertiesValuesIndices[inputIndex] != NOT_FOUND) { int* piAddr = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, propertiesValuesIndices[inputIndex], &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (inputIndex == user_data_property || inputIndex == userdata_property) /* User data settings */ { nbRow = -1; nbCol = -1; setStatus = callSetProperty(pvApiCtx, iUicontrol, piAddr, 0, 0, 0, (char*)propertiesNames[inputIndex]); } else /* All other properties */ { /* Read property value */ switch (getInputArgumentType(pvApiCtx, propertiesValuesIndices[inputIndex])) { case sci_matrix: { double* pdblValue = NULL; sciErr = getMatrixOfDouble(pvApiCtx, piAddr, &nbRow, &nbCol, &pdblValue); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, propertiesValuesIndices[inputIndex]); return 1; } setStatus = callSetProperty(pvApiCtx, iUicontrol, pdblValue, sci_matrix, nbRow, nbCol, (char*)propertiesNames[inputIndex]); break; } case sci_strings: /* Index for String & TooltipString properties: Can be more than one character string */ if ((inputIndex == string_property) || (inputIndex == tooltipstring_property)) { char** pstValue = NULL; if (getAllocatedMatrixOfString(pvApiCtx, piAddr, &nbRow, &nbCol, &pstValue)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[inputIndex]); return 1; } setStatus = callSetProperty(pvApiCtx, iUicontrol, pstValue, sci_strings, nbRow, nbCol, (char*)propertiesNames[inputIndex]); freeAllocatedMatrixOfString(nbRow, nbCol, pstValue); } else { char* pstValue = NULL; if (getAllocatedSingleString(pvApiCtx, piAddr, &pstValue)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, propertiesValuesIndices[inputIndex]); return 1; } nbRow = (int)strlen(pstValue); nbCol = 1; setStatus = callSetProperty(pvApiCtx, iUicontrol, pstValue, sci_strings, nbRow, nbCol, (char*)propertiesNames[inputIndex]); freeAllocatedSingleString(pstValue); } break; case sci_handles: { long long* pHandles = NULL; sciErr = getMatrixOfHandle(pvApiCtx, piAddr, &nbRow, &nbCol, &pHandles); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, propertiesValuesIndices[inputIndex]); return 1; } setStatus = callSetProperty(pvApiCtx, iUicontrol, pHandles, sci_handles, nbRow, nbCol, (char*)propertiesNames[inputIndex]); break; } case sci_tlist: //constraints and border { setStatus = callSetProperty(pvApiCtx, iUicontrol, piAddr, sci_tlist, 1, 1, (char*)propertiesNames[inputIndex]); break; } default: setStatus = SET_PROPERTY_ERROR; break; } } if (setStatus == SET_PROPERTY_ERROR) { Scierror(999, _("%s: Could not set property '%s'.\n"), fname, (char*)propertiesNames[inputIndex]); return FALSE; } } } } if (propertiesValuesIndices != NULL && (propertiesValuesIndices[sliderstep_property] == NOT_FOUND && (propertiesValuesIndices[min_property] != NOT_FOUND || propertiesValuesIndices[max_property] != NOT_FOUND))) /* SliderStep property not set */ { /* Set SliderStep property to [1/100*(Max-Min) 1/10*(Max-Min)] */ double maxValue = 0; double* pdblMaxValue = &maxValue; double minValue = 0; double* pdblMinValue = &minValue; double pdblStep[2]; getGraphicObjectProperty(iUicontrol, __GO_UI_MIN__, jni_double, (void**) &pdblMinValue); getGraphicObjectProperty(iUicontrol, __GO_UI_MAX__, jni_double, (void**) &pdblMaxValue); pdblStep[0] = 0.01 * (maxValue - minValue); pdblStep[1] = 0.1 * (maxValue - minValue); setGraphicObjectProperty(iUicontrol, __GO_UI_SLIDERSTEP__, pdblStep, jni_double_vector, 2); } if ((nbInputArgument(pvApiCtx) < 2) || (propertiesValuesIndices[position_property] == NOT_FOUND)) /* Position property not set */ { double* pdblPosition = NULL; getGraphicObjectProperty(iUicontrol, __GO_POSITION__, jni_double_vector, (void**) &pdblPosition); setGraphicObjectProperty(iUicontrol, __GO_POSITION__, pdblPosition, jni_double_vector, 4); releaseGraphicObjectProperty(__GO_POSITION__, pdblPosition, jni_double_vector, 4); } if ((nbInputArgument(pvApiCtx) < 2) || (propertiesValuesIndices[visible_property] == NOT_FOUND)) /* Visible property not set */ { /* Force the uicontrol to be visible because is invisible by default in the model (See bug #10346) */ int b = (int)TRUE; setGraphicObjectProperty(iUicontrol, __GO_VISIBLE__, &b, jni_bool, 1); } FREE(propertiesValuesIndices); /* Create return variable */ if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, GraphicHandle)) { Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; ReturnArguments(pvApiCtx); return TRUE; }
/*--------------------------------------------------------------------------*/ int sci_swap_handles(char * fname, unsigned long fname_len) { SciErr sciErr; int* piAddrfirstHdlStkIndex = NULL; long long* firstHdlStkIndex = NULL; int* piAddrsecondHdlStkIndex = NULL; long long* secondHdlStkIndex = NULL; int firstHdlCol = 0; int firstHdlRow = 0; int secondHdlCol = 0; int secondHdlRow = 0; char *pstHandle_1 = NULL; char *pstHandle_2 = NULL; char *pstParent_1 = NULL; char *pstParent_2 = NULL; int iChildrenCount = 0; int *piChildrenCount = &iChildrenCount; char **pstChildrenUID = NULL; int i = 0; long h = 0; CheckInputArgument(pvApiCtx, 2, 2); CheckOutputArgument(pvApiCtx, 0, 1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrfirstHdlStkIndex); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrfirstHdlStkIndex, &firstHdlRow, &firstHdlCol, &firstHdlStkIndex); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrsecondHdlStkIndex); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of handle at position 2. sciErr = getMatrixOfHandle(pvApiCtx, piAddrsecondHdlStkIndex, &secondHdlRow, &secondHdlCol, &secondHdlStkIndex); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 2); return 1; } if (firstHdlRow * firstHdlCol != 1 || secondHdlRow * secondHdlCol != 1) { Scierror(999, _("%s: Routine can only swap two single handles.\n"), fname); return 0; } /* get the two handles and swap them */ h = (long) * (firstHdlStkIndex); pstHandle_1 = (char*)getObjectFromHandle(h); h = (long) * (secondHdlStkIndex); pstHandle_2 = (char*)getObjectFromHandle(h); getGraphicObjectProperty(pstHandle_1, __GO_PARENT__, jni_string, (void **)&pstParent_1); getGraphicObjectProperty(pstHandle_2, __GO_PARENT__, jni_string, (void **)&pstParent_2); // Check if objects do not have the same parent if (strcmp(pstParent_1, pstParent_2) == 0) { getGraphicObjectProperty(pstParent_1, __GO_CHILDREN_COUNT__, jni_int, (void **)&piChildrenCount); getGraphicObjectProperty(pstParent_1, __GO_CHILDREN__, jni_string_vector, (void **)&pstChildrenUID); for (i = 0 ; i < iChildrenCount ; ++i) { if (strcmp(pstChildrenUID[i], pstHandle_1) == 0) { pstChildrenUID[i] = pstHandle_2; } else if (strcmp(pstChildrenUID[i], pstHandle_2) == 0) { pstChildrenUID[i] = pstHandle_1; } } setGraphicObjectProperty(pstParent_1, __GO_CHILDREN__, pstChildrenUID, jni_string_vector, iChildrenCount); } else { setGraphicObjectRelationship(pstParent_1, pstHandle_2); setGraphicObjectRelationship(pstParent_2, pstHandle_1); } AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*------------------------------------------------------------------------*/ int set_links_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol ) { BOOL status = FALSE; int type = -1; int *piType = &type; char* parentAxes = NULL; char** links = NULL; int i = 0; int iLinksCount = 0; int* piLinksCount = &iLinksCount; if ( !( valueType == sci_handles ) ) { Scierror(999, _("Wrong type for '%s' property: Graphic handle array expected.\n"), "links"); return SET_PROPERTY_ERROR; } getGraphicObjectProperty(pobjUID, __GO_LINKS_COUNT__, jni_int, (void**)&piLinksCount); if (piLinksCount == NULL) { Scierror(999, _("'%s' property does not exist for this handle.\n"), "links"); return SET_PROPERTY_ERROR; } if (nbRow*nbCol != iLinksCount) { Scierror(999, _("Wrong size for '%s' property: %d elements expected.\n"), "links", iLinksCount); return SET_PROPERTY_ERROR; } links = (char**) MALLOC(iLinksCount * sizeof(char*)); if (links == NULL) { Scierror(999, _("%s: No more memory.\n"), "set_z_ticks_property"); return SET_PROPERTY_ERROR; } getGraphicObjectProperty(pobjUID, __GO_PARENT_AXES__, jni_string, (void **)&parentAxes); status = TRUE; for (i = 0 ; i < iLinksCount ; i++) { char* polylineParentAxes; char* polylineObjectUID = (char*)getObjectFromHandle( getHandleFromStack( stackPointer + i ) ); getGraphicObjectProperty(polylineObjectUID, __GO_TYPE__, jni_int, (void **)&piType); if (type != __GO_POLYLINE__) { Scierror(999, _("%s: Input argument #%d must be a '%s' handle.\n"), "links", i, "polyline"); status = FALSE; break; } links[i] = polylineObjectUID; getGraphicObjectProperty(polylineObjectUID, __GO_PARENT_AXES__, jni_string, (void **)&polylineParentAxes); if (strcmp(polylineParentAxes, parentAxes) != 0) { Scierror(999, _("%s: Input argument and the legend must have the same parent axes.\n"), "links"); status = FALSE; break; } } if (status == FALSE) { FREE(links); return SET_PROPERTY_ERROR; } status = setGraphicObjectProperty(pobjUID, __GO_LINKS__, links, jni_string_vector, iLinksCount); FREE(links); if (status == TRUE) { return SET_PROPERTY_SUCCEED; } else { Scierror(999, _("'%s' property does not exist for this handle.\n"), "links"); return SET_PROPERTY_ERROR; } }
/*--------------------------------------------------------------------------*/ int sci_swap_handles( char * fname, unsigned long fname_len ) { int firstHdlCol ; int firstHdlRow ; int secondHdlCol ; int secondHdlRow ; int firstHdlStkIndex ; int secondHdlStkIndex ; char *pstHandle_1; char *pstHandle_2; char *pstParent_1; char *pstParent_2; int iChildrenCount = 0; int *piChildrenCount = &iChildrenCount; char **pstChildrenUID; int i = 0; long h = 0; CheckRhs( 2, 2 ) ; CheckLhs( 0, 1 ) ; GetRhsVar( 1,GRAPHICAL_HANDLE_DATATYPE, &firstHdlRow, &firstHdlCol, &firstHdlStkIndex ); GetRhsVar( 2,GRAPHICAL_HANDLE_DATATYPE, &secondHdlRow, &secondHdlCol, &secondHdlStkIndex ); if ( firstHdlRow * firstHdlCol != 1 || secondHdlRow * secondHdlCol != 1 ) { Scierror(999,_("%s: Routine can only swap two single handles.\n"),fname); return 0 ; } /* get the two handles and swap them */ h = (long)*hstk(firstHdlStkIndex); pstHandle_1 = getObjectFromHandle(h); h = (long)*hstk(secondHdlStkIndex); pstHandle_2 = getObjectFromHandle(h); getGraphicObjectProperty(pstHandle_1, __GO_PARENT__, jni_string, &pstParent_1); getGraphicObjectProperty(pstHandle_2, __GO_PARENT__, jni_string, &pstParent_2); // Check if objects do not have the same parent if (strcmp(pstParent_1, pstParent_2) == 0) { getGraphicObjectProperty(pstParent_1, __GO_CHILDREN_COUNT__, jni_int, (void **)&piChildrenCount); getGraphicObjectProperty(pstParent_1, __GO_CHILDREN__, jni_string_vector, (void **)&pstChildrenUID); for (i = 0 ; i < iChildrenCount ; ++i) { if (strcmp(pstChildrenUID[i], pstHandle_1) == 0) { pstChildrenUID[i] = pstHandle_2; } else if (strcmp(pstChildrenUID[i], pstHandle_2) == 0) { pstChildrenUID[i] = pstHandle_1; } } setGraphicObjectProperty(pstParent_1, __GO_CHILDREN__, pstChildrenUID, jni_string_vector, iChildrenCount); } else { setGraphicObjectRelationship(pstParent_1, pstHandle_2); setGraphicObjectRelationship(pstParent_2, pstHandle_1); } LhsVar(1) = 0 ; PutLhsVar(); return 0 ; }
void setresult(const int objhandle) { PyObject *o = getObjectFromHandle(objhandle); PyDict_SetItemString(initdict, "result", o); }
/*--------------------------------------------------------------------------*/ int sci_rotate_axes(char *fname, unsigned long fname_len) { SciErr sciErr; int* piAddrstackPointer = NULL; long long* stackPointer = NULL; int nbRow = 0; int nbCol = 0; int iUID = 0; int* piUID = &iUID; int iType = -1; int *piType = &iType; /* check size of input and output */ CheckInputArgument(pvApiCtx, 0, 1); CheckOutputArgument(pvApiCtx, 0, 1); if (nbInputArgument(pvApiCtx) == 0) { iUID = getCurrentFigure(); } else { /* Get figure or subwin handle */ if ((!checkInputArgumentType(pvApiCtx, 1, sci_handles))) { Scierror(999, _("%s: Wrong type for input argument #%d: Single Figure or Axes handle expected.\n"), fname, 1); return -1; } sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrstackPointer); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrstackPointer, &nbRow, &nbCol, &stackPointer); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } if (nbRow * nbCol != 1) { Scierror(999, _("%s: Wrong type for input argument #%d: Single Figure or Axes handle expected.\n"), fname, 1); return -1; } iUID = getObjectFromHandle((long int) * stackPointer); getGraphicObjectProperty(iUID, __GO_TYPE__, jni_int, (void **)&piType); if (iType == __GO_AXES__) { iUID = getParentObject(iUID); } } if (iUID == 0) { Scierror(999, _("%s: The handle is not or no more valid.\n"), fname); return -1; } setGraphicObjectProperty(iUID, __GO_INFO_MESSAGE__, "Right click and drag to rotate.", jni_string, 1); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*--------------------------------------------------------------------------*/ int sci_progressionbar(char *fname, void* pvApiCtx) { SciErr sciErr; int* piAddrhandleAdr = NULL; long long* handleAdr = NULL; int* piAddrmessageAdr = NULL; long long* stkAdr = NULL; int iProgressionbarUID = 0; int nbRow = 0, nbCol = 0; int nbRowMessage = 0, nbColMessage = 0; char **messageAdr = NULL; int iValue = 0; unsigned long GraphicHandle = 0; CheckInputArgument(pvApiCtx, 1, 2); CheckOutputArgument(pvApiCtx, 1, 1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrhandleAdr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (nbInputArgument(pvApiCtx) == 1) { if ((checkInputArgumentType(pvApiCtx, 1, sci_handles))) /* ProgressionBar to update */ { // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrhandleAdr, &nbRow, &nbCol, &handleAdr); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } if (nbRow * nbCol != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1); return FALSE; } } else if ((checkInputArgumentType(pvApiCtx, 1, sci_strings))) /* Message to display */ { sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrmessageAdr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of string at position 1. if (getAllocatedMatrixOfString(pvApiCtx, piAddrmessageAdr, &nbRowMessage, &nbColMessage, &messageAdr)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 1); return 1; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A graphic handle or a string expected.\n"), fname, 1); return FALSE; } if (handleAdr == 0) { /* Create a new ProgressionBar */ iProgressionbarUID = createGraphicObject(__GO_PROGRESSIONBAR__); GraphicHandle = getHandle(iProgressionbarUID); setGraphicObjectProperty(iProgressionbarUID, __GO_UI_MESSAGE__, messageAdr, jni_string_vector, nbColMessage * nbRowMessage); freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr); } else { GraphicHandle = (unsigned long) * (handleAdr); iProgressionbarUID = getObjectFromHandle(GraphicHandle); setGraphicObjectProperty(iProgressionbarUID, __GO_UI_VALUE__, &iValue, jni_int, 1); } } else if (nbInputArgument(pvApiCtx) == 2) { if ((checkInputArgumentType(pvApiCtx, 1, sci_handles)) && (checkInputArgumentType(pvApiCtx, 2, sci_strings))) /* progressionbar(id,mes) */ { // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrhandleAdr, &nbRow, &nbCol, &handleAdr); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } if (nbRow * nbCol != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1); return FALSE; } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrmessageAdr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of string at position 2. if (getAllocatedMatrixOfString(pvApiCtx, piAddrmessageAdr, &nbRowMessage, &nbColMessage, &messageAdr)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, 2); return 1; } GraphicHandle = (unsigned long) * handleAdr; iProgressionbarUID = getObjectFromHandle(GraphicHandle); setGraphicObjectProperty(iProgressionbarUID, __GO_UI_VALUE__, &iValue, jni_int, 1); setGraphicObjectProperty(iProgressionbarUID, __GO_UI_MESSAGE__, messageAdr, jni_string_vector, nbColMessage * nbRowMessage); freeAllocatedMatrixOfString(nbRowMessage, nbColMessage, messageAdr); } else { Scierror(999, _("%s: Wrong input arguments: '%s' expected.\n"), fname, "(id, mes)"); return FALSE; } } if (nbOutputArgument(pvApiCtx) == 1) { nbRow = 1; nbCol = 1; sciErr = allocMatrixOfHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow, nbCol, &stkAdr); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } *stkAdr = (long long)GraphicHandle; AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; } else { AssignOutputVariable(pvApiCtx, 1) = 0; } ReturnArguments(pvApiCtx); return TRUE; }
/*--------------------------------------------------------------------------*/ int xs2file(char * fname, ExportFileType fileType ) { SciErr sciErr; int* piAddrl1 = NULL; int* piAddrfileName = NULL; int* piAddrsciOrientation = NULL; int* piAddrquality = NULL; double* quality = NULL; /* Check input and output sizes */ CheckOutputArgument(pvApiCtx, 0, 1); if (isVectorialExport(fileType) || fileType == JPG_EXPORT) { CheckInputArgument(pvApiCtx, 2, 3); } else { CheckInputArgument(pvApiCtx, 2, 2); } if ((!checkInputArgumentType(pvApiCtx, 1, sci_matrix)) && (!checkInputArgumentType(pvApiCtx, 1, sci_handles))) { Scierror(999, _("%s: Wrong type for input argument #%d: An integer or a handle expected.\n"), fname, 1); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 1; } if ( (checkInputArgumentType(pvApiCtx, 2, sci_strings)) ) { char **fileName = NULL; char *real_filename = NULL; float jpegCompressionQuality = 0.95f; ExportOrientation orientation = EXPORT_PORTRAIT; /* default orientation */ int m1 = 0, n1 = 0; int figurenum = -1; char* figureUID = NULL; char *status = NULL; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } /* get handle by figure number */ if (checkInputArgumentType(pvApiCtx, 1, sci_matrix)) { // Retrieve a matrix of double at position 1. int* l1 = NULL; sciErr = getMatrixOfDoubleAsInteger(pvApiCtx, piAddrl1, &m1, &n1, &l1); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1); return 1; } if (m1 * n1 != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 1); return 1; } figurenum = *l1; if (!sciIsExistingFigure(figurenum)) { Scierror(999, "%s: Input argument #%d must be a valid figure_id.\n", fname, 1); return 1; } figureUID = (char*)getFigureFromIndex(figurenum); } /* check given handle */ else if (checkInputArgumentType(pvApiCtx, 1, sci_handles)) { int iHandleType = -1; int* piHandleType = &iHandleType; long long* l1 = NULL; // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrl1, &m1, &n1, &l1); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: Handle matrix expected.\n"), fname, 1); return 1; } if (m1 * n1 != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1); return 1; } figureUID = (char*)getObjectFromHandle((unsigned long) * l1); if (figureUID == NULL) { Scierror(999, _("%s: Input argument #%d must be a valid handle.\n"), fname, 1); return 1; } getGraphicObjectProperty(figureUID, __GO_TYPE__, jni_int, (void**)&piHandleType); if (iHandleType != __GO_FIGURE__) { Scierror(999, _("%s: Wrong type for input argument #%d: A ''%s'' handle expected.\n"), fname, 1, "Figure"); return 1; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A scalar or figure handle expected.\n"), fname, 1); return 1; } /* get file name */ sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrfileName); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of string at position 2. if (getAllocatedMatrixOfString(pvApiCtx, piAddrfileName, &m1, &n1, &fileName)) { Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 2); return 1; } if (m1 * n1 == 1) { if (nbInputArgument(pvApiCtx) == 3) { int nbCol = 0; int nbRow = 0; if (isVectorialExport(fileType)) { char **sciOrientation = NULL; if ((!checkInputArgumentType(pvApiCtx, 3, sci_strings))) { freeAllocatedMatrixOfString(m1, n1, fileName); Scierror(999, _("%s: Wrong type for input argument #%d: Single character string expected.\n"), fname, 3); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddrsciOrientation); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of string at position 3. if (getAllocatedMatrixOfString(pvApiCtx, piAddrsciOrientation, &nbRow, &nbCol, &sciOrientation)) { freeAllocatedMatrixOfString(m1, n1, fileName); Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 3); return 1; } if (nbRow * nbCol == 1) { /* Value should be 'landscape' or 'portrait' but check only the first character */ /* for compatibility with Scilab 4*/ if (strcmp(sciOrientation[0], "landscape") == 0 || strcmp(sciOrientation[0], "l") == 0) { freeAllocatedMatrixOfString(nbRow, nbCol, sciOrientation); orientation = EXPORT_LANDSCAPE; } else if (strcmp(sciOrientation[0], "portrait") == 0 || strcmp(sciOrientation[0], "p") == 0) { freeAllocatedMatrixOfString(nbRow, nbCol, sciOrientation); orientation = EXPORT_PORTRAIT; } else { freeAllocatedMatrixOfString(m1, n1, fileName); freeAllocatedMatrixOfString(nbRow, nbCol, sciOrientation); Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 3, "portrait", "landscape"); return 1; } } else { freeAllocatedMatrixOfString(m1, n1, fileName); freeAllocatedMatrixOfString(nbRow, nbCol, sciOrientation); Scierror(999, _("%s: Wrong size for input argument #%d: Single character string expected.\n"), fname, 3); return 1; } } else { sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddrquality); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 3. sciErr = getMatrixOfDouble(pvApiCtx, piAddrquality, &nbRow, &nbCol, &quality); if (sciErr.iErr) { freeAllocatedMatrixOfString(m1, n1, fileName); printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 3); return 1; } if (nbRow != 1 || nbCol != 1 || *quality < 0 || *quality > 1) { freeAllocatedMatrixOfString(m1, n1, fileName); Scierror(999, _("%s: Wrong type for input argument #%d: A real between 0 and 1 expected.\n"), fname, 3); return 1; } jpegCompressionQuality = (float) * quality; } } /* Replaces SCI, ~, HOME, TMPDIR by the real path */ real_filename = expandPathVariable(fileName[0]); /* Call the function for exporting file */ status = exportToFile(figureUID, real_filename, fileType, jpegCompressionQuality, orientation); /* free pointers no more used */ if (real_filename) { FREE(real_filename); real_filename = NULL; } freeAllocatedMatrixOfString(m1, n1, fileName); /* treat errors */ if (strlen(status) != 0) { Scierror(999, _("%s: %s\n"), fname, status); return 1; } } else { freeAllocatedMatrixOfString(m1, n1, fileName); Scierror(999, _("%s: Wrong size for input argument #%d: Single character string expected.\n"), fname, 2); return 1; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: Single character string expected.\n"), fname, 2); return 1; } AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*--------------------------------------------------------------------------*/ int sci_glue(char * fname, unsigned long fname_len) { SciErr sciErr; int* piAddrl1 = NULL; long long* l1 = NULL; double* l2 = NULL; int* lind = NULL; long long* outindex = NULL; int numrow = 0, numcol = 0, n = 0, cx1 = 1; int *pObj = NULL; int i = 0; int iCompoundUID = 0; int iParentUID = 0; int iCurrentParentUID = 0; int* piCurrentParentUID = &iCurrentParentUID; int iObjUID = 0; CheckInputArgument(pvApiCtx, 1, 1); CheckOutputArgument(pvApiCtx, 0, 1); /* set or create a graphic window */ sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrl1, &numrow, &numcol, &l1); /* We get the scalar value if it is ones */ if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } n = numrow * numcol; sciErr = allocMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, numrow, numcol, &l2); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } sciErr = allocMatrixOfDoubleAsInteger(pvApiCtx, nbInputArgument(pvApiCtx) + 2, numrow, numcol, &lind); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } if (n > 1) { C2F(dcopy)(&n, (double*)l1, &cx1, l2, &cx1); C2F(dsort)(l2, &n, (int*)(lind)); for (i = 1; i < n; i++) { long long i1 = ((long long*)l2)[i]; long long i2 = ((long long*)l2)[i - 1]; if (i1 == i2) { Scierror(999, _("%s: Each handle should not appear twice.\n"), fname); return 0; } } } /* we must change the pobj to the Compound type */ pObj = (int*)MALLOC(n * sizeof(int)); for (i = 0 ; i < n ; i++) { iObjUID = getObjectFromHandle((long)l1[i]); pObj[i] = iObjUID; if (iObjUID == 0) { FREE(pObj); Scierror(999, _("%s: The handle is not or no more valid.\n"), fname); return 0; } iCurrentParentUID = getParentObject(iObjUID); //getGraphicObjectProperty(iObjUID, __GO_PARENT__, jni_string, (void **)&piCurrentParentUID); if (i == 0) { iParentUID = iCurrentParentUID; } if (iParentUID != iCurrentParentUID) { FREE(pObj); Scierror(999, _("%s: Objects must have the same parent.\n"), fname); return 0; } } //ret = CheckForCompound (handelsvalue, n); //if (ret>0) //{ // MEM LEAK // Scierror(999,_("%s: Handle %d cannot be glued (invalid parent).\n"),fname,ret); // return 0; //} //if (ret<0) //{ // MEM LEAK // Scierror(999,_("%s: Handle %d cannot be glued (invalid type).\n"),fname,-ret); // return 0; //} iCompoundUID = createCompound(iParentUID, pObj, n); setCurrentObject(iCompoundUID); numrow = 1; numcol = 1; sciErr = allocMatrixOfHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 3, numrow, numcol, &outindex); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } outindex[0] = getHandle(iCompoundUID); AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 3; ReturnArguments(pvApiCtx); FREE(pObj); return 0; }
int runpython_ts(const char *modname, const char * clsname, const char * funcname, const int paramhandle) { PyObject *modstr, *mod, *clsstr, *cls, *funcstr, *func, *plist, *args, *retval; /* convert module, class and func to utf-8 */ modstr = strLenToUtfPy((char *)modname, strlen(modname)); plist = getObjectFromHandle(paramhandle); /* parameters */ if (PyString_Check(plist)) { /* parameter should be a json string */ plist = from_json(plist); if (plist == NULL) { error_msg("Error in json parameter string"); return -1; } } if (!PyList_Check(plist)) { error_msg("Error in runpython: parameters must be a list"); return -1; } /* import modules */ mod = PyImport_Import(modstr); if (mod == NULL) { Py_DECREF(modstr); error_msg("Error in runpython: Module not found"); return -1; } if (clsname != NULL) clsstr = strLenToUtfPy((char *)clsname, strlen(clsname)); funcstr = strLenToUtfPy((char *)funcname, strlen(funcname)); if (clsname != NULL && strlen(clsname) > 0) { cls = PyObject_GetAttr(mod, clsstr); if (cls != NULL) func = PyObject_GetAttr(cls, funcstr); } else { func = PyObject_GetAttr(mod, funcstr); } if (!func || !PyCallable_Check(func)) { Py_XDECREF(cls); Py_XDECREF(mod); error_msg("Error in runpython: Function not found"); return -1; } args = PyList_AsTuple(plist); retval = PyObject_CallObject(func, args); Py_XDECREF(args); Py_XDECREF(func); Py_XDECREF(funcstr); Py_XDECREF(cls); Py_XDECREF(clsstr); Py_XDECREF(mod); Py_XDECREF(modstr); if (!retval) { PyErr_Print(); error_msg("Error in runpython: See QPRINT for details"); return -1; } /* keep the return value */ return newHandle(retval); }
void seterror(const int objhandle) { PyObject *o = getObjectFromHandle(objhandle); PyDict_SetItemString(initdict, "error", o); }
/*--------------------------------------------------------------------------*/ int sci_xpolys(char *fname, unsigned long fname_len) { SciErr sciErr; int* piAddrl1 = NULL; double* l1 = NULL; int* piAddrl2 = NULL; double* l2 = NULL; int* piAddr3 = NULL; int* l3 = NULL; int m1 = 0, n1 = 0; int m2 = 0, n2 = 0; int m3 = 0, n3 = 0; int i = 0; long hdl = 0; char *pstFigureUID = NULL; char *pstSubWinUID = NULL; char *pstCompoundUID = NULL; int iFalse = 0; int iVisible = 0; int *piVisible = &iVisible; CheckInputArgument(pvApiCtx, 2, 3); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl1, &m1, &n1, &l1); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 2. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl2, &m2, &n2, &l2); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 2); return 1; } //CheckSameDims if (m1 != m2 || n1 != n2) { Scierror(999, _("%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n"), fname, 1, m1, n1); return 1; } if (m1 * n1 == 0 || m2 * n2 == 0) { /* dimension 0, 0 polyline to draw */ AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } pstSubWinUID = (char*)getOrCreateDefaultSubwin(); pstFigureUID = (char*)getCurrentFigure(); // Create compound. pstCompoundUID = createGraphicObject(__GO_COMPOUND__); setGraphicObjectProperty(pstCompoundUID, __GO_VISIBLE__, &iFalse, jni_bool, 1); /* Sets the parent-child relationship for the Compound */ setGraphicObjectRelationship(pstSubWinUID, pstCompoundUID); if (nbInputArgument(pvApiCtx) == 3) { sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddr3); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 3. sciErr = getMatrixOfDoubleAsInteger(pvApiCtx, piAddr3, &m3, &n3, &l3); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 3); return 1; } //CheckVector if (m3 != 1 && n3 != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 3); return 1; } //CheckDimProp if (m3 * n3 < n1) { Scierror(999, _("%s: Wrong size for input arguments: Incompatible sizes.\n"), fname); return 1; } /* Construct the polylines */ for (i = 0; i < n1; ++i) { Objpoly((l1 + (i * m1)), (l2 + (i * m2)), m1, 0, *(int*)(l3 + i), &hdl); // Add newly created object to Compound setGraphicObjectRelationship(pstCompoundUID, getObjectFromHandle(hdl)); } } else { for (i = 0; i < n1; ++i) { Objpoly((l1 + (i * m1)), (l2 + (i * m2)), m1, 0, 1, &hdl); // Add newly created object to Compound setGraphicObjectRelationship(pstCompoundUID, getObjectFromHandle(hdl)); } } getGraphicObjectProperty(pstFigureUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible); setGraphicObjectProperty(pstCompoundUID, __GO_VISIBLE__, &iVisible, jni_bool, 1); setCurrentObject(pstCompoundUID); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*--------------------------------------------------------------------------*/ int sci_exportUI(char * fname, unsigned long fname_len) { SciErr sciErr; int* piAddrstackPointer = NULL; int iFigureId = 0; // id of the figure to export int *piFigureId = &iFigureId; int iRows = 0; int iCols = 0; int iHandleType = -1; int *piHandleType = &iHandleType; CheckOutputArgument(pvApiCtx, 0, 1); CheckInputArgument(pvApiCtx, 1, 1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrstackPointer); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (checkInputArgumentType(pvApiCtx, 1, sci_handles)) // exportUI(figHandle) { char *pstFigureUID = NULL; char *pstHandleType = NULL; long long* stackPointer = NULL; // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrstackPointer, &iRows, &iCols, &stackPointer); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: Handle matrix expected.\n"), fname, 1); return 1; } if (iRows * iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); } pstFigureUID = getObjectFromHandle((unsigned long) * stackPointer); getGraphicObjectProperty(pstFigureUID, __GO_TYPE__, jni_int, (void **)&piHandleType); if (iHandleType == __GO_FIGURE__) { Scierror(999, _("%s: Wrong type for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); return FALSE; } getGraphicObjectProperty(pstFigureUID, __GO_ID__, jni_int, (void **)&piFigureId); } else if (checkInputArgumentType(pvApiCtx, 1, sci_matrix)) // exportUI(figId) { double* stackPointer = NULL; // Retrieve a matrix of double at position 1. sciErr = getMatrixOfDouble(pvApiCtx, piAddrstackPointer, &iRows, &iCols, &stackPointer); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1); return 1; } if (iRows * iCols != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); return FALSE; } iFigureId = (int) * stackPointer; } else { Scierror(999, _("%s: Wrong type for input argument #%d: A Real Scalar or a 'Figure' handle expected.\n"), fname, 1); return FALSE; } // call the export function exportUserInterface(iFigureId); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }
/*--------------------------------------------------------------------------*/ int sci_toolbar(char *fname, unsigned long l) { SciErr sciErr; int* piAddr1 = NULL; int* piStkAdr = NULL; int* piAddrstkAdr = NULL; long long* stkAdr = NULL; int* piAddrparam = NULL; int nbCol = 0; int nbRow = 0; char *Output = NULL; char **param = NULL; int figNum = -2; int iIsVisible = 0; int *piIsVisible = NULL; int iParentUID = 0; int iParentType = -1; int *piParentType = &iParentType; CheckInputArgument(pvApiCtx, 1, 2); CheckOutputArgument(pvApiCtx, 0, 1); /* Figure number */ if (checkInputArgumentType(pvApiCtx, 1, sci_matrix)) { sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. sciErr = getMatrixOfDoubleAsInteger(pvApiCtx, piAddr1, &nbRow, &nbCol, &piStkAdr); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 1); return 1; } if (nbRow * nbCol != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1); return FALSE; } figNum = *piStkAdr; if (figNum < -1) { Scierror(999, _("%s: Wrong value for input argument #%d: Must be > %d expected.\n"), fname, 1, -1); return FALSE; } if (figNum != -1) /* Check that the figure exists */ { if (getFigureFromIndex(figNum) == 0) { Scierror(999, _("%s: Wrong value for input argument #%d: 'Graphic Window Number %d' does not exist.\n"), fname, 1, figNum); return FALSE; } } if (figNum == -1) { iParentUID = getConsoleIdentifier(); } else { iParentUID = getFigureFromIndex(figNum); } } else if (checkInputArgumentType(pvApiCtx, 1, sci_handles)) { sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrstkAdr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of handle at position 1. sciErr = getMatrixOfHandle(pvApiCtx, piAddrstkAdr, &nbRow, &nbCol, &stkAdr); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1); return 1; } if (nbRow * nbCol != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1); return FALSE; } iParentUID = getObjectFromHandle((long) * stkAdr); if (iParentUID == 0) { Scierror(999, _("%s: Wrong value for input argument #%d: this handle does not exist.\n"), fname, 1); return FALSE; } getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType); if (iParentType != __GO_FIGURE__) { Scierror(999, _("%s: Wrong type for input argument #%d: A real or a Figure handle expected.\n"), fname, 1); return FALSE; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A real or a Figure handle expected.\n"), fname, 1); return FALSE; } if (nbInputArgument(pvApiCtx) == 2) /* New status */ { if ((checkInputArgumentType(pvApiCtx, 2, sci_strings))) { sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrparam); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of string at position 2. if (getAllocatedMatrixOfString(pvApiCtx, piAddrparam, &nbRow, &nbCol, ¶m)) { Scierror(202, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2); return 1; } if (nbRow * nbCol != 1) { freeAllocatedMatrixOfString(nbRow, nbCol, param); Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 2); return FALSE; } if ((strcmp(param[0], "off") == 0) || (strcmp(param[0], "on") == 0)) { iIsVisible = strcmp(param[0], "on") == 0; if (iParentUID != getConsoleIdentifier() || getScilabMode() == SCILAB_STD) { setGraphicObjectProperty(iParentUID, __GO_TOOLBAR_VISIBLE__, &iIsVisible, jni_bool, 1); } freeAllocatedMatrixOfString(nbRow, nbCol, param); } else { freeAllocatedMatrixOfString(nbRow, nbCol, param); Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 2, "on", "off"); return FALSE; } } else { Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2); return FALSE; } } /* Returned value */ piIsVisible = &iIsVisible; getGraphicObjectProperty(iParentUID, __GO_TOOLBAR_VISIBLE__, jni_bool, (void **)&piIsVisible); if (iIsVisible) { Output = strdup("on"); } else { Output = strdup("off"); } nbCol = 1; nbRow = (int)strlen(Output); if (createSingleString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, Output)) { Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; if (Output) { FREE(Output); Output = NULL; } ReturnArguments(pvApiCtx); return TRUE; }
/*--------------------------------------------------------------------------*/ int sci_uimenu(char *fname, void *pvApiCtx) { SciErr sciErr; int nbRow = 0, nbCol = 0; int setStatus = SET_PROPERTY_SUCCEED; int inputIndex = 0, beginIndex = 0; char *propertyName = NULL; int iParentUID = 0; unsigned long GraphicHandle = 0; int parentDefined = FALSE; int iCurrentFigure = 0; int iParentType = -1; int *piParentType = &iParentType; /* Create a new menu */ GraphicHandle = getHandle(CreateUimenu()); /* If no nbInputArgument(pvApiCtx) -> current figure is the parent (Ascendant compatibility) */ if (nbInputArgument(pvApiCtx) == 0) { // Set the parent property iCurrentFigure = getCurrentFigure(); if (iCurrentFigure == 0) { iCurrentFigure = createNewFigureWithAxes(); } setGraphicObjectRelationship(iCurrentFigure, getObjectFromHandle(GraphicHandle)); } /** * Odd number of input arguments * First input is the parent ID * All event inputs are property names * All odd (except first) inputs are property values */ if (nbInputArgument(pvApiCtx) % 2 == 1) { if ((!checkInputArgumentType(pvApiCtx, 1, sci_handles))) { Scierror(999, _("%s: Wrong type for input argument #%d: A graphic handle expected.\n"), fname, 1); return FALSE; } else /* Get parent ID */ { int *piAddr = NULL; long long hParent = 0; sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of handle at position 1. // YOU MUST REMOVE YOUR VARIABLE DECLARATION "int stkAdr". if (getScalarHandle(pvApiCtx, piAddr, &hParent)) { Scierror(202, _("%s: Wrong type for input argument #%d: Handle expected.\n"), fname, 1); return 1; } iParentUID = getObjectFromHandle((long)hParent); if (iParentUID != 0) { getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType); if (iParentType != __GO_FIGURE__ && iParentType != __GO_UIMENU__) { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure", "Uimenu"); return FALSE; } // Set the parent property callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), &hParent, sci_handles, 1, 1, "parent"); // Set the flag to avoid setting the parent two times parentDefined = TRUE; } else { Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure", "Uimenu"); return FALSE; } // First input parameter which is a property name beginIndex = 2; } } /** * Even number of input arguments * All odd inputs are property names * All even inputs are property values */ else { // First input parameter which is a property name beginIndex = 1; } /* Read and set all properties */ for (inputIndex = beginIndex; inputIndex < nbInputArgument(pvApiCtx); inputIndex = inputIndex + 2) { int* piAddrValue = NULL; int* piAddrProperty = NULL; int isUserDataProperty = 0; int iPropertyValuePositionIndex = inputIndex + 1; size_t posStackOrAdr = 0; /* Read property name */ if ((!checkInputArgumentType(pvApiCtx, inputIndex, sci_strings))) { Scierror(999, _("%s: Wrong type for input argument #%d: string expected.\n"), fname, inputIndex); return FALSE; } else { sciErr = getVarAddressFromPosition(pvApiCtx, inputIndex, &piAddrProperty); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } if (getAllocatedSingleString(pvApiCtx, piAddrProperty, &propertyName)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, inputIndex); return 1; } if (stricmp(propertyName, "parent") == 0) { parentDefined = TRUE; } isUserDataProperty = (stricmp(propertyName, "user_data") == 0) || (stricmp(propertyName, "userdata") == 0); } sciErr = getVarAddressFromPosition(pvApiCtx, iPropertyValuePositionIndex, &piAddrValue); if (sciErr.iErr) { printError(&sciErr, 0); freeAllocatedSingleString(propertyName); return 1; } if (isUserDataProperty) { nbRow = -1; nbCol = -1; setStatus = callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), piAddrValue, 0, 0, 0, propertyName); } else { /* Read property value */ switch (getInputArgumentType(pvApiCtx, iPropertyValuePositionIndex)) { case sci_matrix: { double* pdblValue = NULL; sciErr = getMatrixOfDouble(pvApiCtx, piAddrValue, &nbRow, &nbCol, &pdblValue); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, iPropertyValuePositionIndex); freeAllocatedSingleString(propertyName); return 1; } setStatus = callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), pdblValue, sci_matrix, nbRow, nbCol, propertyName); break; } case sci_strings: { char* pstValue = NULL; if (getAllocatedSingleString(pvApiCtx, piAddrValue, &pstValue)) { Scierror(202, _("%s: Wrong type for argument #%d: string expected.\n"), fname, iPropertyValuePositionIndex); freeAllocatedSingleString(propertyName); return 1; } nbRow = (int)strlen(pstValue); nbCol = 1; setStatus = callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), pstValue, sci_strings, nbRow, nbCol, propertyName); freeAllocatedSingleString(pstValue); break; } case sci_handles: { long long* phValues = NULL; sciErr = getMatrixOfHandle(pvApiCtx, piAddrValue, &nbRow, &nbCol, &phValues); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, iPropertyValuePositionIndex); freeAllocatedSingleString(propertyName); return 1; } setStatus = callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), phValues, sci_handles, nbRow, nbCol, propertyName); break; } case sci_list: { getListItemNumber(pvApiCtx, piAddrValue, &nbRow); nbCol = 1; setStatus = callSetProperty(pvApiCtx, getObjectFromHandle(GraphicHandle), piAddrValue, sci_list, nbRow, nbCol, propertyName); break; } default: { setStatus = SET_PROPERTY_ERROR; break; } } } if (setStatus == SET_PROPERTY_ERROR) { Scierror(999, _("%s: Could not set property '%s'.\n"), fname, propertyName); freeAllocatedSingleString(propertyName); return FALSE; } freeAllocatedSingleString(propertyName); } /* If the parent is not given, the current figure is set as parent */ if (!parentDefined && (nbInputArgument(pvApiCtx) != 0)) { // Set the parent property iCurrentFigure = getCurrentFigure(); if (iCurrentFigure == 0) { iCurrentFigure = createNewFigureWithAxes(); } setGraphicObjectRelationship(iCurrentFigure, getObjectFromHandle(GraphicHandle)); } /* Create return variable */ nbRow = 1; nbCol = 1; // YOU MUST REMOVE YOUR VARIABLE DECLARATION "int stkAdr". if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, GraphicHandle)) { Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1; ReturnArguments(pvApiCtx); return TRUE; }
/*--------------------------------------------------------------------------*/ int sci_xfpolys(char *fname, unsigned long fname_len) { SciErr sciErr; int* piAddrl1 = NULL; double* l1 = NULL; int* piAddrl2 = NULL; double* l2 = NULL; int* piAddr3 = NULL; int* l3 = NULL; int m1 = 0, n1 = 0; int m2 = 0, n2 = 0; int m3 = 0, n3 = 0; int mn2 = 0; int v1 = 0; /* v1 is the flag used for flat (v1==1) or interpolated (v1==2) shading */ int i = 0; long hdl = 0; char *pstSubWinUID = NULL; char *pstFigureUID = NULL; char *pstCompoundUID = NULL; int iSubWinForeground = 0; int iImmediateDrawing = 0; int *piImmediateDrawing = &iImmediateDrawing; int iFalse = 0; int iColorMapSize = 0; int* piColorMapSize = &iColorMapSize; int iForeGround = 0; int* piForeGround = &iForeGround; int iVisible = 0; int *piVisible = &iVisible; CheckInputArgument(pvApiCtx, 2, 3); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrl1); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 1. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl1, &m1, &n1, &l1); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 1); return 1; } sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddrl2); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 2. sciErr = getMatrixOfDouble(pvApiCtx, piAddrl2, &m2, &n2, &l2); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 2); return 1; } //CheckSameDims if (m1 != m2 || n1 != n2) { Scierror(999, _("%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n"), fname, 1, m1, n1); return 1; } mn2 = m2 * n2; if (mn2 == 0) { AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; } if (nbInputArgument(pvApiCtx) == 3) { sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddr3); if (sciErr.iErr) { printError(&sciErr, 0); return 1; } // Retrieve a matrix of double at position 3. sciErr = getMatrixOfDoubleAsInteger(pvApiCtx, piAddr3, &m3, &n3, &l3); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(202, _("%s: Wrong type for argument %d: A real expected.\n"), fname, 3); return 1; } if (m3 * n3 == m1 * n1) { //CheckSameDims if (m1 != m3 || n1 != n3) { Scierror(999, _("%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n"), fname, 1, m1, n1); return 1; } v1 = 2; /* interpolated shading */ if (m3 != 3 && m3 != 4) { Scierror(999, _("%s: Interpolated shading only works for polygons of size %d or %d\n"), fname, 3, 4); return 0; } } else { //CheckVector if (m3 != 1 && n3 != 1) { Scierror(999, _("%s: Wrong size for input argument #%d: Vector expected.\n"), fname, 3); return 1; } //CheckDimProp if (m3 * n3 != n2) { Scierror(999, _("%s: Wrong size for input arguments: Incompatible sizes.\n"), fname); return 1; } v1 = 1; /* flat shading */ } } else { int un = 1, ix = 0; sciErr = allocMatrixOfDoubleAsInteger(pvApiCtx, 3, un, n2, &l3); if (sciErr.iErr) { printError(&sciErr, 0); Scierror(999, _("%s: Memory allocation error.\n"), fname); return 1; } for (ix = 0; ix < n2; ++ix) { *(int*)(l3 + ix) = 0; } m3 = n3 = 1; } pstSubWinUID = (char*)getOrCreateDefaultSubwin(); getGraphicObjectProperty(pstSubWinUID, __GO_PARENT__, jni_string, (void**)&pstFigureUID); getGraphicObjectProperty(pstFigureUID, __GO_IMMEDIATE_DRAWING__, jni_bool, (void **)&piImmediateDrawing); setGraphicObjectProperty(pstFigureUID, __GO_IMMEDIATE_DRAWING__, &iFalse, jni_bool, 1); //get color map size getGraphicObjectProperty(pstFigureUID, __GO_COLORMAP_SIZE__, jni_int, (void**)&piColorMapSize); //get current foreground color getGraphicObjectProperty(pstSubWinUID, __GO_LINE_COLOR__, jni_int, (void**)&piForeGround); // Create compound. pstCompoundUID = createGraphicObject(__GO_COMPOUND__); setGraphicObjectProperty(pstCompoundUID, __GO_VISIBLE__, &iFalse, jni_bool, 1); /* Sets the parent-child relationship for the Compound */ setGraphicObjectRelationship(pstSubWinUID, pstCompoundUID); for (i = 0; i < n1; ++i) { if (m3 == 1 || n3 == 1) /* color vector specified */ { if (*(int*)(l3 + i) == 0) { if (iForeGround == -1) { iSubWinForeground = iColorMapSize + 1; } else if (iForeGround == -2) { iSubWinForeground = iColorMapSize + 2; } else { iSubWinForeground = iForeGround; } Objpoly((l1 + (i * m1)), (l2 + (i * m1)), m1, 1, iSubWinForeground, &hdl); } else { Objfpoly((l1 + (i * m1)), (l2 + (i * m1)), m1, (int*)(l3 + i), &hdl, v1); } } else /* we have a color matrix used for interpolated shading : one color per vertex */ { Objfpoly((l1 + (i * m1)), (l2 + (i * m1)), m1, (int*)(l3 + i * m3), &hdl, v1); } // Add newly created object to Compound setGraphicObjectRelationship(pstCompoundUID, getObjectFromHandle(hdl)); } setCurrentObject(pstCompoundUID); setGraphicObjectProperty(pstFigureUID, __GO_IMMEDIATE_DRAWING__, &piImmediateDrawing, jni_bool, 1); getGraphicObjectProperty(pstFigureUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible); setGraphicObjectProperty(pstCompoundUID, __GO_VISIBLE__, &iVisible, jni_bool, 1); AssignOutputVariable(pvApiCtx, 1) = 0; ReturnArguments(pvApiCtx); return 0; }