version 1.20, 2020/08/26 06:03:31 |
version 1.24, 2022/03/28 09:21:56 |
|
|
/* $OpenXM: OpenXM/src/ox_pari/ox_pari.c,v 1.19 2019/12/19 08:34:41 fujimoto Exp $ */ |
/* $OpenXM: OpenXM/src/ox_pari/ox_pari.c,v 1.23 2021/03/25 07:03:21 noro Exp $ */ |
|
|
#include <signal.h> |
#include <signal.h> |
#include "ox_pari.h" |
#include "ox_pari.h" |
Line 9 static int stack_size = 0; |
|
Line 9 static int stack_size = 0; |
|
static int stack_pointer = 0; |
static int stack_pointer = 0; |
static cmo **stack = NULL; |
static cmo **stack = NULL; |
extern int debug_print; |
extern int debug_print; |
|
extern unsigned long precreal; |
long paristack=10000000; |
long paristack=10000000; |
|
|
#define INIT_S_SIZE 2048 |
#define INIT_S_SIZE 2048 |
|
|
{ |
{ |
pari_init(paristack,2); |
pari_init(paristack,2); |
mp_set_memory_functions(GC_malloc,gc_realloc,gc_free); |
mp_set_memory_functions(GC_malloc,gc_realloc,gc_free); |
|
gmp_check(); |
} |
} |
|
|
int initialize_stack() |
int initialize_stack() |
Line 157 int sm_executeFunction() |
|
Line 159 int sm_executeFunction() |
|
struct parif *parif; |
struct parif *parif; |
unsigned long prec; |
unsigned long prec; |
char buf[BUFSIZ]; |
char buf[BUFSIZ]; |
extern unsigned long precreal; |
|
|
|
cmo_string *func = (cmo_string *)pop(); |
cmo_string *func = (cmo_string *)pop(); |
if(func->tag != CMO_STRING) { |
if(func->tag != CMO_STRING) { |
Line 184 int sm_executeFunction() |
|
Line 185 int sm_executeFunction() |
|
init_pari(); |
init_pari(); |
return 0; |
return 0; |
} |
} |
|
if ( !strcmp(func->s,"pari_setprec") ) { |
|
long n,prec; |
|
|
|
n = cmo_to_int(av[0]); |
|
setrealprecision(n,&prec); |
|
return 0; |
|
} |
parif =search_parif(func->s); |
parif =search_parif(func->s); |
if ( !parif ) { |
if ( !parif ) { |
sprintf(buf,"%s : not implemented",func->s); |
sprintf(buf,"%s : not implemented",func->s); |
Line 196 int sm_executeFunction() |
|
Line 204 int sm_executeFunction() |
|
|
|
av0 = avma; |
av0 = avma; |
z = cmo_to_GEN(av[0]); |
z = cmo_to_GEN(av[0]); |
prec = ac==2 ? cmo_to_int(av[1])*3.32193/32+3 : precreal; |
prec = ac==2 ? ndec2prec(cmo_to_int(av[1])) : nbits2prec(precreal); |
if ( ismatrix(z) ) { |
if ( ismatrix(z) ) { |
int i,len; |
int i,len; |
len = lg(z); |
len = lg(z); |
Line 268 int receive_and_execute_sm_command() |
|
Line 276 int receive_and_execute_sm_command() |
|
exit(0); |
exit(0); |
break; |
break; |
default: |
default: |
printf("receive_and_execute_sm_command : code=%d\n",code);fflush(stdout); |
ox_printf("receive_and_execute_sm_command : code=%d\n",code); |
break; |
break; |
} |
} |
return 0; |
return 0; |
|
|
tag = receive_ox_tag(fd_rw); |
tag = receive_ox_tag(fd_rw); |
switch(tag) { |
switch(tag) { |
case OX_DATA: |
case OX_DATA: |
printf("receive : ox_data %d\n",tag);fflush(stdout); |
ox_printf("receive : ox_data %d\n",tag); |
push(receive_cmo(fd_rw)); |
push(receive_cmo(fd_rw)); |
break; |
break; |
case OX_COMMAND: |
case OX_COMMAND: |
printf("receive : ox_command %d\n",tag);fflush(stdout); |
ox_printf("receive : ox_command %d\n",tag); |
receive_and_execute_sm_command(); |
receive_and_execute_sm_command(); |
break; |
break; |
default: |
default: |
printf("receive : tag=%d\n",tag);fflush(stdout); |
ox_printf("receive : tag=%d\n",tag); |
} |
} |
return 0; |
return 0; |
} |
} |
Line 309 void usr1_handler(int sig) |
|
Line 317 void usr1_handler(int sig) |
|
#endif |
#endif |
} |
} |
|
|
|
#if defined(USE_OXPARI_LOG) |
|
#define LOGFILE "/tmp/oxpari.log" |
|
#endif |
|
|
int main() |
int main() |
{ |
{ |
#if defined(ANDROID) |
#if defined(ANDROID) |
|
|
#else |
#else |
if ( sigsetjmp(ox_env,~0) ) { |
if ( sigsetjmp(ox_env,~0) ) { |
#endif |
#endif |
fprintf(stderr,"resetting libpari and sending OX_SYNC_BALL..."); |
ox_printf("resetting libpari and sending OX_SYNC_BALL..."); |
init_pari(); |
init_pari(); |
initialize_stack(); |
initialize_stack(); |
send_ox_tag(fd_rw,OX_SYNC_BALL); |
send_ox_tag(fd_rw,OX_SYNC_BALL); |
fprintf(stderr,"done\n"); |
ox_printf("done\n"); |
} else { |
} else { |
init_gc(); |
init_gc(); |
ox_stderr_init(stderr); |
|
|
#if defined(LOGFILE) |
|
ox_stderr_init(fopen(LOGFILE,"a")); |
|
#endif |
init_pari(); |
init_pari(); |
initialize_stack(); |
initialize_stack(); |
|
|
fprintf(stderr,"ox_pari\n"); |
ox_printf("ox_pari\n"); |
|
|
fd_rw = oxf_open(3); |
fd_rw = oxf_open(3); |
oxf_determine_byteorder_server(fd_rw); |
oxf_determine_byteorder_server(fd_rw); |