23 struct newstruct_proc_s;
52 newstruct_desc ad=(newstruct_desc)(b->data);
54 newstruct_proc
p=ad->procs;
61 memset(&tmp,0,
sizeof(tmp));
66 memset(&hh,0,
sizeof(hh));
83 newstruct_member a=ad->member;
104 if ((strlen(tmp2)>80)||(strchr(tmp2,
'\n')!=
NULL))
115 if (a->next==
NULL)
break;
156 N->
m[n].
data=(
void *)b->blackbox_Copy(b,L->
m[n].
data);
175 newstruct_desc nt=(newstruct_desc)ll->data;
176 newstruct_proc
p=nt->procs;
178 while( (
p!=
NULL) && ((
p->t!=
'=')||(
p->args!=1)) )
p=
p->next;
184 memset(&hh,0,
sizeof(hh));
189 memset(&tmp,0,
sizeof(
sleftv));
213 for(i=l->
nr;i>=0;i--)
216 r=(ring)(l->
m[i-1].
data);
253 newstruct_desc nt=(newstruct_desc)a->data;
254 newstruct_proc
p=nt->procs;
256 while((
p!=
NULL) &&( (
p->t!=op) || (
p->args!=1) ))
p=
p->next;
261 memset(&hh,0,
sizeof(hh));
289 newstruct_desc rrn=(newstruct_desc)rr->data;
293 Werror(
"custom type %s(%d) cannot be assigned to newstruct %s(%d)",
299 newstruct_desc rrp=rrn->parent;
300 while ((rrp!=
NULL)&&(rrp->id!=l->
Typ())) rrp=rrp->parent;
329 Werror(
"assign %s(%d) = %s(%d)",
342 nt=(newstruct_desc)a->data;
350 newstruct_member nm=nt->member;
351 while ((nm!=
NULL)&&(strcmp(nm->name,a2->
name)!=0)) nm=nm->
next;
352 if ((nm==
NULL) && (strncmp(a2->
name,
"r_",2)==0))
355 while ((nm!=
NULL)&&(strcmp(nm->name,a2->
name+2)!=0)) nm=nm->next;
375 if (r!=
NULL) r->ref++;
376 else WerrorS(
"ring of this member is not set and no basering found");
388 ring r=(ring)al->
m[nm->pos-1].
data;
401 &&(al->
m[nm->pos-1].
data!=(
void*)0L))
403 Werror(
"different ring %lx(data) - %lx(basering)",
404 (
long unsigned)(al->
m[nm->pos-1].
data),(
long unsigned)
currRing);
410 Werror(
"(possible) name of ring of data: %s",nn);
419 ring old=(ring)al->
m[nm->pos-1].
data;
431 ring old=(ring)al->
m[nm->pos-1].
data;
438 r->start = nm->pos+1;
439 memcpy(res,a1,
sizeof(
sleftv));
440 memset(a1,0,
sizeof(
sleftv));
441 if (res->
e==
NULL) res->
e=r;
445 while (sh->next !=
NULL) sh=sh->next;
463 nt=(newstruct_desc)a->data;
466 newstruct_proc
p=nt->procs;
467 while((p!=
NULL) && ( (p->t!=op) || (p->args!=2) )) p=p->next;
471 memset(&tmp,0,
sizeof(
sleftv));
476 memset(&hh,0,
sizeof(hh));
499 newstruct_desc nt=(newstruct_desc)a->data;
504 res->
data=(
void *)a->blackbox_String(a,args->
Data());
512 newstruct_proc
p=nt->procs;
514 while((p!=
NULL) &&( (p->t!=op) || (p->args!=4) )) p=p->next;
519 memset(&hh,0,
sizeof(hh));
547 newstruct_desc n=(newstruct_desc)b->data;
550 newstruct_member nm=n->member;
553 l->m[nm->pos].rtyp=nm->typ;
577 Werror(
"can not assign %s(%d) to member of type %s(%d)",
582 Werror(
"can not assign %s to member of type %s",rt1,lt1);
613 newstruct_desc dd=(newstruct_desc)b->data;
615 memset(&
l,0,
sizeof(
l));
622 l.data=(
void*)(
long)Ll;
626 newstruct_member elem=dd->member;
629 rings[elem->pos]=
'\1';
642 f->m->SetRing(f,(ring)ll->
m[i].
data,
TRUE);
645 f->m->Write(f,&(ll->
m[i]));
649 f->m->SetRing(f,save_ring,
FALSE);
660 int Ll=(int)(
long)(l->
data);
664 for(
int i=0;
i<=Ll;
i++)
667 memcpy(&(L->
m[
i]),l,
sizeof(
sleftv));
678 newstruct_desc dd=(newstruct_desc)b->data;
679 newstruct_proc
p=dd->procs;
686 memset(&tmp,0,
sizeof(tmp));
690 memset(&hh,0,
sizeof(hh));
707 blackbox *
b=(blackbox*)
omAlloc0(
sizeof(blackbox));
738 newstruct_member elem;
745 while ((*p!=
'\0') && (*p<=
' ')) p++;
747 while (isalnum(*p)) p++;
752 Werror(
"unknown type `%s`",start);
762 elem=(newstruct_member)
omAlloc0(
sizeof(*elem));
765 while ((*p!=
'\0') && (*p<=
' ')) p++;
767 while (isalnum(*p)) p++;
772 if ((*start==
'\0') ||(isdigit(*start)))
774 WerrorS(
"illegal/empty name for element");
775 goto error_in_newstruct_def;
779 elem->next=res->member;
785 while ((*p!=
'\0') && (*p<=
' ')) p++;
790 Werror(
"unknown character in newstruct:>>%s<<",p);
791 goto error_in_newstruct_def;
802 error_in_newstruct_def:
811 newstruct_desc
res=(newstruct_desc)
omAlloc0(
sizeof(*res));
823 Werror(
">>%s< not found",parent);
830 Werror(
">>%s< is not a user defined type",parent);
834 newstruct_desc
res=(newstruct_desc)
omAlloc0(
sizeof(*res));
835 newstruct_desc parent_desc=(newstruct_desc)parent_bb->data;
836 res->size=parent_desc->size;
837 res->member=parent_desc->member;
838 res->parent=parent_desc;
845 newstruct_member elem;
846 Print(
"id: %d\n",d->id);
850 Print(
">>%s<< at pos %d, type %d (%s)\n",elem->name,elem->pos,elem->typ,
Tok2Cmdname(elem->typ));
852 Print(
">>r_%s<< at pos %d, shadow ring\n",elem->name,elem->pos-1);
855 newstruct_proc
p=d->procs;
858 Print(
"op:%d(%s) with %d args -> %s\n",p->t,
iiTwoOps(p->t),p->args,p->p->procname);
869 Werror(
">>%s<< is not a newstruct type",bbname);
873 newstruct_desc desc=(newstruct_desc)bb->data;
874 newstruct_proc
p=(newstruct_proc)
omAlloc(
sizeof(*
p));
875 p->next=desc->procs; desc->procs=
p;
881 if(!(tt=
IsCmd(func,
p->t)))
901 Werror(
">>%s<< is not a kernel command",func);
917 if(args!=1) {
Warn(
"args must be 1 for %s in %s",func,
my_yylinebuf);args=1;}
const struct sConvertTypes dConvertTypes[]
void * idrecDataInit(int t)
void blackbox_default_Print(blackbox *b, void *d)
default procedure blackbox_default_Print: print the string
const CanonicalForm int s
int iiTestConvert(int inputType, int outputType)
Class used for (list of) interpreter objects.
BOOLEAN newstruct_Op1(int op, leftv res, leftv arg)
void newstruct_destroy(blackbox *, void *d)
EXTERN_VAR omBin sleftv_bin
BOOLEAN newstruct_Assign_user(int op, leftv l, leftv r)
BOOLEAN newstruct_OpM(int op, leftv res, leftv args)
INST_VAR sleftv iiRETURNEXPR
#define omFreeSize(addr, size)
void WerrorS(const char *s)
BOOLEAN blackboxDefaultOp2(int, leftv, leftv, leftv)
default procedure blackboxDefaultOp2, to be called as "default:" branch
BOOLEAN newstruct_Op2(int op, leftv res, leftv a1, leftv a2)
void * newstruct_Init(blackbox *b)
newstruct_desc newstructFromString(const char *s)
BOOLEAN newstruct_serialize(blackbox *b, void *d, si_link f)
char * String(void *d=NULL, BOOLEAN typed=FALSE, int dim=1)
Called for conversion to string (used by string(..), write(..),..)
VAR ring currRing
Widely used global variable which specifies the current polynomial ring for Singular interpreter and ...
int newstruct_desc_size()
const char * iiTwoOps(int t)
const CanonicalForm CFMap CFMap & N
BOOLEAN newstruct_deserialize(blackbox **, void **d, si_link f)
void newstructShow(newstruct_desc d)
void StringSetS(const char *st)
void StringAppendS(const char *st)
lists lCopy_newstruct(lists L)
static BOOLEAN newstruct_Assign_same(leftv l, leftv r)
BOOLEAN blackboxDefaultOp1(int op, leftv l, leftv r)
default procedure blackboxDefaultOp1, to be called as "default:" branch
BOOLEAN newstruct_Assign(leftv l, leftv r)
idhdl rFindHdl(ring r, idhdl n)
void rWrite(ring r, BOOLEAN details)
char * newstruct_String(blackbox *b, void *d)
void rChangeCurrRing(ring r)
INLINE_THIS void Init(int l=0)
void * newstruct_Copy(blackbox *, void *d)
BOOLEAN iiMake_proc(idhdl pn, package pack, leftv sl)
void lClean_newstruct(lists l)
static newstruct_desc scanNewstructFromString(const char *s, newstruct_desc res)
const char * Tok2Cmdname(int tok)
int blackboxIsCmd(const char *n, int &tok)
used by scanner: returns ROOT_DECL for known types (and the type number in tok)
int iiOpsTwoChar(const char *s)
BOOLEAN blackboxDefaultOpM(int op, leftv res, leftv args)
default procedure blackboxDefaultOpM, to be called as "default:" branch
void CleanUp(ring r=currRing)
BOOLEAN newstruct_set_proc(const char *bbname, const char *func, int args, procinfov pr)
void newstruct_setup(const char *n, newstruct_desc d)
newstruct_desc newstructChildFromString(const char *parent, const char *s)
const char * getBlackboxName(const int t)
return the name to the type given by t (r/o)
#define omFreeBin(addr, bin)
int setBlackboxStuff(blackbox *bb, const char *n)
define a new type
BOOLEAN lRingDependend(lists L)
void newstruct_Print(blackbox *b, void *d)
void Werror(const char *fmt,...)
VAR char my_yylinebuf[80]
blackbox * getBlackboxStuff(const int t)
return the structure to the type given by t
int IsCmd(const char *n, int &tok)
BOOLEAN newstruct_CheckAssign(blackbox *, leftv L, leftv R)