 |
My Project
debian-1:4.1.2-p1+ds-2
|
Go to the documentation of this file.
8 #define TRANSEXT_PRIVATES 1
46 #include <sys/types.h>
49 #include <netinet/in.h>
51 #define SSI_VERSION 13
84 sprintf(
name,
"ssiRing%d",nr); nr++;
115 fprintf(d->
f_write,
"%d %s ",(
int)strlen(
s),
s);
137 fraction
f=(fraction)n;
145 else if (
cf->cfWriteFd!=
NULL)
149 else WerrorS(
"coeff field not implemented");
168 fprintf(d->
f_write,
"-1 %d ",r->N);
170 fprintf(d->
f_write,
"-2 %d ",r->N);
173 fprintf(d->
f_write,
"-3 %d ",r->N);
180 fprintf(d->
f_write,
"%d %s ",(
int)strlen(r->names[
i]),r->names[
i]);
185 if (r->order!=
NULL)
while (r->order[
i]!=0)
i++;
189 if (r->order!=
NULL)
while(r->order[
i]!=0)
191 fprintf(d->
f_write,
"%d %d %d ",r->order[
i],r->block0[
i], r->block1[
i]);
202 for(ii=r->block0[
i];ii<=r->block1[
i];ii++)
203 fprintf(d->
f_write,
"%d ",r->wvhdl[
i][ii-r->block0[
i]]);
211 Werror(
"ring oder not implemented for ssi:%d",r->order[
i]);
239 fprintf(d->
f_write,
"23 1 %d %d ",
SI_LOG2(r->bitmask),r->isLPring);
344 fprintf(d->
f_write,
"%d %d ",
D->argc,
D->op);
355 if (
p->data.s.body==
NULL)
357 if (
p->data.s.body!=
NULL)
367 fprintf(d->
f_write,
"%d ",Ll+1);
376 fprintf(d->
f_write,
"%d ",
v->length());
378 for(
i=0;
i<
v->length();
i++)
385 fprintf(d->
f_write,
"%d %d ",
v->rows(),
v->cols());
387 for(
i=0;
i<
v->length();
i++)
395 fprintf(d->
f_write,
"%d %d ",
v->rows(),
v->cols());
397 for(
i=0;
i<
v->length();
i++)
441 else WerrorS(
"coeffs not implemented in ssiReadNumber");
450 if (n->s!=3)
Werror(
"invalid sub type in bigint:%d",n->s);
475 Werror(
"cannot find cf:%s",cf_name);
482 names=(
char**)
omAlloc(
N*
sizeof(
char*));
492 int *block0=(
int *)
omAlloc0((num_ord+1)*
sizeof(int));
493 int *block1=(
int *)
omAlloc0((num_ord+1)*
sizeof(int));
494 int **wvhdl=(
int**)
omAlloc0((num_ord+1)*
sizeof(
int*));
495 for(
i=0;
i<num_ord;
i++)
509 wvhdl[
i]=(
int*)
omAlloc((block1[
i]-block0[
i]+1)*
sizeof(int));
511 for(ii=block0[
i];ii<=block1[
i];ii++)
520 Werror(
"ring oder not implemented for ssi:%d",ord[
i]);
538 r=
rDefault(ch,
N,names,num_ord,ord,block0,block1,wvhdl);
545 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
553 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
557 r=
rDefault(
cf,
N,names,num_ord,ord,block0,block1,wvhdl);
561 Werror(
"ssi: read unknown coeffs type (%d)",ch);
605 if (ret==
NULL) ret=
p;
662 D->argc=argc;
D->op=op;
667 memcpy(&(
D->arg1),
v,
sizeof(*
v));
675 memcpy(&(
D->arg2),
v,
sizeof(*
v));
681 memcpy(&(
D->arg3),
v,
sizeof(*
v));
720 for(
i=0;
i<=L->
nr;
i++)
723 memcpy(&(L->
m[
i]),
v,
sizeof(*
v));
733 for(
int i=0;
i<nr;
i++)
745 for(
int i=0;
i<r*c;
i++)
757 for(
int i=0;
i<r*c;
i++)
775 b->blackbox_deserialize(&
b,&(
res->data),
l);
791 for(
int i=1;
i<nr_of_attr;
i++)
797 memset(tmp,0,
sizeof(
sleftv));
813 unsigned long bm=~0L;
825 unsigned long bm=~0L;
830 d->
r->isLPring=isLPring;
853 if (
l->mode[0] !=
'\0' && (strcmp(
l->mode,
"r") == 0))
859 else if (strcmp(
l->mode,
"w") == 0) mode =
"w";
860 else if (strcmp(
l->mode,
"fork") == 0) mode =
"fork";
861 else if (strcmp(
l->mode,
"tcp") == 0) mode =
"tcp";
862 else if (strcmp(
l->mode,
"connect") == 0) mode =
"connect";
872 if (
l->name[0] ==
'\0')
874 if (strcmp(mode,
"fork")==0)
887 if (pid == -1 && errno == EAGAIN)
900 sigemptyset(&sigint);
901 sigaddset(&sigint, SIGINT);
902 sigprocmask(SIG_BLOCK, &sigint,
NULL);
920 #ifdef HAVE_SIMPLEIPC
922 #endif // HAVE_SIMPLEIPC
923 si_close(pc[1]); si_close(cp[0]);
962 si_close(pc[0]); si_close(cp[1]);
974 Werror(
"fork failed (%d)",errno);
981 else if (strcmp(mode,
"tcp")==0)
983 int sockfd, newsockfd, portno, clilen;
984 struct sockaddr_in serv_addr, cli_addr;
985 sockfd = socket(AF_INET, SOCK_STREAM, 0);
988 WerrorS(
"ERROR opening socket");
993 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
995 serv_addr.sin_family = AF_INET;
996 serv_addr.sin_addr.s_addr = INADDR_ANY;
1000 serv_addr.sin_port = htons(portno);
1003 WerrorS(
"ERROR on binding (no free port available?)");
1009 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1012 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1020 PrintS(
"client accepted\n");
1024 d->
f_write = fdopen(newsockfd,
"w");
1031 Werror(
"invalid mode >>%s<< for ssi",mode);
1041 if(strcmp(mode,
"tcp")==0)
1043 int sockfd, newsockfd, portno, clilen;
1044 struct sockaddr_in serv_addr, cli_addr;
1045 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1048 WerrorS(
"ERROR opening socket");
1053 memset((
char *) &serv_addr,0,
sizeof(serv_addr));
1055 serv_addr.sin_family = AF_INET;
1056 serv_addr.sin_addr.s_addr = INADDR_ANY;
1060 serv_addr.sin_port = htons(portno);
1063 WerrorS(
"ERROR on binding (no free port available?)");
1068 while(bind(sockfd, (
struct sockaddr *) &serv_addr,
sizeof(serv_addr)) < 0);
1071 char* cli_host = (
char*)
omAlloc(256);
1072 char* path = (
char*)
omAlloc(1024);
1073 int r = si_sscanf(
l->name,
"%255[^:]:%s",cli_host,path);
1076 WerrorS(
"ERROR: no host specified");
1085 WarnS(
"program not specified, using /usr/local/bin/Singular");
1087 strcpy(path,
"/usr/local/bin/Singular");
1089 char* ssh_command = (
char*)
omAlloc(256);
1090 char* ser_host = (
char*)
omAlloc(64);
1091 gethostname(ser_host,64);
1092 sprintf(ssh_command,
"ssh %s %s -q --batch --link=ssi --MPhost=%s --MPport=%d &",cli_host,path,ser_host,portno);
1100 clilen =
sizeof(cli_addr);
1101 newsockfd = si_accept(sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1113 d->
f_write = fdopen(newsockfd,
"w");
1125 else if(strcmp(mode,
"connect")==0)
1127 char* host = (
char*)
omAlloc(256);
1129 struct sockaddr_in serv_addr;
1130 struct hostent *server;
1132 si_sscanf(
l->name,
"%255[^:]:%d",host,&portno);
1136 sockfd = socket(AF_INET, SOCK_STREAM, 0);
1137 if (sockfd < 0) {
WerrorS(
"ERROR opening socket");
return TRUE; }
1138 server = gethostbyname(host);
1140 memset((
char *) &serv_addr, 0,
sizeof(serv_addr));
1141 serv_addr.sin_family = AF_INET;
1142 memcpy((
char *)&serv_addr.sin_addr.s_addr,
1143 (
char *)server->h_addr,
1145 serv_addr.sin_port = htons(portno);
1146 if (si_connect(sockfd,(sockaddr*)&serv_addr,
sizeof(serv_addr)) < 0)
1147 {
Werror(
"ERROR connecting(errno=%d)",errno);
return TRUE; }
1151 d->
f_write=fdopen(sockfd,
"w");
1168 char *filename=
l->name;
1170 if(filename[0]==
'>')
1172 if (filename[1]==
'>')
1183 outfile=
myfopen(filename,mode);
1186 if (strcmp(
l->mode,
"r")==0)
1248 si_waitpid(d->
pid,
NULL,WNOHANG);
1250 && (kill(d->
pid,0)==0))
1254 t.tv_nsec=100000000;
1255 struct timespec
rem;
1260 r = nanosleep(&t, &
rem);
1263 if (si_waitpid(d->
pid,
NULL,WNOHANG) != 0)
break;
1265 if ((r==0) || (errno != EINTR))
break;
1267 if (kill(d->
pid,0) == 0)
1275 r = nanosleep(&t, &
rem);
1278 if (si_waitpid(d->
pid,
NULL,WNOHANG) != 0)
break;
1280 if ((r==0) || (errno != EINTR))
break;
1282 if (kill(d->
pid,0) == 0)
1291 if ((strcmp(
l->mode,
"tcp")==0)
1292 || (strcmp(
l->mode,
"fork")==0))
1349 res->data=(
char*)d->
r;
1361 if (d->
r==
NULL)
goto no_ring;
1365 if (d->
r==
NULL)
goto no_ring;
1369 if (d->
r==
NULL)
goto no_ring;
1373 if (d->
r==
NULL)
goto no_ring;
1379 if (d->
r==
NULL)
goto no_ring;
1391 int nok=
res->Eval();
1392 if (nok)
WerrorS(
"error in eval");
1399 int nok=
res->Eval();
1400 if (nok)
WerrorS(
"error in name lookup");
1438 Print(
"incompatible versions of ssi: %d/%d vs %d/%d\n",
1443 Print(
"// opening ssi-%d, MAX_TOK=%d\n",n98_v,n98_m);
1457 default:
Werror(
"not implemented (t:%d)",t);
1466 && (
res->RingDependend()))
1505 void *dd=data->
Data();
1515 else if (data->
flag!=0)
1590 fprintf(d->
f_write,
"10 %d ",(
int)
M->rank);
1627 b->blackbox_serialize(
b,dd,
l);
1631 Werror(
"not implemented (t:%d, rtyp:%d)",tt, data->
rtyp);
1667 if (d==
NULL)
return "not open";
1668 if (((strcmp(
l->mode,
"fork")==0)
1669 ||(strcmp(
l->mode,
"tcp")==0)
1670 ||(strcmp(
l->mode,
"connect")==0))
1671 && (strcmp(request,
"read") == 0))
1688 case 0:
return "not ready";
1689 case -1:
return "error";
1696 if (c== -1)
return "eof";
1697 else if (isdigit(c))
1701 Werror(
"unknown char in ssiLink(%d)",c);
1707 else if (strcmp(request,
"read") == 0)
1710 else return "not ready";
1712 else if (strcmp(request,
"write") == 0)
1715 else return "not ready";
1717 else return "unknown status request";
1736 fd_set mask, fdmask;
1743 struct timeval *wt_ptr=&wt;
1751 wt.tv_sec = timeout / 1000000;
1752 wt.tv_usec = timeout % 1000000;
1764 for(
i=L->
nr;
i>=0;
i--)
1769 {
WerrorS(
"all elements must be of type link");
return -2;}
1772 {
WerrorS(
"all links must be open");
return -2;}
1773 if (((strcmp(
l->m->type,
"ssi")!=0) && (strcmp(
l->m->type,
"MPtcp")!=0))
1774 || ((strcmp(
l->mode,
"fork")!=0) && (strcmp(
l->mode,
"tcp")!=0)
1775 && (strcmp(
l->mode,
"launch")!=0) && (strcmp(
l->mode,
"connect")!=0)))
1777 WerrorS(
"all links must be of type ssi:fork, ssi:tcp, ssi:connect");
1780 if (strcmp(
l->m->type,
"ssi")==0)
1786 FD_SET(d_fd, &fdmask);
1787 if (d_fd > max_fd) max_fd=d_fd;
1794 Werror(
"wrong link type >>%s<<",
l->m->type);
1804 for(
k = 0;
k < max_fd;
k++)
1806 if(FD_ISSET(
k, &fdmask))
1813 s = si_select(max_fd, &mask,
NULL,
NULL, wt_ptr);
1816 WerrorS(
"error in select call");
1826 while (
j<=max_fd) {
if (FD_ISSET(
j,&mask))
break;
j++; }
1827 for(
i=L->
nr;
i>=0;
i--)
1832 if (strcmp(
l->m->type,
"ssi")==0)
1840 Werror(
"wrong link type >>%s<<",
l->m->type);
1857 for(
k = 0;
k < max_fd;
k++)
1859 if(FD_ISSET(
k, &fdmask))
1873 wt.tv_sec = timeout / 1000000;
1874 wt.tv_usec = (timeout % 1000000);
1879 else if (isdigit(c))
1883 Werror(
"unknown char in ssiLink(%d)",c);
1892 int ssiBatch(
const char *host,
const char * port)
1897 sprintf(
buf,
"ssi:connect %s:%s",host,port);
1931 WerrorS(
"ERROR already a reverved port requested");
1938 WerrorS(
"ERROR opening socket");
1951 WerrorS(
"ERROR on binding (no free port available?)");
1967 WerrorS(
"ERROR no reverved port requested");
1970 struct sockaddr_in cli_addr;
1971 int clilen =
sizeof(cli_addr);
1972 int newsockfd = si_accept(
ssiReserved_sockfd, (
struct sockaddr *) &cli_addr, (socklen_t *)&clilen);
1975 Werror(
"ERROR on accept (errno=%d)",errno);
1980 si_link_extension prev =
s;
1981 while (strcmp(
s->type,
"ssi") != 0)
1983 if (
s->next ==
NULL)
2010 d->
f_write = fdopen(newsockfd,
"w");
2041 kidpid = si_waitpid(-1, &
status, WNOHANG);
2045 if (errno == EINTR)
continue;
2049 else if (kidpid==0)
break;
2090 if ((type_id ==
RING_CMD) && (strncmp(
IDID(
h),
"ssiRing",7)==0))
2106 memset(&tmp,0,
sizeof(tmp));
2113 if ((strcmp(
IDID(
h),
"Top") == 0)
2114 || (strcmp(
IDID(
h),
"Standard") == 0))
2119 package p=(package)IDDATA(h);
2126 D->arg1.data=
p->libname;
2128 D->arg2.data=(
char*)
"with";
2139 D->arg1.data=
p->libname;
2174 && (strncmp(
IDID(
h),
"ssiRing",7)!=0))
static FORCE_INLINE n_coeffType getCoeffType(const coeffs r)
Returns the type of coeffs domain.
void ssiWritePoly(const ssiInfo *d, int typ, poly p)
BOOLEAN ssiWrite(si_link l, leftv data)
char * fe_fgets_dummy(const char *, char *, int)
BOOLEAN ssiOpen(si_link l, short flag, leftv u)
intvec * ssiReadIntmat(const ssiInfo *d)
VAR link_list ssiToBeClosed
struct for passing initialization parameters to naInitChar
STATIC_VAR int ssiReserved_P
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 BOOLEAN rIsLPRing(const ring r)
BOOLEAN ssiClose(si_link l)
#define SI_LINK_SET_CLOSE_P(l)
void ssiWriteIntvec(const ssiInfo *d, intvec *v)
#define MATELEM(mat, i, j)
1-based access to matrix
void rChangeCurrRing(ring r)
static FORCE_INLINE int n_GetChar(const coeffs r)
Return the characteristic of the coeff. domain.
matrix ssiReadMatrix(const ssiInfo *d)
int ssiReadInt(s_buff fich)
VAR BOOLEAN singular_in_batchmode
idhdl enterid(const char *s, int lev, int t, idhdl *root, BOOLEAN init, BOOLEAN search)
void ssiReadBlackbox(leftv res, si_link l)
VAR omBin s_si_link_extension_bin
static int SI_LOG2(int v)
BOOLEAN ssiSetCurrRing(const ring r)
command ssiReadCommand(si_link l)
static n_coeffType rFieldType(const ring r)
the type of the coefficient filed of r (n_Zp, n_Q, etc)
void ssiWriteIntmat(const ssiInfo *d, intvec *v)
BOOLEAN ssiSetRing(si_link l, ring r, BOOLEAN send)
void ssiWriteRing_R(ssiInfo *d, const ring r)
number ssiReadNumber_CF(const ssiInfo *d, const coeffs cf)
leftv ssiRead1(si_link l)
coeffs nInitChar(n_coeffType t, void *parameter)
one-time initialisations for new coeffs in case of an error return NULL
const CanonicalForm CFMap CFMap & N
BOOLEAN ssiPrepClose(si_link l)
char *(* fe_fgets_stdin)(const char *pr, char *s, int size)
void ssiWriteNumber(const ssiInfo *d, const number n)
static BOOLEAN DumpSsiIdhdl(si_link l, idhdl h)
ring sBucketGetRing(const sBucket_pt bucket)
Returns bucket ring.
Class used for (list of) interpreter objects.
BOOLEAN slOpen(si_link l, short flag, leftv h)
int slStatusSsiL(lists L, int timeout)
void ssiWriteBigintmat(const ssiInfo *d, bigintmat *v)
void ssiWriteProc(const ssiInfo *d, procinfov p)
char * ssiReadString(const ssiInfo *d)
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 BOOLEAN rIsPluralRing(const ring r)
we must always have this test!
static unsigned pLength(poly a)
coeffs nFindCoeffByName(char *cf_name)
find an existing coeff by its "CoeffName"
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 FORCE_INLINE number n_ReadFd(const ssiInfo *f, const coeffs r)
io via ssi:
#define SI_LINK_W_OPEN_P(l)
int ssiReservePort(int clients)
EXTERN_VAR omBin sleftv_bin
static short rVar(const ring r)
#define rVar(r) (r->N)
int s_readbytes(char *buff, int len, s_buff F)
bigintmat * ssiReadBigintmat(const ssiInfo *d)
BOOLEAN ssiDump(si_link l)
poly sBucketPeek(sBucket_pt b)
int status int void * buf
void PrintS(const char *s)
#define omFreeSize(addr, size)
void ssiWriteIdeal(const ssiInfo *d, int typ, const ideal I)
number ssiReadBigInt(const ssiInfo *d)
BOOLEAN ssiGetDump(si_link l)
BOOLEAN slInit(si_link l, char *istr)
#define SI_LINK_R_OPEN_P(l)
char * iiGetLibProcBuffer(procinfo *pi, int part)
intvec * ssiReadIntvec(const ssiInfo *d)
STATIC_VAR int ssiReserved_sockfd
s_buff s_open_by_name(const char *n)
void ssiWriteCommand(si_link l, command D)
void ssiWriteString(const ssiInfo *d, const char *s)
void s_ungetc(int c, s_buff F)
number ssiReadNumber(const ssiInfo *d)
VAR volatile BOOLEAN ssiToBeClosed_inactive
#define SI_LINK_OPEN_P(l)
leftv(* slRead2Proc)(si_link l, leftv a)
int blackboxIsCmd(const char *n, int &tok)
used by scanner: returns ROOT_DECL for known types (and the type number in tok)
static FORCE_INLINE number n_Init(long i, const coeffs r)
a number representing i in the given coeff field/ring r
lists ssiReadList(si_link l)
static poly p_Init(const ring r, omBin bin)
void ssiWriteInt(const ssiInfo *d, const int i)
STATIC_VAR int ssiReserved_Clients
procinfov ssiReadProc(const ssiInfo *d)
matrix mpNew(int r, int c)
create a r x c zero-matrix
EXTERN_VAR si_link_extension si_link_root
void ssiReadRingProperties(si_link l)
used for all transcendental extensions, i.e., the top-most extension in an extension tower is transce...
static BOOLEAN ssiDumpIter(si_link l, idhdl h)
ideal ssiReadIdeal(const ssiInfo *d)
static void p_Delete(poly *p, const ring r)
void ssiReadAttrib(leftv res, si_link l)
poly ssiReadPoly(const ssiInfo *D)
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,...
void ssiWritePoly_R(const ssiInfo *d, int typ, poly p, const ring r)
ring ssiReadRing(const ssiInfo *d)
FILE * myfopen(const char *path, const char *mode)
static int si_max(const int a, const int b)
void ssiWriteList(si_link l, lists dd)
Induced (Schreyer) ordering.
void Werror(const char *fmt,...)
BOOLEAN slClose(si_link l)
ideal idInit(int idsize, int rank)
initialise an ideal / module
void ssiWriteBigInt(const ssiInfo *d, const number n)
#define SIPC_MAX_SEMAPHORES
char name(const Variable &v)
void WerrorS(const char *s)
static FORCE_INLINE void n_WriteFd(number a, const ssiInfo *f, const coeffs r)
io via ssi:
poly ssiReadPoly_R(const ssiInfo *D, const ring r)
static FORCE_INLINE char * nCoeffName(const coeffs cf)
VAR char my_yylinebuf[80]
si_link_extension slInitSsiExtension(si_link_extension s)
static unsigned long p_SetComp(poly p, unsigned long c, ring r)
VAR int sem_acquired[SIPC_MAX_SEMAPHORES]
void ssiWriteNumber_CF(const ssiInfo *d, const number n, const coeffs cf)
static void p_Setm(poly p, const ring r)
const Variable & v
< [in] a sqrfree bivariate poly
INLINE_THIS void Init(int l=0)
void sig_chld_hdl(int)
additional default signal handler
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
for idElimination, like a, except pFDeg, pWeigths ignore it
const CanonicalForm int s
#define SI_LINK_SET_RW_OPEN_P(l)
static number & pGetCoeff(poly p)
return an alias to the leading coefficient of p assumes that p != NULL NOTE: not copy
void ssiWriteIdeal_R(const ssiInfo *d, int typ, const ideal I, const ring r)
const char * slStatusSsi(si_link l, const char *request)
#define omFreeBin(addr, bin)
static BOOLEAN rField_is_Zp(const ring r)
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
STATIC_VAR struct sockaddr_in ssiResverd_serv_addr
#define SI_LINK_SET_OPEN_P(l, flag)
void rem(unsigned long *a, unsigned long *q, unsigned long p, int °a, int degq)
ideal ssiReadIdeal_R(const ssiInfo *d, const ring r)
void ssiWriteRing(ssiInfo *d, const ring r)
static unsigned long rGetExpSize(unsigned long bitmask, int &bits)
int ssiBatch(const char *host, const char *port)
used for all algebraic extensions, i.e., the top-most extension in an extension tower is algebraic
static BOOLEAN rField_is_Q(const ring r)
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...