Changeset 2ba9a6 in git
- Timestamp:
- Jan 16, 1998, 3:29:59 PM (26 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- f6590b9deabd44afb9756e810c1213f1e4aa4190
- Parents:
- f4404c2811a260acd825c9312b087b2c2704ae91
- Location:
- Singular
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
Singular/ChangeLog
rf4404c r2ba9a6 1 Fri Jan 16 15:30:07 MET 1998 Kai Krueger <krueger@mathematik.uni-kl.de> 2 * extra.cc,febase.cc,febase.inc,grammar.y,iparith.cc 3 * ipassign.cc,ipid.cc,ipid.h,iplib.cc,ipshell.h,misc.cc 4 * mpsr_Put.cc,mpsr_Put.h,silink.cc,structs.h,subexpr.cc,subexpr.h 5 * tesths.cc 6 Implementation of new proc-scheme done. 7 8 Fri Jan 16 14:51:07 MET 1998 Kai Krueger <krueger@mathematik.uni-kl.de> 9 * Makefile.in,tests/mpcheck,teste/comparecheck: 10 fixed use of correct Singular during checks 11 1 12 Fri Jan 16 09:23:07 MET 1998 2 13 * changes for TEST_MAC_ORDER, part 1 (hannes) -
Singular/extra.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 *****************************************/ 4 /* $Id: extra.cc,v 1.2 6 1998-01-12 17:32:46 Singular Exp $ */4 /* $Id: extra.cc,v 1.27 1998-01-16 14:29:47 krueger Exp $ */ 5 5 /* 6 6 * ABSTRACT: general interface to internals of Singular ("system" command) … … 81 81 { 82 82 res->rtyp=STRING_CMD; 83 res->data=mstrdup(iiGetLibName(ID STRING(hh)));83 res->data=mstrdup(iiGetLibName(IDPROC(hh))); 84 84 if (res->data==NULL) res->data=mstrdup(""); 85 85 return FALSE; … … 87 87 else 88 88 Warn("`%s` not found",(char*)h->next->Data()); 89 } 90 else 91 /*==================== proclist =================================*/ 92 if(strcmp((char*)(h->Data()),"proclist")==0) 93 { 94 int piShowProcList(); 95 res->rtyp=STRING_CMD; 96 res->data=(void *)mstrdup(""); 97 piShowProcList(); 98 return FALSE; 89 99 } 90 100 else -
Singular/grammar.y
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: grammar.y,v 1. 19 1997-09-12 08:27:08 Singular Exp $ */4 /* $Id: grammar.y,v 1.20 1998-01-16 14:29:49 krueger Exp $ */ 5 5 /* 6 6 * ABSTRACT: SINGULAR shell grammatik … … 42 42 #include "lists.h" 43 43 44 45 procinfo *iiInitSingularProcinfo(procinfo *pi, char *libname, 46 char *procname, int line, long pos); 44 47 45 48 extern int yylineno; … … 1395 1398 PROC_CMD extendedid BLOCKTOK 1396 1399 { 1400 procinfov pi; 1397 1401 idhdl h = enterid($2,myynest,PROC_CMD,&idroot,FALSE); 1398 1402 if (h==NULL) {FreeL((ADDRESS)$3); YYERROR;} 1399 IDSTRING(h) = (char *)AllocL(strlen($3)+31); 1400 sprintf(IDSTRING(h),"parameter list #;\n%s;return();\n\n",$3); 1403 iiInitSingularProcinfo(IDPROC(h),"", $2, 0, 0); 1404 IDPROC(h)->data.s.body = (char *)AllocL(strlen($3)+31);; 1405 sprintf(IDPROC(h)->data.s.body,"parameter list #;\n%s;return();\n\n",$3); 1401 1406 FreeL((ADDRESS)$3); 1402 1407 } 1403 1408 | PROC_DEF STRINGTOK BLOCKTOK 1404 { 1409 { 1405 1410 idhdl h = enterid($1,myynest,PROC_CMD,&idroot,FALSE); 1406 1411 if (h==NULL) … … 1411 1416 } 1412 1417 char *args=iiProcArgs($2,FALSE); 1413 FreeL((ADDRESS)$2); 1414 IDSTRING(h) = (char *)AllocL(strlen($3)+strlen(args)+14); 1415 sprintf(IDSTRING(h),"%s\n%s;RETURN();\n\n",args,$3); 1418 procinfov pi; 1419 FreeL((ADDRESS)$2); 1420 iiInitSingularProcinfo(IDPROC(h),"", $1, 0, 0); 1421 IDPROC(h)->data.s.body = (char *)AllocL(strlen($3)+strlen(args)+14);; 1422 sprintf(IDPROC(h)->data.s.body,"%s\n%s;RETURN();\n\n",args,$3); 1416 1423 FreeL((ADDRESS)args); 1417 1424 FreeL((ADDRESS)$3); 1418 //Print(">>%s<<\n",ID STRING(h));1425 //Print(">>%s<<\n",IDPROC(h)->data.s.body); 1419 1426 } 1420 1427 ; -
Singular/iparith.cc
rf4404c r2ba9a6 2689 2689 static BOOLEAN jjSTRING_PROC(leftv res, leftv v) 2690 2690 { 2691 res->data=mstrdup(IDSTRING((idhdl)v->data)); 2691 procinfov pi = IDPROC((idhdl)v->data); 2692 if(pi->language == LANG_SINGULAR) 2693 res->data=mstrdup(pi->data.s.body); 2694 else res->data=mstrdup(""); 2692 2695 return FALSE; 2693 2696 } -
Singular/ipassign.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: ipassign.cc,v 1. 19 1997-11-13 10:52:44 Singular Exp $ */4 /* $Id: ipassign.cc,v 1.20 1998-01-16 14:29:52 krueger Exp $ */ 5 5 6 6 /* … … 330 330 return FALSE; 331 331 } 332 static BOOLEAN jiA_PROC(leftv res, leftv a, Subexpr e) 333 { 334 extern procinfo *iiInitSingularProcinfo(procinfo *pi, char *libname, 335 char *procname, int line, long pos); 336 extern void piCleanUp(procinfov pi); 337 338 if(res->data!=NULL) piCleanUp((procinfo *)res->data); 339 if(a->rtyp==STRING_CMD) { 340 res->data = (void *)Alloc(sizeof(procinfo)); 341 memset(res->data,0,sizeof(*(res->data))); 342 ((procinfo *)(res->data))->language=LANG_NONE; 343 iiInitSingularProcinfo((procinfo *)res->data,"",res->name,0,0); 344 ((procinfo *)res->data)->data.s.body=(void *)a->CopyD(STRING_CMD); 345 } 346 else 347 res->data=(void *)a->CopyD(PROC_CMD); 348 jiAssignAttr(res,a); 349 return FALSE; 350 } 332 351 static BOOLEAN jiA_INTVEC(leftv res, leftv a, Subexpr e) 333 352 { … … 478 497 ,{jiA_RING, QRING_CMD, QRING_CMD } 479 498 ,{jiA_STRING, STRING_CMD, STRING_CMD } 480 ,{jiA_ STRING,PROC_CMD, STRING_CMD }481 ,{jiA_ STRING,PROC_CMD, PROC_CMD }499 ,{jiA_PROC, PROC_CMD, STRING_CMD } 500 ,{jiA_PROC, PROC_CMD, PROC_CMD } 482 501 ,{jiA_POLY, VECTOR_CMD, VECTOR_CMD } 483 502 ,{jiA_INTVEC, INTVEC_CMD, INTVEC_CMD } -
Singular/ipid.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: ipid.cc,v 1. 8 1997-12-18 14:26:35 Singular Exp $ */4 /* $Id: ipid.cc,v 1.9 1998-01-16 14:29:52 krueger Exp $ */ 5 5 6 6 /* … … 95 95 IDMAP(h)->preimage = mstrdup(IDID(currRingHdl)); 96 96 break; 97 case PROC_CMD:98 IDSTRING(h) = mstrdup("parameter list #;\nreturn();\n\n");99 break;100 97 case STRING_CMD: 101 98 IDSTRING(h) = mstrdup(""); … … 125 122 IDSTRING(h) = (char *)Alloc0(len); 126 123 } 124 } 125 if(t == PROC_CMD) { 126 IDPROC(h) = (procinfo *)Alloc(sizeof(procinfo)); 127 memset(IDPROC(h),0,sizeof(*IDPROC(h))); 128 IDPROC(h)->language=LANG_NONE; 127 129 } 128 130 return h; … … 323 325 idDelete(&iid); 324 326 } 325 // string / proc / binary ------------------------------------------------ 326 else if ((IDTYP(h) == STRING_CMD) 327 ||(IDTYP(h) == PROC_CMD) 328 ) 327 // string ------------------------------------------------------------- 328 else if (IDTYP(h) == STRING_CMD) 329 329 { 330 330 FreeL((ADDRESS)IDSTRING(h)); 331 331 //IDSTRING(h)=NULL; 332 } 333 // proc --------------------------------------------------------------- 334 else if (IDTYP(h) == PROC_CMD) 335 { 336 piKill(IDPROC(h)); 332 337 } 333 338 // number ------------------------------------------------------------- … … 474 479 } 475 480 } 481 482 char * piProcinfo(procinfov pi, char *request) 483 { 484 if(pi == NULL) return "empty proc"; 485 else if (strcmp(request, "libname") == 0) return pi->libname; 486 else if (strcmp(request, "procname") == 0) return pi->procname; 487 else if (strcmp(request, "type") == 0) { 488 switch (pi->language) { 489 case LANG_SINGULAR: return "singular"; break; 490 case LANG_C: return "object"; break; 491 case LANG_NONE: return "none"; break; 492 default: return "unknow language"; 493 } 494 } else if (strcmp(request, "ref") == 0) { 495 char p[8]; 496 sprintf(p, "%d\0", pi->ref); 497 return mstrdup(p); 498 } 499 500 } 501 502 void piCleanUp(procinfov pi) 503 { 504 (pi->ref)--; 505 if (pi->ref <= 0) 506 { 507 FreeL((ADDRESS)pi->libname); 508 FreeL((ADDRESS)pi->procname); 509 if( pi->language == LANG_SINGULAR) { 510 FreeL((ADDRESS)pi->data.s.body); 511 } 512 if( pi->language == LANG_C) { 513 } 514 memset((void *) pi, 0, sizeof(procinfo)); 515 pi->language=LANG_NONE; 516 } 517 } 518 519 void piKill(procinfov pi) 520 { 521 piCleanUp(pi); 522 if (pi->ref <= 0) 523 Free((ADDRESS)pi, sizeof(procinfo)); 524 } 525 -
Singular/ipid.h
rf4404c r2ba9a6 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: ipid.h,v 1. 7 1998-01-12 18:59:49 obachmanExp $ */6 /* $Id: ipid.h,v 1.8 1998-01-16 14:29:53 krueger Exp $ */ 7 7 /* 8 8 * ABSTRACT: identfier handling … … 95 95 si_link li; 96 96 package pack; 97 procinfo * pinf; 97 98 }; 98 99 … … 130 131 #define IDLINK(a) ((a)->data.li) 131 132 #define IDPACKAGE(a) ((a)->data.pack) 133 #define IDPROC(a) ((a)->data.pinf) 132 134 133 135 idrec() { memset(this,0,sizeof(*this)); } -
Singular/iplib.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: iplib.cc,v 1. 7 1997-07-09 15:54:01 Singular Exp $ */4 /* $Id: iplib.cc,v 1.8 1998-01-16 14:29:53 krueger Exp $ */ 5 5 /* 6 6 * ABSTRACT: interpreter: LIB and help … … 22 22 #include "lists.h" 23 23 24 procinfo *iiInitSingularProcinfo(procinfo *pi, char *libname, 25 char *procname, int line, long pos); 26 char *iiConvName(char *p); 27 24 28 /*2 25 29 * find the library of an proc: 26 * first case: IDSTRING="LIB:xyz.lib" 27 * => return (string+4) 28 * second case: IDSTRING=".....);\n" 29 * => return NULL; (no lib known) 30 * else: IDSTRING="....\nxxx.lib" 31 * => return (xxx.lib) 30 * => return (pi->libname) 32 31 */ 33 char * iiGetLibName( char *procstr)32 char * iiGetLibName(procinfov pi) 34 33 { 35 34 char *res=NULL; 36 35 37 if (strncmp(procstr,"LIB:",4)==0) 38 { 39 res=(procstr+4); 40 } 41 else 42 { 43 int l=strlen(procstr)-1; /* procstr[l] is the last character */ 44 while((l>0) && (procstr[l]!='\n')) l--; 45 if (procstr[l]=='\n') res=(procstr+l+1); 46 } 36 res = pi->libname; 47 37 return res; 48 38 } … … 111 101 return argstr; 112 102 } 103 113 104 /*2 114 105 * locate `procname` in lib `libname` and find the part `part`: 115 106 * part=0: help, between, but excluding the line "proc ..." and "{...": 116 * => Print, return NULL107 * => return 117 108 * part=1: body, between "{ ..." and "}", including the 1. line, w/o "{" 118 * => FreeL(libname), return109 * => set pi->data.s.body, return NULL 119 110 * part=2: example, between, but excluding the line "exapmle {..." and "}": 120 111 * => return 121 112 */ 122 char* iiGetLibProcBuffer( char* libname, char* procname, int part ) 123 { 124 /* =========== open lib ==============*/ 125 char buf[256]; 126 if (part==1) 127 { 128 // libname comes as LIB:name 129 libname += 4; 130 //libname[strlen(libname)-1] = '\0'; 131 } 132 FILE * fp = feFopen( libname, "rb", NULL, TRUE ); 113 char* iiGetLibProcBuffer(procinfo *pi, int part ) 114 { 115 char buf[256], *s = NULL, *p; 116 long procbuflen; 117 118 FILE * fp = feFopen( pi->libname, "rb", NULL, TRUE ); 133 119 if (fp==NULL) 134 120 { 135 if (part==1) FreeL((ADDRESS)(libname-4));136 121 return NULL; 137 122 } 138 123 139 /* =========== search lib =========== */ 140 while (fgets( buf, sizeof(buf), fp)) 141 { 142 /* search for lines "proc ..." */ 143 if (strncmp( buf, "proc ", 5) == 0) 144 { 145 char ct; 146 char *e; 147 char *s=iiProcName(buf,ct,e); 148 char *argstr=NULL; 149 if (strcmp( s, procname ) == 0) 150 { 151 if (part==1) 152 { 153 // =========== processing of argument list ============= 154 *e=ct; 155 argstr=iiProcArgs(e,TRUE); 156 } 157 int procbuflen; 158 // =========== search beginning of proc body ============ 159 long startpos = ftell( fp ); 160 loop 161 { 162 if(!fgets( buf, sizeof(buf), fp)) return NULL; // search "{" 163 //if (strchr(buf,'{')!=NULL) 164 if (buf[0]=='{') 165 { 166 if (part==0) return NULL; 167 procbuflen=strlen(buf); 168 break; 169 } 170 if (part==0) PrintS(buf); 171 startpos = ftell( fp ); 172 } 173 174 // =========== search end of proc body ============ 175 // read till "}", to calculate length of procbuffer 176 while (fgets( buf, sizeof(buf), fp)) 177 { 178 if (buf[0] == '}') break; 179 procbuflen += strlen(buf); 180 } 181 // =========== search example part ============ 182 if (part==2) 183 { 184 procbuflen = 0; 185 loop 186 { 187 /* EOF ? */ 188 if (!fgets( buf, sizeof(buf), fp)) 189 return NULL; 190 /* found ? */ 191 if (strncmp( buf, "example", 7) == 0) 192 break; 193 /* next proc ? */ 194 if (strncmp( buf, "proc ", 5) == 0) 195 return NULL; 196 } 197 startpos = ftell( fp ); 198 while (fgets( buf, sizeof(buf), fp)) 199 { 200 if (buf[0] == '}') break; 201 procbuflen += strlen(buf); 202 } 203 //Print("start:%d, len:%d\n",startpos,procbuflen); 204 } 205 206 // =========== read the part =========== 207 char* procbuf; 208 if (part==1) procbuf = (char *)AllocL( strlen(argstr)+procbuflen+14+strlen(libname) ); 209 else procbuf = (char *)AllocL( procbuflen+14+strlen(libname) ); 210 if (procbuf==NULL) 211 { 212 Werror( "unable to allocate proc buffer `%s`", procname ); 213 if (part==1) FreeL((ADDRESS)(libname-4)); 214 return NULL; 215 } 216 fseek( fp, startpos, SEEK_SET ); 217 if (part==1) 218 { 219 strcpy(procbuf,argstr); 220 fread( procbuf+strlen(argstr), procbuflen, 1, fp); 221 procbuflen+=strlen(argstr); 222 FreeL(argstr); 223 } 224 else 225 { 226 fread( procbuf, procbuflen, 1, fp); 227 } 228 fclose( fp ); 229 procbuf[procbuflen] = '\0'; 230 231 // =========== modify text =========== 232 //if ((part==1)||(part==2)) 233 { 234 //strcpy( procbuf+procbuflen, "\n;RETURN();\n" ); 235 strcat( procbuf+procbuflen-3, "\n;RETURN();\n\n" ); 236 if (part==1) 237 { 238 strcat( procbuf+procbuflen+10,libname); 239 FreeL((ADDRESS)(libname-4)); 240 } 241 } 242 s=strchr(procbuf,'{'); 243 if (s!=NULL) *s=' '; 244 //Print("end iiGetLibProcBuffer, changed pos: %d, s=%x\n",procbuf-s,s); 245 return procbuf; 246 } 247 } 248 } 249 Werror( "`%s` not found in LIB `%s`", procname, libname ); 250 if (part==1) FreeL((ADDRESS)(libname-4)); 124 fseek(fp, pi->data.s.proc_start, SEEK_SET); 125 if(part==0) { // load help string 126 procbuflen = pi->data.s.body_start - pi->data.s.proc_start; 127 //Print("Help=%ld-%ld=%d\n", pi->data.s.body_start, 128 // pi->data.s.proc_start, procbuflen); 129 s = (char *)AllocL(procbuflen); 130 fread(s, procbuflen, 1, fp); 131 s[procbuflen] = '\0'; 132 return(s); 133 } 134 if(part==1) { // load proc part 135 fgets(buf, sizeof(buf), fp); 136 char ct; 137 char *e; 138 s=iiProcName(buf,ct,e); 139 char *argstr=NULL; 140 *e=ct; 141 argstr=iiProcArgs(e,TRUE); 142 procbuflen = pi->data.s.body_end - pi->data.s.body_start; 143 pi->data.s.body = (char *)AllocL( strlen(argstr)+procbuflen+15+ 144 strlen(pi->libname) ); 145 //Print("Body=%ld-%ld=%d\n", pi->data.s.body_end, 146 // pi->data.s.body_start, procbuflen); 147 if (pi->data.s.body==NULL) { 148 Werror( "unable to allocate proc buffer `%s`", pi->procname ); 149 return NULL; 150 } 151 fseek(fp, pi->data.s.body_start, SEEK_SET); 152 strcpy(pi->data.s.body,argstr); 153 fread( pi->data.s.body+strlen(argstr), procbuflen, 1, fp); 154 procbuflen+=strlen(argstr); 155 FreeL(argstr); 156 fclose( fp ); 157 pi->data.s.body[procbuflen] = '\0'; 158 strcat( pi->data.s.body+procbuflen, "\n;\nRETURN();\n\n" ); 159 strcat( pi->data.s.body+procbuflen+13,pi->libname); 160 s=strchr(pi->data.s.body,'{'); 161 if (s!=NULL) *s=' '; 162 return NULL; 163 } 164 if(part==2) { // load example 165 fseek(fp, pi->data.s.example_start, SEEK_SET); 166 fgets(buf, sizeof(buf), fp); 167 procbuflen = pi->data.s.proc_end - pi->data.s.example_start - strlen(buf); 168 //Print("Example=%ld-%ld=%d\n", pi->data.s.proc_end, 169 // pi->data.s.example_start, procbuflen); 170 s = (char *)AllocL(procbuflen+14); 171 fread(s, procbuflen, 1, fp); 172 s[procbuflen] = '\0'; 173 strcat(s+procbuflen-3, "\n;RETURN();\n\n" ); 174 p=strchr(s,'{'); 175 if (p!=NULL) *s=' '; 176 return(s); 177 } 251 178 return NULL; 252 179 } … … 302 229 if (pn!=NULL) 303 230 { 304 if (strncmp( IDSTRING(pn), "LIB:", 4 ) == 0) 305 { 306 IDSTRING(pn) = iiGetLibProcBuffer( IDSTRING(pn), IDID(pn) ); 307 if (IDSTRING(pn)==NULL) return TRUE; 308 } 309 newBuffer( mstrdup(IDSTRING(pn)), BT_proc, IDID(pn) ); 231 procinfov pi; 232 pi = IDPROC(pn); 233 if(pi!=NULL) { 234 if( pi->data.s.body==NULL ) { 235 iiGetLibProcBuffer(IDPROC(pn)); 236 if (IDPROC(pn)->data.s.body==NULL) return TRUE; 237 } 238 newBuffer( mstrdup(IDPROC(pn)->data.s.body), BT_proc, IDID(pn) ); 239 } else { // for security only 240 newBuffer( mstrdup(IDSTRING(pn)), BT_proc, IDID(pn) ); 241 } 310 242 fileVoice = voice; 311 243 } … … 393 325 { 394 326 int err; 327 procinfov pi = IDPROC(pn); 395 328 iiCheckNest(); 396 329 iiLocalRing[myynest]=currRing; … … 404 337 if (traceit&TRACE_SHOW_RINGS) iiShowLevRings(); 405 338 #endif 406 err=iiPStart(pn,NULL,sl); 339 #if 1 340 if(pi->language == LANG_SINGULAR) err=iiPStart(pn,NULL,sl); 341 if(pi->language == LANG_C) { 342 leftv res = (leftv)Alloc0(sizeof(sleftv)); 343 err = (pi->data.o.function)(res, sl); 344 iiRETURNEXPR[myynest+1].Copy(res); 345 Free((ADDRESS)res, sizeof(sleftv)); 346 } 347 #else 348 switch (pi->language) { 349 case LANG_SINGULAR: err=iiPStart(pn,NULL,sl); break; 350 case LANG_C: leftv res = (leftv)Alloc0(sizeof(sleftv)); 351 err = (pi->data.o.function)(res, sl); 352 iiRETURNEXPR[myynest+1].Copy(res); 353 Free((ADDRESS)res, sizeof(sleftv)); 354 break; 355 default: err=TRUE; 356 } 357 #endif 407 358 if (traceit&TRACE_SHOW_PROC) 408 359 { … … 504 455 char libnamebuf[128]; 505 456 idhdl h,hl; 457 int lines = 1; 458 long pos = 0L; 459 procinfov pi; 506 460 FILE * fp = feFopen( newlib, "r", libnamebuf, tellerror ); 507 461 if (fp==NULL) … … 589 543 #define IN_HEADER 1 590 544 #define IN_BODY 2 591 #define IN_LIB_HEADER 3 545 #define IN_EXAMPLE 3 546 #define IN_EXAMPLE_BODY 4 547 #define IN_LIB_HEADER 5 592 548 int v=-1,otherLines=0,inBlock=IN_LIB_HEADER; 593 549 do /*while (fgets( buf, sizeof(buf), fp))*/ 594 550 { 551 int offset; 595 552 if (buf[0]!='\n') 596 553 { … … 618 575 { 619 576 char proc[256]; 577 char ct1, *e; 620 578 sscanf( buf, "proc %s", proc); 579 offset = 2; 621 580 char *ct=strchr(proc,'('); 622 if (ct!=NULL) *ct='\0';581 if (ct!=NULL) { *ct='\0'; offset=3; } 623 582 sprintf( buf, "LIB:%s", newlib); 624 h = enterid( mstrdup(proc), myynest, PROC_CMD, &idroot, FALSE ); 583 #if 0 584 if(strcmp(proc, "_init")==0) { 585 char *p = iiConvName(newlib); 586 Print("Init found:%s;\n", p); 587 h = enterid( mstrdup(p), myynest, PROC_CMD, &idroot, FALSE ); 588 FreeL((ADDRESS)p); 589 } else 590 #endif 591 h = enterid( mstrdup(proc), myynest, PROC_CMD, &idroot, FALSE ); 625 592 if (h!=NULL) 626 593 { 627 IDSTRING(h) = mstrdup( buf);594 iiInitSingularProcinfo(IDPROC(h),newlib,proc,lines,pos); 628 595 if (BVERBOSE(V_LOAD_PROC)) Warn( " proc %s loaded", proc ); 629 596 } … … 640 607 else if (strncmp( buf, "example", 7) == 0) 641 608 { 642 inBlock=IN_HEADER; 609 IDPROC(h)->data.s.example_start = pos; 610 IDPROC(h)->data.s.example_lineno = lines; 611 inBlock=IN_EXAMPLE; 643 612 } 644 613 else if (strncmp( buf, "//", 2) != 0) … … 650 619 } 651 620 } 652 else if ( inBlock==IN_HEADER)621 else if ((inBlock==IN_HEADER) || (inBlock==IN_EXAMPLE)) 653 622 { 654 623 if (buf[0]=='{') 655 624 { 625 if(inBlock==IN_HEADER) { 626 IDPROC(h)->data.s.body_start = pos; 627 IDPROC(h)->data.s.body_lineno = lines-offset; 628 // Print("%s: %d-%d\n", pi->procname, lines, offset); 629 } 656 630 inBlock=IN_BODY; 657 631 } 658 632 } 659 else if ( inBlock==IN_BODY)633 else if ((inBlock==IN_BODY) || (inBlock==IN_EXAMPLE_BODY)) 660 634 { 661 635 if (buf[0]=='}') 662 { 663 inBlock=0; 664 } 665 } 666 } 636 { 637 if(IDPROC(h)->data.s.example_start==0) 638 IDPROC(h)->data.s.example_start=pos; 639 if(IDPROC(h)->data.s.body_end==0) IDPROC(h)->data.s.body_end=pos; 640 IDPROC(h)->data.s.proc_end = pos; 641 inBlock=0; 642 } 643 } 644 } 645 lines++; 646 pos = ftell(fp); 667 647 } while (fgets( buf, sizeof(buf), fp)); 668 648 fclose( fp ); 649 //if (h!=NULL) IDPROC(h) = pi; 669 650 if (BVERBOSE(V_DEBUG_LIB)) 670 651 { … … 680 661 } 681 662 663 procinfo *iiInitSingularProcinfo(procinfov pi, char *libname, 664 char *procname, int line, long pos) 665 { 666 pi->libname = mstrdup(libname); 667 668 if( strcmp(procname,"_init")==0) { 669 char *p = iiConvName(libname); 670 pi->procname = mstrdup(p); 671 FreeL((ADDRESS)p); 672 } else pi->procname = mstrdup(procname); 673 pi->language = LANG_SINGULAR; 674 pi->ref = 1; 675 pi->data.s.proc_start = pos; 676 pi->data.s.help_start = 0L; 677 pi->data.s.body_start = 0L; 678 pi->data.s.body_end = 0L; 679 pi->data.s.example_start = 0L; 680 pi->data.s.proc_lineno = line; 681 pi->data.s.body_lineno = 0; 682 pi->data.s.example_lineno = 0; 683 pi->data.s.body = NULL; 684 return(pi); 685 } 686 687 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 688 char *iiConvName(char *libname) 689 { 690 char *p = AllocL(strlen(libname)+7); 691 char *q = mstrdup(libname); 692 char *r = q; 693 for(; *r!='\0'; r++) { 694 if(*r=='.') *r='_'; 695 if(*r==':') *r='_'; 696 } 697 sprintf(p, "%s_init\0", q); 698 FreeL((ADDRESS)q); 699 return(p); 700 } 701 702 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 703 int piShowProcList() 704 { 705 idhdl h; 706 procinfo *proc; 707 char *name; 708 709 Print( "%-15s %20s %s,%s %s,%s %s,%s\n", "Library", "function", 710 "line", "start", "line", "body", "line", "example"); 711 for(h = idroot; h != NULL; h = IDNEXT(h)) { 712 if(IDTYP(h) == PROC_CMD) { 713 proc = IDPROC(h); 714 if(strcmp(proc->procname, IDID(h))!=0) { 715 name = AllocL(strlen(IDID(h))+strlen(proc->procname)+4); 716 sprintf(name, "%s -> %s", IDID(h), proc->procname); 717 Print( "%-15s %20s ", proc->libname, name); 718 FreeL(name); 719 } else Print( "%-15s %20s ", proc->libname, proc->procname); 720 if(proc->language==LANG_SINGULAR) 721 Print("line %4d,%-5ld %4d,%-5ld %4d,%-5ld\n", 722 proc->data.s.proc_lineno, proc->data.s.proc_start, 723 proc->data.s.body_lineno, proc->data.s.body_start, 724 proc->data.s.example_lineno, proc->data.s.example_start); 725 else if(proc->language==LANG_C) Print("type: object\n"); 726 727 } 728 } 729 } 730 731 /*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/ 732 char *iiLineNo(char *procname, int lineno) 733 { 734 char buf[256]; 735 idhdl pn = ggetid(procname); 736 procinfo *pi = IDPROC(pn); 737 738 sprintf(buf, "%s %3d\0", procname, lineno); 739 //sprintf(buf, "%s::%s %3d\0", pi->libname, pi->procname, 740 // lineno + pi->data.s.body_lineno); 741 return(buf); 742 } -
Singular/ipshell.h
rf4404c r2ba9a6 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: ipshell.h,v 1. 9 1997-07-11 14:27:55 Singular Exp $ */6 /* $Id: ipshell.h,v 1.10 1998-01-16 14:29:54 krueger Exp $ */ 7 7 /* 8 8 * ABSTRACT … … 46 46 BOOLEAN iiExport(leftv v, int toLev); 47 47 BOOLEAN iiExport(leftv v, int toLev, idhdl &root); 48 char * iiGetLibName( char *procstr);49 char * iiGetLibProcBuffer( char* libname, char* procname, int part=1 );48 char * iiGetLibName(procinfov v); 49 char * iiGetLibProcBuffer( procinfov pi, int part=1 ); 50 50 char * iiProcName(char *buf, char & ct, char* &e); 51 51 char * iiProcArgs(char *e,BOOLEAN withParenth); -
Singular/misc.cc
rf4404c r2ba9a6 331 331 if ((h!=NULL) && (IDTYP(h)==PROC_CMD)) 332 332 { 333 char *lib=iiGetLibName(ID STRING(h));333 char *lib=iiGetLibName(IDPROC(h)); 334 334 Print("// proc %s ",s); 335 335 if((lib==NULL)||(*lib=='\0')) … … 340 340 { 341 341 Print("from lib %s\n",lib); 342 if (!example)343 iiGetLibProcBuffer(lib,s,0);344 else 345 { 346 s=iiGetLibProcBuffer(lib,s,2);347 if (s!=NULL)348 349 350 351 342 s=iiGetLibProcBuffer(IDPROC(h), example ? 2 : 0); 343 if (!example) { 344 PrintS(s); 345 FreeL((ADDRESS)s); 346 } 347 else { 348 if (s!=NULL) { 349 if (strlen(s)>5) iiEStart(s); /*newBuffer(s,BT_execute);*/ 350 else FreeL((ADDRESS)s); 351 } 352 352 } 353 353 } -
Singular/mpsr_Put.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: mpsr_Put.cc,v 1. 6 1997-04-10 13:08:37 obachmanExp $ */4 /* $Id: mpsr_Put.cc,v 1.7 1998-01-16 14:29:55 krueger Exp $ */ 5 5 6 6 … … 217 217 } 218 218 219 mpsr_Status_t mpsr_PutProc(MP_Link_pt link, char* pname, char *proc)219 mpsr_Status_t mpsr_PutProc(MP_Link_pt link, char* pname, procinfov proc) 220 220 { 221 221 MP_DictTag_t dict; 222 222 MP_Common_t cop; 223 char *iiGetLibProcBuffer(procinfov pi, int part=1); 223 224 224 225 failr(mpsr_tok2mp('=', &dict, &cop)); … … 226 227 // A Singular- procedure is sent as a cop with the string as arg 227 228 mp_failr(MP_PutCommonOperatorPacket(link, 228 229 230 231 229 dict, 230 cop, 231 0, 232 2)); 232 233 mp_failr(MP_PutIdentifierPacket(link, MP_SingularDict, pname,1)); 233 234 mp_failr(MP_PutAnnotationPacket(link, 234 MP_SingularDict, 235 MP_AnnotSingularProcDef, 236 0)); 237 mp_return(MP_PutStringPacket(link, proc, 0)); 235 MP_SingularDict, 236 MP_AnnotSingularProcDef, 237 0)); 238 if( proc->language == LANG_SINGULAR) { 239 if (proc->data.s.body == NULL) 240 iiGetLibProcBuffer(proc); 241 mp_return(MP_PutStringPacket(link, proc->data.s.body, 0)); 242 } 243 else 244 mp_return(MP_PutStringPacket(link, "", 0)); 245 mp_return(MP_Success); 238 246 } 239 247 -
Singular/mpsr_Put.h
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: mpsr_Put.h,v 1. 5 1997-06-30 17:04:47 obachmanExp $ */4 /* $Id: mpsr_Put.h,v 1.6 1998-01-16 14:29:56 krueger Exp $ */ 5 5 /*************************************************************** 6 6 * … … 80 80 } 81 81 extern mpsr_Status_t mpsr_PutRing(MP_Link_pt link, ring r); 82 extern mpsr_Status_t mpsr_PutProc(MP_Link_pt link, char *pname, char*proc);82 extern mpsr_Status_t mpsr_PutProc(MP_Link_pt link, char *pname,procinfov proc); 83 83 inline mpsr_Status_t mpsr_PutDef(MP_Link_pt link, char *name) 84 84 { … … 154 154 { 155 155 typecheck(v, PROC_CMD); 156 return mpsr_PutProc(link, v->name, ( char *) v->Data());156 return mpsr_PutProc(link, v->name, (procinfov) v->Data()); 157 157 } 158 158 inline mpsr_Status_t mpsr_PutDefLeftv(MP_Link_pt link, leftv v) -
Singular/silink.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: silink.cc,v 1.1 2 1997-08-12 17:14:43 Singular Exp $ */4 /* $Id: silink.cc,v 1.13 1998-01-16 14:29:56 krueger Exp $ */ 5 5 6 6 /* … … 639 639 fprintf(fd, ")"); 640 640 } 641 else if (type_id == PROC_CMD || type_id ==STRING_CMD)641 else if (type_id == STRING_CMD) 642 642 { 643 643 char *pstr = IDSTRING(h), c; … … 650 650 } 651 651 fputc('"', fd); 652 } 653 else if (type_id == PROC_CMD) 654 { 655 procinfov pi = IDPROC(h); 656 if (pi->language == LANG_SINGULAR) { 657 if( pi->data.s.body==NULL) iiGetLibProcBuffer(pi); 658 char *pstr = pi->data.s.body, c; 659 fputc('"', fd); 660 while (*pstr != '\0') { 661 if (*pstr == '"') fputc('\\', fd); 662 fputc(*pstr, fd); 663 pstr++; 664 } 665 fputc('"', fd); 666 } else fputs("(null)", fd); 652 667 } 653 668 else -
Singular/structs.h
rf4404c r2ba9a6 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: structs.h,v 1. 6 1997-12-03 16:59:06 obachmanExp $ */6 /* $Id: structs.h,v 1.7 1998-01-16 14:29:57 krueger Exp $ */ 7 7 /* 8 8 * ABSTRACT … … 34 34 class skStrategy; 35 35 class ssyStrategy; 36 class procinfo; 36 37 37 38 struct sip_sring; … … 82 83 typedef ssyStrategy * syStrategy; 83 84 typedef struct reca * alg; 85 typedef procinfo * procinfov; 84 86 85 87 struct _scmdnames -
Singular/subexpr.cc
rf4404c r2ba9a6 90 90 #endif 91 91 { 92 if (t/*Typ()*/!=PROC_CMD) 93 { 94 const char *n=Name(); 95 char *s; 96 void *d=Data(); 97 if (errorreported) 98 return; 99 if ((store!=NULL)&&(store!=this)) 100 store->CleanUp(); 101 102 switch (t /*=Typ()*/) 92 const char *n=Name(); 93 char *s; 94 void *d=Data(); 95 if (errorreported) 96 return; 97 if ((store!=NULL)&&(store!=this)) 98 store->CleanUp(); 99 100 switch (t /*=Typ()*/) 103 101 { 104 102 case UNKNOWN: … … 140 138 ::Print("%-*.*s%d",spaces,spaces," ",(int)d); 141 139 break; 140 case PROC_CMD: 141 { 142 procinfov pi=(procinfov)d; 143 ::Print("%-*.*s// libname : %s\n",spaces,spaces," ", 144 piProcinfo(pi, "libname")); 145 ::Print("%-*.*s// procname : %s\n",spaces,spaces," ", 146 piProcinfo(pi, "procname")); 147 ::Print("%-*.*s// type : %s",spaces,spaces," ", 148 piProcinfo(pi, "type")); 149 // ::Print("%-*.*s// ref : %s",spaces,spaces," ", 150 // piProcinfo(pi, "ref")); 151 break; 152 } 142 153 case LINK_CMD: 143 154 { … … 188 199 #endif 189 200 } /* end switch: (Typ()) */ 190 }191 201 } 192 202 if (next!=NULL) … … 262 272 rKill((ring)data); 263 273 break; 274 case PROC_CMD: 275 piKill((procinfov)data); 276 break; 264 277 case LINK_CMD: 265 278 slKill((si_link)data); … … 403 416 #endif 404 417 case PROC_CMD: 405 return (void *) mstrdup((char *)d);418 return (void *)piCopy((procinfov) d); 406 419 case POLY_CMD: 407 420 case VECTOR_CMD: … … 459 472 break; 460 473 case STRING_CMD: 461 //data= (void *)mstrdup((char *)d);462 //break;474 data= (void *)mstrdup((char *)d); 475 break; 463 476 case PROC_CMD: 464 data= (void *) mstrdup((char *)d);477 data= (void *)piCopy((procinfov) d); 465 478 break; 466 479 case POLY_CMD: -
Singular/subexpr.h
rf4404c r2ba9a6 4 4 * Computer Algebra System SINGULAR * 5 5 ****************************************/ 6 /* $Id: subexpr.h,v 1. 3 1997-04-09 12:20:15 Singular Exp $ */6 /* $Id: subexpr.h,v 1.4 1998-01-16 14:29:58 krueger Exp $ */ 7 7 /* 8 8 * ABSTRACT: handling of leftv … … 88 88 BOOLEAN assumeStdFlag(leftv h); 89 89 90 class proc_singular 91 { 92 public: 93 long proc_start; // position where proc is starting 94 long help_start; // position where help is starting 95 long body_start; // position where proc-body is starting 96 long body_end; // position where proc-body is ending 97 long example_start; // position where example is starting 98 long proc_end; // position where proc is ending 99 int proc_lineno; 100 int body_lineno; 101 int example_lineno; 102 char *body; 103 }; 104 105 struct proc_object 106 { 107 //public: 108 BOOLEAN (*function)(leftv res, leftv v); 109 }; 110 111 union uprocinfodata; 112 113 union uprocinfodata 114 { 115 public: 116 proc_singular s; // data of Singular-procedure 117 struct proc_object o; // pointer to binary-function 118 }; 119 120 typedef union uprocinfodata procinfodata; 121 122 typedef enum { LANG_NONE, LANG_SINGULAR, LANG_C } language_defs; 123 124 class procinfo 125 { 126 public: 127 char *libname; 128 char *procname; 129 language_defs language; 130 short ref; 131 procinfodata data; 132 }; 133 134 inline procinfov piCopy(procinfov pi) 135 { 136 pi->ref++; 137 return pi; 138 } 139 void piKill(procinfov l); 140 char *piProcinfo(procinfov pi, char *request); 141 void piShowProcinfo(procinfov pi, char *txt); 90 142 #endif -
Singular/tesths.cc
rf4404c r2ba9a6 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: tesths.cc,v 1.2 8 1997-12-03 16:59:09 obachmanExp $ */4 /* $Id: tesths.cc,v 1.29 1998-01-16 14:29:59 krueger Exp $ */ 5 5 6 6 /* … … 223 223 //if ((h!=NULL) && (IDTYP(h)==PROC_CMD)) 224 224 //{ 225 // IDSTRING(h)=iiGetLibProcBuffer( ID STRING(h), IDID(h));225 // IDSTRING(h)=iiGetLibProcBuffer( IDPROC(h))); 226 226 // newBuffer( mstrdup(IDSTRING(h)), BT_execute, IDID(h) ); 227 227 //leftv r=iiMake_proc(h,NULL);
Note: See TracChangeset
for help on using the changeset viewer.