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
|
#include "machine.h"
#include <string.h>
#ifdef __STDC__
#include <stdlib.h>
#else
#include <malloc.h>
#endif
#include <stdio.h>
/*************************************************************
* Example of a dynamically allocated array of character created here.
* Its size is sent back as an output.
* It is converted into Scilab variable in the interface program.
* The allocated array is freed in the interface.
*
* the Scilab variable is of type stringmat and is not in the argument
* list of the scilab function. The Fortran type is Cstringv
*
* NOTE: The string array allocated here must be NULL terminated
* (this is used in the free process)
*************************************************************/
int C2F(ccalc6b)(a,m,n,err)
char ***a;
int *m,*n,*err;
{
int i,nstring;
*m=3;
*n=2;
nstring= (*m)*(*n);
/* add 1 for last null string */
*a =(char **) malloc((unsigned) ((nstring+1) * sizeof(char *)));
if ( *a ==0)
{
sciprint("No more space\r\n");
*err=1;
return 0;
}
for ( i=0 ; i< nstring ; i++)
{
(*a)[i] = (char *) malloc ((8)*sizeof(char));
sprintf((*a)[i],"char %d",i);
*err=0;
}
(*a)[nstring]= NULL; /* null terminated */
return 0;
}
/*************************************************************
* This example shows how a Scilab argument of type stringmat
* (which is in the calling list of the Scilab function )
* is transmited to a C program.
* a is a stringmat Scilab argument and a Cstringv Fortran argument
* a is allocated in the interface
*************************************************************/
int C2F(ccalc6a)(a,m,n)
char ***a;
int *m,*n;
{
int i,j;
for ( i = 0 ; i < *m*(*n) ; i++)
{
char *loc = (*a)[i];
for ( j = 0 ; j < strlen(loc); j++)
if ( loc[j] =='a' ) loc[j] ='o';
}
return 0;
}
|