The R Project SVN R

Rev

Rev 42005 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 42005 Rev 42208
1
/*
1
/*
2
 *  R : A Computer Language for Statistical Data Analysis
2
 *  R : A Computer Language for Statistical Data Analysis
3
 *  Copyright (C) 1995  Robert Gentleman and Ross Ihaka
3
 *  Copyright (C) 1995  Robert Gentleman and Ross Ihaka
4
 *  Copyright (C) 1997--2007  The R Development Core Team
4
 *  Copyright (C) 1997--2007  The R Development Core Team
5
 *  Copyright (C) 2003	      The R Foundation
5
 *  Copyright (C) 2003	      The R Foundation
6
 *
6
 *
7
 *  This program is free software; you can redistribute it and/or modify
7
 *  This program is free software; you can redistribute it and/or modify
8
 *  it under the terms of the GNU General Public License as published by
8
 *  it under the terms of the GNU General Public License as published by
9
 *  the Free Software Foundation; either version 2 of the License, or
9
 *  the Free Software Foundation; either version 2 of the License, or
10
 *  (at your option) any later version.
10
 *  (at your option) any later version.
11
 *
11
 *
12
 *  This program is distributed in the hope that it will be useful,
12
 *  This program is distributed in the hope that it will be useful,
13
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 *  GNU General Public License for more details.
15
 *  GNU General Public License for more details.
16
 *
16
 *
17
 *  A copy of the GNU General Public License is available via WWW at
17
 *  A copy of the GNU General Public License is available via WWW at
18
 *  http://www.gnu.org/copyleft/gpl.html.  You can also obtain it by
18
 *  http://www.gnu.org/copyleft/gpl.html.  You can also obtain it by
19
 *  writing to the Free Software Foundation, Inc., 51 Franklin Street
19
 *  writing to the Free Software Foundation, Inc., 51 Franklin Street
20
 *  Fifth Floor, Boston, MA 02110-1301  USA.
20
 *  Fifth Floor, Boston, MA 02110-1301  USA.
21
 */
21
 */
22
 
22
 
23
/* <UTF8-FIXME>
23
/* <UTF8-FIXME>
24
   Need to convert character strings to and from 8-bit.
24
   Need to convert character strings to and from 8-bit.
25
   Check other uses.
25
   Check other uses.
26
 */
26
 */
27
 
27
 
28
#ifdef HAVE_CONFIG_H
28
#ifdef HAVE_CONFIG_H
29
# include <config.h>
29
# include <config.h>
30
#endif
30
#endif
31
 
31
 
32
#include <Defn.h>
32
#include <Defn.h>
33
 
33
 
34
#include <string.h>
34
#include <string.h>
35
#include <stdlib.h>
35
#include <stdlib.h>
36
 
36
 
37
#include <Rmath.h>
37
#include <Rmath.h>
38
 
38
 
39
#include <R_ext/GraphicsEngine.h> /* needed for GEDevDesc in do_Externalgr */
39
#include <R_ext/GraphicsEngine.h> /* needed for GEDevDesc in do_Externalgr */
40
 
40
 
41
#include <R_ext/RConverters.h>
41
#include <R_ext/RConverters.h>
42
#ifdef HAVE_ICONV
42
#ifdef HAVE_ICONV
43
#include <R_ext/Riconv.h>
43
#include <R_ext/Riconv.h>
44
#endif
44
#endif
45
 
45
 
46
#ifndef max
46
#ifndef max
47
#define max(a, b) ((a > b)?(a):(b))
47
#define max(a, b) ((a > b)?(a):(b))
48
#endif
48
#endif
49
 
49
 
50
 
50
 
51
/* These are set during each call to do_dotCode() below. */
51
/* These are set during each call to do_dotCode() below. */
52
 
52
 
53
static SEXP NaokSymbol = NULL;
53
static SEXP NaokSymbol = NULL;
54
static SEXP DupSymbol = NULL;
54
static SEXP DupSymbol = NULL;
55
static SEXP PkgSymbol = NULL;
55
static SEXP PkgSymbol = NULL;
56
static SEXP EncSymbol = NULL;
56
static SEXP EncSymbol = NULL;
57
 
57
 
58
/* Global variable that should go. Should actually be doing this in 
58
/* Global variable that should go. Should actually be doing this in 
59
   a much more straightforward manner. */
59
   a much more straightforward manner. */
60
#include <Rdynpriv.h>
60
#include <Rdynpriv.h>
61
enum {FILENAME, DLL_HANDLE, R_OBJECT, NOT_DEFINED};
61
enum {FILENAME, DLL_HANDLE, R_OBJECT, NOT_DEFINED};
62
typedef struct {
62
typedef struct {
63
    char DLLname[PATH_MAX];
63
    char DLLname[PATH_MAX];
64
    HINSTANCE dll;
64
    HINSTANCE dll;
65
    SEXP  obj;
65
    SEXP  obj;
66
    int type;
66
    int type;
67
} DllReference;
67
} DllReference;
68
 
68
 
69
/* Maximum length of entry-point name, including nul terminator */
69
/* Maximum length of entry-point name, including nul terminator */
70
#define MaxSymbolBytes 1024
70
#define MaxSymbolBytes 1024
71
 
71
 
72
/* This looks up entry points in DLLs in a platform specific way. */
72
/* This looks up entry points in DLLs in a platform specific way. */
73
#define MAX_ARGS 65
73
#define MAX_ARGS 65
74
 
74
 
75
static DL_FUNC
75
static DL_FUNC
76
R_FindNativeSymbolFromDLL(char *name, DllReference *dll,
76
R_FindNativeSymbolFromDLL(char *name, DllReference *dll,
77
			  R_RegisteredNativeSymbol *symbol);
77
			  R_RegisteredNativeSymbol *symbol);
78
 
78
 
79
static SEXP naokfind(SEXP args, int * len, int *naok, int *dup,
79
static SEXP naokfind(SEXP args, int * len, int *naok, int *dup,
80
		     DllReference *dll);
80
		     DllReference *dll);
81
static SEXP pkgtrim(SEXP args, DllReference *dll);
81
static SEXP pkgtrim(SEXP args, DllReference *dll);
82
static SEXP enctrim(SEXP args, char *name, int len);
82
static SEXP enctrim(SEXP args, char *name, int len);
83
 
83
 
84
/*
84
/*
85
  Checks whether the specified object correctly identifies a native routine.
85
  Checks whether the specified object correctly identifies a native routine.
86
  This can be
86
  This can be
87
   a) a string,
87
   a) a string,
88
   b) an external pointer giving the address of the routine
88
   b) an external pointer giving the address of the routine
89
      (e.g. getNativeSymbolInfo("foo")$address)
89
      (e.g. getNativeSymbolInfo("foo")$address)
90
   c) or a NativeSymbolInfo itself  (e.g. getNativeSymbolInfo("foo"))
90
   c) or a NativeSymbolInfo itself  (e.g. getNativeSymbolInfo("foo"))
91
 
91
 
92
   NB: in the last two cases it sets fun as well!
92
   NB: in the last two cases it sets fun as well!
93
 */
93
 */
94
static void
94
static void
95
checkValidSymbolId(SEXP op, SEXP call, DL_FUNC *fun,
95
checkValidSymbolId(SEXP op, SEXP call, DL_FUNC *fun,
96
		   R_RegisteredNativeSymbol *symbol, char *buf)
96
		   R_RegisteredNativeSymbol *symbol, char *buf)
97
{
97
{
98
    if (isValidString(op)) return;
98
    if (isValidString(op)) return;
99
 
99
 
100
    *fun = NULL;
100
    *fun = NULL;
101
    if(TYPEOF(op) == EXTPTRSXP) {
101
    if(TYPEOF(op) == EXTPTRSXP) {
102
	char *p = NULL;
102
	char *p = NULL;
103
	if(R_ExternalPtrTag(op) == Rf_install("native symbol")) 
103
	if(R_ExternalPtrTag(op) == Rf_install("native symbol")) 
104
   	   *fun = (DL_FUNC) R_ExternalPtrAddr(op);
104
   	   *fun = (DL_FUNC) R_ExternalPtrAddr(op);
105
	else if(R_ExternalPtrTag(op) == Rf_install("registered native symbol")) {
105
	else if(R_ExternalPtrTag(op) == Rf_install("registered native symbol")) {
106
   	   R_RegisteredNativeSymbol *tmp;
106
   	   R_RegisteredNativeSymbol *tmp;
107
	   tmp = (R_RegisteredNativeSymbol *) R_ExternalPtrAddr(op);
107
	   tmp = (R_RegisteredNativeSymbol *) R_ExternalPtrAddr(op);
108
	   if(tmp) {
108
	   if(tmp) {
109
  	      if(symbol->type != R_ANY_SYM && symbol->type != tmp->type)
109
  	      if(symbol->type != R_ANY_SYM && symbol->type != tmp->type)
110
 	         errorcall(call, _("NULL value passed as symbol address"));
110
 	         errorcall(call, _("NULL value passed as symbol address"));
111
   	        /* Check the type of the symbol. */
111
   	        /* Check the type of the symbol. */
112
   	      switch(symbol->type) {
112
   	      switch(symbol->type) {
113
	      case R_C_SYM:
113
	      case R_C_SYM:
114
  	          *fun = tmp->symbol.c->fun;
114
  	          *fun = tmp->symbol.c->fun;
115
  	          p = tmp->symbol.c->name;
115
  	          p = tmp->symbol.c->name;
116
		  break;
116
		  break;
117
	      case R_CALL_SYM:
117
	      case R_CALL_SYM:
118
  	          *fun = tmp->symbol.call->fun;
118
  	          *fun = tmp->symbol.call->fun;
119
  	          p = tmp->symbol.call->name;
119
  	          p = tmp->symbol.call->name;
120
		  break;
120
		  break;
121
	      case R_FORTRAN_SYM:
121
	      case R_FORTRAN_SYM:
122
  	          *fun = tmp->symbol.fortran->fun;
122
  	          *fun = tmp->symbol.fortran->fun;
123
  	          p = tmp->symbol.fortran->name;
123
  	          p = tmp->symbol.fortran->name;
124
		  break;
124
		  break;
125
	      case R_EXTERNAL_SYM:
125
	      case R_EXTERNAL_SYM:
126
  	          *fun = tmp->symbol.external->fun;
126
  	          *fun = tmp->symbol.external->fun;
127
  	          p = tmp->symbol.external->name;
127
  	          p = tmp->symbol.external->name;
128
		  break;
128
		  break;
129
	      default:
129
	      default:
130
  	         /* Something unintended has happened if we get here. */
130
  	         /* Something unintended has happened if we get here. */
131
	          errorcall(call, _("Unimplemented type %d in createRSymbolObject"), 
131
	          errorcall(call, _("Unimplemented type %d in createRSymbolObject"), 
132
			    symbol->type);
132
			    symbol->type);
133
  	          break;
133
  	          break;
134
	      }
134
	      }
135
	      *symbol = *tmp;
135
	      *symbol = *tmp;
136
	   }
136
	   }
137
	}
137
	}
138
	/* This is illegal C */
138
	/* This is illegal C */
139
	if(*fun == NULL)
139
	if(*fun == NULL)
140
	    errorcall(call, _("NULL value passed as symbol address"));
140
	    errorcall(call, _("NULL value passed as symbol address"));
141
 
141
 
142
        /* copy the symbol name. */
142
        /* copy the symbol name. */
143
	if (p) {
143
	if (p) {
144
	    if (strlen(p) >= MaxSymbolBytes)
144
	    if (strlen(p) >= MaxSymbolBytes)
145
		error(_("symbol '%s' is too long"), p);
145
		error(_("symbol '%s' is too long"), p);
146
	    memcpy(buf, p, strlen(p)+1);
146
	    memcpy(buf, p, strlen(p)+1);
147
	    /* Ouch, no length check
147
	    /* Ouch, no length check
148
	    q = buf;
148
	    q = buf;
149
	    while ((*q = *p) != '\0') {
149
	    while ((*q = *p) != '\0') {
150
	        p++;
150
	        p++;
151
	        q++;
151
	        q++;
152
	    } */
152
	    } */
153
	}
153
	}
154
 
154
 
155
	return;
155
	return;
156
    } 
156
    } 
157
    else if(inherits(op, "NativeSymbolInfo")) {
157
    else if(inherits(op, "NativeSymbolInfo")) {
158
	checkValidSymbolId(VECTOR_ELT(op, 1), call, fun, symbol, buf);
158
	checkValidSymbolId(VECTOR_ELT(op, 1), call, fun, symbol, buf);
159
	return;
159
	return;
160
    }
160
    }
161
    
161
    
162
    errorcall(call,
162
    errorcall(call,
163
      _("'name' must be a string (of length 1) or native symbol reference"));
163
      _("'name' must be a string (of length 1) or native symbol reference"));
164
    return; /* not reached */
164
    return; /* not reached */
165
}
165
}
166
 
166
 
167
 
167
 
168
/*
168
/*
169
  This is the routine that is called by do_dotCode, do_dotcall and
169
  This is the routine that is called by do_dotCode, do_dotcall and
170
  do_External to find the DL_FUNC to invoke. It handles processing the
170
  do_External to find the DL_FUNC to invoke. It handles processing the
171
  arguments for the PACKAGE argument, if present, and also takes care
171
  arguments for the PACKAGE argument, if present, and also takes care
172
  of the cases where we are given a NativeSymbolInfo object, an
172
  of the cases where we are given a NativeSymbolInfo object, an
173
  address directly, and if the DLL is specified. If no PACKAGE is
173
  address directly, and if the DLL is specified. If no PACKAGE is
174
  provided, we check whether the calling function is in a namespace
174
  provided, we check whether the calling function is in a namespace
175
  and look there.
175
  and look there.
176
*/
176
*/
177
 
177
 
178
static SEXP
178
static SEXP
179
resolveNativeRoutine(SEXP args, DL_FUNC *fun,
179
resolveNativeRoutine(SEXP args, DL_FUNC *fun,
180
		     R_RegisteredNativeSymbol *symbol, char *buf,
180
		     R_RegisteredNativeSymbol *symbol, char *buf,
181
		     int *nargs, int *naok, int *dup, SEXP call)
181
		     int *nargs, int *naok, int *dup, SEXP call)
182
{
182
{
183
    SEXP op;
183
    SEXP op;
184
    const char *p; char *q;
184
    const char *p; char *q;
185
    DllReference dll = {"", NULL, NULL, NOT_DEFINED};
185
    DllReference dll = {"", NULL, NULL, NOT_DEFINED};
186
 
186
 
187
    op = CAR(args);
187
    op = CAR(args);
188
    /* NB, this sets fun, symbol and buf and is not just a check! */
188
    /* NB, this sets fun, symbol and buf and is not just a check! */
189
    checkValidSymbolId(op, call, fun, symbol, buf); 
189
    checkValidSymbolId(op, call, fun, symbol, buf); 
190
 
190
 
191
    /* The following code modifies the argument list */
191
    /* The following code modifies the argument list */
192
    /* We know this is ok because do_dotCode is entered */
192
    /* We know this is ok because do_dotCode is entered */
193
    /* with its arguments evaluated. */
193
    /* with its arguments evaluated. */
194
 
194
 
195
    strcpy(dll.DLLname, "");
195
    strcpy(dll.DLLname, "");
196
    if(symbol->type == R_C_SYM || symbol->type == R_FORTRAN_SYM) {
196
    if(symbol->type == R_C_SYM || symbol->type == R_FORTRAN_SYM) {
197
	args = naokfind(CDR(args), nargs, naok, dup, &dll);
197
	args = naokfind(CDR(args), nargs, naok, dup, &dll);
198
 
198
 
199
	if(*naok == NA_LOGICAL)
199
	if(*naok == NA_LOGICAL)
200
	    errorcall(call, _("invalid '%s' value"), "naok");
200
	    errorcall(call, _("invalid '%s' value"), "naok");
201
	if(*nargs > MAX_ARGS)
201
	if(*nargs > MAX_ARGS)
202
	    errorcall(call, _("too many arguments in foreign function call"));
202
	    errorcall(call, _("too many arguments in foreign function call"));
203
    } else {
203
    } else {
204
	if (PkgSymbol == NULL) PkgSymbol = install("PACKAGE");
204
	if (PkgSymbol == NULL) PkgSymbol = install("PACKAGE");
205
	/* This has the side effect of setting dll.type if a PACKAGE=
205
	/* This has the side effect of setting dll.type if a PACKAGE=
206
	   argument if found */
206
	   argument if found */
207
	args = pkgtrim(args, &dll);
207
	args = pkgtrim(args, &dll);
208
    }
208
    }
209
 
209
 
210
    /* Make up the load symbol and look it up. */
210
    /* Make up the load symbol and look it up. */
211
 
211
 
212
    if(TYPEOF(op) == STRSXP) {
212
    if(TYPEOF(op) == STRSXP) {
213
	p = translateChar(STRING_ELT(op, 0));
213
	p = translateChar(STRING_ELT(op, 0));
214
	if(strlen(p) >= MaxSymbolBytes)
214
	if(strlen(p) >= MaxSymbolBytes)
215
	    error(_("symbol '%s' is too long"), p);
215
	    error(_("symbol '%s' is too long"), p);
216
	q = buf;
216
	q = buf;
217
	while ((*q = *p) != '\0') {
217
	while ((*q = *p) != '\0') {
218
	    if(symbol->type == R_FORTRAN_SYM) *q = tolower(*q);
218
	    if(symbol->type == R_FORTRAN_SYM) *q = tolower(*q);
219
	    p++;
219
	    p++;
220
	    q++;
220
	    q++;
221
	}
221
	}
222
    }
222
    }
223
 
223
 
224
    if(!*fun) {
224
    if(!*fun) {
225
	if(dll.type != FILENAME) {
225
	if(dll.type != FILENAME) {
226
	    /* no PACKAGE= arg, so see if we can identify a DLL
226
	    /* no PACKAGE= arg, so see if we can identify a DLL
227
	       from the namespace defining the function */
227
	       from the namespace defining the function */
228
	    *fun = R_FindNativeSymbolFromDLL(buf, &dll, symbol);
228
	    *fun = R_FindNativeSymbolFromDLL(buf, &dll, symbol);
229
	    /* need to continue if there is no PACKAGE arg or if the
229
	    /* need to continue if there is no PACKAGE arg or if the
230
	       namespace search failed
230
	       namespace search failed
231
	       if(!fun)
231
	       if(!fun)
232
	           errorcall(call, _("cannot resolve native routine"));
232
	           errorcall(call, _("cannot resolve native routine"));
233
	    */
233
	    */
234
	}
234
	}
235
 
235
 
236
	/* NB: the actual conversion to the symbol is done in
236
	/* NB: the actual conversion to the symbol is done in
237
	   R_dlsym in Rdynload.c.  That prepends an underscore (usually),
237
	   R_dlsym in Rdynload.c.  That prepends an underscore (usually),
238
	   and may append one or more underscores.
238
	   and may append one or more underscores.
239
	*/
239
	*/
240
 
240
 
241
	if (!*fun && !(*fun = R_FindSymbol(buf, dll.DLLname, symbol))) {
241
	if (!*fun && !(*fun = R_FindSymbol(buf, dll.DLLname, symbol))) {
242
	    if(strlen(dll.DLLname))
242
	    if(strlen(dll.DLLname))
243
		errorcall(call,
243
		errorcall(call,
244
			  _("%s symbol name \"%s\" not in DLL for package \"%s\""),
244
			  _("%s symbol name \"%s\" not in DLL for package \"%s\""),
245
			  symbol->type == R_FORTRAN_SYM ? "Fortran" : "C", buf,
245
			  symbol->type == R_FORTRAN_SYM ? "Fortran" : "C", buf,
246
			  dll.DLLname);
246
			  dll.DLLname);
247
	    else
247
	    else
248
		errorcall(call, _("%s symbol name \"%s\" not in load table"),
248
		errorcall(call, _("%s symbol name \"%s\" not in load table"),
249
			  symbol->type == R_FORTRAN_SYM ? "Fortran" : "C", buf);
249
			  symbol->type == R_FORTRAN_SYM ? "Fortran" : "C", buf);
250
	}
250
	}
251
    }
251
    }
252
 
252
 
253
    return(args);
253
    return(args);
254
}
254
}
255
 
255
 
256
 
256
 
257
 
257
 
258
/* Convert an R object to a non-moveable C/Fortran object and return
258
/* Convert an R object to a non-moveable C/Fortran object and return
259
   a pointer to it.  This leaves pointers for anything other
259
   a pointer to it.  This leaves pointers for anything other
260
   than vectors and lists unaltered.
260
   than vectors and lists unaltered.
261
*/
261
*/
262
 
262
 
263
static Rboolean
263
static Rboolean
264
checkNativeType(int targetType, int actualType)
264
checkNativeType(int targetType, int actualType)
265
{
265
{
266
    if(targetType > 0) {
266
    if(targetType > 0) {
267
	if(targetType == INTSXP || targetType == LGLSXP) {
267
	if(targetType == INTSXP || targetType == LGLSXP) {
268
	    return(actualType == INTSXP || actualType == LGLSXP);
268
	    return(actualType == INTSXP || actualType == LGLSXP);
269
	}
269
	}
270
	return(targetType == actualType);
270
	return(targetType == actualType);
271
    }
271
    }
272
 
272
 
273
    return(TRUE);
273
    return(TRUE);
274
}
274
}
275
 
275
 
276
static void *RObjToCPtr(SEXP s, int naok, int dup, int narg, int Fort,
276
static void *RObjToCPtr(SEXP s, int naok, int dup, int narg, int Fort,
277
			const char *name, R_toCConverter **converter,
277
			const char *name, R_toCConverter **converter,
278
			int targetType, char* encname)
278
			int targetType, char* encname)
279
{
279
{
280
    Rbyte *rawptr;
280
    Rbyte *rawptr;
281
    int *iptr;
281
    int *iptr;
282
    float *sptr;
282
    float *sptr;
283
    double *rptr;
283
    double *rptr;
284
    char **cptr, *fptr;
284
    char **cptr, *fptr;
285
    Rcomplex *zptr;
285
    Rcomplex *zptr;
286
    SEXP *lptr, CSingSymbol=install("Csingle");
286
    SEXP *lptr, CSingSymbol=install("Csingle");
287
    int i, l, n;
287
    int i, l, n;
288
 
288
 
289
    if(converter)
289
    if(converter)
290
	*converter = NULL;
290
	*converter = NULL;
291
 
291
 
292
    if(length(getAttrib(s, R_ClassSymbol))) {
292
    if(length(getAttrib(s, R_ClassSymbol))) {
293
	R_CConvertInfo info;
293
	R_CConvertInfo info;
294
	int success;
294
	int success;
295
        void *ans;
295
        void *ans;
296
 
296
 
297
	info.naok = naok;
297
	info.naok = naok;
298
	info.dup = dup;
298
	info.dup = dup;
299
	info.narg = narg;
299
	info.narg = narg;
300
	info.Fort = Fort;
300
	info.Fort = Fort;
301
        info.name = name;
301
        info.name = name;
302
 
302
 
303
	ans = Rf_convertToC(s, &info, &success, converter);
303
	ans = Rf_convertToC(s, &info, &success, converter);
304
	if(success)
304
	if(success)
305
	    return(ans);
305
	    return(ans);
306
    }
306
    }
307
 
307
 
308
    if(checkNativeType(targetType, TYPEOF(s)) == FALSE) {
308
    if(checkNativeType(targetType, TYPEOF(s)) == FALSE) {
309
	if(!dup) {
309
	if(!dup) {
310
	    error(_("explicit request not to duplicate arguments in call to '%s', but argument %d is of the wrong type (%d != %d)"),
310
	    error(_("explicit request not to duplicate arguments in call to '%s', but argument %d is of the wrong type (%d != %d)"),
311
		  name, narg + 1, targetType, TYPEOF(s));
311
		  name, narg + 1, targetType, TYPEOF(s));
312
	}
312
	}
313
 
313
 
314
	if(targetType != SINGLESXP)
314
	if(targetType != SINGLESXP)
315
	    s = coerceVector(s, targetType);
315
	    s = coerceVector(s, targetType);
316
    }
316
    }
317
 
317
 
318
    switch(TYPEOF(s)) {
318
    switch(TYPEOF(s)) {
319
    case RAWSXP:
319
    case RAWSXP:
320
    n = LENGTH(s);
320
    n = LENGTH(s);
321
    rawptr = RAW(s);
321
    rawptr = RAW(s);
322
    if (dup) {
322
    if (dup) {
323
        rawptr = (Rbyte *) R_alloc(n, sizeof(Rbyte));
323
        rawptr = (Rbyte *) R_alloc(n, sizeof(Rbyte));
324
        for (i = 0; i < n; i++)
324
        for (i = 0; i < n; i++)
325
            rawptr[i] = RAW(s)[i];
325
            rawptr[i] = RAW(s)[i];
326
    }
326
    }
327
    return (void *) rawptr;
327
    return (void *) rawptr;
328
    break;
328
    break;
329
    case LGLSXP:
329
    case LGLSXP:
330
    case INTSXP:
330
    case INTSXP:
331
	n = LENGTH(s);
331
	n = LENGTH(s);
332
	iptr = INTEGER(s);
332
	iptr = INTEGER(s);
333
	for (i = 0 ; i < n ; i++) {
333
	for (i = 0 ; i < n ; i++) {
334
	    if(!naok && iptr[i] == NA_INTEGER)
334
	    if(!naok && iptr[i] == NA_INTEGER)
335
		error(_("NAs in foreign function call (arg %d)"), narg);
335
		error(_("NAs in foreign function call (arg %d)"), narg);
336
	}
336
	}
337
	if (dup) {
337
	if (dup) {
338
	    iptr = (int*)R_alloc(n, sizeof(int));
338
	    iptr = (int*)R_alloc(n, sizeof(int));
339
	    for (i = 0 ; i < n ; i++)
339
	    for (i = 0 ; i < n ; i++)
340
		iptr[i] = INTEGER(s)[i];
340
		iptr[i] = INTEGER(s)[i];
341
	}
341
	}
342
	return (void*)iptr;
342
	return (void*)iptr;
343
	break;
343
	break;
344
    case REALSXP:
344
    case REALSXP:
345
	n = LENGTH(s);
345
	n = LENGTH(s);
346
	rptr = REAL(s);
346
	rptr = REAL(s);
347
	for (i = 0 ; i < n ; i++) {
347
	for (i = 0 ; i < n ; i++) {
348
	    if(!naok && !R_FINITE(rptr[i]))
348
	    if(!naok && !R_FINITE(rptr[i]))
349
		error(_("NA/NaN/Inf in foreign function call (arg %d)"), narg);
349
		error(_("NA/NaN/Inf in foreign function call (arg %d)"), narg);
350
	}
350
	}
351
	if (dup) {
351
	if (dup) {
352
	    if(asLogical(getAttrib(s, CSingSymbol)) == 1) {
352
	    if(asLogical(getAttrib(s, CSingSymbol)) == 1) {
353
		sptr = (float*)R_alloc(n, sizeof(float));
353
		sptr = (float*)R_alloc(n, sizeof(float));
354
		for (i = 0 ; i < n ; i++)
354
		for (i = 0 ; i < n ; i++)
355
		    sptr[i] = (float) REAL(s)[i];
355
		    sptr[i] = (float) REAL(s)[i];
356
		return (void*)sptr;
356
		return (void*)sptr;
357
	    } else {
357
	    } else {
358
		rptr = (double*)R_alloc(n, sizeof(double));
358
		rptr = (double*)R_alloc(n, sizeof(double));
359
		for (i = 0 ; i < n ; i++)
359
		for (i = 0 ; i < n ; i++)
360
		    rptr[i] = REAL(s)[i];
360
		    rptr[i] = REAL(s)[i];
361
		return (void*)rptr;
361
		return (void*)rptr;
362
	    }
362
	    }
363
	} else
363
	} else
364
	    return (void*)rptr;
364
	    return (void*)rptr;
365
	break;
365
	break;
366
    case CPLXSXP:
366
    case CPLXSXP:
367
	n = LENGTH(s);
367
	n = LENGTH(s);
368
	zptr = COMPLEX(s);
368
	zptr = COMPLEX(s);
369
	for (i = 0 ; i < n ; i++) {
369
	for (i = 0 ; i < n ; i++) {
370
	    if(!naok && (!R_FINITE(zptr[i].r) || !R_FINITE(zptr[i].i)))
370
	    if(!naok && (!R_FINITE(zptr[i].r) || !R_FINITE(zptr[i].i)))
371
		error(_("complex NA/NaN/Inf in foreign function call (arg %d)"),
371
		error(_("complex NA/NaN/Inf in foreign function call (arg %d)"),
372
		      narg);
372
		      narg);
373
	}
373
	}
374
	if (dup) {
374
	if (dup) {
375
	    zptr = (Rcomplex*)R_alloc(n, sizeof(Rcomplex));
375
	    zptr = (Rcomplex*)R_alloc(n, sizeof(Rcomplex));
376
	    for (i = 0 ; i < n ; i++)
376
	    for (i = 0 ; i < n ; i++)
377
		zptr[i] = COMPLEX(s)[i];
377
		zptr[i] = COMPLEX(s)[i];
378
	}
378
	}
379
	return (void*)zptr;
379
	return (void*)zptr;
380
	break;
380
	break;
381
    case STRSXP:
381
    case STRSXP:
382
	if(!dup)
382
	if(!dup)
383
	    error(_("character variables must be duplicated in .C/.Fortran"));
383
	    error(_("character variables must be duplicated in .C/.Fortran"));
384
	n = LENGTH(s);
384
	n = LENGTH(s);
385
	if(Fort) {
385
	if(Fort) {
386
	    const char *ss = translateChar(STRING_ELT(s, 0));
386
	    const char *ss = translateChar(STRING_ELT(s, 0));
387
	    if(n > 1)
387
	    if(n > 1)
388
		warning(_("only first string in char vector used in .Fortran"));
388
		warning(_("only first string in char vector used in .Fortran"));
389
	    l = strlen(ss);
389
	    l = strlen(ss);
390
	    fptr = (char*)R_alloc(max(255, l) + 1, sizeof(char));
390
	    fptr = (char*)R_alloc(max(255, l) + 1, sizeof(char));
391
	    strcpy(fptr, ss);
391
	    strcpy(fptr, ss);
392
	    return (void*)fptr;
392
	    return (void*)fptr;
393
	} else {
393
	} else {
394
	    cptr = (char**)R_alloc(n, sizeof(char*));
394
	    cptr = (char**)R_alloc(n, sizeof(char*));
395
	    if(strlen(encname)) {
395
	    if(strlen(encname)) {
396
#ifdef HAVE_ICONV
396
#ifdef HAVE_ICONV
397
		char *outbuf;
397
		char *outbuf;
398
                const char *inbuf;
398
                const char *inbuf;
399
		size_t inb, outb, outb0, res;
399
		size_t inb, outb, outb0, res;
400
		void *obj = Riconv_open("", encname); /* (to, from) */
400
		void *obj = Riconv_open("", encname); /* (to, from) */
401
		if(obj == (void *)-1)
401
		if(obj == (void *)-1)
402
		    error(_("unsupported encoding '%s'"), encname);
402
		    error(_("unsupported encoding '%s'"), encname);
403
		for (i = 0 ; i < n ; i++) {
403
		for (i = 0 ; i < n ; i++) {
404
		    inbuf = CHAR(STRING_ELT(s, i));
404
		    inbuf = CHAR(STRING_ELT(s, i));
405
		    inb = strlen(inbuf);
405
		    inb = strlen(inbuf);
406
		    outb0 = 3*inb;
406
		    outb0 = 3*inb;
407
		restart_in:
407
		restart_in:
408
		    cptr[i] = outbuf = (char*)R_alloc(outb0 + 1, sizeof(char));
408
		    cptr[i] = outbuf = (char*)R_alloc(outb0 + 1, sizeof(char));
409
		    outb = 3*inb;
409
		    outb = 3*inb;
410
		    Riconv(obj, NULL, NULL, &outbuf, &outb);
410
		    Riconv(obj, NULL, NULL, &outbuf, &outb);
411
		    res = Riconv(obj, &inbuf , &inb, &outbuf, &outb);
411
		    res = Riconv(obj, &inbuf , &inb, &outbuf, &outb);
412
		    if(res == -1 && errno == E2BIG) {
412
		    if(res == -1 && errno == E2BIG) {
413
			outb0 *= 3;
413
			outb0 *= 3;
414
			goto restart_in;
414
			goto restart_in;
415
		    }
415
		    }
416
		    if(res == -1) 
416
		    if(res == -1) 
417
			error(_("conversion problem in re-encoding to '%s'"),
417
			error(_("conversion problem in re-encoding to '%s'"),
418
			      encname);
418
			      encname);
419
		    *outbuf = '\0';
419
		    *outbuf = '\0';
420
		}
420
		}
421
		Riconv_close(obj);
421
		Riconv_close(obj);
422
	    } else 
422
	    } else 
423
#else
423
#else
424
		warning(_("re-encoding is not supported on this system"));
424
		warning(_("re-encoding is not supported on this system"));
425
	    }
425
	    }
426
#endif
426
#endif
427
	    {
427
	    {
428
		for (i = 0 ; i < n ; i++) {
428
		for (i = 0 ; i < n ; i++) {
429
		    const char *ss = translateChar(STRING_ELT(s, i));
429
		    const char *ss = translateChar(STRING_ELT(s, i));
430
		    l = strlen(ss);
430
		    l = strlen(ss);
431
		    cptr[i] = (char*)R_alloc(l + 1, sizeof(char));
431
		    cptr[i] = (char*)R_alloc(l + 1, sizeof(char));
432
		    strcpy(cptr[i], ss);
432
		    strcpy(cptr[i], ss);
433
		}
433
		}
434
	    }
434
	    }
435
	    return (void*)cptr;
435
	    return (void*)cptr;
436
	}
436
	}
437
	break;
437
	break;
438
    case VECSXP:
438
    case VECSXP:
439
	if(!dup)
439
	if(!dup)
440
	    error(_("lists must be duplicated in .C"));
440
	    error(_("lists must be duplicated in .C"));
441
	/* if (!dup) return (void*)VECTOR_PTR(s); ***** Dangerous to GC!!! */
441
	/* if (!dup) return (void*)VECTOR_PTR(s); ***** Dangerous to GC!!! */
442
  	n = length(s);
442
  	n = length(s);
443
	lptr = (SEXP*)R_alloc(n, sizeof(SEXP));
443
	lptr = (SEXP*)R_alloc(n, sizeof(SEXP));
444
	for (i = 0 ; i < n ; i++) {
444
	for (i = 0 ; i < n ; i++) {
445
	    lptr[i] = VECTOR_ELT(s, i);
445
	    lptr[i] = VECTOR_ELT(s, i);
446
	}
446
	}
447
 	return (void*)lptr;
447
 	return (void*)lptr;
448
	break;
448
	break;
449
    case LISTSXP:
449
    case LISTSXP:
450
	if(Fort) error(_("invalid mode to pass to Fortran (arg %d)"), narg);
450
	if(Fort) error(_("invalid mode to pass to Fortran (arg %d)"), narg);
451
	/* Warning : The following looks like it could bite ... */
451
	/* Warning : The following looks like it could bite ... */
452
	if(!dup) return (void*)s;
452
	if(!dup) return (void*)s;
453
	n = length(s);
453
	n = length(s);
454
	cptr = (char**)R_alloc(n, sizeof(char*));
454
	cptr = (char**)R_alloc(n, sizeof(char*));
455
	for(i=0 ; i<n ; i++) {
455
	for(i=0 ; i<n ; i++) {
456
	    cptr[i] = (char*)s;
456
	    cptr[i] = (char*)s;
457
	    s = CDR(s);
457
	    s = CDR(s);
458
	}
458
	}
459
	return (void*)cptr;
459
	return (void*)cptr;
460
	break;
460
	break;
461
    default:
461
    default:
462
	if(Fort) error(_("invalid mode to pass to Fortran (arg %d)"), narg);
462
	if(Fort) error(_("invalid mode to pass to Fortran (arg %d)"), narg);
463
	return (void*)s;
463
	return (void*)s;
464
    }
464
    }
465
}
465
}
466
 
466
 
467
 
467
 
468
static SEXP CPtrToRObj(void *p, SEXP arg, int Fort,
468
static SEXP CPtrToRObj(void *p, SEXP arg, int Fort,
469
		       R_NativePrimitiveArgType type, char *encname)
469
		       R_NativePrimitiveArgType type, char *encname)
470
{
470
{
471
    Rbyte *rawptr;
471
    Rbyte *rawptr;
472
    int *iptr, n=length(arg);
472
    int *iptr, n=length(arg);
473
    float *sptr;
473
    float *sptr;
474
    double *rptr;
474
    double *rptr;
475
    char **cptr, buf[256];
475
    char **cptr, buf[256];
476
    Rcomplex *zptr;
476
    Rcomplex *zptr;
477
    SEXP *lptr, CSingSymbol = install("Csingle");
477
    SEXP *lptr, CSingSymbol = install("Csingle");
478
    int i;
478
    int i;
479
    SEXP s, t;
479
    SEXP s, t;
480
 
480
 
481
    switch(type) {
481
    switch(type) {
482
    case RAWSXP:
482
    case RAWSXP:
483
    s = allocVector(type, n);
483
    s = allocVector(type, n);
484
    rawptr = (Rbyte *)p;
484
    rawptr = (Rbyte *)p;
485
    for (i = 0; i < n; i++)
485
    for (i = 0; i < n; i++)
486
        RAW(s)[i] = rawptr[i];
486
        RAW(s)[i] = rawptr[i];
487
    break;
487
    break;
488
    case LGLSXP:
488
    case LGLSXP:
489
    case INTSXP:
489
    case INTSXP:
490
	s = allocVector(type, n);
490
	s = allocVector(type, n);
491
	iptr = (int*)p;
491
	iptr = (int*)p;
492
	for(i=0 ; i<n ; i++)
492
	for(i=0 ; i<n ; i++)
493
            INTEGER(s)[i] = iptr[i];
493
            INTEGER(s)[i] = iptr[i];
494
	break;
494
	break;
495
    case REALSXP:
495
    case REALSXP:
496
    case SINGLESXP:
496
    case SINGLESXP:
497
	s = allocVector(REALSXP, n);
497
	s = allocVector(REALSXP, n);
498
	if(type == SINGLESXP || asLogical(getAttrib(arg, CSingSymbol)) == 1) {
498
	if(type == SINGLESXP || asLogical(getAttrib(arg, CSingSymbol)) == 1) {
499
	    sptr = (float*) p;
499
	    sptr = (float*) p;
500
	    for(i=0 ; i<n ; i++) REAL(s)[i] = (double) sptr[i];
500
	    for(i=0 ; i<n ; i++) REAL(s)[i] = (double) sptr[i];
501
	} else {
501
	} else {
502
	    rptr = (double*) p;
502
	    rptr = (double*) p;
503
	    for(i=0 ; i<n ; i++) REAL(s)[i] = rptr[i];
503
	    for(i=0 ; i<n ; i++) REAL(s)[i] = rptr[i];
504
	}
504
	}
505
	break;
505
	break;
506
    case CPLXSXP:
506
    case CPLXSXP:
507
	s = allocVector(type, n);
507
	s = allocVector(type, n);
508
	zptr = (Rcomplex*)p;
508
	zptr = (Rcomplex*)p;
509
	for(i=0 ; i<n ; i++) {
509
	for(i=0 ; i<n ; i++) {
510
	    COMPLEX(s)[i] = zptr[i];
510
	    COMPLEX(s)[i] = zptr[i];
511
	}
511
	}
512
	break;
512
	break;
513
    case STRSXP:
513
    case STRSXP:
514
	if(Fort) {
514
	if(Fort) {
515
	    /* only return one string: warned on the R -> Fortran step */
515
	    /* only return one string: warned on the R -> Fortran step */
516
	    strncpy(buf, (char*)p, 255);
516
	    strncpy(buf, (char*)p, 255);
517
	    buf[255] = '\0';
517
	    buf[255] = '\0';
518
	    PROTECT(s = allocVector(type, 1));
518
	    PROTECT(s = allocVector(type, 1));
519
	    SET_STRING_ELT(s, 0, mkChar(buf));
519
	    SET_STRING_ELT(s, 0, mkChar(buf));
520
	    UNPROTECT(1);
520
	    UNPROTECT(1);
521
	} else {
521
	} else {
522
	    PROTECT(s = allocVector(type, n));
522
	    PROTECT(s = allocVector(type, n));
523
	    cptr = (char**)p;
523
	    cptr = (char**)p;
524
	    if(strlen(encname)) {
524
	    if(strlen(encname)) {
525
#ifdef HAVE_ICONV
525
#ifdef HAVE_ICONV
526
                const char *inbuf;
526
                const char *inbuf;
527
		char *outbuf, *p;
527
		char *outbuf, *p;
528
		size_t inb, outb, outb0, res;
528
		size_t inb, outb, outb0, res;
529
		void *obj = Riconv_open(encname, ""); /* (to, from) */
529
		void *obj = Riconv_open(encname, ""); /* (to, from) */
530
		if(obj == (void *)(-1))
530
		if(obj == (void *)(-1))
531
		    error(_("unsupported encoding '%s'"), encname);
531
		    error(_("unsupported encoding '%s'"), encname);
532
		for (i = 0 ; i < n ; i++) {
532
		for (i = 0 ; i < n ; i++) {
533
		    inbuf = cptr[i]; inb = strlen(inbuf);
533
		    inbuf = cptr[i]; inb = strlen(inbuf);
534
		    outb0 = 3*inb;
534
		    outb0 = 3*inb;
535
		restart_out:
535
		restart_out:
536
		    p = outbuf = (char*)R_alloc(outb0 + 1, sizeof(char));
536
		    p = outbuf = (char*)R_alloc(outb0 + 1, sizeof(char));
537
		    outb = outb0;
537
		    outb = outb0;
538
		    Riconv(obj, NULL, NULL, &outbuf, &outb);
538
		    Riconv(obj, NULL, NULL, &outbuf, &outb);
539
		    res = Riconv(obj, &inbuf , &inb, &outbuf, &outb);
539
		    res = Riconv(obj, &inbuf , &inb, &outbuf, &outb);
540
		    if(res == -1 && errno == E2BIG) {
540
		    if(res == -1 && errno == E2BIG) {
541
			outb0 *= 3;
541
			outb0 *= 3;
542
			goto restart_out;
542
			goto restart_out;
543
		    }
543
		    }
544
		    if(res == -1) 
544
		    if(res == -1) 
545
			error(_("conversion problem in re-encoding from '%s'"),
545
			error(_("conversion problem in re-encoding from '%s'"),
546
			      encname);
546
			      encname);
547
		    *outbuf = '\0';
547
		    *outbuf = '\0';
548
		    SET_STRING_ELT(s, i, mkChar(p));
548
		    SET_STRING_ELT(s, i, mkChar(p));
549
		}
549
		}
550
		Riconv_close(obj);
550
		Riconv_close(obj);
551
	    } else 
551
	    } else 
552
#else
552
#else
553
		warning(_("re-encoding is not supported on this system"));
553
		warning(_("re-encoding is not supported on this system"));
554
	    }
554
	    }
555
#endif
555
#endif
556
	    {
556
	    {
557
		for(i = 0 ; i < n ; i++)
557
		for(i = 0 ; i < n ; i++)
558
		    SET_STRING_ELT(s, i, mkChar(cptr[i]));
558
		    SET_STRING_ELT(s, i, mkChar(cptr[i]));
559
	    }
559
	    }
560
	    UNPROTECT(1);
560
	    UNPROTECT(1);
561
	}
561
	}
562
	break;
562
	break;
563
    case VECSXP:
563
    case VECSXP:
564
	PROTECT(s = allocVector(VECSXP, n));
564
	PROTECT(s = allocVector(VECSXP, n));
565
	lptr = (SEXP*)p;
565
	lptr = (SEXP*)p;
566
	for (i = 0 ; i < n ; i++) {
566
	for (i = 0 ; i < n ; i++) {
567
	    SET_VECTOR_ELT(s, i, lptr[i]);
567
	    SET_VECTOR_ELT(s, i, lptr[i]);
568
	}
568
	}
569
	UNPROTECT(1);
569
	UNPROTECT(1);
570
	break;
570
	break;
571
    case LISTSXP:
571
    case LISTSXP:
572
	PROTECT(t = s = allocList(n));
572
	PROTECT(t = s = allocList(n));
573
	lptr = (SEXP*)p;
573
	lptr = (SEXP*)p;
574
	for(i=0 ; i<n ; i++) {
574
	for(i=0 ; i<n ; i++) {
575
	    SETCAR(t, lptr[i]);
575
	    SETCAR(t, lptr[i]);
576
	    t = CDR(t);
576
	    t = CDR(t);
577
	}
577
	}
578
	UNPROTECT(1);
578
	UNPROTECT(1);
579
    default:
579
    default:
580
	s = (SEXP)p;
580
	s = (SEXP)p;
581
    }
581
    }
582
    return s;
582
    return s;
583
}
583
}
584
 
584
 
585
#define THROW_REGISTRATION_TYPE_ERROR
585
#define THROW_REGISTRATION_TYPE_ERROR
586
 
586
 
587
#ifdef THROW_REGISTRATION_TYPE_ERROR
587
#ifdef THROW_REGISTRATION_TYPE_ERROR
588
static Rboolean
588
static Rboolean
589
comparePrimitiveTypes(R_NativePrimitiveArgType type, SEXP s, Rboolean dup)
589
comparePrimitiveTypes(R_NativePrimitiveArgType type, SEXP s, Rboolean dup)
590
{
590
{
591
   if(type == ANYSXP || TYPEOF(s) == type)
591
   if(type == ANYSXP || TYPEOF(s) == type)
592
      return(TRUE);
592
      return(TRUE);
593
 
593
 
594
   if(dup && type == SINGLESXP)
594
   if(dup && type == SINGLESXP)
595
      return(asLogical(getAttrib(s, install("Csingle"))) == TRUE);
595
      return(asLogical(getAttrib(s, install("Csingle"))) == TRUE);
596
 
596
 
597
   return(FALSE);
597
   return(FALSE);
598
}
598
}
599
#endif /* end of THROW_REGISTRATION_TYPE_ERROR */
599
#endif /* end of THROW_REGISTRATION_TYPE_ERROR */
600
 
600
 
601
 
601
 
602
/* Foreign Function Interface.  This code allows a user to call C */
602
/* Foreign Function Interface.  This code allows a user to call C */
603
/* or Fortran code which is either statically or dynamically linked. */
603
/* or Fortran code which is either statically or dynamically linked. */
604
 
604
 
605
/* NB: this leaves NAOK and DUP arguments on the list */
605
/* NB: this leaves NAOK and DUP arguments on the list */
606
 
606
 
607
/* find NAOK and DUP, find and remove PACKAGE */
607
/* find NAOK and DUP, find and remove PACKAGE */
608
static SEXP naokfind(SEXP args, int * len, int *naok, int *dup,
608
static SEXP naokfind(SEXP args, int * len, int *naok, int *dup,
609
		     DllReference *dll)
609
		     DllReference *dll)
610
{
610
{
611
    SEXP s, prev;
611
    SEXP s, prev;
612
    int nargs=0, naokused=0, dupused=0, pkgused=0;
612
    int nargs=0, naokused=0, dupused=0, pkgused=0;
613
    const char *p;
613
    const char *p;
614
 
614
 
615
    *naok = 0;
615
    *naok = 0;
616
    *dup = 1;
616
    *dup = 1;
617
    *len = 0;
617
    *len = 0;
618
    for(s = args, prev=args; s != R_NilValue;) {
618
    for(s = args, prev=args; s != R_NilValue;) {
619
	if(TAG(s) == NaokSymbol) {
619
	if(TAG(s) == NaokSymbol) {
620
	    *naok = asLogical(CAR(s));
620
	    *naok = asLogical(CAR(s));
621
	    /* SETCDR(prev, s = CDR(s)); */
621
	    /* SETCDR(prev, s = CDR(s)); */
622
	    if(naokused++ == 1) warning(_("NAOK used more than once"));
622
	    if(naokused++ == 1) warning(_("NAOK used more than once"));
623
	} else if(TAG(s) == DupSymbol) {
623
	} else if(TAG(s) == DupSymbol) {
624
	    *dup = asLogical(CAR(s));
624
	    *dup = asLogical(CAR(s));
625
	    /* SETCDR(prev, s = CDR(s)); */
625
	    /* SETCDR(prev, s = CDR(s)); */
626
	    if(dupused++ == 1) warning(_("DUP used more than once"));
626
	    if(dupused++ == 1) warning(_("DUP used more than once"));
627
	} else if(TAG(s) == PkgSymbol) {
627
	} else if(TAG(s) == PkgSymbol) {
628
	    dll->obj = CAR(s);
628
	    dll->obj = CAR(s);
629
	    if(TYPEOF(CAR(s)) == STRSXP) {
629
	    if(TYPEOF(CAR(s)) == STRSXP) {
630
		p = translateChar(STRING_ELT(CAR(s), 0));
630
		p = translateChar(STRING_ELT(CAR(s), 0));
631
		if(strlen(p) > PATH_MAX - 1)
631
		if(strlen(p) > PATH_MAX - 1)
632
		    error(_("DLL name is too long"));
632
		    error(_("DLL name is too long"));
633
		dll->type = FILENAME;
633
		dll->type = FILENAME;
634
		strcpy(dll->DLLname, p);
634
		strcpy(dll->DLLname, p);
635
		if(pkgused++ > 1) warning(_("PACKAGE used more than once"));
635
		if(pkgused++ > 1) warning(_("PACKAGE used more than once"));
636
		/* More generally, this should allow us to process
636
		/* More generally, this should allow us to process
637
		   any additional arguments and not insist that PACKAGE
637
		   any additional arguments and not insist that PACKAGE
638
		   be the last argument.
638
		   be the last argument.
639
		*/
639
		*/
640
	    } else {
640
	    } else {
641
		    /* Have a DLL object*/
641
		    /* Have a DLL object*/
642
	        if(TYPEOF(CAR(s)) == EXTPTRSXP) {
642
	        if(TYPEOF(CAR(s)) == EXTPTRSXP) {
643
		    dll->dll = (HINSTANCE) R_ExternalPtrAddr(CAR(s));
643
		    dll->dll = (HINSTANCE) R_ExternalPtrAddr(CAR(s));
644
		    dll->type = DLL_HANDLE;
644
		    dll->type = DLL_HANDLE;
645
		} else if(TYPEOF(CAR(s)) == VECSXP) {
645
		} else if(TYPEOF(CAR(s)) == VECSXP) {
646
		    dll->type = R_OBJECT;
646
		    dll->type = R_OBJECT;
647
		    dll->obj = s;
647
		    dll->obj = s;
648
		    strcpy(dll->DLLname,
648
		    strcpy(dll->DLLname,
649
			   translateChar(STRING_ELT(VECTOR_ELT(CAR(s), 1), 0)));
649
			   translateChar(STRING_ELT(VECTOR_ELT(CAR(s), 1), 0)));
650
		    dll->dll = (HINSTANCE) R_ExternalPtrAddr(VECTOR_ELT(s, 4));
650
		    dll->dll = (HINSTANCE) R_ExternalPtrAddr(VECTOR_ELT(s, 4));
651
		}
651
		}
652
	    }
652
	    }
653
	} else {
653
	} else {
654
	    nargs++;
654
	    nargs++;
655
	    prev = s;
655
	    prev = s;
656
	    s = CDR(s);
656
	    s = CDR(s);
657
	    continue;
657
	    continue;
658
	}
658
	}
659
	if(s == args)
659
	if(s == args)
660
	    args = s = CDR(s);
660
	    args = s = CDR(s);
661
	else
661
	else
662
	    SETCDR(prev, s = CDR(s));
662
	    SETCDR(prev, s = CDR(s));
663
    }
663
    }
664
    *len = nargs;
664
    *len = nargs;
665
    return args;
665
    return args;
666
}
666
}
667
 
667
 
668
static void setDLLname(SEXP s, char *DLLname)
668
static void setDLLname(SEXP s, char *DLLname)
669
{
669
{
670
    SEXP ss = CAR(s);
670
    SEXP ss = CAR(s);
671
    const char *name;
671
    const char *name;
672
 
672
 
673
    if(TYPEOF(ss) != STRSXP || length(ss) != 1)
673
    if(TYPEOF(ss) != STRSXP || length(ss) != 1)
674
	error(_("PACKAGE argument must be a single character string"));
674
	error(_("PACKAGE argument must be a single character string"));
675
    name = translateChar(STRING_ELT(ss, 0));
675
    name = translateChar(STRING_ELT(ss, 0));
676
    /* allow the package: form of the name, as returned by find */
676
    /* allow the package: form of the name, as returned by find */
677
    if(strncmp(name, "package:", 8) == 0)
677
    if(strncmp(name, "package:", 8) == 0)
678
	name += 8;
678
	name += 8;
679
    if(strlen(name) > PATH_MAX - 1)
679
    if(strlen(name) > PATH_MAX - 1)
680
	error(_("PACKAGE argument is too long"));
680
	error(_("PACKAGE argument is too long"));
681
    strcpy(DLLname, name);
681
    strcpy(DLLname, name);
682
}
682
}
683
 
683
 
684
static SEXP pkgtrim(SEXP args, DllReference *dll)
684
static SEXP pkgtrim(SEXP args, DllReference *dll)
685
{
685
{
686
    SEXP s, ss;
686
    SEXP s, ss;
687
    int pkgused=0;
687
    int pkgused=0;
688
 
688
 
689
    for(s = args ; s != R_NilValue;) {
689
    for(s = args ; s != R_NilValue;) {
690
	ss = CDR(s);
690
	ss = CDR(s);
691
	/* Look for PACKAGE=. We look at the next arg, unless
691
	/* Look for PACKAGE=. We look at the next arg, unless
692
	   this is the last one (which will only happen for one arg),
692
	   this is the last one (which will only happen for one arg),
693
	   and remove it */
693
	   and remove it */
694
	if(ss == R_NilValue && TAG(s) == PkgSymbol) {
694
	if(ss == R_NilValue && TAG(s) == PkgSymbol) {
695
	    if(pkgused++ == 1) warning(_("PACKAGE used more than once"));
695
	    if(pkgused++ == 1) warning(_("PACKAGE used more than once"));
696
	    setDLLname(s, dll->DLLname);
696
	    setDLLname(s, dll->DLLname);
697
	    dll->type = FILENAME;
697
	    dll->type = FILENAME;
698
	    return R_NilValue;
698
	    return R_NilValue;
699
	}
699
	}
700
	if(TAG(ss) == PkgSymbol) {
700
	if(TAG(ss) == PkgSymbol) {
701
	    if(pkgused++ == 1) warning(_("PACKAGE used more than once"));
701
	    if(pkgused++ == 1) warning(_("PACKAGE used more than once"));
702
	    setDLLname(ss, dll->DLLname);
702
	    setDLLname(ss, dll->DLLname);
703
	    dll->type = FILENAME;
703
	    dll->type = FILENAME;
704
	    SETCDR(s, CDR(ss));
704
	    SETCDR(s, CDR(ss));
705
	}
705
	}
706
	s = CDR(s);
706
	s = CDR(s);
707
    }
707
    }
708
    return args;
708
    return args;
709
}
709
}
710
 
710
 
711
static SEXP enctrim(SEXP args, char *name, int len)
711
static SEXP enctrim(SEXP args, char *name, int len)
712
{
712
{
713
    SEXP s, ss, sx;
713
    SEXP s, ss, sx;
714
    int pkgused=0;
714
    int pkgused=0;
715
 
715
 
716
    strcpy(name, "");
716
    strcpy(name, "");
717
    for(s = args ; s != R_NilValue;) {
717
    for(s = args ; s != R_NilValue;) {
718
	ss = CDR(s);
718
	ss = CDR(s);
719
	/* Look for ENCODING=. We look at the next arg, unless
719
	/* Look for ENCODING=. We look at the next arg, unless
720
	   this is the last one (which will only happen for one arg),
720
	   this is the last one (which will only happen for one arg),
721
	   and remove it */
721
	   and remove it */
722
	if(ss == R_NilValue && TAG(s) == EncSymbol) {
722
	if(ss == R_NilValue && TAG(s) == EncSymbol) {
723
	    sx = CAR(s);
723
	    sx = CAR(s);
724
	    if(pkgused++ == 1) warning(_("ENCODING used more than once"));
724
	    if(pkgused++ == 1) warning(_("ENCODING used more than once"));
725
	    if(TYPEOF(sx) != STRSXP || length(sx) != 1)
725
	    if(TYPEOF(sx) != STRSXP || length(sx) != 1)
726
		error(_("ENCODING argument must be a single character string"));
726
		error(_("ENCODING argument must be a single character string"));
727
	    strncpy(name, translateChar(STRING_ELT(sx, 0)), len);
727
	    strncpy(name, translateChar(STRING_ELT(sx, 0)), len);
728
	    return R_NilValue;
728
	    return R_NilValue;
729
	}
729
	}
730
	if(TAG(ss) == EncSymbol) {
730
	if(TAG(ss) == EncSymbol) {
731
	    sx = CAR(ss);
731
	    sx = CAR(ss);
732
	    if(pkgused++ == 1) warning(_("ENCODING used more than once"));
732
	    if(pkgused++ == 1) warning(_("ENCODING used more than once"));
733
	    if(TYPEOF(sx) != STRSXP || length(sx) != 1)
733
	    if(TYPEOF(sx) != STRSXP || length(sx) != 1)
734
		error(_("ENCODING argument must be a single character string"));
734
		error(_("ENCODING argument must be a single character string"));
735
	    strncpy(name, translateChar(STRING_ELT(sx, 0)), len);
735
	    strncpy(name, translateChar(STRING_ELT(sx, 0)), len);
736
	    SETCDR(s, CDR(ss));
736
	    SETCDR(s, CDR(ss));
737
	}
737
	}
738
	s = CDR(s);
738
	s = CDR(s);
739
    }
739
    }
740
    return args;
740
    return args;
741
}
741
}
742
 
742
 
743
 
743
 
744
 
744
 
745
SEXP attribute_hidden do_isloaded(SEXP call, SEXP op, SEXP args, SEXP env)
745
SEXP attribute_hidden do_isloaded(SEXP call, SEXP op, SEXP args, SEXP env)
746
{
746
{
747
    const char *sym, *type="", *pkg = "";
747
    const char *sym, *type="", *pkg = "";
748
    int val = 1, nargs = length(args);
748
    int val = 1, nargs = length(args);
749
    R_RegisteredNativeSymbol symbol = {R_FORTRAN_SYM, {NULL}, NULL};
749
    R_RegisteredNativeSymbol symbol = {R_FORTRAN_SYM, {NULL}, NULL};
750
 
750
 
751
    if (nargs < 1) error(_("no arguments supplied"));
751
    if (nargs < 1) error(_("no arguments supplied"));
752
    if (nargs > 3) error(_("too many arguments"));
752
    if (nargs > 3) error(_("too many arguments"));
753
 
753
 
754
    if(!isValidString(CAR(args)))
754
    if(!isValidString(CAR(args)))
755
	error(R_MSG_IA);
755
	error(R_MSG_IA);
756
    sym = translateChar(STRING_ELT(CAR(args), 0));
756
    sym = translateChar(STRING_ELT(CAR(args), 0));
757
    if(nargs >= 2) {
757
    if(nargs >= 2) {
758
	if(!isValidString(CADR(args)))
758
	if(!isValidString(CADR(args)))
759
	    error(R_MSG_IA);
759
	    error(R_MSG_IA);
760
	pkg = translateChar(STRING_ELT(CADR(args), 0));
760
	pkg = translateChar(STRING_ELT(CADR(args), 0));
761
    }
761
    }
762
    if(nargs >= 3) {
762
    if(nargs >= 3) {
763
	if(!isValidString(CADDR(args)))
763
	if(!isValidString(CADDR(args)))
764
	    error(R_MSG_IA);
764
	    error(R_MSG_IA);
765
	type = CHAR(STRING_ELT(CADDR(args), 0)); /* ASCII */
765
	type = CHAR(STRING_ELT(CADDR(args), 0)); /* ASCII */
766
	if(strcmp(type, "C") == 0) symbol.type = R_C_SYM;
766
	if(strcmp(type, "C") == 0) symbol.type = R_C_SYM;
767
	else if(strcmp(type, "Fortran") == 0) symbol.type = R_FORTRAN_SYM;
767
	else if(strcmp(type, "Fortran") == 0) symbol.type = R_FORTRAN_SYM;
768
	else if(strcmp(type, "Call") == 0) symbol.type = R_CALL_SYM;
768
	else if(strcmp(type, "Call") == 0) symbol.type = R_CALL_SYM;
769
	else if(strcmp(type, "External") == 0) symbol.type = R_EXTERNAL_SYM;
769
	else if(strcmp(type, "External") == 0) symbol.type = R_EXTERNAL_SYM;
770
    }
770
    }
771
    if(strlen(type)) {
771
    if(strlen(type)) {
772
	if(!(R_FindSymbol(sym, pkg, &symbol))) val = 0;
772
	if(!(R_FindSymbol(sym, pkg, &symbol))) val = 0;
773
    } else {
773
    } else {
774
	if (!(R_FindSymbol(sym, pkg, NULL)) && 
774
	if (!(R_FindSymbol(sym, pkg, NULL)) && 
775
	    !(R_FindSymbol(sym, pkg, &symbol))) val = 0;
775
	    !(R_FindSymbol(sym, pkg, &symbol))) val = 0;
776
    }
776
    }
777
    return ScalarLogical(val);
777
    return ScalarLogical(val);
778
}
778
}
779
 
779
 
780
/*   Call dynamically loaded "internal" functions */
780
/*   Call dynamically loaded "internal" functions */
781
/*   code by Jean Meloche <jean@stat.ubc.ca> */
781
/*   code by Jean Meloche <jean@stat.ubc.ca> */
782
 
782
 
783
typedef SEXP (*R_ExternalRoutine)(SEXP);
783
typedef SEXP (*R_ExternalRoutine)(SEXP);
784
 
784
 
785
SEXP attribute_hidden do_External(SEXP call, SEXP op, SEXP args, SEXP env)
785
SEXP attribute_hidden do_External(SEXP call, SEXP op, SEXP args, SEXP env)
786
{
786
{
787
    DL_FUNC ofun = NULL;
787
    DL_FUNC ofun = NULL;
788
    R_ExternalRoutine fun = NULL;
788
    R_ExternalRoutine fun = NULL;
789
    SEXP retval;
789
    SEXP retval;
790
    R_RegisteredNativeSymbol symbol = {R_EXTERNAL_SYM, {NULL}, NULL};
790
    R_RegisteredNativeSymbol symbol = {R_EXTERNAL_SYM, {NULL}, NULL};
791
    void *vmax = vmaxget();
791
    void *vmax = vmaxget();
792
    char buf[MaxSymbolBytes];
792
    char buf[MaxSymbolBytes];
793
 
793
 
794
    args = resolveNativeRoutine(args, &ofun, &symbol, buf, NULL, NULL,
794
    args = resolveNativeRoutine(args, &ofun, &symbol, buf, NULL, NULL,
795
				NULL, call);
795
				NULL, call);
796
    fun = (R_ExternalRoutine) ofun;
796
    fun = (R_ExternalRoutine) ofun;
797
 
797
 
798
    /* Some external symbols that are registered may have 0 as the
798
    /* Some external symbols that are registered may have 0 as the
799
       expected number of arguments.  We may want a warning
799
       expected number of arguments.  We may want a warning
800
       here. However, the number of values may vary across calls and
800
       here. However, the number of values may vary across calls and
801
       that is why people use the .External() mechanism.  So perhaps
801
       that is why people use the .External() mechanism.  So perhaps
802
       we should just kill this check.
802
       we should just kill this check.
803
    */
803
    */
804
#ifdef CHECK_EXTERNAL_ARG_COUNT         /* Off by default. */
804
#ifdef CHECK_EXTERNAL_ARG_COUNT         /* Off by default. */
805
    if(symbol.symbol.external && symbol.symbol.external->numArgs > -1) {
805
    if(symbol.symbol.external && symbol.symbol.external->numArgs > -1) {
806
	if(symbol.symbol.external->numArgs != length(args))
806
	if(symbol.symbol.external->numArgs != length(args))
807
	    errorcall(call,
807
	    errorcall(call,
808
		      _("Incorrect number of arguments (%d), expecting %d for %s"),
808
		      _("Incorrect number of arguments (%d), expecting %d for %s"),
809
		      length(args), symbol.symbol.external->numArgs,
809
		      length(args), symbol.symbol.external->numArgs,
810
		      translateChar(STRING_ELT(CAR(args), 0)));
810
		      translateChar(STRING_ELT(CAR(args), 0)));
811
    }
811
    }
812
#endif
812
#endif
813
 
813
 
814
    retval = (SEXP)fun(args);
814
    retval = (SEXP)fun(args);
815
    vmaxset(vmax);
815
    vmaxset(vmax);
816
    return retval;
816
    return retval;
817
}
817
}
818
 
818
 
819
#ifdef __cplusplus
819
#ifdef __cplusplus
820
typedef SEXP (*VarFun)(...);
820
typedef SEXP (*VarFun)(...);
821
#else
821
#else
822
typedef DL_FUNC VarFun;
822
typedef DL_FUNC VarFun;
823
#endif
823
#endif
824
 
824
 
825
/* .Call(name, <args>) */
825
/* .Call(name, <args>) */
826
SEXP attribute_hidden do_dotcall(SEXP call, SEXP op, SEXP args, SEXP env)
826
SEXP attribute_hidden do_dotcall(SEXP call, SEXP op, SEXP args, SEXP env)
827
{
827
{
828
    DL_FUNC ofun = NULL;
828
    DL_FUNC ofun = NULL;
829
    VarFun fun = NULL;
829
    VarFun fun = NULL;
830
    SEXP retval, nm, cargs[MAX_ARGS], pargs;
830
    SEXP retval, nm, cargs[MAX_ARGS], pargs;
831
    R_RegisteredNativeSymbol symbol = {R_CALL_SYM, {NULL}, NULL};
831
    R_RegisteredNativeSymbol symbol = {R_CALL_SYM, {NULL}, NULL};
832
    int nargs;
832
    int nargs;
833
    void *vmax = vmaxget();
833
    void *vmax = vmaxget();
834
    char buf[MaxSymbolBytes];
834
    char buf[MaxSymbolBytes];
835
 
835
 
836
    nm = CAR(args);
836
    nm = CAR(args);
837
    args = resolveNativeRoutine(args, &ofun, &symbol, buf, NULL, NULL,
837
    args = resolveNativeRoutine(args, &ofun, &symbol, buf, NULL, NULL,
838
				NULL, call);
838
				NULL, call);
839
    args = CDR(args);
839
    args = CDR(args);
840
    fun = (VarFun) ofun;
840
    fun = (VarFun) ofun;
841
 
841
 
842
    for(nargs = 0, pargs = args ; pargs != R_NilValue; pargs = CDR(pargs)) {
842
    for(nargs = 0, pargs = args ; pargs != R_NilValue; pargs = CDR(pargs)) {
843
        if (nargs == MAX_ARGS)
843
        if (nargs == MAX_ARGS)
844
            errorcall(call, _("too many arguments in foreign function call"));
844
            errorcall(call, _("too many arguments in foreign function call"));
845
	cargs[nargs] = CAR(pargs);
845
	cargs[nargs] = CAR(pargs);
846
	nargs++;
846
	nargs++;
847
    }
847
    }
848
    if(symbol.symbol.call && symbol.symbol.call->numArgs > -1) {
848
    if(symbol.symbol.call && symbol.symbol.call->numArgs > -1) {
849
	if(symbol.symbol.call->numArgs != nargs)
849
	if(symbol.symbol.call->numArgs != nargs)
850
	    errorcall(call,
850
	    errorcall(call,
851
		      _("Incorrect number of arguments (%d), expecting %d for %s"),
851
		      _("Incorrect number of arguments (%d), expecting %d for %s"),
852
		      nargs, symbol.symbol.call->numArgs,
852
		      nargs, symbol.symbol.call->numArgs,
853
		      translateChar(STRING_ELT(nm, 0)));
853
		      translateChar(STRING_ELT(nm, 0)));
854
    }
854
    }
855
 
855
 
856
    retval = R_NilValue;	/* -Wall */
856
    retval = R_NilValue;	/* -Wall */
857
    fun = (VarFun) ofun;
857
    fun = (VarFun) ofun;
858
    switch (nargs) {
858
    switch (nargs) {
859
    case 0:
859
    case 0:
860
	retval = (SEXP)ofun();
860
	retval = (SEXP)ofun();
861
	break;
861
	break;
862
    case 1:
862
    case 1:
863
	retval = (SEXP)fun(cargs[0]);
863
	retval = (SEXP)fun(cargs[0]);
864
	break;
864
	break;
865
    case 2:
865
    case 2:
866
	retval = (SEXP)fun(cargs[0], cargs[1]);
866
	retval = (SEXP)fun(cargs[0], cargs[1]);
867
	break;
867
	break;
868
    case 3:
868
    case 3:
869
	retval = (SEXP)fun(cargs[0], cargs[1], cargs[2]);
869
	retval = (SEXP)fun(cargs[0], cargs[1], cargs[2]);
870
	break;
870
	break;
871
    case 4:
871
    case 4:
872
	retval = (SEXP)fun(cargs[0], cargs[1], cargs[2], cargs[3]);
872
	retval = (SEXP)fun(cargs[0], cargs[1], cargs[2], cargs[3]);
873
	break;
873
	break;
874
    case 5:
874
    case 5:
875
	retval = (SEXP)fun(
875
	retval = (SEXP)fun(
876
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4]);
876
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4]);
877
	break;
877
	break;
878
    case 6:
878
    case 6:
879
	retval = (SEXP)fun(
879
	retval = (SEXP)fun(
880
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
880
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
881
	    cargs[5]);
881
	    cargs[5]);
882
	break;
882
	break;
883
    case 7:
883
    case 7:
884
	retval = (SEXP)fun(
884
	retval = (SEXP)fun(
885
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
885
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
886
	    cargs[5],  cargs[6]);
886
	    cargs[5],  cargs[6]);
887
	break;
887
	break;
888
    case 8:
888
    case 8:
889
	retval = (SEXP)fun(
889
	retval = (SEXP)fun(
890
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
890
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
891
	    cargs[5],  cargs[6],  cargs[7]);
891
	    cargs[5],  cargs[6],  cargs[7]);
892
	break;
892
	break;
893
    case 9:
893
    case 9:
894
	retval = (SEXP)fun(
894
	retval = (SEXP)fun(
895
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
895
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
896
	    cargs[5],  cargs[6],  cargs[7],  cargs[8]);
896
	    cargs[5],  cargs[6],  cargs[7],  cargs[8]);
897
	break;
897
	break;
898
    case 10:
898
    case 10:
899
	retval = (SEXP)fun(
899
	retval = (SEXP)fun(
900
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
900
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
901
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9]);
901
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9]);
902
	break;
902
	break;
903
    case 11:
903
    case 11:
904
	retval = (SEXP)fun(
904
	retval = (SEXP)fun(
905
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
905
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
906
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
906
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
907
	    cargs[10]);
907
	    cargs[10]);
908
	break;
908
	break;
909
    case 12:
909
    case 12:
910
	retval = (SEXP)fun(
910
	retval = (SEXP)fun(
911
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
911
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
912
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
912
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
913
	    cargs[10], cargs[11]);
913
	    cargs[10], cargs[11]);
914
	break;
914
	break;
915
    case 13:
915
    case 13:
916
	retval = (SEXP)fun(
916
	retval = (SEXP)fun(
917
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
917
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
918
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
918
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
919
	    cargs[10], cargs[11], cargs[12]);
919
	    cargs[10], cargs[11], cargs[12]);
920
	break;
920
	break;
921
    case 14:
921
    case 14:
922
	retval = (SEXP)fun(
922
	retval = (SEXP)fun(
923
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
923
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
924
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
924
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
925
	    cargs[10], cargs[11], cargs[12], cargs[13]);
925
	    cargs[10], cargs[11], cargs[12], cargs[13]);
926
	break;
926
	break;
927
    case 15:
927
    case 15:
928
	retval = (SEXP)fun(
928
	retval = (SEXP)fun(
929
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
929
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
930
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
930
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
931
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14]);
931
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14]);
932
	break;
932
	break;
933
    case 16:
933
    case 16:
934
	retval = (SEXP)fun(
934
	retval = (SEXP)fun(
935
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
935
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
936
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
936
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
937
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
937
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
938
	    cargs[15]);
938
	    cargs[15]);
939
	break;
939
	break;
940
    case 17:
940
    case 17:
941
	retval = (SEXP)fun(
941
	retval = (SEXP)fun(
942
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
942
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
943
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
943
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
944
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
944
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
945
	    cargs[15], cargs[16]);
945
	    cargs[15], cargs[16]);
946
	break;
946
	break;
947
    case 18:
947
    case 18:
948
	retval = (SEXP)fun(
948
	retval = (SEXP)fun(
949
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
949
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
950
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
950
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
951
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
951
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
952
	    cargs[15], cargs[16], cargs[17]);
952
	    cargs[15], cargs[16], cargs[17]);
953
	break;
953
	break;
954
    case 19:
954
    case 19:
955
	retval = (SEXP)fun(
955
	retval = (SEXP)fun(
956
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
956
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
957
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
957
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
958
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
958
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
959
	    cargs[15], cargs[16], cargs[17], cargs[18]);
959
	    cargs[15], cargs[16], cargs[17], cargs[18]);
960
	break;
960
	break;
961
    case 20:
961
    case 20:
962
	retval = (SEXP)fun(
962
	retval = (SEXP)fun(
963
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
963
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
964
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
964
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
965
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
965
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
966
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19]);
966
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19]);
967
	break;
967
	break;
968
    case 21:
968
    case 21:
969
	retval = (SEXP)fun(
969
	retval = (SEXP)fun(
970
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
970
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
971
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
971
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
972
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
972
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
973
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
973
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
974
	    cargs[20]);
974
	    cargs[20]);
975
	break;
975
	break;
976
    case 22:
976
    case 22:
977
	retval = (SEXP)fun(
977
	retval = (SEXP)fun(
978
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
978
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
979
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
979
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
980
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
980
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
981
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
981
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
982
	    cargs[20], cargs[21]);
982
	    cargs[20], cargs[21]);
983
	break;
983
	break;
984
    case 23:
984
    case 23:
985
	retval = (SEXP)fun(
985
	retval = (SEXP)fun(
986
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
986
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
987
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
987
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
988
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
988
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
989
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
989
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
990
	    cargs[20], cargs[21], cargs[22]);
990
	    cargs[20], cargs[21], cargs[22]);
991
	break;
991
	break;
992
    case 24:
992
    case 24:
993
	retval = (SEXP)fun(
993
	retval = (SEXP)fun(
994
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
994
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
995
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
995
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
996
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
996
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
997
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
997
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
998
	    cargs[20], cargs[21], cargs[22], cargs[23]);
998
	    cargs[20], cargs[21], cargs[22], cargs[23]);
999
	break;
999
	break;
1000
    case 25:
1000
    case 25:
1001
	retval = (SEXP)fun(
1001
	retval = (SEXP)fun(
1002
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1002
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1003
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1003
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1004
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1004
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1005
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1005
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1006
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24]);
1006
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24]);
1007
	break;
1007
	break;
1008
    case 26:
1008
    case 26:
1009
	retval = (SEXP)fun(
1009
	retval = (SEXP)fun(
1010
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1010
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1011
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1011
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1012
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1012
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1013
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1013
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1014
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1014
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1015
	    cargs[25]);
1015
	    cargs[25]);
1016
	break;
1016
	break;
1017
    case 27:
1017
    case 27:
1018
	retval = (SEXP)fun(
1018
	retval = (SEXP)fun(
1019
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1019
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1020
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1020
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1021
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1021
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1022
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1022
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1023
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1023
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1024
	    cargs[25], cargs[26]);
1024
	    cargs[25], cargs[26]);
1025
	break;
1025
	break;
1026
    case 28:
1026
    case 28:
1027
	retval = (SEXP)fun(
1027
	retval = (SEXP)fun(
1028
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1028
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1029
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1029
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1030
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1030
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1031
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1031
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1032
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1032
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1033
	    cargs[25], cargs[26], cargs[27]);
1033
	    cargs[25], cargs[26], cargs[27]);
1034
	break;
1034
	break;
1035
    case 29:
1035
    case 29:
1036
	retval = (SEXP)fun(
1036
	retval = (SEXP)fun(
1037
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1037
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1038
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1038
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1039
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1039
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1040
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1040
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1041
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1041
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1042
	    cargs[25], cargs[26], cargs[27], cargs[28]);
1042
	    cargs[25], cargs[26], cargs[27], cargs[28]);
1043
	break;
1043
	break;
1044
    case 30:
1044
    case 30:
1045
	retval = (SEXP)fun(
1045
	retval = (SEXP)fun(
1046
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1046
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1047
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1047
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1048
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1048
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1049
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1049
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1050
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1050
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1051
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29]);
1051
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29]);
1052
	break;
1052
	break;
1053
    case 31:
1053
    case 31:
1054
	retval = (SEXP)fun(
1054
	retval = (SEXP)fun(
1055
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1055
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1056
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1056
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1057
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1057
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1058
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1058
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1059
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1059
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1060
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1060
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1061
	    cargs[30]);
1061
	    cargs[30]);
1062
	break;
1062
	break;
1063
    case 32:
1063
    case 32:
1064
	retval = (SEXP)fun(
1064
	retval = (SEXP)fun(
1065
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1065
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1066
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1066
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1067
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1067
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1068
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1068
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1069
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1069
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1070
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1070
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1071
	    cargs[30], cargs[31]);
1071
	    cargs[30], cargs[31]);
1072
	break;
1072
	break;
1073
    case 33:
1073
    case 33:
1074
	retval = (SEXP)fun(
1074
	retval = (SEXP)fun(
1075
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1075
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1076
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1076
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1077
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1077
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1078
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1078
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1079
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1079
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1080
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1080
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1081
	    cargs[30], cargs[31], cargs[32]);
1081
	    cargs[30], cargs[31], cargs[32]);
1082
	break;
1082
	break;
1083
    case 34:
1083
    case 34:
1084
	retval = (SEXP)fun(
1084
	retval = (SEXP)fun(
1085
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1085
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1086
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1086
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1087
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1087
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1088
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1088
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1089
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1089
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1090
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1090
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1091
	    cargs[30], cargs[31], cargs[32], cargs[33]);
1091
	    cargs[30], cargs[31], cargs[32], cargs[33]);
1092
	break;
1092
	break;
1093
    case 35:
1093
    case 35:
1094
	retval = (SEXP)fun(
1094
	retval = (SEXP)fun(
1095
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1095
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1096
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1096
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1097
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1097
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1098
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1098
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1099
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1099
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1100
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1100
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1101
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34]);
1101
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34]);
1102
	break;
1102
	break;
1103
    case 36:
1103
    case 36:
1104
	retval = (SEXP)fun(
1104
	retval = (SEXP)fun(
1105
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1105
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1106
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1106
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1107
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1107
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1108
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1108
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1109
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1109
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1110
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1110
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1111
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1111
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1112
	    cargs[35]);
1112
	    cargs[35]);
1113
	break;
1113
	break;
1114
    case 37:
1114
    case 37:
1115
	retval = (SEXP)fun(
1115
	retval = (SEXP)fun(
1116
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1116
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1117
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1117
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1118
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1118
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1119
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1119
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1120
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1120
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1121
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1121
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1122
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1122
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1123
	    cargs[35], cargs[36]);
1123
	    cargs[35], cargs[36]);
1124
	break;
1124
	break;
1125
    case 38:
1125
    case 38:
1126
	retval = (SEXP)fun(
1126
	retval = (SEXP)fun(
1127
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1127
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1128
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1128
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1129
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1129
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1130
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1130
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1131
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1131
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1132
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1132
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1133
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1133
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1134
	    cargs[35], cargs[36], cargs[37]);
1134
	    cargs[35], cargs[36], cargs[37]);
1135
	break;
1135
	break;
1136
    case 39:
1136
    case 39:
1137
	retval = (SEXP)fun(
1137
	retval = (SEXP)fun(
1138
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1138
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1139
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1139
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1140
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1140
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1141
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1141
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1142
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1142
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1143
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1143
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1144
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1144
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1145
	    cargs[35], cargs[36], cargs[37], cargs[38]);
1145
	    cargs[35], cargs[36], cargs[37], cargs[38]);
1146
	break;
1146
	break;
1147
    case 40:
1147
    case 40:
1148
	retval = (SEXP)fun(
1148
	retval = (SEXP)fun(
1149
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1149
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1150
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1150
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1151
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1151
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1152
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1152
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1153
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1153
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1154
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1154
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1155
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1155
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1156
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39]);
1156
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39]);
1157
	break;
1157
	break;
1158
    case 41:
1158
    case 41:
1159
	retval = (SEXP)fun(
1159
	retval = (SEXP)fun(
1160
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1160
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1161
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1161
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1162
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1162
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1163
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1163
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1164
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1164
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1165
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1165
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1166
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1166
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1167
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1167
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1168
	    cargs[40]);
1168
	    cargs[40]);
1169
	break;
1169
	break;
1170
    case 42:
1170
    case 42:
1171
	retval = (SEXP)fun(
1171
	retval = (SEXP)fun(
1172
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1172
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1173
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1173
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1174
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1174
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1175
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1175
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1176
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1176
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1177
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1177
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1178
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1178
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1179
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1179
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1180
	    cargs[40], cargs[41]);
1180
	    cargs[40], cargs[41]);
1181
	break;
1181
	break;
1182
    case 43:
1182
    case 43:
1183
	retval = (SEXP)fun(
1183
	retval = (SEXP)fun(
1184
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1184
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1185
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1185
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1186
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1186
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1187
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1187
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1188
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1188
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1189
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1189
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1190
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1190
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1191
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1191
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1192
	    cargs[40], cargs[41], cargs[42]);
1192
	    cargs[40], cargs[41], cargs[42]);
1193
	break;
1193
	break;
1194
    case 44:
1194
    case 44:
1195
	retval = (SEXP)fun(
1195
	retval = (SEXP)fun(
1196
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1196
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1197
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1197
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1198
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1198
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1199
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1199
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1200
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1200
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1201
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1201
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1202
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1202
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1203
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1203
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1204
	    cargs[40], cargs[41], cargs[42], cargs[43]);
1204
	    cargs[40], cargs[41], cargs[42], cargs[43]);
1205
	break;
1205
	break;
1206
    case 45:
1206
    case 45:
1207
	retval = (SEXP)fun(
1207
	retval = (SEXP)fun(
1208
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1208
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1209
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1209
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1210
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1210
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1211
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1211
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1212
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1212
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1213
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1213
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1214
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1214
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1215
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1215
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1216
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44]);
1216
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44]);
1217
	break;
1217
	break;
1218
    case 46:
1218
    case 46:
1219
	retval = (SEXP)fun(
1219
	retval = (SEXP)fun(
1220
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1220
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1221
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1221
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1222
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1222
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1223
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1223
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1224
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1224
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1225
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1225
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1226
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1226
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1227
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1227
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1228
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1228
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1229
	    cargs[45]);
1229
	    cargs[45]);
1230
	break;
1230
	break;
1231
    case 47:
1231
    case 47:
1232
	retval = (SEXP)fun(
1232
	retval = (SEXP)fun(
1233
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1233
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1234
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1234
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1235
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1235
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1236
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1236
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1237
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1237
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1238
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1238
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1239
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1239
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1240
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1240
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1241
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1241
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1242
	    cargs[45], cargs[46]);
1242
	    cargs[45], cargs[46]);
1243
	break;
1243
	break;
1244
    case 48:
1244
    case 48:
1245
	retval = (SEXP)fun(
1245
	retval = (SEXP)fun(
1246
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1246
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1247
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1247
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1248
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1248
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1249
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1249
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1250
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1250
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1251
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1251
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1252
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1252
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1253
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1253
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1254
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1254
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1255
	    cargs[45], cargs[46], cargs[47]);
1255
	    cargs[45], cargs[46], cargs[47]);
1256
	break;
1256
	break;
1257
    case 49:
1257
    case 49:
1258
	retval = (SEXP)fun(
1258
	retval = (SEXP)fun(
1259
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1259
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1260
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1260
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1261
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1261
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1262
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1262
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1263
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1263
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1264
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1264
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1265
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1265
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1266
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1266
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1267
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1267
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1268
	    cargs[45], cargs[46], cargs[47], cargs[48]);
1268
	    cargs[45], cargs[46], cargs[47], cargs[48]);
1269
	break;
1269
	break;
1270
    case 50:
1270
    case 50:
1271
	retval = (SEXP)fun(
1271
	retval = (SEXP)fun(
1272
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1272
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1273
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1273
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1274
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1274
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1275
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1275
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1276
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1276
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1277
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1277
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1278
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1278
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1279
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1279
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1280
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1280
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1281
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49]);
1281
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49]);
1282
	break;
1282
	break;
1283
    case 51:
1283
    case 51:
1284
	retval = (SEXP)fun(
1284
	retval = (SEXP)fun(
1285
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1285
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1286
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1286
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1287
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1287
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1288
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1288
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1289
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1289
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1290
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1290
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1291
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1291
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1292
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1292
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1293
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1293
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1294
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1294
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1295
	    cargs[50]);
1295
	    cargs[50]);
1296
	break;
1296
	break;
1297
    case 52:
1297
    case 52:
1298
	retval = (SEXP)fun(
1298
	retval = (SEXP)fun(
1299
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1299
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1300
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1300
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1301
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1301
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1302
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1302
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1303
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1303
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1304
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1304
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1305
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1305
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1306
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1306
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1307
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1307
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1308
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1308
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1309
	    cargs[50], cargs[51]);
1309
	    cargs[50], cargs[51]);
1310
	break;
1310
	break;
1311
    case 53:
1311
    case 53:
1312
	retval = (SEXP)fun(
1312
	retval = (SEXP)fun(
1313
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1313
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1314
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1314
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1315
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1315
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1316
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1316
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1317
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1317
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1318
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1318
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1319
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1319
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1320
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1320
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1321
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1321
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1322
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1322
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1323
	    cargs[50], cargs[51], cargs[52]);
1323
	    cargs[50], cargs[51], cargs[52]);
1324
	break;
1324
	break;
1325
    case 54:
1325
    case 54:
1326
	retval = (SEXP)fun(
1326
	retval = (SEXP)fun(
1327
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1327
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1328
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1328
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1329
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1329
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1330
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1330
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1331
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1331
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1332
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1332
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1333
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1333
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1334
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1334
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1335
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1335
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1336
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1336
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1337
	    cargs[50], cargs[51], cargs[52], cargs[53]);
1337
	    cargs[50], cargs[51], cargs[52], cargs[53]);
1338
	break;
1338
	break;
1339
    case 55:
1339
    case 55:
1340
	retval = (SEXP)fun(
1340
	retval = (SEXP)fun(
1341
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1341
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1342
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1342
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1343
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1343
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1344
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1344
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1345
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1345
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1346
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1346
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1347
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1347
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1348
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1348
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1349
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1349
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1350
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1350
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1351
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54]);
1351
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54]);
1352
	break;
1352
	break;
1353
    case 56:
1353
    case 56:
1354
	retval = (SEXP)fun(
1354
	retval = (SEXP)fun(
1355
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1355
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1356
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1356
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1357
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1357
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1358
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1358
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1359
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1359
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1360
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1360
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1361
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1361
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1362
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1362
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1363
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1363
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1364
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1364
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1365
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1365
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1366
	    cargs[55]);
1366
	    cargs[55]);
1367
	break;
1367
	break;
1368
    case 57:
1368
    case 57:
1369
	retval = (SEXP)fun(
1369
	retval = (SEXP)fun(
1370
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1370
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1371
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1371
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1372
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1372
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1373
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1373
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1374
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1374
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1375
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1375
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1376
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1376
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1377
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1377
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1378
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1378
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1379
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1379
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1380
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1380
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1381
	    cargs[55], cargs[56]);
1381
	    cargs[55], cargs[56]);
1382
	break;
1382
	break;
1383
    case 58:
1383
    case 58:
1384
	retval = (SEXP)fun(
1384
	retval = (SEXP)fun(
1385
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1385
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1386
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1386
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1387
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1387
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1388
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1388
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1389
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1389
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1390
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1390
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1391
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1391
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1392
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1392
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1393
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1393
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1394
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1394
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1395
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1395
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1396
	    cargs[55], cargs[56], cargs[57]);
1396
	    cargs[55], cargs[56], cargs[57]);
1397
	break;
1397
	break;
1398
    case 59:
1398
    case 59:
1399
	retval = (SEXP)fun(
1399
	retval = (SEXP)fun(
1400
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1400
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1401
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1401
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1402
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1402
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1403
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1403
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1404
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1404
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1405
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1405
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1406
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1406
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1407
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1407
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1408
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1408
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1409
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1409
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1410
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1410
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1411
	    cargs[55], cargs[56], cargs[57], cargs[58]);
1411
	    cargs[55], cargs[56], cargs[57], cargs[58]);
1412
	break;
1412
	break;
1413
    case 60:
1413
    case 60:
1414
	retval = (SEXP)fun(
1414
	retval = (SEXP)fun(
1415
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1415
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1416
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1416
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1417
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1417
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1418
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1418
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1419
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1419
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1420
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1420
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1421
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1421
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1422
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1422
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1423
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1423
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1424
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1424
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1425
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1425
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1426
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59]);
1426
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59]);
1427
	break;
1427
	break;
1428
    case 61:
1428
    case 61:
1429
	retval = (SEXP)fun(
1429
	retval = (SEXP)fun(
1430
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1430
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1431
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1431
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1432
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1432
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1433
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1433
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1434
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1434
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1435
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1435
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1436
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1436
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1437
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1437
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1438
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1438
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1439
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1439
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1440
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1440
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1441
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1441
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1442
	    cargs[60]);
1442
	    cargs[60]);
1443
	break;
1443
	break;
1444
    case 62:
1444
    case 62:
1445
	retval = (SEXP)fun(
1445
	retval = (SEXP)fun(
1446
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1446
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1447
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1447
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1448
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1448
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1449
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1449
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1450
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1450
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1451
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1451
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1452
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1452
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1453
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1453
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1454
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1454
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1455
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1455
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1456
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1456
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1457
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1457
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1458
	    cargs[60], cargs[61]);
1458
	    cargs[60], cargs[61]);
1459
	break;
1459
	break;
1460
    case 63:
1460
    case 63:
1461
	retval = (SEXP)fun(
1461
	retval = (SEXP)fun(
1462
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1462
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1463
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1463
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1464
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1464
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1465
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1465
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1466
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1466
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1467
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1467
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1468
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1468
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1469
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1469
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1470
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1470
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1471
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1471
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1472
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1472
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1473
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1473
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1474
	    cargs[60], cargs[61], cargs[62]);
1474
	    cargs[60], cargs[61], cargs[62]);
1475
	break;
1475
	break;
1476
    case 64:
1476
    case 64:
1477
	retval = (SEXP)fun(
1477
	retval = (SEXP)fun(
1478
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1478
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1479
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1479
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1480
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1480
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1481
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1481
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1482
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1482
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1483
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1483
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1484
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1484
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1485
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1485
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1486
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1486
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1487
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1487
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1488
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1488
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1489
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1489
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1490
	    cargs[60], cargs[61], cargs[62], cargs[63]);
1490
	    cargs[60], cargs[61], cargs[62], cargs[63]);
1491
	break;
1491
	break;
1492
    case 65:
1492
    case 65:
1493
	retval = (SEXP)fun(
1493
	retval = (SEXP)fun(
1494
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1494
	    cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1495
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1495
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1496
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1496
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1497
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1497
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1498
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1498
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1499
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1499
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1500
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1500
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1501
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1501
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1502
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1502
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
1503
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1503
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
1504
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1504
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
1505
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1505
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
1506
	    cargs[60], cargs[61], cargs[62], cargs[63], cargs[64]);
1506
	    cargs[60], cargs[61], cargs[62], cargs[63], cargs[64]);
1507
	break;
1507
	break;
1508
    default:
1508
    default:
1509
	errorcall(call, _("too many arguments, sorry"));
1509
	errorcall(call, _("too many arguments, sorry"));
1510
    }
1510
    }
1511
    vmaxset(vmax);
1511
    vmaxset(vmax);
1512
    return retval;
1512
    return retval;
1513
}
1513
}
1514
 
1514
 
1515
/*  Call dynamically loaded "internal" graphics functions */
1515
/*  Call dynamically loaded "internal" graphics functions */
1516
/*  .External.gr  and  .Call.gr */
1516
/*  .External.gr  and  .Call.gr */
1517
 
1517
 
1518
SEXP attribute_hidden do_Externalgr(SEXP call, SEXP op, SEXP args, SEXP env)
1518
SEXP attribute_hidden do_Externalgr(SEXP call, SEXP op, SEXP args, SEXP env)
1519
{
1519
{
1520
    SEXP retval;
1520
    SEXP retval;
1521
    GEDevDesc *dd = GEcurrentDevice();
1521
    GEDevDesc *dd = GEcurrentDevice();
1522
    Rboolean record = dd->recordGraphics;
1522
    Rboolean record = dd->recordGraphics;
1523
    dd->recordGraphics = FALSE;
1523
    dd->recordGraphics = FALSE;
1524
    PROTECT(retval = do_External(call, op, args, env));
1524
    PROTECT(retval = do_External(call, op, args, env));
1525
    /*
1525
    /*
1526
     * If there is an error or user-interrupt in the above
1526
     * If there is an error or user-interrupt in the above
1527
     * evaluation, dd->recordGraphics is set to TRUE 
1527
     * evaluation, dd->recordGraphics is set to TRUE 
1528
     * on all graphics devices (see GEonExit(); called in errors.c)
1528
     * on all graphics devices (see GEonExit(); called in errors.c)
1529
     */
1529
     */
1530
    dd->recordGraphics = record;
1530
    dd->recordGraphics = record;
1531
    if (GErecording(call, dd)) {
1531
    if (GErecording(call, dd)) {
1532
	if (!GEcheckState(dd))
1532
	if (!GEcheckState(dd))
1533
	    errorcall(call, _("Invalid graphics state"));
1533
	    errorcall(call, _("Invalid graphics state"));
1534
	GErecordGraphicOperation(op, args, dd);
1534
	GErecordGraphicOperation(op, args, dd);
1535
    }
1535
    }
1536
    UNPROTECT(1);
1536
    UNPROTECT(1);
1537
    return retval;
1537
    return retval;
1538
}
1538
}
1539
 
1539
 
1540
SEXP attribute_hidden do_dotcallgr(SEXP call, SEXP op, SEXP args, SEXP env)
1540
SEXP attribute_hidden do_dotcallgr(SEXP call, SEXP op, SEXP args, SEXP env)
1541
{
1541
{
1542
    SEXP retval;
1542
    SEXP retval;
1543
    GEDevDesc *dd = GEcurrentDevice();
1543
    GEDevDesc *dd = GEcurrentDevice();
1544
    Rboolean record = dd->recordGraphics;
1544
    Rboolean record = dd->recordGraphics;
1545
    dd->recordGraphics = FALSE;
1545
    dd->recordGraphics = FALSE;
1546
    PROTECT(retval = do_dotcall(call, op, args, env));
1546
    PROTECT(retval = do_dotcall(call, op, args, env));
1547
    /*
1547
    /*
1548
     * If there is an error or user-interrupt in the above
1548
     * If there is an error or user-interrupt in the above
1549
     * evaluation, dd->recordGraphics is set to TRUE 
1549
     * evaluation, dd->recordGraphics is set to TRUE 
1550
     * on all graphics devices (see GEonExit(); called in errors.c)
1550
     * on all graphics devices (see GEonExit(); called in errors.c)
1551
     */
1551
     */
1552
    dd->recordGraphics = record;
1552
    dd->recordGraphics = record;
1553
    if (GErecording(call, dd)) {
1553
    if (GErecording(call, dd)) {
1554
	if (!GEcheckState(dd))
1554
	if (!GEcheckState(dd))
1555
	    errorcall(call, _("Invalid graphics state"));
1555
	    errorcall(call, _("Invalid graphics state"));
1556
	GErecordGraphicOperation(op, args, dd);
1556
	GErecordGraphicOperation(op, args, dd);
1557
    }
1557
    }
1558
    UNPROTECT(1);
1558
    UNPROTECT(1);
1559
    return retval;
1559
    return retval;
1560
}
1560
}
1561
 
1561
 
1562
static SEXP
1562
static SEXP
1563
Rf_getCallingDLL()
1563
Rf_getCallingDLL()
1564
{
1564
{
1565
    SEXP e, ans;
1565
    SEXP e, ans;
1566
    RCNTXT *cptr;
1566
    RCNTXT *cptr;
1567
    SEXP rho = R_NilValue;
1567
    SEXP rho = R_NilValue;
1568
    Rboolean found = FALSE;
1568
    Rboolean found = FALSE;
1569
 
1569
 
1570
    /* First find the environment of the caller.
1570
    /* First find the environment of the caller.
1571
       Testing shows this is the right caller, despite the .C/.Call ...
1571
       Testing shows this is the right caller, despite the .C/.Call ...
1572
     */
1572
     */
1573
    for (cptr = R_GlobalContext;
1573
    for (cptr = R_GlobalContext;
1574
	 cptr != NULL && cptr->callflag != CTXT_TOPLEVEL;
1574
	 cptr != NULL && cptr->callflag != CTXT_TOPLEVEL;
1575
	 cptr = cptr->nextcontext)
1575
	 cptr = cptr->nextcontext)
1576
	    if (cptr->callflag & CTXT_FUNCTION) {
1576
	    if (cptr->callflag & CTXT_FUNCTION) {
1577
		/* PrintValue(cptr->call); */
1577
		/* PrintValue(cptr->call); */
1578
		rho = cptr->cloenv;
1578
		rho = cptr->cloenv;
1579
		break;
1579
		break;
1580
	    }
1580
	    }
1581
    /* Then search up until we hit a namespace or globalenv.
1581
    /* Then search up until we hit a namespace or globalenv.
1582
       The idea is that we will not find a namespace unless the caller
1582
       The idea is that we will not find a namespace unless the caller
1583
       was defined in one. */
1583
       was defined in one. */
1584
    while(rho != R_NilValue) {
1584
    while(rho != R_NilValue) {
1585
	if (rho == R_GlobalEnv) break;
1585
	if (rho == R_GlobalEnv) break;
1586
	else if (R_IsNamespaceEnv(rho)) {
1586
	else if (R_IsNamespaceEnv(rho)) {
1587
	    found = TRUE;
1587
	    found = TRUE;
1588
	    break;
1588
	    break;
1589
	}
1589
	}
1590
	rho = ENCLOS(rho);
1590
	rho = ENCLOS(rho);
1591
    }
1591
    }
1592
    if(!found) return R_NilValue;
1592
    if(!found) return R_NilValue;
1593
 
1593
 
1594
    PROTECT(e = lang2(Rf_install("getCallingDLLe"), rho));
1594
    PROTECT(e = lang2(Rf_install("getCallingDLLe"), rho));
1595
    ans = eval(e,  R_GlobalEnv);
1595
    ans = eval(e,  R_GlobalEnv);
1596
    UNPROTECT(1);
1596
    UNPROTECT(1);
1597
    return(ans);
1597
    return(ans);
1598
}
1598
}
1599
 
1599
 
1600
 
1600
 
1601
/*
1601
/*
1602
  We are given the PACKAGE argument in dll.obj
1602
  We are given the PACKAGE argument in dll.obj
1603
  and we can try to figure out how to resolve this.
1603
  and we can try to figure out how to resolve this.
1604
  0) dll.obj is NULL.  Then find the environment of the
1604
  0) dll.obj is NULL.  Then find the environment of the
1605
   calling function and if it is a namespace, get the
1605
   calling function and if it is a namespace, get the
1606
 
1606
 
1607
  1) dll.obj is a DLLInfo object
1607
  1) dll.obj is a DLLInfo object
1608
*/
1608
*/
1609
static DL_FUNC
1609
static DL_FUNC
1610
R_FindNativeSymbolFromDLL(char *name, DllReference *dll,
1610
R_FindNativeSymbolFromDLL(char *name, DllReference *dll,
1611
			  R_RegisteredNativeSymbol *symbol)
1611
			  R_RegisteredNativeSymbol *symbol)
1612
{
1612
{
1613
    int numProtects = 0;
1613
    int numProtects = 0;
1614
    DllInfo *info;
1614
    DllInfo *info;
1615
    DL_FUNC fun = NULL;
1615
    DL_FUNC fun = NULL;
1616
 
1616
 
1617
    if(dll->obj == NULL) {
1617
    if(dll->obj == NULL) {
1618
	/* Rprintf("\nsearching for %s\n", name); */
1618
	/* Rprintf("\nsearching for %s\n", name); */
1619
	dll->obj = Rf_getCallingDLL();
1619
	dll->obj = Rf_getCallingDLL();
1620
	PROTECT(dll->obj); numProtects++;
1620
	PROTECT(dll->obj); numProtects++;
1621
    }
1621
    }
1622
 
1622
 
1623
    if(inherits(dll->obj, "DLLInfo")) {
1623
    if(inherits(dll->obj, "DLLInfo")) {
1624
	SEXP tmp;
1624
	SEXP tmp;
1625
	tmp = VECTOR_ELT(dll->obj, 4);
1625
	tmp = VECTOR_ELT(dll->obj, 4);
1626
	info = (DllInfo *) R_ExternalPtrAddr(tmp);
1626
	info = (DllInfo *) R_ExternalPtrAddr(tmp);
1627
	if(!info)
1627
	if(!info)
1628
	    error(_("NULL value for DLLInfoReference when looking for DLL"));
1628
	    error(_("NULL value for DLLInfoReference when looking for DLL"));
1629
	fun = R_dlsym(info, name, symbol);
1629
	fun = R_dlsym(info, name, symbol);
1630
    }
1630
    }
1631
 
1631
 
1632
    if(numProtects)
1632
    if(numProtects)
1633
	UNPROTECT(numProtects);
1633
	UNPROTECT(numProtects);
1634
 
1634
 
1635
    return(fun);
1635
    return(fun);
1636
}
1636
}
1637
 
1637
 
1638
 
1638
 
1639
 
1639
 
1640
/* .C() {op=0}  or  .Fortran() {op=1} */
1640
/* .C() {op=0}  or  .Fortran() {op=1} */
1641
SEXP attribute_hidden do_dotCode(SEXP call, SEXP op, SEXP args, SEXP env)
1641
SEXP attribute_hidden do_dotCode(SEXP call, SEXP op, SEXP args, SEXP env)
1642
{
1642
{
1643
    void **cargs;
1643
    void **cargs;
1644
    int dup, havenames, naok, nargs, which;
1644
    int dup, havenames, naok, nargs, which;
1645
    DL_FUNC ofun = NULL;
1645
    DL_FUNC ofun = NULL;
1646
    VarFun fun = NULL;
1646
    VarFun fun = NULL;
1647
    SEXP ans, pargs, s;
1647
    SEXP ans, pargs, s;
1648
    /* the post-call converters back to R objects. */
1648
    /* the post-call converters back to R objects. */
1649
    R_toCConverter  *argConverters[65];
1649
    R_toCConverter  *argConverters[65];
1650
    R_RegisteredNativeSymbol symbol = {R_C_SYM, {NULL}, NULL};
1650
    R_RegisteredNativeSymbol symbol = {R_C_SYM, {NULL}, NULL};
1651
    R_NativePrimitiveArgType *checkTypes = NULL;
1651
    R_NativePrimitiveArgType *checkTypes = NULL;
1652
    R_NativeArgStyle *argStyles = NULL;
1652
    R_NativeArgStyle *argStyles = NULL;
1653
    void *vmax;
1653
    void *vmax;
1654
    char symName[MaxSymbolBytes], encname[101];
1654
    char symName[MaxSymbolBytes], encname[101];
1655
 
1655
 
1656
    if (NaokSymbol == NULL || DupSymbol == NULL || PkgSymbol == NULL) {
1656
    if (NaokSymbol == NULL || DupSymbol == NULL || PkgSymbol == NULL) {
1657
	NaokSymbol = install("NAOK");
1657
	NaokSymbol = install("NAOK");
1658
	DupSymbol = install("DUP");
1658
	DupSymbol = install("DUP");
1659
	PkgSymbol = install("PACKAGE");
1659
	PkgSymbol = install("PACKAGE");
1660
    }
1660
    }
1661
    if (EncSymbol == NULL) EncSymbol = install("ENCODING");
1661
    if (EncSymbol == NULL) EncSymbol = install("ENCODING");
1662
    vmax = vmaxget();
1662
    vmax = vmaxget();
1663
    which = PRIMVAL(op);
1663
    which = PRIMVAL(op);
1664
    if(which)
1664
    if(which)
1665
	symbol.type = R_FORTRAN_SYM;
1665
	symbol.type = R_FORTRAN_SYM;
1666
 
1666
 
1667
    args = enctrim(args, encname, 100);
1667
    args = enctrim(args, encname, 100);
1668
    args = resolveNativeRoutine(args, &ofun, &symbol, symName, &nargs,
1668
    args = resolveNativeRoutine(args, &ofun, &symbol, symName, &nargs,
1669
				&naok, &dup, call);
1669
				&naok, &dup, call);
1670
    fun = (VarFun) ofun;
1670
    fun = (VarFun) ofun;
1671
 
1671
 
1672
    if(symbol.symbol.c && symbol.symbol.c->numArgs > -1) {
1672
    if(symbol.symbol.c && symbol.symbol.c->numArgs > -1) {
1673
	if(symbol.symbol.c->numArgs != nargs)
1673
	if(symbol.symbol.c->numArgs != nargs)
1674
	    errorcall(call,
1674
	    errorcall(call,
1675
		      _("Incorrect number of arguments (%d), expecting %d for %s"),
1675
		      _("Incorrect number of arguments (%d), expecting %d for %s"),
1676
		      nargs, symbol.symbol.c->numArgs, symName);
1676
		      nargs, symbol.symbol.c->numArgs, symName);
1677
 
1677
 
1678
	checkTypes = symbol.symbol.c->types;
1678
	checkTypes = symbol.symbol.c->types;
1679
	argStyles = symbol.symbol.c->styles;
1679
	argStyles = symbol.symbol.c->styles;
1680
    }
1680
    }
1681
 
1681
 
1682
 
1682
 
1683
    /* Convert the arguments for use in foreign */
1683
    /* Convert the arguments for use in foreign */
1684
    /* function calls.  Note that we copy twice */
1684
    /* function calls.  Note that we copy twice */
1685
    /* once here, on the way into the call, and */
1685
    /* once here, on the way into the call, and */
1686
    /* once below on the way out. */
1686
    /* once below on the way out. */
1687
    cargs = (void**)R_alloc(nargs, sizeof(void*));
1687
    cargs = (void**)R_alloc(nargs, sizeof(void*));
1688
    nargs = 0;
1688
    nargs = 0;
1689
    for(pargs = args ; pargs != R_NilValue; pargs = CDR(pargs)) {
1689
    for(pargs = args ; pargs != R_NilValue; pargs = CDR(pargs)) {
1690
#ifdef THROW_REGISTRATION_TYPE_ERROR
1690
#ifdef THROW_REGISTRATION_TYPE_ERROR
1691
        if(checkTypes &&
1691
        if(checkTypes &&
1692
	   !comparePrimitiveTypes(checkTypes[nargs], CAR(pargs), dup)) {
1692
	   !comparePrimitiveTypes(checkTypes[nargs], CAR(pargs), dup)) {
1693
            /* We can loop over all the arguments and report all the
1693
            /* We can loop over all the arguments and report all the
1694
               erroneous ones, but then we would also want to avoid
1694
               erroneous ones, but then we would also want to avoid
1695
               the conversions.  Also, in the future, we may just
1695
               the conversions.  Also, in the future, we may just
1696
               attempt to coerce the value to the appropriate
1696
               attempt to coerce the value to the appropriate
1697
               type. This is why we pass the checkTypes[nargs] value
1697
               type. This is why we pass the checkTypes[nargs] value
1698
               to RObjToCPtr(). We just have to sort out the ability
1698
               to RObjToCPtr(). We just have to sort out the ability
1699
               to return the correct value which is complicated by
1699
               to return the correct value which is complicated by
1700
               dup, etc. */
1700
               dup, etc. */
1701
	    errorcall(call, _("Wrong type for argument %d in call to %s"),
1701
	    errorcall(call, _("Wrong type for argument %d in call to %s"),
1702
		      nargs+1, symName);
1702
		      nargs+1, symName);
1703
	}
1703
	}
1704
#endif
1704
#endif
1705
	cargs[nargs] = RObjToCPtr(CAR(pargs), naok, dup, nargs + 1,
1705
	cargs[nargs] = RObjToCPtr(CAR(pargs), naok, dup, nargs + 1,
1706
				  which, symName, argConverters + nargs,
1706
				  which, symName, argConverters + nargs,
1707
				  checkTypes ? checkTypes[nargs] : 0,
1707
				  checkTypes ? checkTypes[nargs] : 0,
1708
				  encname);
1708
				  encname);
1709
#ifdef R_MEMORY_PROFILING
1709
#ifdef R_MEMORY_PROFILING
1710
	if (TRACE(CAR(pargs)) && dup)
1710
	if (TRACE(CAR(pargs)) && dup)
1711
		memtrace_report(CAR(pargs), cargs[nargs]);
1711
		memtrace_report(CAR(pargs), cargs[nargs]);
1712
#endif
1712
#endif
1713
	nargs++;
1713
	nargs++;
1714
    }
1714
    }
1715
 
1715
 
1716
 
1716
 
1717
    switch (nargs) {
1717
    switch (nargs) {
1718
    case 0:
1718
    case 0:
1719
	/* Silicon graphics C chokes here */
1719
	/* Silicon graphics C chokes here */
1720
	/* if there is no argument to fun. */
1720
	/* if there is no argument to fun. */
1721
	fun(0);
1721
	fun(0);
1722
	break;
1722
	break;
1723
    case 1:
1723
    case 1:
1724
	fun(cargs[0]);
1724
	fun(cargs[0]);
1725
	break;
1725
	break;
1726
    case 2:
1726
    case 2:
1727
	fun(cargs[0], cargs[1]);
1727
	fun(cargs[0], cargs[1]);
1728
	break;
1728
	break;
1729
    case 3:
1729
    case 3:
1730
	fun(cargs[0], cargs[1], cargs[2]);
1730
	fun(cargs[0], cargs[1], cargs[2]);
1731
	break;
1731
	break;
1732
    case 4:
1732
    case 4:
1733
	fun(cargs[0], cargs[1], cargs[2], cargs[3]);
1733
	fun(cargs[0], cargs[1], cargs[2], cargs[3]);
1734
	break;
1734
	break;
1735
    case 5:
1735
    case 5:
1736
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4]);
1736
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4]);
1737
	break;
1737
	break;
1738
    case 6:
1738
    case 6:
1739
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1739
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1740
	    cargs[5]);
1740
	    cargs[5]);
1741
	break;
1741
	break;
1742
    case 7:
1742
    case 7:
1743
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1743
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1744
	    cargs[5],  cargs[6]);
1744
	    cargs[5],  cargs[6]);
1745
	break;
1745
	break;
1746
    case 8:
1746
    case 8:
1747
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1747
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1748
	    cargs[5],  cargs[6],  cargs[7]);
1748
	    cargs[5],  cargs[6],  cargs[7]);
1749
	break;
1749
	break;
1750
    case 9:
1750
    case 9:
1751
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1751
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1752
	    cargs[5],  cargs[6],  cargs[7],  cargs[8]);
1752
	    cargs[5],  cargs[6],  cargs[7],  cargs[8]);
1753
	break;
1753
	break;
1754
    case 10:
1754
    case 10:
1755
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1755
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1756
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9]);
1756
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9]);
1757
	break;
1757
	break;
1758
    case 11:
1758
    case 11:
1759
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1759
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1760
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1760
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1761
	    cargs[10]);
1761
	    cargs[10]);
1762
	break;
1762
	break;
1763
    case 12:
1763
    case 12:
1764
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1764
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1765
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1765
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1766
	    cargs[10], cargs[11]);
1766
	    cargs[10], cargs[11]);
1767
	break;
1767
	break;
1768
    case 13:
1768
    case 13:
1769
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1769
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1770
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1770
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1771
	    cargs[10], cargs[11], cargs[12]);
1771
	    cargs[10], cargs[11], cargs[12]);
1772
	break;
1772
	break;
1773
    case 14:
1773
    case 14:
1774
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1774
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1775
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1775
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1776
	    cargs[10], cargs[11], cargs[12], cargs[13]);
1776
	    cargs[10], cargs[11], cargs[12], cargs[13]);
1777
	break;
1777
	break;
1778
    case 15:
1778
    case 15:
1779
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1779
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1780
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1780
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1781
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14]);
1781
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14]);
1782
	break;
1782
	break;
1783
    case 16:
1783
    case 16:
1784
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1784
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1785
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1785
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1786
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1786
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1787
	    cargs[15]);
1787
	    cargs[15]);
1788
	break;
1788
	break;
1789
    case 17:
1789
    case 17:
1790
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1790
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1791
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1791
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1792
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1792
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1793
	    cargs[15], cargs[16]);
1793
	    cargs[15], cargs[16]);
1794
	break;
1794
	break;
1795
    case 18:
1795
    case 18:
1796
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1796
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1797
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1797
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1798
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1798
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1799
	    cargs[15], cargs[16], cargs[17]);
1799
	    cargs[15], cargs[16], cargs[17]);
1800
	break;
1800
	break;
1801
    case 19:
1801
    case 19:
1802
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1802
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1803
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1803
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1804
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1804
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1805
	    cargs[15], cargs[16], cargs[17], cargs[18]);
1805
	    cargs[15], cargs[16], cargs[17], cargs[18]);
1806
	break;
1806
	break;
1807
    case 20:
1807
    case 20:
1808
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1808
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1809
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1809
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1810
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1810
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1811
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19]);
1811
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19]);
1812
	break;
1812
	break;
1813
    case 21:
1813
    case 21:
1814
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1814
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1815
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1815
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1816
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1816
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1817
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1817
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1818
	    cargs[20]);
1818
	    cargs[20]);
1819
	break;
1819
	break;
1820
    case 22:
1820
    case 22:
1821
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1821
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1822
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1822
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1823
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1823
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1824
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1824
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1825
	    cargs[20], cargs[21]);
1825
	    cargs[20], cargs[21]);
1826
	break;
1826
	break;
1827
    case 23:
1827
    case 23:
1828
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1828
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1829
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1829
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1830
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1830
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1831
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1831
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1832
	    cargs[20], cargs[21], cargs[22]);
1832
	    cargs[20], cargs[21], cargs[22]);
1833
	break;
1833
	break;
1834
    case 24:
1834
    case 24:
1835
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1835
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1836
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1836
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1837
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1837
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1838
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1838
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1839
	    cargs[20], cargs[21], cargs[22], cargs[23]);
1839
	    cargs[20], cargs[21], cargs[22], cargs[23]);
1840
	break;
1840
	break;
1841
    case 25:
1841
    case 25:
1842
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1842
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1843
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1843
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1844
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1844
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1845
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1845
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1846
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24]);
1846
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24]);
1847
	break;
1847
	break;
1848
    case 26:
1848
    case 26:
1849
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1849
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1850
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1850
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1851
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1851
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1852
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1852
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1853
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1853
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1854
	    cargs[25]);
1854
	    cargs[25]);
1855
	break;
1855
	break;
1856
    case 27:
1856
    case 27:
1857
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1857
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1858
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1858
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1859
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1859
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1860
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1860
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1861
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1861
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1862
	    cargs[25], cargs[26]);
1862
	    cargs[25], cargs[26]);
1863
	break;
1863
	break;
1864
    case 28:
1864
    case 28:
1865
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1865
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1866
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1866
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1867
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1867
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1868
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1868
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1869
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1869
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1870
	    cargs[25], cargs[26], cargs[27]);
1870
	    cargs[25], cargs[26], cargs[27]);
1871
	break;
1871
	break;
1872
    case 29:
1872
    case 29:
1873
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1873
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1874
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1874
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1875
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1875
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1876
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1876
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1877
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1877
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1878
	    cargs[25], cargs[26], cargs[27], cargs[28]);
1878
	    cargs[25], cargs[26], cargs[27], cargs[28]);
1879
	break;
1879
	break;
1880
    case 30:
1880
    case 30:
1881
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1881
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1882
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1882
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1883
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1883
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1884
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1884
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1885
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1885
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1886
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29]);
1886
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29]);
1887
	break;
1887
	break;
1888
    case 31:
1888
    case 31:
1889
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1889
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1890
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1890
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1891
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1891
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1892
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1892
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1893
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1893
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1894
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1894
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1895
	    cargs[30]);
1895
	    cargs[30]);
1896
	break;
1896
	break;
1897
    case 32:
1897
    case 32:
1898
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1898
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1899
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1899
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1900
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1900
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1901
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1901
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1902
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1902
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1903
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1903
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1904
	    cargs[30], cargs[31]);
1904
	    cargs[30], cargs[31]);
1905
	break;
1905
	break;
1906
    case 33:
1906
    case 33:
1907
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1907
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1908
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1908
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1909
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1909
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1910
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1910
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1911
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1911
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1912
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1912
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1913
	    cargs[30], cargs[31], cargs[32]);
1913
	    cargs[30], cargs[31], cargs[32]);
1914
	break;
1914
	break;
1915
    case 34:
1915
    case 34:
1916
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1916
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1917
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1917
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1918
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1918
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1919
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1919
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1920
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1920
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1921
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1921
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1922
	    cargs[30], cargs[31], cargs[32], cargs[33]);
1922
	    cargs[30], cargs[31], cargs[32], cargs[33]);
1923
	break;
1923
	break;
1924
    case 35:
1924
    case 35:
1925
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1925
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1926
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1926
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1927
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1927
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1928
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1928
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1929
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1929
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1930
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1930
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1931
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34]);
1931
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34]);
1932
	break;
1932
	break;
1933
    case 36:
1933
    case 36:
1934
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1934
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1935
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1935
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1936
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1936
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1937
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1937
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1938
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1938
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1939
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1939
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1940
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1940
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1941
	    cargs[35]);
1941
	    cargs[35]);
1942
	break;
1942
	break;
1943
    case 37:
1943
    case 37:
1944
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1944
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1945
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1945
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1946
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1946
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1947
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1947
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1948
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1948
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1949
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1949
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1950
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1950
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1951
	    cargs[35], cargs[36]);
1951
	    cargs[35], cargs[36]);
1952
	break;
1952
	break;
1953
    case 38:
1953
    case 38:
1954
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1954
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1955
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1955
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1956
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1956
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1957
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1957
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1958
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1958
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1959
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1959
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1960
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1960
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1961
	    cargs[35], cargs[36], cargs[37]);
1961
	    cargs[35], cargs[36], cargs[37]);
1962
	break;
1962
	break;
1963
    case 39:
1963
    case 39:
1964
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1964
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1965
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1965
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1966
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1966
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1967
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1967
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1968
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1968
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1969
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1969
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1970
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1970
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1971
	    cargs[35], cargs[36], cargs[37], cargs[38]);
1971
	    cargs[35], cargs[36], cargs[37], cargs[38]);
1972
	break;
1972
	break;
1973
    case 40:
1973
    case 40:
1974
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1974
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1975
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1975
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1976
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1976
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1977
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1977
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1978
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1978
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1979
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1979
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1980
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1980
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1981
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39]);
1981
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39]);
1982
	break;
1982
	break;
1983
    case 41:
1983
    case 41:
1984
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1984
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1985
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1985
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1986
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1986
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1987
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1987
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1988
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1988
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1989
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1989
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
1990
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1990
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
1991
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1991
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
1992
	    cargs[40]);
1992
	    cargs[40]);
1993
	break;
1993
	break;
1994
    case 42:
1994
    case 42:
1995
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1995
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
1996
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1996
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
1997
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1997
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
1998
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1998
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
1999
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
1999
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2000
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2000
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2001
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2001
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2002
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2002
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2003
	    cargs[40], cargs[41]);
2003
	    cargs[40], cargs[41]);
2004
	break;
2004
	break;
2005
    case 43:
2005
    case 43:
2006
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2006
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2007
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2007
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2008
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2008
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2009
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2009
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2010
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2010
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2011
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2011
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2012
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2012
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2013
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2013
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2014
	    cargs[40], cargs[41], cargs[42]);
2014
	    cargs[40], cargs[41], cargs[42]);
2015
	break;
2015
	break;
2016
    case 44:
2016
    case 44:
2017
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2017
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2018
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2018
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2019
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2019
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2020
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2020
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2021
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2021
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2022
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2022
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2023
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2023
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2024
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2024
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2025
	    cargs[40], cargs[41], cargs[42], cargs[43]);
2025
	    cargs[40], cargs[41], cargs[42], cargs[43]);
2026
	break;
2026
	break;
2027
    case 45:
2027
    case 45:
2028
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2028
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2029
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2029
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2030
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2030
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2031
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2031
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2032
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2032
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2033
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2033
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2034
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2034
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2035
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2035
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2036
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44]);
2036
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44]);
2037
	break;
2037
	break;
2038
    case 46:
2038
    case 46:
2039
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2039
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2040
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2040
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2041
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2041
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2042
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2042
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2043
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2043
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2044
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2044
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2045
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2045
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2046
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2046
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2047
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2047
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2048
	    cargs[45]);
2048
	    cargs[45]);
2049
	break;
2049
	break;
2050
    case 47:
2050
    case 47:
2051
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2051
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2052
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2052
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2053
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2053
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2054
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2054
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2055
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2055
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2056
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2056
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2057
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2057
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2058
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2058
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2059
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2059
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2060
	    cargs[45], cargs[46]);
2060
	    cargs[45], cargs[46]);
2061
	break;
2061
	break;
2062
    case 48:
2062
    case 48:
2063
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2063
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2064
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2064
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2065
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2065
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2066
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2066
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2067
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2067
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2068
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2068
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2069
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2069
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2070
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2070
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2071
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2071
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2072
	    cargs[45], cargs[46], cargs[47]);
2072
	    cargs[45], cargs[46], cargs[47]);
2073
	break;
2073
	break;
2074
    case 49:
2074
    case 49:
2075
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2075
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2076
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2076
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2077
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2077
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2078
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2078
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2079
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2079
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2080
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2080
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2081
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2081
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2082
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2082
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2083
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2083
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2084
	    cargs[45], cargs[46], cargs[47], cargs[48]);
2084
	    cargs[45], cargs[46], cargs[47], cargs[48]);
2085
	break;
2085
	break;
2086
    case 50:
2086
    case 50:
2087
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2087
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2088
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2088
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2089
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2089
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2090
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2090
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2091
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2091
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2092
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2092
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2093
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2093
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2094
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2094
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2095
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2095
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2096
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49]);
2096
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49]);
2097
	break;
2097
	break;
2098
    case 51:
2098
    case 51:
2099
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2099
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2100
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2100
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2101
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2101
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2102
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2102
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2103
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2103
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2104
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2104
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2105
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2105
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2106
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2106
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2107
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2107
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2108
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2108
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2109
	    cargs[50]);
2109
	    cargs[50]);
2110
	break;
2110
	break;
2111
    case 52:
2111
    case 52:
2112
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2112
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2113
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2113
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2114
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2114
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2115
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2115
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2116
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2116
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2117
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2117
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2118
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2118
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2119
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2119
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2120
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2120
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2121
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2121
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2122
	    cargs[50], cargs[51]);
2122
	    cargs[50], cargs[51]);
2123
	break;
2123
	break;
2124
    case 53:
2124
    case 53:
2125
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2125
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2126
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2126
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2127
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2127
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2128
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2128
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2129
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2129
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2130
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2130
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2131
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2131
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2132
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2132
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2133
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2133
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2134
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2134
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2135
	    cargs[50], cargs[51], cargs[52]);
2135
	    cargs[50], cargs[51], cargs[52]);
2136
	break;
2136
	break;
2137
    case 54:
2137
    case 54:
2138
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2138
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2139
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2139
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2140
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2140
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2141
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2141
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2142
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2142
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2143
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2143
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2144
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2144
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2145
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2145
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2146
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2146
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2147
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2147
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2148
	    cargs[50], cargs[51], cargs[52], cargs[53]);
2148
	    cargs[50], cargs[51], cargs[52], cargs[53]);
2149
	break;
2149
	break;
2150
    case 55:
2150
    case 55:
2151
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2151
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2152
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2152
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2153
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2153
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2154
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2154
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2155
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2155
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2156
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2156
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2157
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2157
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2158
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2158
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2159
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2159
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2160
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2160
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2161
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54]);
2161
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54]);
2162
	break;
2162
	break;
2163
    case 56:
2163
    case 56:
2164
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2164
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2165
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2165
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2166
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2166
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2167
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2167
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2168
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2168
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2169
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2169
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2170
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2170
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2171
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2171
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2172
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2172
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2173
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2173
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2174
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2174
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2175
	    cargs[55]);
2175
	    cargs[55]);
2176
	break;
2176
	break;
2177
    case 57:
2177
    case 57:
2178
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2178
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2179
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2179
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2180
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2180
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2181
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2181
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2182
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2182
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2183
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2183
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2184
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2184
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2185
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2185
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2186
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2186
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2187
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2187
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2188
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2188
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2189
	    cargs[55], cargs[56]);
2189
	    cargs[55], cargs[56]);
2190
	break;
2190
	break;
2191
    case 58:
2191
    case 58:
2192
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2192
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2193
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2193
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2194
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2194
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2195
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2195
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2196
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2196
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2197
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2197
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2198
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2198
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2199
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2199
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2200
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2200
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2201
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2201
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2202
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2202
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2203
	    cargs[55], cargs[56], cargs[57]);
2203
	    cargs[55], cargs[56], cargs[57]);
2204
	break;
2204
	break;
2205
    case 59:
2205
    case 59:
2206
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2206
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2207
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2207
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2208
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2208
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2209
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2209
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2210
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2210
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2211
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2211
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2212
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2212
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2213
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2213
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2214
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2214
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2215
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2215
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2216
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2216
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2217
	    cargs[55], cargs[56], cargs[57], cargs[58]);
2217
	    cargs[55], cargs[56], cargs[57], cargs[58]);
2218
	break;
2218
	break;
2219
    case 60:
2219
    case 60:
2220
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2220
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2221
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2221
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2222
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2222
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2223
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2223
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2224
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2224
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2225
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2225
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2226
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2226
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2227
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2227
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2228
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2228
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2229
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2229
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2230
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2230
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2231
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59]);
2231
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59]);
2232
	break;
2232
	break;
2233
    case 61:
2233
    case 61:
2234
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2234
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2235
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2235
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2236
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2236
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2237
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2237
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2238
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2238
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2239
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2239
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2240
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2240
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2241
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2241
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2242
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2242
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2243
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2243
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2244
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2244
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2245
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2245
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2246
	    cargs[60]);
2246
	    cargs[60]);
2247
	break;
2247
	break;
2248
    case 62:
2248
    case 62:
2249
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2249
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2250
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2250
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2251
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2251
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2252
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2252
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2253
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2253
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2254
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2254
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2255
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2255
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2256
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2256
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2257
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2257
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2258
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2258
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2259
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2259
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2260
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2260
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2261
	    cargs[60], cargs[61]);
2261
	    cargs[60], cargs[61]);
2262
	break;
2262
	break;
2263
    case 63:
2263
    case 63:
2264
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2264
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2265
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2265
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2266
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2266
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2267
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2267
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2268
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2268
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2269
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2269
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2270
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2270
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2271
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2271
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2272
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2272
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2273
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2273
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2274
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2274
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2275
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2275
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2276
	    cargs[60], cargs[61], cargs[62]);
2276
	    cargs[60], cargs[61], cargs[62]);
2277
	break;
2277
	break;
2278
    case 64:
2278
    case 64:
2279
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2279
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2280
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2280
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2281
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2281
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2282
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2282
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2283
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2283
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2284
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2284
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2285
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2285
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2286
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2286
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2287
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2287
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2288
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2288
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2289
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2289
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2290
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2290
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2291
	    cargs[60], cargs[61], cargs[62], cargs[63]);
2291
	    cargs[60], cargs[61], cargs[62], cargs[63]);
2292
	break;
2292
	break;
2293
    case 65:
2293
    case 65:
2294
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2294
	fun(cargs[0],  cargs[1],  cargs[2],  cargs[3],  cargs[4],
2295
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2295
	    cargs[5],  cargs[6],  cargs[7],  cargs[8],  cargs[9],
2296
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2296
	    cargs[10], cargs[11], cargs[12], cargs[13], cargs[14],
2297
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2297
	    cargs[15], cargs[16], cargs[17], cargs[18], cargs[19],
2298
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2298
	    cargs[20], cargs[21], cargs[22], cargs[23], cargs[24],
2299
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2299
	    cargs[25], cargs[26], cargs[27], cargs[28], cargs[29],
2300
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2300
	    cargs[30], cargs[31], cargs[32], cargs[33], cargs[34],
2301
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2301
	    cargs[35], cargs[36], cargs[37], cargs[38], cargs[39],
2302
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2302
	    cargs[40], cargs[41], cargs[42], cargs[43], cargs[44],
2303
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2303
	    cargs[45], cargs[46], cargs[47], cargs[48], cargs[49],
2304
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2304
	    cargs[50], cargs[51], cargs[52], cargs[53], cargs[54],
2305
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2305
	    cargs[55], cargs[56], cargs[57], cargs[58], cargs[59],
2306
	    cargs[60], cargs[61], cargs[62], cargs[63], cargs[64]);
2306
	    cargs[60], cargs[61], cargs[62], cargs[63], cargs[64]);
2307
	break;
2307
	break;
2308
    default:
2308
    default:
2309
	errorcall(call, _("too many arguments, sorry"));
2309
	errorcall(call, _("too many arguments, sorry"));
2310
    }
2310
    }
2311
    PROTECT(ans = allocVector(VECSXP, nargs));
2311
    PROTECT(ans = allocVector(VECSXP, nargs));
2312
    havenames = 0;
2312
    havenames = 0;
2313
    if (dup) {
2313
    if (dup) {
2314
	R_FromCConvertInfo info;
2314
	R_FromCConvertInfo info;
2315
	info.cargs = cargs;
2315
	info.cargs = cargs;
2316
	info.allArgs = args;
2316
	info.allArgs = args;
2317
	info.nargs = nargs;
2317
	info.nargs = nargs;
2318
	info.functionName = symName;
2318
	info.functionName = symName;
2319
	nargs = 0;
2319
	nargs = 0;
2320
	for (pargs = args ; pargs != R_NilValue ; pargs = CDR(pargs)) {
2320
	for (pargs = args ; pargs != R_NilValue ; pargs = CDR(pargs)) {
2321
	    if(argStyles && argStyles[nargs] == R_ARG_IN) {
2321
	    if(argStyles && argStyles[nargs] == R_ARG_IN) {
2322
	        PROTECT(s = R_NilValue);
2322
	        PROTECT(s = R_NilValue);
2323
	    } else if(argConverters[nargs]) {
2323
	    } else if(argConverters[nargs]) {
2324
                if(argConverters[nargs]->reverse) {
2324
                if(argConverters[nargs]->reverse) {
2325
		    info.argIndex = nargs;
2325
		    info.argIndex = nargs;
2326
		    s = argConverters[nargs]->reverse(cargs[nargs], CAR(pargs),
2326
		    s = argConverters[nargs]->reverse(cargs[nargs], CAR(pargs),
2327
						      &info,
2327
						      &info,
2328
						      argConverters[nargs]);
2328
						      argConverters[nargs]);
2329
		} else
2329
		} else
2330
		    s = R_NilValue;
2330
		    s = R_NilValue;
2331
		PROTECT(s);
2331
		PROTECT(s);
2332
	    } else {
2332
	    } else {
2333
		PROTECT(s = CPtrToRObj(cargs[nargs], CAR(pargs), which,
2333
		PROTECT(s = CPtrToRObj(cargs[nargs], CAR(pargs), which,
2334
				       checkTypes ? checkTypes[nargs] : TYPEOF(CAR(pargs)),
2334
				       checkTypes ? checkTypes[nargs] : TYPEOF(CAR(pargs)),
2335
				       encname));
2335
				       encname));
2336
#if R_MEMORY_PROFILING
2336
#if R_MEMORY_PROFILING
2337
		if (TRACE(CAR(pargs)) && dup){
2337
		if (TRACE(CAR(pargs)) && dup){
2338
			memtrace_report(cargs[nargs], s);
2338
			memtrace_report(cargs[nargs], s);
2339
			SET_TRACE(s, 1);
2339
			SET_TRACE(s, 1);
2340
		}
2340
		}
2341
#endif		
2341
#endif		
2342
		DUPLICATE_ATTRIB(s, CAR(pargs));
2342
		DUPLICATE_ATTRIB(s, CAR(pargs));
2343
	    }
2343
	    }
2344
	    if (TAG(pargs) != R_NilValue)
2344
	    if (TAG(pargs) != R_NilValue)
2345
		havenames = 1;
2345
		havenames = 1;
2346
	    SET_VECTOR_ELT(ans, nargs, s);
2346
	    SET_VECTOR_ELT(ans, nargs, s);
2347
	    nargs++;
2347
	    nargs++;
2348
	    UNPROTECT(1);
2348
	    UNPROTECT(1);
2349
	}
2349
	}
2350
    }
2350
    }
2351
    else {
2351
    else {
2352
	nargs = 0;
2352
	nargs = 0;
2353
	for (pargs = args ; pargs != R_NilValue ; pargs = CDR(pargs)) {
2353
	for (pargs = args ; pargs != R_NilValue ; pargs = CDR(pargs)) {
2354
	    if (TAG(pargs) != R_NilValue)
2354
	    if (TAG(pargs) != R_NilValue)
2355
		havenames = 1;
2355
		havenames = 1;
2356
	    SET_VECTOR_ELT(ans, nargs, CAR(pargs));
2356
	    SET_VECTOR_ELT(ans, nargs, CAR(pargs));
2357
	    nargs++;
2357
	    nargs++;
2358
	}
2358
	}
2359
    }
2359
    }
2360
    if (havenames) {
2360
    if (havenames) {
2361
	SEXP names;
2361
	SEXP names;
2362
	PROTECT(names = allocVector(STRSXP, nargs));
2362
	PROTECT(names = allocVector(STRSXP, nargs));
2363
	nargs = 0;
2363
	nargs = 0;
2364
	for (pargs = args ; pargs != R_NilValue ; pargs = CDR(pargs)) {
2364
	for (pargs = args ; pargs != R_NilValue ; pargs = CDR(pargs)) {
2365
	    if (TAG(pargs) == R_NilValue)
2365
	    if (TAG(pargs) == R_NilValue)
2366
		SET_STRING_ELT(names, nargs++, R_BlankString);
2366
		SET_STRING_ELT(names, nargs++, R_BlankString);
2367
	    else
2367
	    else
2368
		SET_STRING_ELT(names, nargs++, PRINTNAME(TAG(pargs)));
2368
		SET_STRING_ELT(names, nargs++, PRINTNAME(TAG(pargs)));
2369
        }
2369
        }
2370
	setAttrib(ans, R_NamesSymbol, names);
2370
	setAttrib(ans, R_NamesSymbol, names);
2371
	UNPROTECT(1);
2371
	UNPROTECT(1);
2372
    }
2372
    }
2373
    UNPROTECT(1);
2373
    UNPROTECT(1);
2374
    vmaxset(vmax);
2374
    vmaxset(vmax);
2375
    return (ans);
2375
    return (ans);
2376
}
2376
}
2377
 
2377
 
2378
/* FIXME : Must work out what happens here when we replace LISTSXP by
2378
/* FIXME : Must work out what happens here when we replace LISTSXP by
2379
   VECSXP. */
2379
   VECSXP. */
2380
 
2380
 
2381
static const struct {
2381
static const struct {
2382
    const char *name;
2382
    const char *name;
2383
    const SEXPTYPE type;
2383
    const SEXPTYPE type;
2384
}
2384
}
2385
typeinfo[] = {
2385
typeinfo[] = {
2386
    {"logical",	  LGLSXP },
2386
    {"logical",	  LGLSXP },
2387
    {"integer",	  INTSXP },
2387
    {"integer",	  INTSXP },
2388
    {"double",	  REALSXP},
2388
    {"double",	  REALSXP},
2389
    {"complex",	  CPLXSXP},
2389
    {"complex",	  CPLXSXP},
2390
    {"character", STRSXP },
2390
    {"character", STRSXP },
2391
    {"list",	  VECSXP },
2391
    {"list",	  VECSXP },
2392
    {NULL,	  0      }
2392
    {NULL,	  0      }
2393
};
2393
};
2394
 
2394
 
2395
static int string2type(char *s)
2395
static int string2type(char *s)
2396
{
2396
{
2397
    int i;
2397
    int i;
2398
    for (i = 0 ; typeinfo[i].name ; i++) {
2398
    for (i = 0 ; typeinfo[i].name ; i++) {
2399
	if(!strcmp(typeinfo[i].name, s)) {
2399
	if(!strcmp(typeinfo[i].name, s)) {
2400
	    return typeinfo[i].type;
2400
	    return typeinfo[i].type;
2401
	}
2401
	}
2402
    }
2402
    }
2403
    error(_("type \"%s\" not supported in interlanguage calls"), s);
2403
    error(_("type \"%s\" not supported in interlanguage calls"), s);
2404
    return 1; /* for -Wall */
2404
    return 1; /* for -Wall */
2405
}
2405
}
2406
 
2406
 
2407
void call_R(char *func, long nargs, void **arguments, char **modes,
2407
void call_R(char *func, long nargs, void **arguments, char **modes,
2408
	    long *lengths, char **names, long nres, char **results)
2408
	    long *lengths, char **names, long nres, char **results)
2409
{
2409
{
2410
    SEXP call, pcall, s;
2410
    SEXP call, pcall, s;
2411
    SEXPTYPE type;
2411
    SEXPTYPE type;
2412
    int i, j, n;
2412
    int i, j, n;
2413
 
2413
 
2414
    if (!isFunction((SEXP)func))
2414
    if (!isFunction((SEXP)func))
2415
	error(_("invalid function in call_R"));
2415
	error(_("invalid function in call_R"));
2416
    if (nargs < 0)
2416
    if (nargs < 0)
2417
	error(_("invalid argument count in call_R"));
2417
	error(_("invalid argument count in call_R"));
2418
    if (nres < 0)
2418
    if (nres < 0)
2419
	error(_("invalid return value count in call_R"));
2419
	error(_("invalid return value count in call_R"));
2420
    PROTECT(pcall = call = allocList(nargs + 1));
2420
    PROTECT(pcall = call = allocList(nargs + 1));
2421
    SET_TYPEOF(call, LANGSXP);
2421
    SET_TYPEOF(call, LANGSXP);
2422
    SETCAR(pcall, (SEXP)func);
2422
    SETCAR(pcall, (SEXP)func);
2423
    s = R_NilValue;		/* -Wall */
2423
    s = R_NilValue;		/* -Wall */
2424
    for (i = 0 ; i < nargs ; i++) {
2424
    for (i = 0 ; i < nargs ; i++) {
2425
	pcall = CDR(pcall);
2425
	pcall = CDR(pcall);
2426
	type = string2type(modes[i]);
2426
	type = string2type(modes[i]);
2427
	switch(type) {
2427
	switch(type) {
2428
	case LGLSXP:
2428
	case LGLSXP:
2429
	case INTSXP:
2429
	case INTSXP:
2430
	    n = lengths[i];
2430
	    n = lengths[i];
2431
	    SETCAR(pcall, allocVector(type, n));
2431
	    SETCAR(pcall, allocVector(type, n));
2432
	    memcpy(INTEGER(CAR(pcall)), arguments[i], n * sizeof(int));
2432
	    memcpy(INTEGER(CAR(pcall)), arguments[i], n * sizeof(int));
2433
	    break;
2433
	    break;
2434
	case REALSXP:
2434
	case REALSXP:
2435
	    n = lengths[i];
2435
	    n = lengths[i];
2436
	    SETCAR(pcall, allocVector(REALSXP, n));
2436
	    SETCAR(pcall, allocVector(REALSXP, n));
2437
	    memcpy(REAL(CAR(pcall)), arguments[i], n * sizeof(double));
2437
	    memcpy(REAL(CAR(pcall)), arguments[i], n * sizeof(double));
2438
	    break;
2438
	    break;
2439
	case CPLXSXP:
2439
	case CPLXSXP:
2440
	    n = lengths[i];
2440
	    n = lengths[i];
2441
	    SETCAR(pcall, allocVector(CPLXSXP, n));
2441
	    SETCAR(pcall, allocVector(CPLXSXP, n));
2442
	    memcpy(REAL(CAR(pcall)), arguments[i], n * sizeof(Rcomplex));
2442
	    memcpy(REAL(CAR(pcall)), arguments[i], n * sizeof(Rcomplex));
2443
	    break;
2443
	    break;
2444
	case STRSXP:
2444
	case STRSXP:
2445
	    n = lengths[i];
2445
	    n = lengths[i];
2446
	    SETCAR(pcall, allocVector(STRSXP, n));
2446
	    SETCAR(pcall, allocVector(STRSXP, n));
2447
	    for (j = 0 ; j < n ; j++) {
2447
	    for (j = 0 ; j < n ; j++) {
2448
		char *str = (char*)(arguments[i]);
2448
		char *str = (char*)(arguments[i]);
2449
		SET_STRING_ELT(CAR(pcall), i, mkChar(str));
2449
		SET_STRING_ELT(CAR(pcall), i, mkChar(str));
2450
 	    }
2450
 	    }
2451
	    break;
2451
	    break;
2452
	    /* FIXME : This copy is unnecessary! */
2452
	    /* FIXME : This copy is unnecessary! */
2453
	    /* FIXME : This is obviously incorrect so disable
2453
	    /* FIXME : This is obviously incorrect so disable
2454
	case VECSXP:
2454
	case VECSXP:
2455
	    n = lengths[i];
2455
	    n = lengths[i];
2456
	    SETCAR(pcall, allocVector(VECSXP, n));
2456
	    SETCAR(pcall, allocVector(VECSXP, n));
2457
	    for (j = 0 ; j < n ; j++) {
2457
	    for (j = 0 ; j < n ; j++) {
2458
		SET_VECTOR_ELT(s, i, (SEXP)(arguments[i]));
2458
		SET_VECTOR_ELT(s, i, (SEXP)(arguments[i]));
2459
	    }
2459
	    }
2460
	    break; */
2460
	    break; */
2461
	default:
2461
	default:
2462
	    error(_("mode '%s' is not supported in call_R"), modes[i]);
2462
	    error(_("mode '%s' is not supported in call_R"), modes[i]);
2463
	}
2463
	}
2464
	if(names && names[i])
2464
	if(names && names[i])
2465
	    SET_TAG(pcall, install(names[i]));
2465
	    SET_TAG(pcall, install(names[i]));
2466
	SET_NAMED(CAR(pcall), 2);
2466
	SET_NAMED(CAR(pcall), 2);
2467
    }
2467
    }
2468
    PROTECT(s = eval(call, R_GlobalEnv));
2468
    PROTECT(s = eval(call, R_GlobalEnv));
2469
    switch(TYPEOF(s)) {
2469
    switch(TYPEOF(s)) {
2470
    case LGLSXP:
2470
    case LGLSXP:
2471
    case INTSXP:
2471
    case INTSXP:
2472
    case REALSXP:
2472
    case REALSXP:
2473
    case CPLXSXP:
2473
    case CPLXSXP:
2474
    case STRSXP:
2474
    case STRSXP:
2475
	if(nres > 0)
2475
	if(nres > 0)
2476
	    results[0] = (char *) RObjToCPtr(s, 1, 1, 0, 0, (const char *)NULL,
2476
	    results[0] = (char *) RObjToCPtr(s, 1, 1, 0, 0, (const char *)NULL,
2477
					     NULL, 0, "");
2477
					     NULL, 0, "");
2478
	break;
2478
	break;
2479
    case VECSXP:
2479
    case VECSXP:
2480
	n = length(s);
2480
	n = length(s);
2481
	if (nres < n) n = nres;
2481
	if (nres < n) n = nres;
2482
	for (i = 0 ; i < n ; i++) {
2482
	for (i = 0 ; i < n ; i++) {
2483
	    results[i] = (char *) RObjToCPtr(VECTOR_ELT(s, i), 1, 1, 0, 0,
2483
	    results[i] = (char *) RObjToCPtr(VECTOR_ELT(s, i), 1, 1, 0, 0,
2484
					     (const char *)NULL, NULL, 0, "");
2484
					     (const char *)NULL, NULL, 0, "");
2485
	}
2485
	}
2486
	break;
2486
	break;
2487
    case LISTSXP:
2487
    case LISTSXP:
2488
	n = length(s);
2488
	n = length(s);
2489
	if(nres < n) n = nres;
2489
	if(nres < n) n = nres;
2490
	for(i=0 ; i<n ; i++) {
2490
	for(i=0 ; i<n ; i++) {
2491
	    results[i] =(char *) RObjToCPtr(s, 1, 1, 0, 0, (const char *)NULL,
2491
	    results[i] =(char *) RObjToCPtr(s, 1, 1, 0, 0, (const char *)NULL,
2492
					    NULL, 0, "");
2492
					    NULL, 0, "");
2493
	    s = CDR(s);
2493
	    s = CDR(s);
2494
	}
2494
	}
2495
	break;
2495
	break;
2496
    }
2496
    }
2497
    UNPROTECT(2);
2497
    UNPROTECT(2);
2498
    return;
2498
    return;
2499
}
2499
}
2500
 
2500
 
2501
void call_S(char *func, long nargs, void **arguments, char **modes,
2501
void call_S(char *func, long nargs, void **arguments, char **modes,
2502
	    long *lengths, char **names, long nres, char **results)
2502
	    long *lengths, char **names, long nres, char **results)
2503
{
2503
{
2504
    call_R(func, nargs, arguments, modes, lengths, names, nres, results);
2504
    call_R(func, nargs, arguments, modes, lengths, names, nres, results);
2505
}
2505
}