=================================================================== RCS file: /home/cvs/OpenXM/src/ox_gsl/ox_gsl.c,v retrieving revision 1.9 retrieving revision 1.13 diff -u -p -r1.9 -r1.13 --- OpenXM/src/ox_gsl/ox_gsl.c 2018/04/18 02:20:51 1.9 +++ OpenXM/src/ox_gsl/ox_gsl.c 2018/06/07 11:13:05 1.13 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/ox_gsl/ox_gsl.c,v 1.8 2018/04/17 00:56:38 takayama Exp $ +/* $OpenXM: OpenXM/src/ox_gsl/ox_gsl.c,v 1.12 2018/06/07 01:53:33 takayama Exp $ */ #include @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "ox_gsl.h" #include "call_gsl.h" // need only when you bind call_gsl functions. @@ -331,6 +332,12 @@ int sm_executeFunction() call_gsl_sf_lngamma_complex_e(); }else if (strcmp(func->s,"gsl_integration_qags")==0) { call_gsl_integration_qags(); + }else if (strcmp(func->s,"gsl_monte_plain_integrate")==0) { + call_gsl_monte_plain_miser_vegas_integrate(0); + }else if (strcmp(func->s,"gsl_monte_miser_integrate")==0) { + call_gsl_monte_plain_miser_vegas_integrate(1); + }else if (strcmp(func->s,"gsl_monte_vegas_integrate")==0) { + call_gsl_monte_plain_miser_vegas_integrate(2); }else { push(make_error2("sm_executeFunction, unknown function",NULL,0,-1)); return -1; @@ -454,10 +461,46 @@ int main() fd_rw = oxf_open(3); oxf_determine_byteorder_server(fd_rw); } +#if defined(__CYGWIN__) + void *mysignal(int sig,void (*handler)(int m)); + mysignal(SIGUSR1,usr1_handler); +#else signal(SIGUSR1,usr1_handler); +#endif while(1) { receive(); } return(0); +} + +cmo *element_of_at(cmo *list,int k) { + int length; + static cmo * saved_list = NULL; + static cmo **dic; + int i; + cell *cellp; + if (list == NULL) { + ox_printf("element_of_at: list is NULL.\n"); + return( (cmo *)NULL); + } + if (list->tag != CMO_LIST) { + ox_printf("element_of_at: list is not list.\n"); + return((cmo *)NULL); + } + length = list_length((cmo_list *)list); + if ((k < 0) || (k >= length)) { + ox_printf("element_of_at: out of bound length=%d, k=%d.\n",length,k); + return((cmo *)NULL); + } + if (list == saved_list) return(dic[k]); + saved_list = list; + dic = (cmo **)GC_malloc(sizeof(cmo *)*(length+1)); + if (dic == NULL) return((cmo *)NULL); // no more memory. + cellp = list_first((cmo_list *)list); + for (i=0; icmo; + cellp = list_next(cellp); + } + return(dic[k]); }