#include #ifdef HAVE_FACTORY #include // :( #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_FACTORY int initializeGMP(){ return 1; } // NEEDED FOR MAIN APP. LINKING!!! int mmInit(void) {return 1; } // ? due to SINGULAR!!!...??? #endif #include #include #include "config.h" #include #include // HEADERS: #include //#include "idrec.h" // moved to Singular #include #include #include #include #include #include #include #include #include /// #include // TODO: install polys/this! //+ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "mmalloc.h" #include #include // #include // TODO: needs si_link// already moved to Singular/! // #include "CCRing.h" // Too old! #include #include #include #include #include #include #include #include ////////#include "F5cData.h" #include #include #include #include ////////#include #include #include // #include "htmlhelp.h" // For Windows // #include // #include // Too old? #include #include #include #include #include #include // #include "lplist.h" // Too old! #include "mmalloc.h" #include #include // #include // Too old? // #include // Too old? // #include // Too old? #include #include #include #include #include #include #include #include #include #include #include // #include // Too old? #include #include #include #include #include #include #include // #include // due to factory? :( // #include // :( // #include // uses tgb_internal // :( // #include // :( // headers in Singular/ #include "attrib.h" #include "bigintm.h" #include "blackbox.h" #include "Cache.h" #include "CacheImplementation.h" #include "cntrlc.h" #include "links/dbm_sl.h" #include "distrib.h" #include "eigenval_ip.h" #include "gms.h" #include "grammar.h" #include "interpolation.h" #include "ipconv.h" #include "ipid.h" #include "ipprint.h" #include "ipshell.h" #include "janet.h" #include "libparse.h" #include "lists.h" #include "locals.h" #include "maps_ip.h" #include "Minor.h" #include "MinorInterface.h" #include "MinorProcessor.h" #include "minpoly.h" #include "misc_ip.h" #include "links/ndbm.h" #include "newstruct.h" #include "omSingularConfig.h" #include "pcv.h" #include "links/pipeLink.h" #include "run.h" #include "sdb.h" #include "silink.h" #include "links/sing_dbm.h" #include "sing_win.h" #include "slInit.h" #include "links/ssiLink.h" #include "stype.h" #include "subexpr.h" #include "table.h" #include "tok.h" #include "utils.h" #include "walk.h" #include "fegetopt.h" void siInit(char *); int main( int, char *argv[] ) { // init path names etc. // feInitResources(argv[0]); //??? siInit(argv[0]); // ? // Libpolys tests: // construct the ring Z/32003[x,y,z] // the variable names char **n=(char**)omalloc(3*sizeof(char*)); n[0]=omStrDup("x"); n[1]=omStrDup("y"); n[2]=omStrDup("z2"); /* StringSetS("ressources in use (as reported by feStringAppendResources(0):\n"); feStringAppendResources(0); PrintS(StringAppendS("\n")); ring R=rDefault(32003,3,n); // make R the default ring: rChangeCurrRing(R); // create the polynomial 1 poly p1=pISet(1); // create tthe polynomial 2*x^3*z^2 poly p2=p_ISet(2,R); pSetExp(p2,1,3); pSetExp(p2,3,2); pSetm(p2); // print p1 + p2 pWrite(p1); printf(" + \n"); pWrite(p2); printf("\n"); // compute p1+p2 p1=p_Add_q(p1,p2,R); p2=NULL; pWrite(p1); // clean up: pDelete(&p1); rDelete(R); rChangeCurrRing(NULL); */ currentVoice=feInitStdin(NULL); int err=iiEStart(omStrDup("ring R = (0, a), x, dp; R; system(\"r\", R); minpoly=a*a+1; R; system(\"r\", R); kill R; return();\n"),NULL); printf("interpreter returns %d\n",err); if (err) errorreported = 0; // reset error handling assume( err == 0 ); // hook for error handling: // WerrorS_callback=......; of type p(const char *) err=iiEStart(omStrDup("int ver=system(\"version\");export ver;return();\n"),NULL); printf("interpreter returns %d\n",err); if (err) errorreported = 0; // reset error handling assume( err == 0 ); idhdl h=ggetid("ver"); if (h != NULL) printf("singular variable ver of type %d contains %d\n",h->typ,(int)(long)IDDATA(h)); else printf("variable ver does not exist\n"); assume( h != NULL ); err = iiEStart( omStrDup("system(\"--version\");return();\n"), NULL); printf("interpreter returns %d\n",err); if (err) errorreported = 0; // reset error handling assume( err == 0 ); // calling a singular-library function idhdl datetime=ggetid("datetime"); if (datetime==NULL) printf("datetime not found\n"); else { leftv res=iiMake_proc(datetime,NULL,NULL); if (res==NULL) { printf("datetime return an error\n"); errorreported = 0; } else printf("datetime returned type %d, >>%s<<\n",res->Typ(),(char *)res->Data()); } // changing a ring for the interpreter // re-using n and R from above ring R = rDefault(32003, 3, n); idhdl newRingHdl=enterid("R" /* ring name*/, 0, /*nesting level, 0=global*/ RING_CMD, &IDROOT, FALSE); IDRING(newRingHdl)=R; // make R the default ring (include rChangeCurrRing): rSetHdl(newRingHdl); err=iiEStart(omStrDup("R; system(\"r\", R); poly p=x; p; system(\"p\", p); \"\"; poly pp = p * p; pp; listvar(); return();\n"),NULL); // calling a kernel function via the interpreter interface sleftv r1; memset(&r1,0,sizeof(r1)); sleftv arg; memset(&arg,0,sizeof(r1)); arg.rtyp=STRING_CMD; arg.data=omStrDup("huhu"); err=iiExprArith1(&r1,&arg,TYPEOF_CMD); printf("interpreter returns %d\n",err); if (err) errorreported = 0; // reset error handling else printf("typeof returned type %d, >>%s<<\n",r1.Typ(),r1.Data()); // clean up r1: r1.CleanUp(); return 0; }