Changeset 94d691 in git
- Timestamp:
- Mar 27, 2017, 2:04:58 PM (7 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 19e445169dc94cfe73bfa752bb44871e975d40dfc3b003914c0b9ce9b79928dbffdac547fdfc1700
- Parents:
- 0d1a367213d4988be6eb6006d04b503fd8914d97
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/iplib.cc
r0d1a36 r94d691 586 586 return FALSE; 587 587 } 588 589 void* iiCallLib(const char*n, void *arg, int arg_type, BOOLEAN &err) 590 { 591 idhdl h=ggetid(n); 592 if ((h==NULL) 593 || (IDTYP(h)!=PROC_CMD)) 594 { 595 err=2; 596 return NULL; 597 } 598 // ring handling 599 idhdl save_ringhdl=currRingHdl; 600 ring save_ring=currRing; 588 static void iiCallLibProcBegin() 589 { 601 590 idhdl tmp_ring=NULL; 602 591 if (currRing!=NULL) … … 614 603 } 615 604 } 605 } 606 static void iiCallLibProcEnd(idhdl save_ringhdl, ring save_ring) 607 { 608 if ((currRing!=NULL) 609 &&(currRing!=save_ring)) 610 { 611 currRing->ref--; 612 idhdl hh=IDROOT; 613 idhdl prev=NULL; 614 while((hh!=currRingHdl) && (hh!=NULL)) { prev=hh; hh=hh->next; } 615 if (hh!=NULL) 616 { 617 if (prev==NULL) IDROOT=hh->next; 618 else prev->next=hh->next; 619 omFree((ADDRESS)IDID(hh)); 620 omFreeBin((ADDRESS)hh, idrec_bin); 621 } 622 else 623 { 624 WarnS("internal: lost ring in iiCallLib"); 625 } 626 } 627 currRingHdl=save_ringhdl; 628 currRing=save_ring; 629 } 630 631 void* iiCallLibProc1(const char*n, void *arg, int arg_type, BOOLEAN &err) 632 { 633 idhdl h=ggetid(n); 634 if ((h==NULL) 635 || (IDTYP(h)!=PROC_CMD)) 636 { 637 err=2; 638 return NULL; 639 } 640 // ring handling 641 idhdl save_ringhdl=currRingHdl; 642 ring save_ring=currRing; 643 iiCallLibProcBegin(); 616 644 // argument: 617 645 sleftv tmp; … … 622 650 err=iiMake_proc(h,currPack,&tmp); 623 651 // clean up ring 624 if (tmp_ring!=NULL) 625 { 626 IDRING(tmp_ring)->ref--; 627 idhdl hh=IDROOT; 628 idhdl prev=NULL; 629 while((hh!=tmp_ring) && (hh!=NULL)) { prev=hh; hh=hh->next; } 630 if (hh!=NULL) 631 { 632 if (prev==NULL) IDROOT=hh->next; 633 else prev->next=hh->next; 634 omFree((ADDRESS)IDID(hh)); 635 omFreeBin((ADDRESS)hh, idrec_bin); 636 } 637 else 638 { 639 WarnS("internal: lost ring in iiCallLib"); 640 } 641 } 642 currRingHdl=save_ringhdl; 643 currRing=save_ring; 652 iiCallLibProcEnd(save_ringhdl,save_ring); 653 // return 654 if (err==FALSE) 655 { 656 void*r=iiRETURNEXPR.data; 657 iiRETURNEXPR.data=NULL; 658 iiRETURNEXPR.CleanUp(); 659 return r; 660 } 661 return NULL; 662 } 663 /// args: NULL terminated arry of arguments 664 /// arg_types: 0 terminated array of corresponding types 665 void* iiCallLibProcM(const char*n, void **args, int* arg_types, BOOLEAN &err) 666 { 667 idhdl h=ggetid(n); 668 if ((h==NULL) 669 || (IDTYP(h)!=PROC_CMD)) 670 { 671 err=2; 672 return NULL; 673 } 674 // ring handling 675 idhdl save_ringhdl=currRingHdl; 676 ring save_ring=currRing; 677 iiCallLibProcBegin(); 678 // argument: 679 if (arg_types[0]!=0) 680 { 681 sleftv tmp; 682 leftv tt=&tmp; 683 int i=1; 684 tmp.Init(); 685 tmp.data=args[0]; 686 tmp.rtyp=arg_types[0]; 687 while(arg_types[i]!=0) 688 { 689 tt->next=(leftv)omAlloc0(sizeof(sleftv)); 690 tt=tt->next; 691 tt->rtyp=arg_types[i]; 692 tt->data=args[i]; 693 i++; 694 } 695 // call proc 696 err=iiMake_proc(h,currPack,&tmp); 697 } 698 else 699 // call proc 700 err=iiMake_proc(h,currPack,NULL); 701 // clean up ring 702 iiCallLibProcEnd(save_ringhdl,save_ring); 644 703 // return 645 704 if (err==FALSE) -
Singular/ipshell.h
r0d1a36 r94d691 193 193 BOOLEAN isring = FALSE, BOOLEAN init_b=TRUE); 194 194 BOOLEAN iiMake_proc(idhdl pn, package pack, leftv sl); 195 void* iiCallLib(const char*n, void *arg, int arg_type, BOOLEAN &err); 195 void* iiCallLibProc1(const char*n, void *arg, int arg_type, BOOLEAN &err); 196 void* iiCallLibProcM(const char*n, void **args, int *arg_types, BOOLEAN &err); 196 197 // from misc.cc: 197 198 char * showOption(); -
kernel/ideals.cc
r0d1a36 r94d691 519 519 { 520 520 BOOLEAN err; 521 h3=(ideal)iiCallLib ("groebner",idCopy(h2),MODUL_CMD,err);521 h3=(ideal)iiCallLibProc1("groebner",idCopy(h2),MODUL_CMD,err); 522 522 if (err) 523 523 {
Note: See TracChangeset
for help on using the changeset viewer.