8#define TRANSEXT_PRIVATES 1
52#include <netinet/in.h>
99 snprintf(
name,20,
"ssiRing%d",nr); nr++;
136 snprintf(
name,20,
"ssiRing%d",nr); nr++;
167 fprintf(d->
f_write,
"%d %s ",(
int)strlen(
s),
s);
196 fraction
f=(fraction)n;
204 else if (
cf->cfWriteFd!=
NULL)
208 else WerrorS(
"coeff field not implemented");
224 fraction
f=(fraction)n;
232 else if (
cf->cfWriteFd_S!=
NULL)
236 else WerrorS(
"coeff field not implemented");
275 fprintf(d->
f_write,
"-1 %d ",r->N);
277 fprintf(d->
f_write,
"-2 %d ",r->N);
280 fprintf(d->
f_write,
"-3 %d ",r->N);
287 fprintf(d->
f_write,
"%d %s ",(
int)strlen(r->names[
i]),r->names[
i]);
292 if (r->order!=
NULL)
while (r->order[
i]!=0)
i++;
296 if (r->order!=
NULL)
while(r->order[
i]!=0)
298 fprintf(d->
f_write,
"%d %d %d ",r->order[
i],r->block0[
i], r->block1[
i]);
308 int s=r->block1[
i]-r->block0[
i]+1;
309 for(
int ii=0;ii<
s;ii++)
310 fprintf(d->
f_write,
"%d ",r->wvhdl[
i][ii]);
315 int s=r->block1[
i]-r->block0[
i]+1;
316 for(
int ii=0;ii<
s*
s;ii++)
318 fprintf(d->
f_write,
"%d ",r->wvhdl[
i][ii]);
326 Werror(
"ring oder not implemented for ssi:%d",r->order[
i]);
354 fprintf(d->
f_write,
"23 1 %d %d ",
SI_LOG2(r->bitmask),r->isLPring);
406 if (r->order!=
NULL)
while (r->order[
i]!=0)
i++;
410 if (r->order!=
NULL)
while(r->order[
i]!=0)
422 int s=r->block1[
i]-r->block0[
i]+1;
423 for(
int ii=0;ii<
s;ii++)
429 int s=r->block1[
i]-r->block0[
i]+1;
430 for(
int ii=0;ii<
s*
s;ii++)
440 Werror(
"ring oder not implemented for ssi:%d",r->order[
i]);
584 for(
int i=0;
i<mn;
i++)
607 for(
int i=0;
i<mn;
i++)
639 fprintf(d->
f_write,
"%d %d ",
D->argc,
D->op);
650 if (
p->data.s.body==
NULL)
652 if (
p->data.s.body!=
NULL)
659 if (
p->data.s.body==
NULL)
661 if (
p->data.s.body!=
NULL)
671 fprintf(d->
f_write,
"%d ",Ll+1);
690 fprintf(d->
f_write,
"%d ",
v->length());
692 for(
i=0;
i<
v->length();
i++)
701 for(
i=0;
i<
v->length();
i++)
708 fprintf(d->
f_write,
"%d %d ",
v->rows(),
v->cols());
710 for(
i=0;
i<
v->length();
i++)
719 for(
i=0;
i<
v->length();
i++)
727 fprintf(d->
f_write,
"%d %d ",
v->rows(),
v->cols());
729 for(
i=0;
i<
v->length();
i++)
738 for(
i=0;
i<
v->length();
i++)
746 fprintf(d->
f_write,
"%d ",
v->cols());
748 for(
i=0;
i<
v->length();
i++)
757 for(
i=0;
i<
v->length();
i++)
782 for(
int i=0;
i<
l;
i++) {
buf[
i]=(**s); (*s)++; }
816 else WerrorS(
"coeffs not implemented in ssiReadNumber");
840 else WerrorS(
"coeffs not implemented in ssiReadNumber");
849 if (n->s!=3)
Werror(
"invalid sub type in bigint:%d",n->s);
858 if (n->s!=3)
Werror(
"invalid sub type in bigint:%d",n->s);
897 Werror(
"cannot find cf:%s",cf_name);
904 names=(
char**)
omAlloc(
N*
sizeof(
char*));
914 int *block0=(
int *)
omAlloc0((num_ord+1)*
sizeof(
int));
915 int *block1=(
int *)
omAlloc0((num_ord+1)*
sizeof(
int));
916 int **wvhdl=(
int**)
omAlloc0((num_ord+1)*
sizeof(
int*));
917 for(
int i=0;
i<num_ord;
i++)
931 int s=block1[
i]-block0[
i]+1;
933 for(
int ii=0;ii<
s;ii++)
939 int s=block1[
i]-block0[
i]+1;
941 for(
int ii=0;ii<
s*
s;ii++)
950 Werror(
"ring order not implemented for ssi:%d",ord[
i]);
968 r=
rDefault(ch,
N,names,num_ord,ord,block0,block1,wvhdl);
975 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
983 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
987 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
991 Werror(
"ssi: read unknown coeffs type (%d)",ch);
1002 for(
int i=0;
i<
N;
i++)
1014 snprintf(
name,20,
"ssiRing%d",nr); nr++;
1031 d->
rings[new_ref]=r;
1055 Werror(
"cannot find cf:%s",cf_name);
1062 names=(
char**)
omAlloc(
N*
sizeof(
char*));
1063 for(
int i=0;
i<
N;
i++)
1072 int *block0=(
int *)
omAlloc0((num_ord+1)*
sizeof(
int));
1073 int *block1=(
int *)
omAlloc0((num_ord+1)*
sizeof(
int));
1074 int **wvhdl=(
int**)
omAlloc0((num_ord+1)*
sizeof(
int*));
1075 for(
int i=0;
i<num_ord;
i++)
1089 int ss=block1[
i]-block0[
i]+1;
1090 wvhdl[
i]=(
int*)
omAlloc(ss*
sizeof(
int));
1091 for(
int ii=0;ii<ss;ii++)
1097 int ss=block1[
i]-block0[
i]+1;
1098 wvhdl[
i]=(
int*)
omAlloc(ss*ss*
sizeof(
int));
1099 for(
int ii=0;ii<ss*ss;ii++)
1108 Werror(
"ring order not implemented for ssi:%d",ord[
i]);
1126 r=
rDefault(ch,
N,names,num_ord,ord,block0,block1,wvhdl);
1133 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
1141 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
1145 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
1149 Werror(
"ssi: read unknown coeffs type (%d)",ch);
1150 for(
int i=0;
i<
N;
i++)
1160 for(
int i=0;
i<
N;
i++)
1177 snprintf(
name,20,
"ssiRing%d",nr); nr++;
1199 snprintf(
name,20,
"ssiRing%d",nr); nr++;
1243 if (ret==
NULL) ret=
p;
1275 if (ret==
NULL) ret=
p;
1372 D->argc=argc;
D->op=op;
1377 memcpy(&(
D->arg1),
v,
sizeof(*
v));
1385 memcpy(&(
D->arg2),
v,
sizeof(*
v));
1391 memcpy(&(
D->arg3),
v,
sizeof(*
v));
1440 for(
i=0;
i<=L->
nr;
i++)
1443 memcpy(&(L->
m[
i]),
v,
sizeof(*
v));
1457 for(
i=0;
i<=L->
nr;
i++)
1460 memcpy(&(L->
m[
i]),
v,
sizeof(*
v));
1470 for(
int i=0;
i<nr;
i++)
1481 for(
int i=0;
i<nr;
i++)
1493 for(
int i=0;
i<r*c;
i++)
1505 for(
int i=0;
i<r*c;
i++)
1517 for(
int i=0;
i<r*c;
i++)
1529 for(
int i=0;
i<r*c;
i++)
1540 for(
int i=0;
i<c;
i++)
1551 for(
int i=0;
i<c;
i++)
1571 b->blackbox_deserialize(&
b,&(
res->data),
l);
1593 for(
int i=1;
i<nr_of_attr;
i++)
1599 memset(tmp,0,
sizeof(
sleftv));
1615 unsigned long bm=~0L;
1627 unsigned long bm=~0L;
1632 d->
r->isLPring=isLPring;
1654 if (strcmp(
l->mode,
"r") == 0)
1656 else if (strcmp(
l->mode,
"string")==0)
1665 && (strcmp(
l->mode,
"string")==0))
1672 else if (strcmp(
l->mode,
"w") == 0) mode =
"w";
1673 else if (strcmp(
l->mode,
"fork") == 0) mode =
"fork";
1674 else if (strcmp(
l->mode,
"tcp") == 0) mode =
"tcp";
1675 else if (strcmp(
l->mode,
"connect") == 0) mode =
"connect";
1686 if (
l->name[0] ==
'\0')
1688 if (strcmp(mode,
"fork")==0)
1693 WerrorS(
"no sub-processes allowed");
1705 Werror(
"pipe failed with %d\n",errno);
1718 if (pid == -1 && errno == EAGAIN)
1735 sigemptyset(&sigint);
1736 sigaddset(&sigint, SIGINT);
1737 sigprocmask(SIG_BLOCK, &sigint,
NULL);
1758#ifdef HAVE_SIMPLEIPC
1761 si_close(pc[1]); si_close(cp[0]);
1800 si_close(pc[0]); si_close(cp[1]);
1812 Werror(
"fork failed (%d)",errno);
1819 else if (strcmp(mode,
"tcp")==0)
1821 int sockfd, newsockfd, portno, clilen;
1822 struct sockaddr_in serv_addr, cli_addr;
1823 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1826 WerrorS(
"ERROR opening socket");
1832 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
1834 serv_addr.sin_family = AF_INET;
1835 serv_addr.sin_addr.s_addr = INADDR_ANY;
1839 serv_addr.sin_port = htons(portno);
1842 WerrorS(
"ERROR on binding (no free port available?)");
1849 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1852 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1861 PrintS(
"client accepted\n");
1865 d->
f_write = fdopen(newsockfd,
"w");
1870 else if (strcmp(mode,
"string")==0)
1876 Werror(
"invalid mode >>%s<< for ssi",mode);
1887 if(strcmp(mode,
"tcp")==0)
1889 int sockfd, newsockfd, portno, clilen;
1890 struct sockaddr_in serv_addr, cli_addr;
1891 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1894 WerrorS(
"ERROR opening socket");
1900 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
1902 serv_addr.sin_family = AF_INET;
1903 serv_addr.sin_addr.s_addr = INADDR_ANY;
1907 serv_addr.sin_port = htons(portno);
1910 WerrorS(
"ERROR on binding (no free port available?)");
1917 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1920 char* cli_host = (
char*)
omAlloc(256);
1921 char* path = (
char*)
omAlloc(1024);
1922 int r = si_sscanf(
l->name,
"%255[^:]:%s",cli_host,path);
1925 WerrorS(
"ERROR: no host specified");
1935 WarnS(
"program not specified, using /usr/local/bin/Singular");
1937 strcpy(path,
"/usr/local/bin/Singular");
1939 char* ssh_command = (
char*)
omAlloc(256);
1940 char* ser_host = (
char*)
omAlloc(64);
1941 if(strcmp(cli_host,
"localhost")==0)
1942 strcpy(ser_host,
"localhost");
1944 gethostname(ser_host,64);
1945 if (strcmp(cli_host,
"localhost")==0)
1946 snprintf(ssh_command,256,
"%s -q --batch --link=ssi --MPhost=%s --MPport=%d &",path,ser_host,portno);
1948 snprintf(ssh_command,256,
"ssh %s %s -q --batch --link=ssi --MPhost=%s --MPport=%d &",cli_host,path,ser_host,portno);
1953 int re=system(ssh_command);
1956 Werror(
"ERROR running `%s` (%d)",ssh_command,re);
1964 clilen =
sizeof(cli_addr);
1965 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1978 d->
f_write = fdopen(newsockfd,
"w");
1990 else if(strcmp(mode,
"connect")==0)
1992 char* host = (
char*)
omAlloc(256);
1994 struct sockaddr_in serv_addr;
1995 struct hostent *server;
1997 si_sscanf(
l->name,
"%255[^:]:%d",host,&portno);
2001 sockfd = socket(AF_INET, SOCK_STREAM, 0);
2004 WerrorS(
"ERROR opening socket");
2010 server = gethostbyname(host);
2013 WerrorS(
"ERROR, no such host");
2019 memset((
char *) &serv_addr, 0,
sizeof(serv_addr));
2020 serv_addr.sin_family = AF_INET;
2021 memcpy((
char *)&serv_addr.sin_addr.s_addr,
2022 (
char *)server->h_addr,
2024 serv_addr.sin_port = htons(portno);
2025 if (si_connect(sockfd,(sockaddr*)&serv_addr,
sizeof(serv_addr)) < 0)
2027 Werror(
"ERROR connecting(errno=%d)",errno);
2036 d->
f_write=fdopen(sockfd,
"w");
2055 char *filename=
l->name;
2057 if(filename[0]==
'>')
2059 if (filename[1]==
'>')
2070 outfile=
myfopen(filename,mode);
2073 if (strcmp(
l->mode,
"r")==0)
2108 if (d->send_quit_at_exit)
2110 fputs(
"99\n",d->f_write);
2145 if (((strcmp(
l->mode,
"tcp")==0)
2146 || (strcmp(
l->mode,
"fork")==0))
2150 int pid=si_waitpid(d->
pid,
NULL,WNOHANG);
2152 && (kill(d->
pid,0)==0))
2155 struct timespec
rem;
2157 for(
int i=0;
i<50;
i++)
2161 t.tv_nsec=100000000;
2162 nanosleep(&t, &
rem);
2164 if (si_waitpid(d->
pid,
NULL,WNOHANG) == d->
pid)
break;
2166 if (kill(d->
pid,0)==0)
2168 kill(d->
pid,SIGTERM);
2171 nanosleep(&t, &
rem);
2172 si_waitpid(d->
pid,
NULL,WNOHANG);
2176 if ((strcmp(
l->mode,
"tcp")==0)
2177 || (strcmp(
l->mode,
"fork")==0))
2227 if (d->
r==
NULL)
goto no_ring;
2241 res->data=(
char*)d->
r;
2254 if (d->
r==
NULL)
goto no_ring;
2260 if (d->
r==
NULL)
goto no_ring;
2266 if (d->
r==
NULL)
goto no_ring;
2272 if (d->
r==
NULL)
goto no_ring;
2280 if (d->
r==
NULL)
goto no_ring;
2294 int nok=
res->Eval();
2295 if (nok)
WerrorS(
"error in eval");
2303 int nok=
res->Eval();
2304 if (nok)
WerrorS(
"error in name lookup");
2345 Print(
"incompatible versions of ssi: %d/%d vs %d/%d\n",
2350 Print(
"// opening ssi-%d, MAX_TOK=%d\n",n98_v,n98_m);
2365 default:
Werror(
"not implemented (t:%d)",t);
2374 && (
res->RingDependend()))
2444 int nok=
res->Eval();
2445 if (nok)
WerrorS(
"error in eval");
2453 int nok=
res->Eval();
2454 if (nok)
WerrorS(
"error in name lookup");
2495 Print(
"// version ssi-%d, MAX_TOK=%d\n",n98_v,n98_m);
2508 default:
Werror(
"not implemented (t:%d)",t);
2513 while((**
s!=
'\0') &&(**
s<=
' ')) (*s)++;
2541 if (strcmp(
l->mode,
"string")==0)
return TRUE;
2548 void *dd=data->
Data();
2557 else if (data->
flag!=0)
2632 fprintf(d->
f_write,
"10 %d ",(
int)
M->rank);
2634 fprintf(d->
f_write,
"22 %d ",(
int)
M->rank);
2675 b->blackbox_serialize(
b,dd,
l);
2679 Werror(
"not implemented (t:%d, rtyp:%d)",tt, data->
rtyp);
2696 void *dd=data->
Data();
2753 fputs(
"11 ",d->f_write);
2790 fputs(
"20 ",d->f_write);
2791 b->blackbox_serialize(
b,dd,
l);
2796 Werror(
"not implemented (t:%d, rtyp:%d)",tt, data->
rtyp);
2827 if (strcmp(
l->mode,
"string")==0)
2829 if (strcmp(request,
"read") == 0)
2834 if (strcmp(request,
"write") == 0)
2844 if (((strcmp(
l->mode,
"fork")==0)
2845 ||(strcmp(
l->mode,
"tcp")==0)
2846 ||(strcmp(
l->mode,
"connect")==0))
2847 && (strcmp(request,
"read") == 0))
2850#if defined(HAVE_POLL)
2859 switch (si_poll(&pfd,1,0))
2861 case 0:
return "not ready";
2862 case -1:
return "error";
2868 if (FD_SETSIZE<=d->fd_read)
2886 case 0:
return "not ready";
2887 case -1:
return "error";
2895 if (c== -1)
return "eof";
2896 else if (isdigit(c))
2900 Werror(
"unknown char in ssiLink(%d)",c);
2906 else if (strcmp(request,
"read") == 0)
2909 else return "not ready";
2911 else if (strcmp(request,
"write") == 0)
2914 else return "not ready";
2916 else return "unknown status request";
2932#if defined(HAVE_POLL) && !defined(__APPLE__)
2939 pollfd *pfd=(pollfd*)
omAlloc0(nfd*
sizeof(pollfd));
2940 for(
int i=L->
nr;
i>=0;
i--)
2946 {
WerrorS(
"all elements must be of type link");
return -2;}
2949 {
WerrorS(
"all links must be open");
return -2;}
2950 if (((strcmp(
l->m->type,
"ssi")!=0) && (strcmp(
l->m->type,
"MPtcp")!=0))
2951 || ((strcmp(
l->mode,
"fork")!=0) && (strcmp(
l->mode,
"tcp")!=0)
2952 && (strcmp(
l->mode,
"launch")!=0) && (strcmp(
l->mode,
"connect")!=0)))
2954 WerrorS(
"all links must be of type ssi:fork, ssi:tcp, ssi:connect");
2957 if (strcmp(
l->m->type,
"ssi")==0)
2964 pfd[
i].events=POLLIN;
2973 Werror(
"wrong link type >>%s<<",
l->m->type);
2977 else if (ignore!=
NULL)
2982 s=si_poll(pfd,nfd,timeout);
2985 Werror(
"error in poll call (errno:%d)",errno);
2992 for(
int i=L->
nr;
i>=0;
i--)
3001 if (pfd[
i].
fd==d_fd)
3003 if (pfd[
i].revents &POLLIN)
3024 struct timeval *wt_ptr=&wt;
3032 wt.tv_sec = timeout / 1000;
3033 wt.tv_usec = (timeout % 1000)*1000;
3045 for(
i=L->
nr;
i>=0;
i--)
3050 {
WerrorS(
"all elements must be of type link");
return -2;}
3053 {
WerrorS(
"all links must be open");
return -2;}
3054 if (((strcmp(
l->m->type,
"ssi")!=0) && (strcmp(
l->m->type,
"MPtcp")!=0))
3055 || ((strcmp(
l->mode,
"fork")!=0) && (strcmp(
l->mode,
"tcp")!=0)
3056 && (strcmp(
l->mode,
"launch")!=0) && (strcmp(
l->mode,
"connect")!=0)))
3058 WerrorS(
"all links must be of type ssi:fork, ssi:tcp, ssi:connect");
3061 if (strcmp(
l->m->type,
"ssi")==0)
3069 FD_SET(d_fd, &fdmask);
3070 if (d_fd > max_fd) max_fd=d_fd;
3078 Werror(
"wrong link type >>%s<<",
l->m->type);
3084 if (FD_SETSIZE<=max_fd)
3086 Werror(
"file descriptor number too high (%d)",max_fd);
3091 s = si_select(max_fd, &fdmask,
NULL,
NULL, wt_ptr);
3094 Werror(
"error in select call (errno:%d)",errno);
3104 while (
j<=max_fd) {
if (FD_ISSET(
j,&fdmask))
break;
j++; }
3105 for(
i=L->
nr;
i>=0;
i--)
3110 if (strcmp(
l->m->type,
"ssi")==0)
3114 if(
j==d_fd)
return i+1;
3128 snprintf(
buf,256,
"ssi:connect %s:%s",host,port);
3162 WerrorS(
"ERROR already a reserved port requested");
3169 WerrorS(
"ERROR opening socket");
3182 WerrorS(
"ERROR on binding (no free port available?)");
3198 WerrorS(
"ERROR no reserved port requested");
3201 struct sockaddr_in cli_addr;
3202 int clilen =
sizeof(cli_addr);
3203 int newsockfd = si_accept(
ssiReserved_sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
3206 Werror(
"ERROR on accept (errno=%d)",errno);
3211 si_link_extension prev =
s;
3212 while (strcmp(
s->type,
"ssi") != 0)
3214 if (
s->next ==
NULL)
3241 d->
f_write = fdopen(newsockfd,
"w");
3273 kidpid = si_waitpid(-1, &
status, WNOHANG);
3277 if (errno == EINTR)
continue;
3281 else if (kidpid==0)
break;
3323 if ((type_id ==
RING_CMD) && (strncmp(
IDID(
h),
"ssiRing",7)==0))
3339 memset(&tmp,0,
sizeof(tmp));
3346 if ((strcmp(
IDID(
h),
"Top") == 0)
3347 || (strcmp(
IDID(
h),
"Standard") == 0))
3352 package p=(package)IDDATA(h);
3358 D->arg1.rtyp=STRING_CMD;
3359 D->arg1.data=p->libname;
3360 D->arg2.rtyp=STRING_CMD;
3361 D->arg2.data=(char*)
"with";
3363 omFreeSize(D,sizeof(*D));
3371 D->arg1.rtyp=STRING_CMD;
3372 D->arg1.data=p->libname;
3374 omFreeSize(D,sizeof(*D));
3407 && (strncmp(
IDID(
h),
"ssiRing",7)!=0))
3414 if (strcmp(
l->mode,
"string")==0)
3416 WerrorS(
"no dump for ssi:string");
3431 if (strcmp(
l->mode,
"string")==0)
3433 WerrorS(
"no dump for ssi:string");
3460 if ((hh->
l->m!=
NULL)
3463 && (strcmp(hh->
l->mode,
"fork")==0))
3477 if((strcmp(
l->mode,
"string")==0)
3490 if((strcmp(
l->mode,
"string")==0)
3493 char *
s=(
char*)u->
Data();
EXTERN_VAR si_link_extension si_link_root
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
int blackboxIsCmd(const char *n, int &tok)
used by scanner: returns ROOT_DECL for known types (and the type number in tok)
const CanonicalForm CFMap CFMap & N
Class used for (list of) interpreter objects.
INLINE_THIS void Init(int l=0)
VAR BOOLEAN singular_in_batchmode
si_hdl_typ si_set_signal(int sig, si_hdl_typ signal_handler)
meta function for binding a signal to an handler
static FORCE_INLINE number n_ReadFd_S(char **s, const coeffs r)
static FORCE_INLINE number n_ReadFd(const ssiInfo *f, const coeffs r)
io via ssi:
static FORCE_INLINE void n_WriteFd(number a, const ssiInfo *f, const coeffs r)
io via ssi:
@ n_algExt
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic
@ n_transExt
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
static FORCE_INLINE int n_GetChar(const coeffs r)
Return the characteristic of the coeff. domain.
static FORCE_INLINE char * nCoeffName(const coeffs cf)
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
static FORCE_INLINE void n_WriteFd_S(number a, const coeffs r)
const CanonicalForm int s
const Variable & v
< [in] a sqrfree bivariate poly
void WerrorS(const char *s)
FILE * myfopen(const char *path, const char *mode)
const char * feSetOptValue(feOptIndex opt, char *optarg)
static void * feOptValue(feOptIndex opt)
VAR char my_yylinebuf[80]
if(!FE_OPT_NO_SHELL_FLAG)
char * fe_fgets_dummy(const char *, char *, int)
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
idhdl enterid(const char *s, int lev, int t, idhdl *root, BOOLEAN init, BOOLEAN search)
EXTERN_VAR omBin sleftv_bin
char * iiGetLibProcBuffer(procinfo *pi, int part)
idhdl rFindHdl(ring r, idhdl n)
BOOLEAN nc_CallPlural(matrix cc, matrix dd, poly cn, poly dn, ring r, bool bSetupQuotient, bool bCopyInput, bool bBeQuiet, ring curr, bool dummy_ring=false)
returns TRUE if there were errors analyze inputs, check them for consistency detects nc_type,...
matrix mpNew(int r, int c)
create a r x c zero-matrix
#define MATELEM(mat, i, j)
1-based access to matrix
void rem(unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
The main handler for Singular numbers which are suitable for Singular polynomials.
number ndReadFd(const ssiInfo *, const coeffs r)
number ndReadFd_S(char **, const coeffs r)
coeffs nFindCoeffByName(char *cf_name)
find an existing coeff by its "CoeffName"
#define omFreeSize(addr, size)
#define omFreeBin(addr, bin)
#define omFreeBinAddr(addr)
static int index(p_Length length, p_Ord ord)
static int pLength(poly a)
static unsigned long p_SetExp(poly p, const unsigned long e, const unsigned long iBitmask, const int VarOffset)
set a single variable exponent @Note: VarOffset encodes the position in p->exp
static unsigned long p_SetComp(poly p, unsigned long c, ring r)
static void p_Setm(poly p, const ring r)
static long p_GetExp(const poly p, const unsigned long iBitmask, const int VarOffset)
get a single variable exponent @Note: the integer VarOffset encodes:
static void p_Delete(poly *p, const ring r)
static poly p_Init(const ring r, omBin bin)
void rChangeCurrRing(ring r)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
void StringSetS(const char *st)
void StringAppendS(const char *st)
void PrintS(const char *s)
void Werror(const char *fmt,...)
BOOLEAN rComplete(ring r, int force)
this needs to be called whenever a new ring is created: new fields in ring are created (like VarOffse...
static unsigned long rGetExpSize(unsigned long bitmask, int &bits)
BOOLEAN rSamePolyRep(ring r1, ring r2)
returns TRUE, if r1 and r2 represents the monomials in the same way FALSE, otherwise this is an analo...
void rDelete(ring r)
unconditionally deletes fields in r
ring rDefault(const coeffs cf, int N, char **n, int ord_size, rRingOrder_t *ord, int *block0, int *block1, int **wvhdl, unsigned long bitmask)
BOOLEAN rEqual(ring r1, ring r2, BOOLEAN qr)
returns TRUE, if r1 equals r2 FALSE, otherwise Equality is determined componentwise,...
static BOOLEAN rField_is_Zp(const ring r)
static n_coeffType rFieldType(const ring r)
the type of the coefficient filed of r (n_Zp, n_Q, etc)
static BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static ring rIncRefCnt(ring r)
static BOOLEAN rIsLPRing(const ring r)
@ ringorder_a64
for int64 weights
@ ringorder_aa
for idElimination, like a, except pFDeg, pWeigths ignore it
@ ringorder_IS
Induced (Schreyer) ordering.
static BOOLEAN rField_is_Q(const ring r)
static short rVar(const ring r)
define rVar(r) (r->N)
s_buff s_open_by_name(const char *n)
int s_readint_S(char **s)
int s_readbytes(char *buff, int len, s_buff F)
void s_ungetc(int c, s_buff F)
ring rings[SI_RING_CACHE]
poly sBucketPeek(sBucket_pt b)
ring sBucketGetRing(const sBucket_pt bucket)
Returns bucket ring.
VAR int sem_acquired[SIPC_MAX_SEMAPHORES]
static int SI_LOG2(int v)
int status int void * buf
VAR omBin s_si_link_extension_bin
BOOLEAN slClose(si_link l)
BOOLEAN slInit(si_link l, char *istr)
BOOLEAN slOpen(si_link l, short flag, leftv h)
EXTERN_VAR volatile BOOLEAN ssiToBeClosed_inactive
#define SI_LINK_W_OPEN_P(l)
#define SI_LINK_SET_CLOSE_P(l)
#define SI_LINK_R_OPEN_P(l)
#define SI_LINK_SET_RW_OPEN_P(l)
#define SI_LINK_SET_OPEN_P(l, flag)
#define SI_LINK_OPEN_P(l)
EXTERN_VAR link_list ssiToBeClosed
ideal idInit(int idsize, int rank)
initialise an ideal / module
#define SIPC_MAX_SEMAPHORES
static void ssiWriteBigInt_S(const number n)
static matrix ssiReadMatrix(ssiInfo *d)
si_link_extension slInitSsiExtension(si_link_extension s)
static intvec * ssiReadIntvec(const ssiInfo *d)
static void ssiWriteRing_R_S(ring r)
STATIC_VAR int ssiReserved_P
BOOLEAN ssiDump(si_link l)
static ring ssiReadRing(ssiInfo *d)
void ssiWrite_S(leftv data, const ring R)
STATIC_VAR int ssiReserved_sockfd
static matrix ssiReadMatrix_R_S(char **s, const ring R)
const char * slStatusSsi(si_link l, const char *request)
BOOLEAN ssiWrite2(si_link l, leftv res, leftv u)
static BOOLEAN ssiDumpIter(si_link l, idhdl h)
static lists ssiReadList(si_link l)
static void ssiWriteIdeal_R(const ssiInfo *d, int typ, const ideal I, const ring r)
static void ssiWriteIntmat_S(intvec *v)
static bigintmat * ssiReadBigintvec_S(char **s)
int ssiReadInt(const ssiInfo *d)
static void ssiWriteString(const ssiInfo *d, const char *s)
static intvec * ssiReadIntmat_S(char **s)
STATIC_VAR int ssiReserved_Clients
char * ssiWritePoly_S(poly p, const ring r)
void singular_close_links()
static void ssiWriteIntvec(const ssiInfo *d, intvec *v)
void sig_chld_hdl(int)
additional default signal handler
static char * ssiReadString(const ssiInfo *d)
static void ssiReadBlackbox(leftv res, si_link l)
static void ssiWriteNumber_CF_S(const number n, const coeffs cf)
static void ssiWriteList(si_link l, lists dd)
static void ssiWriteIdeal_R_S(int typ, const ideal I, const ring R)
int slStatusSsiL(lists L, int timeout, BOOLEAN *ignore)
BOOLEAN ssiClose(si_link l)
void ssiWriteInt_S(const int i)
static void ssiWriteIntmat(const ssiInfo *d, intvec *v)
static void ssiWriteRing_R(ssiInfo *d, const ring r)
static bigintmat * ssiReadBigintvec(const ssiInfo *d)
char * ssiWriteModule_S(const ideal M, const ring R)
ideal ssiReadIdeal(ssiInfo *d)
static void ssiWriteRing(ssiInfo *d, const ring r)
static void ssiCheckCurrRing(const ring r)
static bigintmat * ssiReadBigintmat(const ssiInfo *d)
static bigintmat * ssiReadBigintmat_S(char **s)
poly ssiReadPoly_S(char *s, const ring r)
static void ssiWriteProc(const ssiInfo *d, procinfov p)
static poly ssiReadPoly_R(const ssiInfo *D, const ring r)
leftv ssiRead1_S(char **s, const ring R)
static number ssiReadBigInt_S(char **s)
static ideal ssiReadIdeal_R(const ssiInfo *d, const ring r)
static number ssiReadBigInt(const ssiInfo *d)
static void ssiWriteString_S(const char *s)
static void ssiWritePoly_R(const ssiInfo *d, poly p, const ring r)
void ssiWriteIdeal(const ssiInfo *d, int typ, const ideal I)
static void ssiWriteIntvec_S(intvec *v)
static char * ssiReadString_S(char **s)
BOOLEAN ssiOpen(si_link l, short flag, leftv u)
BOOLEAN ssiWrite(si_link l, leftv data)
static procinfov ssiReadProc_S(char **s)
static command ssiReadCommand(si_link l)
BOOLEAN ssiGetDump(si_link l)
static ring ssiReadRing_R_S(char **s)
char * ssiWriteIdeal_S(const ideal I, const ring R)
static void ssiWriteNumber(const ssiInfo *d, const number n)
char * ssiWriteMatrix_S(const matrix M, const ring R)
static BOOLEAN DumpSsiIdhdl(si_link l, idhdl h)
static void ssiWriteCommand(si_link l, command D)
static intvec * ssiReadIntmat(const ssiInfo *d)
leftv ssiRead2(si_link l, leftv u)
static number ssiReadNumber_CF_S(char **s, const coeffs cf)
static BOOLEAN ssiSetRing(si_link l, ring r, BOOLEAN send)
static number ssiReadNumber(ssiInfo *d)
static intvec * ssiReadIntvec_S(char **s)
char * ssiWriteRing_S(const ring r)
STATIC_VAR struct sockaddr_in ssiResverd_serv_addr
static void ssiReadRingProperties(si_link l)
int ssiBatch(const char *host, const char *port)
static lists ssiReadList_S(char **s, const ring R)
static void ssiWriteBigintmat(const ssiInfo *d, bigintmat *v)
static void ssiWritePoly_R_S(poly p, const ring r)
static void ssiWriteBigintvec(const ssiInfo *d, bigintmat *v)
static BOOLEAN ssiSetCurrRing(const ring r)
int ssiReadInt_S(char **s)
static poly ssiReadPoly_R_S(char **s, const ring r)
static poly ssiReadPoly(ssiInfo *d)
ideal ssiReadIdeal_S(char *s, const ring R)
void ssiWriteInt(const ssiInfo *d, const int i)
static void ssiWriteBigintvec_S(bigintmat *v)
static void ssiWriteList_S(lists dd, const ring R)
static void ssiReadAttrib(leftv res, si_link l)
static void ssiWriteBigInt(const ssiInfo *d, const number n)
ring ssiReadRing_S(char *s)
static void ssiWriteProc_S(procinfov p)
static void ssiWriteNumber_CF(const ssiInfo *d, const number n, const coeffs cf)
static void ssiWriteBigintmat_S(bigintmat *v)
static number ssiReadNumber_CF(const ssiInfo *d, const coeffs cf)
int ssiReservePort(int clients)
static ideal ssiReadIdeal_R_S(char **s, const ring r)
static procinfov ssiReadProc(const ssiInfo *d)
leftv ssiRead1(si_link l)
static void ssiWritePoly(const ssiInfo *d, poly p)
int name
New type name for int.
struct for passing initialization parameters to naInitChar