8#define TRANSEXT_PRIVATES 1
52#include <netinet/in.h>
97 snprintf(
name,20,
"ssiRing%d",nr); nr++;
134 snprintf(
name,20,
"ssiRing%d",nr); nr++;
162 fprintf(d->
f_write,
"%d %s ",(
int)strlen(
s),
s);
184 fraction
f=(fraction)n;
192 else if (
cf->cfWriteFd!=
NULL)
196 else WerrorS(
"coeff field not implemented");
235 fprintf(d->
f_write,
"-1 %d ",r->N);
237 fprintf(d->
f_write,
"-2 %d ",r->N);
240 fprintf(d->
f_write,
"-3 %d ",r->N);
247 fprintf(d->
f_write,
"%d %s ",(
int)strlen(r->names[
i]),r->names[
i]);
252 if (r->order!=
NULL)
while (r->order[
i]!=0)
i++;
256 if (r->order!=
NULL)
while(r->order[
i]!=0)
258 fprintf(d->
f_write,
"%d %d %d ",r->order[
i],r->block0[
i], r->block1[
i]);
268 int s=r->block1[
i]-r->block0[
i]+1;
269 for(
int ii=0;ii<
s;ii++)
270 fprintf(d->
f_write,
"%d ",r->wvhdl[
i][ii]);
275 int s=r->block1[
i]-r->block0[
i]+1;
276 for(
int ii=0;ii<
s*
s;ii++)
278 fprintf(d->
f_write,
"%d ",r->wvhdl[
i][ii]);
286 Werror(
"ring oder not implemented for ssi:%d",r->order[
i]);
314 fprintf(d->
f_write,
"23 1 %d %d ",
SI_LOG2(r->bitmask),r->isLPring);
421 fprintf(d->
f_write,
"%d %d ",
D->argc,
D->op);
432 if (
p->data.s.body==
NULL)
434 if (
p->data.s.body!=
NULL)
444 fprintf(d->
f_write,
"%d ",Ll+1);
453 fprintf(d->
f_write,
"%d ",
v->length());
455 for(
i=0;
i<
v->length();
i++)
462 fprintf(d->
f_write,
"%d %d ",
v->rows(),
v->cols());
464 for(
i=0;
i<
v->length();
i++)
472 fprintf(d->
f_write,
"%d %d ",
v->rows(),
v->cols());
474 for(
i=0;
i<
v->length();
i++)
482 fprintf(d->
f_write,
"%d ",
v->cols());
484 for(
i=0;
i<
v->length();
i++)
528 else WerrorS(
"coeffs not implemented in ssiReadNumber");
537 if (n->s!=3)
Werror(
"invalid sub type in bigint:%d",n->s);
576 Werror(
"cannot find cf:%s",cf_name);
583 names=(
char**)
omAlloc(
N*
sizeof(
char*));
593 int *block0=(
int *)
omAlloc0((num_ord+1)*
sizeof(
int));
594 int *block1=(
int *)
omAlloc0((num_ord+1)*
sizeof(
int));
595 int **wvhdl=(
int**)
omAlloc0((num_ord+1)*
sizeof(
int*));
596 for(
int i=0;
i<num_ord;
i++)
610 int s=block1[
i]-block0[
i]+1;
612 for(
int ii=0;ii<
s;ii++)
618 int s=block1[
i]-block0[
i]+1;
620 for(
int ii=0;ii<
s*
s;ii++)
629 Werror(
"ring order not implemented for ssi:%d",ord[
i]);
647 r=
rDefault(ch,
N,names,num_ord,ord,block0,block1,wvhdl);
654 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
662 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
666 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
670 Werror(
"ssi: read unknown coeffs type (%d)",ch);
693 snprintf(
name,20,
"ssiRing%d",nr); nr++;
741 if (ret==
NULL) ret=
p;
796 D->argc=argc;
D->op=op;
801 memcpy(&(
D->arg1),
v,
sizeof(*
v));
809 memcpy(&(
D->arg2),
v,
sizeof(*
v));
815 memcpy(&(
D->arg3),
v,
sizeof(*
v));
854 for(
i=0;
i<=L->
nr;
i++)
857 memcpy(&(L->
m[
i]),
v,
sizeof(*
v));
867 for(
int i=0;
i<nr;
i++)
879 for(
int i=0;
i<r*c;
i++)
891 for(
int i=0;
i<r*c;
i++)
923 b->blackbox_deserialize(&
b,&(
res->data),
l);
945 for(
int i=1;
i<nr_of_attr;
i++)
951 memset(tmp,0,
sizeof(
sleftv));
967 unsigned long bm=~0L;
979 unsigned long bm=~0L;
984 d->
r->isLPring=isLPring;
1007 if (
l->mode[0] !=
'\0' && (strcmp(
l->mode,
"r") == 0))
1013 else if (strcmp(
l->mode,
"w") == 0) mode =
"w";
1014 else if (strcmp(
l->mode,
"fork") == 0) mode =
"fork";
1015 else if (strcmp(
l->mode,
"tcp") == 0) mode =
"tcp";
1016 else if (strcmp(
l->mode,
"connect") == 0) mode =
"connect";
1026 if (
l->name[0] ==
'\0')
1028 if (strcmp(mode,
"fork")==0)
1036 Werror(
"pipe failed with %d\n",errno);
1046 if (pid == -1 && errno == EAGAIN)
1059 sigemptyset(&sigint);
1060 sigaddset(&sigint, SIGINT);
1061 sigprocmask(SIG_BLOCK, &sigint,
NULL);
1082#ifdef HAVE_SIMPLEIPC
1085 si_close(pc[1]); si_close(cp[0]);
1124 si_close(pc[0]); si_close(cp[1]);
1136 Werror(
"fork failed (%d)",errno);
1143 else if (strcmp(mode,
"tcp")==0)
1145 int sockfd, newsockfd, portno, clilen;
1146 struct sockaddr_in serv_addr, cli_addr;
1147 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1150 WerrorS(
"ERROR opening socket");
1156 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
1158 serv_addr.sin_family = AF_INET;
1159 serv_addr.sin_addr.s_addr = INADDR_ANY;
1163 serv_addr.sin_port = htons(portno);
1166 WerrorS(
"ERROR on binding (no free port available?)");
1173 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1176 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1185 PrintS(
"client accepted\n");
1189 d->
f_write = fdopen(newsockfd,
"w");
1196 Werror(
"invalid mode >>%s<< for ssi",mode);
1207 if(strcmp(mode,
"tcp")==0)
1209 int sockfd, newsockfd, portno, clilen;
1210 struct sockaddr_in serv_addr, cli_addr;
1211 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1214 WerrorS(
"ERROR opening socket");
1220 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
1222 serv_addr.sin_family = AF_INET;
1223 serv_addr.sin_addr.s_addr = INADDR_ANY;
1227 serv_addr.sin_port = htons(portno);
1230 WerrorS(
"ERROR on binding (no free port available?)");
1236 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1239 char* cli_host = (
char*)
omAlloc(256);
1240 char* path = (
char*)
omAlloc(1024);
1241 int r = si_sscanf(
l->name,
"%255[^:]:%s",cli_host,path);
1244 WerrorS(
"ERROR: no host specified");
1254 WarnS(
"program not specified, using /usr/local/bin/Singular");
1256 strcpy(path,
"/usr/local/bin/Singular");
1258 char* ssh_command = (
char*)
omAlloc(256);
1259 char* ser_host = (
char*)
omAlloc(64);
1260 if(strcmp(cli_host,
"localhost")==0)
1261 strcpy(ser_host,
"localhost");
1263 gethostname(ser_host,64);
1264 if (strcmp(cli_host,
"localhost")==0)
1265 snprintf(ssh_command,256,
"%s -q --batch --link=ssi --MPhost=%s --MPport=%d &",path,ser_host,portno);
1267 snprintf(ssh_command,256,
"ssh %s %s -q --batch --link=ssi --MPhost=%s --MPport=%d &",cli_host,path,ser_host,portno);
1272 int re=system(ssh_command);
1275 Werror(
"ERROR running `%s` (%d)",ssh_command,re);
1283 clilen =
sizeof(cli_addr);
1284 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1297 d->
f_write = fdopen(newsockfd,
"w");
1309 else if(strcmp(mode,
"connect")==0)
1311 char* host = (
char*)
omAlloc(256);
1313 struct sockaddr_in serv_addr;
1314 struct hostent *server;
1316 si_sscanf(
l->name,
"%255[^:]:%d",host,&portno);
1320 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1323 WerrorS(
"ERROR opening socket");
1327 server = gethostbyname(host);
1330 WerrorS(
"ERROR, no such host");
1334 memset((
char *) &serv_addr, 0,
sizeof(serv_addr));
1335 serv_addr.sin_family = AF_INET;
1336 memcpy((
char *)&serv_addr.sin_addr.s_addr,
1337 (
char *)server->h_addr,
1339 serv_addr.sin_port = htons(portno);
1340 if (si_connect(sockfd,(sockaddr*)&serv_addr,
sizeof(serv_addr)) < 0)
1342 Werror(
"ERROR connecting(errno=%d)",errno);
1349 d->
f_write=fdopen(sockfd,
"w");
1368 char *filename=
l->name;
1370 if(filename[0]==
'>')
1372 if (filename[1]==
'>')
1383 outfile=
myfopen(filename,mode);
1386 if (strcmp(
l->mode,
"r")==0)
1456 if (((strcmp(
l->mode,
"tcp")==0)
1457 || (strcmp(
l->mode,
"fork")==0))
1461 int pid=si_waitpid(d->
pid,
NULL,WNOHANG);
1463 && (kill(d->
pid,0)==0))
1466 struct timespec
rem;
1468 for(
int i=0;
i<50;
i++)
1472 t.tv_nsec=100000000;
1473 nanosleep(&t, &
rem);
1475 if (si_waitpid(d->
pid,
NULL,WNOHANG) == d->
pid)
break;
1477 if (kill(d->
pid,0)==0)
1479 kill(d->
pid,SIGTERM);
1482 nanosleep(&t, &
rem);
1483 si_waitpid(d->
pid,
NULL,WNOHANG);
1487 if ((strcmp(
l->mode,
"tcp")==0)
1488 || (strcmp(
l->mode,
"fork")==0))
1538 if (d->
r==
NULL)
goto no_ring;
1552 res->data=(
char*)d->
r;
1565 if (d->
r==
NULL)
goto no_ring;
1571 if (d->
r==
NULL)
goto no_ring;
1577 if (d->
r==
NULL)
goto no_ring;
1583 if (d->
r==
NULL)
goto no_ring;
1591 if (d->
r==
NULL)
goto no_ring;
1605 int nok=
res->Eval();
1606 if (nok)
WerrorS(
"error in eval");
1614 int nok=
res->Eval();
1615 if (nok)
WerrorS(
"error in name lookup");
1656 Print(
"incompatible versions of ssi: %d/%d vs %d/%d\n",
1661 Print(
"// opening ssi-%d, MAX_TOK=%d\n",n98_v,n98_m);
1676 default:
Werror(
"not implemented (t:%d)",t);
1685 && (
res->RingDependend()))
1724 void *dd=data->
Data();
1733 else if (data->
flag!=0)
1808 fprintf(d->
f_write,
"10 %d ",(
int)
M->rank);
1810 fprintf(d->
f_write,
"22 %d ",(
int)
M->rank);
1851 b->blackbox_serialize(
b,dd,
l);
1855 Werror(
"not implemented (t:%d, rtyp:%d)",tt, data->
rtyp);
1891 if (d==
NULL)
return "not open";
1892 if (((strcmp(
l->mode,
"fork")==0)
1893 ||(strcmp(
l->mode,
"tcp")==0)
1894 ||(strcmp(
l->mode,
"connect")==0))
1895 && (strcmp(request,
"read") == 0))
1898#if defined(HAVE_POLL)
1907 switch (si_poll(&pfd,1,0))
1909 case 0:
return "not ready";
1910 case -1:
return "error";
1916 if (FD_SETSIZE<=d->fd_read)
1934 case 0:
return "not ready";
1935 case -1:
return "error";
1943 if (c== -1)
return "eof";
1944 else if (isdigit(c))
1948 Werror(
"unknown char in ssiLink(%d)",c);
1954 else if (strcmp(request,
"read") == 0)
1957 else return "not ready";
1959 else if (strcmp(request,
"write") == 0)
1962 else return "not ready";
1964 else return "unknown status request";
1980#if defined(HAVE_POLL) && !defined(__APPLE__)
1987 pollfd *pfd=(pollfd*)
omAlloc0(nfd*
sizeof(pollfd));
1988 for(
int i=L->
nr;
i>=0;
i--)
1994 {
WerrorS(
"all elements must be of type link");
return -2;}
1997 {
WerrorS(
"all links must be open");
return -2;}
1998 if (((strcmp(
l->m->type,
"ssi")!=0) && (strcmp(
l->m->type,
"MPtcp")!=0))
1999 || ((strcmp(
l->mode,
"fork")!=0) && (strcmp(
l->mode,
"tcp")!=0)
2000 && (strcmp(
l->mode,
"launch")!=0) && (strcmp(
l->mode,
"connect")!=0)))
2002 WerrorS(
"all links must be of type ssi:fork, ssi:tcp, ssi:connect");
2005 if (strcmp(
l->m->type,
"ssi")==0)
2012 pfd[
i].events=POLLIN;
2021 Werror(
"wrong link type >>%s<<",
l->m->type);
2025 else if (ignore!=
NULL)
2030 s=si_poll(pfd,nfd,timeout);
2033 Werror(
"error in poll call (errno:%d)",errno);
2040 for(
int i=L->
nr;
i>=0;
i--)
2049 if (pfd[
i].
fd==d_fd)
2051 if (pfd[
i].revents &POLLIN)
2072 struct timeval *wt_ptr=&wt;
2080 wt.tv_sec = timeout / 1000;
2081 wt.tv_usec = (timeout % 1000)*1000;
2093 for(
i=L->
nr;
i>=0;
i--)
2098 {
WerrorS(
"all elements must be of type link");
return -2;}
2101 {
WerrorS(
"all links must be open");
return -2;}
2102 if (((strcmp(
l->m->type,
"ssi")!=0) && (strcmp(
l->m->type,
"MPtcp")!=0))
2103 || ((strcmp(
l->mode,
"fork")!=0) && (strcmp(
l->mode,
"tcp")!=0)
2104 && (strcmp(
l->mode,
"launch")!=0) && (strcmp(
l->mode,
"connect")!=0)))
2106 WerrorS(
"all links must be of type ssi:fork, ssi:tcp, ssi:connect");
2109 if (strcmp(
l->m->type,
"ssi")==0)
2117 FD_SET(d_fd, &fdmask);
2118 if (d_fd > max_fd) max_fd=d_fd;
2126 Werror(
"wrong link type >>%s<<",
l->m->type);
2132 if (FD_SETSIZE<=max_fd)
2134 Werror(
"file descriptor number too high (%d)",max_fd);
2139 s = si_select(max_fd, &fdmask,
NULL,
NULL, wt_ptr);
2142 Werror(
"error in select call (errno:%d)",errno);
2152 while (
j<=max_fd) {
if (FD_ISSET(
j,&fdmask))
break;
j++; }
2153 for(
i=L->
nr;
i>=0;
i--)
2158 if (strcmp(
l->m->type,
"ssi")==0)
2162 if(
j==d_fd)
return i+1;
2176 snprintf(
buf,256,
"ssi:connect %s:%s",host,port);
2210 WerrorS(
"ERROR already a reserved port requested");
2217 WerrorS(
"ERROR opening socket");
2230 WerrorS(
"ERROR on binding (no free port available?)");
2246 WerrorS(
"ERROR no reserved port requested");
2249 struct sockaddr_in cli_addr;
2250 int clilen =
sizeof(cli_addr);
2251 int newsockfd = si_accept(
ssiReserved_sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
2254 Werror(
"ERROR on accept (errno=%d)",errno);
2259 si_link_extension prev =
s;
2260 while (strcmp(
s->type,
"ssi") != 0)
2262 if (
s->next ==
NULL)
2289 d->
f_write = fdopen(newsockfd,
"w");
2321 kidpid = si_waitpid(-1, &
status, WNOHANG);
2325 if (errno == EINTR)
continue;
2329 else if (kidpid==0)
break;
2371 if ((type_id ==
RING_CMD) && (strncmp(
IDID(
h),
"ssiRing",7)==0))
2387 memset(&tmp,0,
sizeof(tmp));
2394 if ((strcmp(
IDID(
h),
"Top") == 0)
2395 || (strcmp(
IDID(
h),
"Standard") == 0))
2400 package p=(package)IDDATA(h);
2406 D->arg1.rtyp=STRING_CMD;
2407 D->arg1.data=p->libname;
2408 D->arg2.rtyp=STRING_CMD;
2409 D->arg2.data=(char*)
"with";
2411 omFreeSize(D,sizeof(*D));
2419 D->arg1.rtyp=STRING_CMD;
2420 D->arg1.data=p->libname;
2422 omFreeSize(D,sizeof(*D));
2455 && (strncmp(
IDID(
h),
"ssiRing",7)!=0))
2498 if ((hh->
l->m!=
NULL)
2501 && (strcmp(hh->
l->mode,
"fork")==0))
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(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
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)
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)
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 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)
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_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)
leftv(* slRead2Proc)(si_link l, leftv a)
#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 matrix ssiReadMatrix(ssiInfo *d)
si_link_extension slInitSsiExtension(si_link_extension s)
static intvec * ssiReadIntvec(const ssiInfo *d)
STATIC_VAR int ssiReserved_P
BOOLEAN ssiDump(si_link l)
static ring ssiReadRing(ssiInfo *d)
static BOOLEAN ssiPrepClose(si_link l)
STATIC_VAR int ssiReserved_sockfd
const char * slStatusSsi(si_link l, const char *request)
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)
int ssiReadInt(const ssiInfo *d)
static void ssiWriteString(const ssiInfo *d, const char *s)
STATIC_VAR int ssiReserved_Clients
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 ssiWriteList(si_link l, lists dd)
int slStatusSsiL(lists L, int timeout, BOOLEAN *ignore)
BOOLEAN ssiClose(si_link l)
static void ssiWriteIntmat(const ssiInfo *d, intvec *v)
static void ssiWriteRing_R(ssiInfo *d, const ring r)
static bigintmat * ssiReadBigintvec(const ssiInfo *d)
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 void ssiWriteProc(const ssiInfo *d, procinfov p)
static poly ssiReadPoly_R(const ssiInfo *D, const ring r)
static ideal ssiReadIdeal_R(const ssiInfo *d, const ring r)
static number ssiReadBigInt(const ssiInfo *d)
static void ssiWritePoly(const ssiInfo *d, int typ, poly p)
void ssiWriteIdeal(const ssiInfo *d, int typ, const ideal I)
BOOLEAN ssiOpen(si_link l, short flag, leftv u)
BOOLEAN ssiWrite(si_link l, leftv data)
static command ssiReadCommand(si_link l)
BOOLEAN ssiGetDump(si_link l)
static void ssiWriteNumber(const ssiInfo *d, const number n)
static BOOLEAN DumpSsiIdhdl(si_link l, idhdl h)
static void ssiWriteCommand(si_link l, command D)
static intvec * ssiReadIntmat(const ssiInfo *d)
static BOOLEAN ssiSetRing(si_link l, ring r, BOOLEAN send)
static number ssiReadNumber(ssiInfo *d)
STATIC_VAR struct sockaddr_in ssiResverd_serv_addr
static void ssiReadRingProperties(si_link l)
int ssiBatch(const char *host, const char *port)
static void ssiWriteBigintmat(const ssiInfo *d, bigintmat *v)
static void ssiWriteBigintvec(const ssiInfo *d, bigintmat *v)
static BOOLEAN ssiSetCurrRing(const ring r)
static poly ssiReadPoly(ssiInfo *d)
static void ssiWritePoly_R(const ssiInfo *d, int typ, poly p, const ring r)
void ssiWriteInt(const ssiInfo *d, const int i)
static void ssiReadAttrib(leftv res, si_link l)
static void ssiWriteBigInt(const ssiInfo *d, const number n)
static void ssiWriteNumber_CF(const ssiInfo *d, const number n, const coeffs cf)
static number ssiReadNumber_CF(const ssiInfo *d, const coeffs cf)
int ssiReservePort(int clients)
static procinfov ssiReadProc(const ssiInfo *d)
leftv ssiRead1(si_link l)
int name
New type name for int.
struct for passing initialization parameters to naInitChar