1/* -----------------------------------------------------------------------------
2 * See the LICENSE file for information on copyright, usage and redistribution
3 * of SWIG, and the README file for authors - http://www.swig.org/release.html.
4 *
5 * globalvar.i
6 *
7 * Global variables - add the variable to PHP
8 * ----------------------------------------------------------------------------- */
9
10%typemap(varinit) char *,
11                  char []
12{
13  zval *z_var;
14  MAKE_STD_ZVAL(z_var);
15  z_var->type = IS_STRING;
16  if($1) {
17      z_var->value.str.val = estrdup($1);
18      z_var->value.str.len = strlen($1);
19  } else {
20      z_var->value.str.val = 0;
21      z_var->value.str.len = 0;
22  }
23  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL);
24}
25
26%typemap(varinit) int,
27	          unsigned int,
28                  unsigned short,
29                  short,
30                  unsigned short,
31                  long,
32                  unsigned long,
33                  signed char,
34                  unsigned char,
35                  enum SWIGTYPE
36{
37  zval *z_var;
38  MAKE_STD_ZVAL(z_var);
39  z_var->type = IS_LONG;
40  z_var->value.lval = $1;
41  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL);
42}
43
44%typemap(varinit) bool
45{
46  zval *z_var;
47  MAKE_STD_ZVAL(z_var);
48  z_var->type = IS_BOOL;
49  z_var->value.lval = ($1)?1:0;
50  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var, sizeof(zval *), NULL);
51}
52
53%typemap(varinit) float, double
54{
55  zval *z_var;
56  MAKE_STD_ZVAL(z_var);
57  z_var->type = IS_DOUBLE;
58  z_var->value.dval = $1;
59  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var,
60  sizeof(zval *), NULL);
61}
62
63%typemap(varinit) char
64{
65  zval *z_var;
66  char c[2];
67  MAKE_STD_ZVAL(z_var);
68  c[0] = $1;
69  c[1] = 0;
70  z_var->type = IS_STRING;
71  z_var->value.str.val = estrndup(c, 1);
72  z_var->value.str.len = 1;
73  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var,
74  sizeof(zval *), NULL);
75}
76
77%typemap(varinit) SWIGTYPE *, SWIGTYPE []
78{
79  zval *z_var;
80  MAKE_STD_ZVAL(z_var);
81  SWIG_SetPointerZval(z_var, (void*)$1, $1_descriptor, 0);
82  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void *)&z_var,
83  sizeof(zval *), NULL);
84}
85
86%typemap(varinit) SWIGTYPE, SWIGTYPE &
87{
88  zval *z_var;
89
90  MAKE_STD_ZVAL(z_var);
91  SWIG_SetPointerZval(z_var, (void*)&$1, $&1_descriptor, 0);
92  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var,
93  sizeof(zval *), NULL);
94}
95
96%typemap(varinit) char [ANY]
97{
98  zval *z_var;
99  MAKE_STD_ZVAL(z_var);
100  z_var->type = IS_STRING;
101  if ($1) {
102    // varinit char [ANY]
103    ZVAL_STRINGL(z_var,(char*)$1, $1_dim0, 1);
104  }
105  zend_hash_add(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void*)&z_var, sizeof(zval *), NULL);
106}
107
108%typemap(varin) int, unsigned int, short, unsigned short, long, unsigned long, signed char, unsigned char,  enum SWIGTYPE
109{
110  zval **z_var;
111
112  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
113  convert_to_long_ex(z_var);
114  if ($1 != ($1_ltype)((*z_var)->value.lval)) {
115    $1 = Z_LVAL_PP(z_var);
116  }
117}
118
119%typemap(varin) bool
120{
121  zval **z_var;
122
123  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
124  convert_to_boolean_ex(z_var);
125  if ($1 != ($1_ltype)((*z_var)->value.lval)) {
126    $1 = Z_LVAL_PP(z_var);
127  }
128}
129
130%typemap(varin) double,float
131{
132  zval **z_var;
133
134  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
135  convert_to_double_ex(z_var);
136  if ($1 != ($1_ltype)((*z_var)->value.dval)) {
137    $1 = Z_DVAL_PP(z_var);
138  }
139}
140
141%typemap(varin) char
142{
143  zval **z_var;
144
145  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
146  convert_to_string_ex(z_var);
147  if ($1 != *((*z_var)->value.str.val)) {
148    $1 = *((*z_var)->value.str.val);
149  }
150}
151
152%typemap(varin) char *
153{
154  zval **z_var;
155  char *s1;
156
157  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
158  convert_to_string_ex(z_var);
159  s1 = Z_STRVAL_PP(z_var);
160  if ((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) {
161    if (s1)
162      $1 = estrdup(s1);
163    else
164      $1 = NULL;
165  }
166}
167
168
169%typemap(varin) SWIGTYPE []
170{
171  zval **z_var;
172
173  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
174  if($1) {
175    SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, $owner);
176  }
177}
178
179%typemap(varin) char [ANY]
180{
181 zval **z_var;
182 char *s1;
183
184 zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
185 s1 = Z_STRVAL_PP(z_var);
186 if((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) {
187  if(s1)
188    strncpy($1, s1, $1_dim0);
189 }
190}
191
192%typemap(varin) SWIGTYPE
193{
194  zval **z_var;
195  $&1_ltype _temp;
196
197  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
198  if (SWIG_ConvertPtr(*z_var, (void**)&_temp, $&1_descriptor, 0) < 0) {
199    SWIG_PHP_Error(E_ERROR,"Type error in value of $symname. Expected $&1_descriptor");
200  }
201
202  $1 = *($&1_ltype)_temp;
203
204}
205
206%typemap(varin) SWIGTYPE *, SWIGTYPE &
207{
208  zval **z_var;
209  $1_ltype _temp;
210
211  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
212  if (SWIG_ConvertPtr(*z_var, (void **)&_temp, $1_descriptor, 0) < 0) {
213    SWIG_PHP_Error(E_ERROR,"Type error in value of $symname. Expected $&1_descriptor");
214  }
215
216  $1 = ($1_ltype)_temp;
217}
218
219%typemap(varout) int,
220                 unsigned int,
221                 unsigned short,
222                 short,
223                 long,
224                 unsigned long,
225                 signed char,
226                 unsigned char,
227                 enum SWIGTYPE
228{
229  zval **z_var;
230  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
231  if($1 != ($1_ltype)((*z_var)->value.lval)) {
232    (*z_var)->value.lval = (long)$1;
233  }
234}
235
236//SAMFIX need to cast zval->type, what if zend-hash_find fails? etc?
237%typemap(varout) bool
238{
239  zval **z_var;
240  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
241  if($1 != ($1_ltype)((*z_var)->value.lval)) {
242    (*z_var)->value.lval = (long)$1;
243  }
244}
245
246%typemap(varout) double, float
247{
248  zval **z_var;
249  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
250  if($1 != ($1_ltype)((*z_var)->value.dval)) {
251    (*z_var)->value.dval = (double)$1;
252  }
253}
254
255%typemap(varout) char
256{
257  zval **z_var;
258  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
259  if($1 != *((*z_var)->value.str.val)) {
260    char c[2];
261    efree((*z_var)->value.str.val);
262    c[0] = $1;
263    c[1] = 0;
264    (*z_var)->value.str.val = estrdup(c);
265  }
266}
267
268%typemap(varout) char *
269{
270  zval **z_var;
271  char *s1;
272
273  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
274  s1 = Z_STRVAL_PP(z_var);
275  if((s1 == NULL) || ($1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1) )) {
276    if(s1)
277      efree(s1);
278    if($1) {
279      (*z_var)->value.str.val = estrdup($1);
280      (*z_var)->value.str.len = strlen($1) +1;
281    } else {
282      (*z_var)->value.str.val = 0;
283      (*z_var)->value.str.len = 0;
284    }
285 }
286}
287
288%typemap(varout) SWIGTYPE
289{
290  zval **z_var;
291
292  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
293  SWIG_SetPointerZval(*z_var, (void*)&$1, $&1_descriptor, 0);
294}
295
296%typemap(varout) SWIGTYPE []
297{
298  zval **z_var;
299
300  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
301  if($1)
302    SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0);
303}
304
305%typemap(varout) char [ANY]
306{
307  zval **z_var;
308  char *s1;
309deliberate error cos this code looks bogus to me
310  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
311  s1 = Z_STRVAL_PP(z_var);
312  if((s1 == NULL) || zend_binary_strcmp(s1, strlen(s1), $1, strlen($1))) {
313    if($1) {
314      (*z_var)->value.str.val = estrdup($1);
315      (*z_var)->value.str.len = strlen($1)+1;
316    } else {
317      (*z_var)->value.str.val = 0;
318      (*z_var)->value.str.len = 0;
319    }
320  }
321}
322
323%typemap(varout) SWIGTYPE *, SWIGTYPE &
324{
325  zval **z_var;
326
327  zend_hash_find(&EG(symbol_table), (char*)"$1", sizeof("$1"), (void**)&z_var);
328  SWIG_SetPointerZval(*z_var, (void*)$1, $1_descriptor, 0);
329}
330
331
332