File: ex13intc.c

package info (click to toggle)
scilab 2.6-4
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 54,632 kB
  • ctags: 40,267
  • sloc: ansic: 267,851; fortran: 166,549; sh: 10,005; makefile: 4,119; tcl: 1,070; cpp: 233; csh: 143; asm: 135; perl: 130; java: 39
file content (158 lines) | stat: -rw-r--r-- 4,576 bytes parent folder | download | duplicates (3)
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
#include "stack-c.h"

/**************************************************
 * An example of an hand written interface 
 * We call a scilab function (disp) inside the interface 
 **************************************************/

int intex13c_1(fname) 
     char *fname;
{
  int mlhs,mrhs,ibegin;
  static int l1, m1, n1, m2, n2, l2 ; 
  static int minlhs=1, minrhs=2, maxlhs=1, maxrhs=2;
  static char name[] = "disp" ;

  CheckRhs(minrhs,maxrhs) ;
  CheckLhs(minlhs,maxlhs) ;

  GetRhsVar(1, "d", &m1, &n1, &l1);
  GetRhsVar(2, "d", &m2, &n2, &l2);

  /* 
   *  To call a function it is required that its input arguments are
   *  stored in the last positions of the variables stack (it is the
   *  case here. NOTE that when 
   *  called, the function destroys its input variables and replaces them by 
   *  the output variables. 
   *  Here  function  takes  variables 1 and 2 as inputs and generates output
   *  variables at positions 1.
   *  ibegin must be the index of the first input variable of a_function
   */
  ibegin=1;

  /* execute the Scilab disp function */
  mlhs=1; mrhs=2; 
  SciString(&ibegin,name,&mlhs,&mrhs);
  /* check if an error has occured while running a_function */
  if (Err > 0 ) return 0;

  /*  Note that disp, as every function which has nothing to return,
   *  creates as output a variable with special type 0.
   */

  LhsVar(1) = 0; 
  return 0;
}


/**************************************************
 * Executing the Scilab function "myfct" defined in ex11c.sce
 **************************************************/

int intex13c_2(fname) 
     char *fname;
{
  int mlhs,mrhs,ibegin;
  static int l1, m1, n1, m2, n2, l2 ;
  static int minlhs=1, minrhs=6, maxlhs=3, maxrhs=6;
  static char name[] = "myfct" ;

  CheckRhs(minrhs,maxrhs) ;
  CheckLhs(minlhs,maxlhs) ;

  GetRhsVar(1, "d", &m1, &n1, &l1);
  GetRhsVar(2, "d", &m2, &n2, &l2);
  GetRhsVar(3, "d", &m2, &n2, &l2);
  GetRhsVar(4, "d", &m2, &n2, &l2);
  GetRhsVar(5, "d", &m2, &n2, &l2);
  GetRhsVar(6, "d", &m2, &n2, &l2);

  /* 
   *  We receive 6 input variables indexed by (1,2,...6) 
   *  when the command ex11c(x1,x2,x3,x4,x5,x6) is issued.
   *  We have a Scilab function "myfct" with mrhs=2 inputs 
   *  and mlhs=3 outputs:
   *  function [u,v,w]=myfct(x,y)','u=7+x,v=8+y,w=9+y')
   *  To run myfct with input variables x5 and x6,
   *  we must set ibegin=5. Variables passed to the function must
   *  appear consecutively with index ifirst, ifirst+1,..., ifirst+mrhs. 
   */
  ibegin=5;  mlhs=3; mrhs=2 ; 
  /* execute the function "myfct" */
  SciString(&ibegin,name,&mlhs,&mrhs);

  /* check if an error has occured while running a_function */
  if (Err > 0 ) return 0;
  
  /* Output variables u, v, and w of myfct
   * are now indexed by ifirst, ifirst+1, ifirst+mlhs i.e.
   * u and v are indexed by 5 and 6 resp. and w (created by myfct)
   * is indexed by 7.
   * We return u v and w:
   * Caution: Variables with index larger than ifirst+mrhs cannot be 
   *  returned to Scilab.
   */

  LhsVar(1) = 5;
  LhsVar(2) = 6;
  LhsVar(3) = 7;
  return 0;
}



extern int C2F(dscal) __PARAMS((integer *n, double *da,double *dx,integer *incx));

/**************************************************
 * Calling the scilab function "mypoly" inside the interface 
 * "mypoly" is defined in ex12c.sce
 **************************************************/

int intex13c_3(fname) 
     char *fname;
{
  int mlhs,mrhs,ibegin,un=1,mn2;
  static int l1, m1, n1, m2, n2, l2 ; 
  static int minlhs=1, minrhs=2, maxlhs=1, maxrhs=2;
  static char name[] = "mypoly" ;

  CheckRhs(minrhs,maxrhs) ;
  CheckLhs(minlhs,maxlhs) ;

  GetRhsVar(1, "d", &m1, &n1, &l1);
  GetRhsVar(2, "d", &m2, &n2, &l2);

  /** multiply the roots by the scaling factor in place. */

  C2F(dscal)((mn2=m2*n2,&mn2),stk(l1),stk(l2),&un);

  /* call mypoly to create the polynomial from its roots 
   *
   *  To call a function it is required that its input arguments are
   *  stored in the last positions of the variables stack (it is the
   *  ase here. NOTE that when 
   *  called, the function destroys its input variables and replaces them by 
   *  the output variables. 
   *  Here  function  takes  variables 1 and 2 as inputs and generates output
   *  variables at positions 1.
   *  ibegin must be the index of the first input variable of a_function
   */
  ibegin=2;

  /* execute the function "mypoly" */
  mlhs=1; mrhs=1 ; 
  SciString(&ibegin,name,&mlhs,&mrhs);
  /* check if an error has occured while running mypoly */
  if (Err > 0 ) return 0;

  LhsVar(1) = 2; 
  return 0;
}