diff options
Diffstat (limited to 'sci_gateway/cpp/sci_sym_set_indices.cpp')
-rw-r--r-- | sci_gateway/cpp/sci_sym_set_indices.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/sci_gateway/cpp/sci_sym_set_indices.cpp b/sci_gateway/cpp/sci_sym_set_indices.cpp new file mode 100644 index 0000000..6b8a35a --- /dev/null +++ b/sci_gateway/cpp/sci_sym_set_indices.cpp @@ -0,0 +1,99 @@ +/* + * Implementation Symphony Tool Box for Scilab + * sci_sym_set_indices.cpp + * contains functions for setting index variables as continuous and integer values + * By Iswarya + */ +#include <symphony.h> +#include "sci_iofunc.hpp" + +extern sym_environment* global_sym_env;//defined in globals.cpp + +extern "C" { +#include <api_scilab.h> +#include <Scierror.h> +#include <BOOL.h> +#include <localization.h> +#include <sciprint.h> + +//This function is for setting a index variable to be continuous +int sci_sym_set_continuous(char *fname, unsigned long fname_len){ + + // Error management variable + SciErr sciErr; + double status=1.0;//assume error status + int index;//to indicate the index of the variable to be set continuous + int output=0;//out parameter for the load mps function + + CheckInputArgument(pvApiCtx, 1, 1);//Check we have exactly one argument as input or not + CheckOutputArgument(pvApiCtx, 1, 1);//Check we have exactly one argument on output side or not + + getUIntFromScilab(1,&index); + + //ensure that environment is active + if(global_sym_env==NULL){ + sciprint("Error: Symphony environment not initialized. Please run 'sym_open()' first.\n"); + } + else + { + output=sym_set_continuous(global_sym_env,index);//setting the variable continuous + if(output==FUNCTION_TERMINATED_ABNORMALLY) + { + status=1.0;//function did not invoke successfully + sciprint("An error occured.\n"); + } + else if(output==FUNCTION_TERMINATED_NORMALLY) + { + status=0.0;//no error in executing the function + sciprint("Variable with index %d is now continuous.\n",index); + } + } + + if(returnDoubleToScilab(status)) + return 1; + + return 0; +} + + +//This function is for setting a index variable to be integer +int sci_sym_set_integer(char *fname, unsigned long fname_len){ + + // Error management variable + SciErr sciErr; + double status=1.0;//assume error status + int index;//to indicate the index of the variable to be set continuous + int output=0;//out parameter for the load mps function + + CheckInputArgument(pvApiCtx, 1, 1);//Check we have exactly one argument as input or not + CheckOutputArgument(pvApiCtx, 1, 1);//Check we have exactly one argument on output side or not + + getUIntFromScilab(1,&index); + + //ensure that environment is active + if(global_sym_env==NULL){ + sciprint("Error: Symphony environment not initialized. Please run 'sym_open()' first.\n"); + } + else + { + output=sym_set_integer(global_sym_env,index);//setting the variable continuous + if(output==FUNCTION_TERMINATED_ABNORMALLY) + { + status=1.0;//function did not invoke successfully + sciprint("An error occured.\n"); + } + else if(output==FUNCTION_TERMINATED_NORMALLY) + { + status=0.0;//no error in executing the function + sciprint("Variable with index %d is now constrained to be an integer.\n",index); + } + } + + if(returnDoubleToScilab(status)) + return 1; + + return 0; +} + +} + |