1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
|
/*
* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
* Copyright (C) DIGITEO - 2009 - Sylvestre LEDRU
*
* This file is released under the 3-clause BSD license. See COPYING-BSD.
*
* This example shows how to read / write a matrix of boolean from Scilab
* engine
*
* This example works from Scilab 5.2
* but the previous way of doing is also described as comment
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h> /* malloc */
#include "api_scilab.h"
#include "call_scilab.h" /* Provide functions to call Scilab engine */
/*------------------------------------------------------------*/
int main(void)
{
#ifdef _MSC_VER
if ( StartScilab(NULL, NULL, 0) == FALSE )
#else
if ( StartScilab(getenv("SCI"), NULL, 0) == FALSE )
#endif
{
fprintf(stderr, "Error while calling StartScilab\n");
return -1;
}
/******************************** WRITE ****************************/
/*
* Write a line matrix of boolean into Scilab
* A=[ T F F T ];
*/
{
int A[] = {1, 0, 0, 1}; /* Declare the matrix */
/* NOTE that it is an array of int and not an array of double */
int rowA = 1, colA = 4; /* Size of the matrix */
char variableName[] = "A";
SciErr sciErr;
/*
Write it into Scilab's memory
*/
sciErr = createNamedMatrixOfBoolean(pvApiCtx, variableName, rowA, colA, A);
if (sciErr.iErr)
{
printError(&sciErr, 0);
}
printf("Display from Scilab of A:\n");
SendScilabJob("disp(A);"); /* Display A */
}
/*
* Write a matrix into Scilab
* B=[F F T F;
* F F F T ]
* Note that it is done column by column
*/
{
int B[] = {0, 0, 0, 0, 1, 0, 0, 1}; /* Declare the matrix */
int rowB = 2, colB = 4; /* Size of the matrix */
char variableNameB[] = "B";
SciErr sciErr;
/* Write it into Scilab's memory */
sciErr = createNamedMatrixOfBoolean(pvApiCtx, variableNameB, rowB, colB, B);
if (sciErr.iErr)
{
printError(&sciErr, 0);
}
printf("\n");
printf("Display from Scilab of B:\n");
SendScilabJob("disp(B);"); /* Display B */
}
/******************************** READ ****************************/
/* Load the previously set variable A */
{
int rowA_ = 0, colA_ = 0, lp = 0;
int i = 0;
int *matrixOfBoolean = NULL; /* Int instead of double */
char variableToBeRetrieved[] = "A";
SciErr sciErr;
/* First, retrieve the size of the matrix */
sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, NULL);
if (sciErr.iErr)
{
printError(&sciErr, 0);
}
/* Alloc the memory */
matrixOfBoolean = (int*)malloc((rowA_ * colA_) * sizeof(int));
/* Load the matrix */
sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrieved, &rowA_, &colA_, matrixOfBoolean);
if (sciErr.iErr)
{
printError(&sciErr, 0);
}
printf("\n");
printf("Display from A (size: %d, %d):\n", rowA_, colA_);
for (i = 0; i < rowA_ * colA_; i++)
{
fprintf(stdout, "A[%d] = %d\n", i, matrixOfBoolean[i]);
}
if (matrixOfBoolean)
{
free(matrixOfBoolean);
matrixOfBoolean = NULL;
}
}
/* Load the previously set variable B */
{
int rowB_ = 0, colB_ = 0, lp_ = 0;
int i = 0, j = 0;
int *matrixOfBooleanB = NULL; /* Int instead of double */
char variableToBeRetrievedB[] = "B";
SciErr sciErr;
/* First, retrieve the size of the matrix */
sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, NULL);
/* Alloc the memory */
matrixOfBooleanB = (int*)malloc((rowB_ * colB_) * sizeof(int));
/* Load the matrix */
sciErr = readNamedMatrixOfBoolean(pvApiCtx, variableToBeRetrievedB, &rowB_, &colB_, matrixOfBooleanB);
if (sciErr.iErr)
{
printError(&sciErr, 0);
}
printf("\n");
printf("Display from B raw (size: %d, %d):\n", rowB_, colB_);
for (i = 0; i < rowB_ * colB_; i++)
{
/* Display the raw matrix */
fprintf(stdout, "B[%d] = %d\n", i, matrixOfBooleanB[i]);
}
printf("\n");
printf("Display from B formated (size: %d, %d):\n", rowB_, colB_);
for (j = 0 ; j < rowB_ ; j++)
{
for (i = 0 ; i < colB_ ; i++)
{
/* Display the formated matrix ... the way the user
* expect */
printf("%d ", matrixOfBooleanB[i * rowB_ + j]);
}
printf("\n"); /* New row of the matrix */
}
if (matrixOfBooleanB)
{
free(matrixOfBooleanB);
matrixOfBooleanB = NULL;
}
}
if ( TerminateScilab(NULL) == FALSE )
{
fprintf(stderr, "Error while calling TerminateScilab\n");
return -2;
}
return 0;
}
|