Changeset 4e859f5 in git for modules/tools/misc.cc
- Timestamp:
- Mar 24, 1999, 2:04:21 PM (25 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- c84d051818fc5b23bd500c3462fa3e1ea7a135a2
- Parents:
- 2efb0e4a1f16840557ae3ada88076edccb960534
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
modules/tools/misc.cc
r2efb0e r4e859f5 2 2 * Computer Algebra System SINGULAR * 3 3 ****************************************/ 4 /* $Id: misc.cc,v 1. 3 1999-03-19 14:12:08krueger Exp $ */4 /* $Id: misc.cc,v 1.4 1999-03-24 13:04:20 krueger Exp $ */ 5 5 /* 6 6 * ABSTRACT: lib parsing … … 27 27 #define SYSTYP_HPUX9 2 28 28 #define SYSTYP_HPUX10 3 29 30 #if 0 31 # define logx printf 32 #else 33 # define logx 34 #endif 29 35 30 36 char *DYNAinclude[] = { … … 134 140 } 135 141 #endif 136 printf("IsCmd: [%d] %s\n", tok, n);142 logx("IsCmd: [%d] %s\n", tok, n); 137 143 138 144 if( (cmds[i].toktype==ROOT_DECL) || … … 181 187 182 188 /*========================================================================*/ 189 void PrintProc( 190 procdef pi 191 ) 192 { 193 int i; 194 195 printf("proc: %s(", pi.procname); 196 197 for(i=0; i<pi.paramcnt; i++) { 198 printf("%s", pi.param[i].name); 199 if(i < (pi.paramcnt-1)) printf(","); 200 } 201 printf(")\n"); 202 } 203 204 /*========================================================================*/ 183 205 void make_version(char *p, moddefv module) 184 206 { … … 207 229 208 230 /*========================================================================*/ 209 cfilesv Add2files(cfilesv cf, char *name) 210 { 211 cfilesv cfnew = (cfilesv)malloc(sizeof(cfiles)); 212 cfnew->filename = (char *)malloc(strlen(name+1)); 213 cfnew->next = NULL; 214 strcpy(cfnew->filename, name); 215 if(cf == NULL) cf = cfnew; 216 else cfnew->next = cf; 217 return(cfnew); 218 } 219 220 /*========================================================================*/ 221 procdefv Add2proclist(procdefv pi, char *name) 222 { 223 procdefv pnew = (procdefv)malloc(sizeof(procdef)); 224 pnew->procname = (char *)malloc(strlen(name+1)); 225 pnew->funcname = (char *)malloc(strlen(name+1)); 226 pnew->param = NULL; 227 pnew->next = NULL; 228 pnew->is_static = 0; 229 pnew->paramcnt = 0; 230 strcpy(pnew->procname, name); 231 strcpy(pnew->funcname, name); 232 if(pi==NULL) pi = pnew; 233 else pnew->next = pi; 234 return(pnew); 235 } 236 237 /*========================================================================*/ 238 void AddParam(procdefv pi, char *name, char *typname, int typ) 239 { 240 241 #ifdef NEW_PARAM 231 void Add2files( 232 moddefv module, 233 char *name 234 ) 235 { 236 cfiles cfnew; 237 memset((void *)&cfnew, '\0', sizeof(cfiles)); 238 239 cfnew.filename = (char *)malloc(strlen(name)+1); 240 memset(cfnew.filename, '\0', strlen(name)+1); 241 memcpy(cfnew.filename, name, strlen(name)); 242 243 if(module->filecnt==0) { 244 module->files = (cfilesv)malloc(sizeof(cfiles)+1); 245 } 246 else { 247 module->files = (cfilesv)realloc(module->files, 248 (module->filecnt+1)*sizeof(cfiles)); 249 } 250 if(module->files == NULL) { printf("ERROR\n"); return; } 251 252 memset((void *) &module->files[module->filecnt], '\0', sizeof(cfiles)); 253 memcpy((void *)(&(module->files[module->filecnt])), 254 (void *)&cfnew, sizeof(cfiles)); 255 (module->filecnt)++; 256 } 257 258 /*========================================================================*/ 259 /* procdefv Add2proclist(procdefv pi, char *name)*/ 260 void Add2proclist( 261 moddefv module, 262 char *name, 263 char *ret_val, 264 char *ret_typname, 265 int ret_typ 266 ) 267 { 268 procdef pnew; 269 logx("Add2proclist(%s, %s)\n", name, ret_val); 270 271 memset((void *)&pnew, '\0', sizeof(procdef)); 272 pnew.procname = (char *)malloc(strlen(name)+1); 273 if(pnew.procname==NULL) printf("Error 1\n"); 274 pnew.funcname = (char *)malloc(strlen(name)+1); 275 memset(pnew.funcname, '\0', strlen(name)+1); 276 memset(pnew.procname, '\0', strlen(name)+1); 277 pnew.param = NULL; 278 (pnew).is_static = 0; 279 (pnew).paramcnt = 0; 280 strcpy(pnew.procname, name); 281 strcpy(pnew.funcname, name); 282 283 pnew.return_val.name = (char *)malloc(strlen(ret_val)+1); 284 memset(pnew.return_val.name, '\0', strlen(ret_val)+1); 285 memcpy(pnew.return_val.name, ret_val, strlen(ret_val)); 286 287 pnew.return_val.typname = (char *)malloc(strlen(ret_typname)+1); 288 memset(pnew.return_val.typname, '\0', strlen(ret_typname)+1); 289 memcpy(pnew.return_val.typname, ret_typname, strlen(ret_typname)); 290 pnew.return_val.typ = ret_typ; 291 292 if(module->proccnt==0) { 293 module->procs = (procdefv)malloc(sizeof(procdef)+1); 294 } 295 else { 296 module->procs = (procdefv)realloc(module->procs, 297 (module->proccnt+1)*sizeof(procdef)); 298 } 299 if(module->procs == NULL) { printf("ERROR\n"); return; } 300 301 memset((void *) &module->procs[module->proccnt], '\0', sizeof(procdef)); 302 memcpy((void *)(&(module->procs[module->proccnt])), 303 (void *)&pnew, sizeof(procdef)); 304 (module->proccnt)++; 305 } 306 307 /*========================================================================*/ 308 void AddParam( 309 moddefv module, 310 char *name, 311 char *typname, 312 int typ 313 ) 314 { 242 315 paramdef pnew; 243 pnew.name = (char *)malloc(strlen(name+1)); 316 int proccnt = module->proccnt-1; 317 int paramcnt = 0; 318 319 logx("AddParam(%d, %s, %s, %d)\n", module->procs[proccnt].paramcnt, 320 module->procs[proccnt].procname, 321 typname, typ); 322 memset((void *)&pnew, '\0', sizeof(paramdef)); 323 pnew.name = (char *)malloc(strlen(name)+1); 324 memset(pnew.name, '\0', strlen(name)+1); 244 325 pnew.next = NULL; 245 strcpy(pnew.name, name); 246 pnew.typname = (char *)malloc(strlen(typname+1)); 247 strcpy(pnew.typname, typname); 326 memcpy(pnew.name, name, strlen(name)); 327 pnew.typname = (char *)malloc(strlen(typname)+1); 328 memset(pnew.typname, '\0', strlen(typname)+1); 329 memcpy(pnew.typname, typname, strlen(typname)); 248 330 pnew.typ = typ; 249 331 250 if(pi->paramcnt==0) { 251 pi->param = (paramdefv)malloc(sizeof(paramdef)); 252 } 332 paramcnt = module->procs[proccnt].paramcnt; 333 if(module->procs[proccnt].paramcnt==0) { 334 module->procs[proccnt].param = (paramdefv)malloc(sizeof(paramdef)); 335 } 253 336 else { 254 pi->param = (paramdefv)realloc(pi->param, 255 (pi->paramcnt+1)*sizeof(paramdef)); 256 } 257 memcpy((void *)(&pi->param[pi->paramcnt]), (void *)&pnew, sizeof(paramdef)); 258 #else 259 paramdefv pnew = (paramdefv)malloc(sizeof(paramdef)); 260 pnew->name = (char *)malloc(strlen(name+1)); 261 pnew->next = NULL; 262 strcpy(pnew->name, name); 263 pnew->typname = (char *)malloc(strlen(typname+1)); 264 strcpy(pnew->typname, typname); 265 pnew->typ = typ; 266 267 if(pi->param==NULL) pi->param = pnew; 268 else { 269 paramdefv pp = pi->param; 270 while(pp->next != NULL) pp = pp->next; 271 pp->next = pnew; 272 } 273 #endif 274 (pi->paramcnt)++; 275 } 276 277 /*========================================================================*/ 278 void PrintProclist(procdefv pi) 279 { 280 procdefv v = pi; 281 #ifdef NEW_PARAM 282 int i; 283 for(v=pi; v!=NULL; v = v->next) { 284 printf("proc: %s(", v->procname); 285 for(i=0; i<v->paramcnt; i++) { 286 printf("%s", v->param[i].name); 287 if(i < (v->paramcnt-1)) printf(","); 288 } 289 290 printf(")\n"); 291 } 292 #else 293 paramdefv pp; 294 for(v=pi; v!=NULL; v = v->next) { 295 // while(v!=NULL) { 296 pp = v->param; 297 printf("proc: %s(", v->procname); 298 if(pp!= NULL) { 299 printf("%s", pp->name); 300 while(pp->next!= NULL) { 301 pp = pp->next; 302 printf(",%s", pp->name); 303 } 304 } 305 printf(")\n"); 306 // v =v ->next; 307 } 308 #endif 337 module->procs[proccnt].param = 338 (paramdefv)realloc(module->procs[proccnt].param, 339 (paramcnt+1)*sizeof(paramdef)); 340 } 341 342 memcpy((void *)(&module->procs[proccnt].param[paramcnt]), 343 (void *)&pnew, sizeof(paramdef)); 344 (module->procs[proccnt].paramcnt)++; 345 logx("AddParam() done\n"); 346 } 347 348 /*========================================================================*/ 349 void PrintProclist( 350 moddefv module 351 ) 352 { 353 logx("PrintProclist()\n"); 354 int j; 355 for(j=0; j<module->proccnt; j++) { 356 PrintProc(module->procs[j]); 357 } 309 358 } 310 359 311 360 /*========================================================================*/ 312 361 void generate_mod( 313 procdefv pi, 314 moddefv module, 315 cfilesv c_filelist 362 moddefv module 316 363 ) 317 364 { 318 365 procdefv v = NULL; 366 cfilesv c_filelist = NULL; 367 int proccnt; 319 368 FILE *fp_c, *fp_h; 320 369 char *filename; … … 350 399 if(module->info != NULL) enter_id(fp_c, "info", module->info); 351 400 if(module->helpfile != NULL) enter_id(fp_c, "helpfile", module->helpfile); 352 for(v=pi; v!=NULL; v = v->next) { 353 // while(v!=NULL) { 354 printf("->%s, %s\n", v->procname, v->funcname); 401 402 for(proccnt=0; proccnt<module->proccnt; proccnt++) { 403 printf("->%s, %s\n", module->procs[proccnt].procname, 404 module->procs[proccnt].funcname); 355 405 fprintf(fp_c, " iiAddCproc(\"%s\",\"%s\",%s, mod_%s);\n", 356 module->name, v->procname,357 v->is_static ? "TRUE" : "FALSE", v->funcname);358 // v =v ->next;406 module->name, module->procs[proccnt].procname, 407 module->procs[proccnt].is_static ? "TRUE" : "FALSE", 408 module->procs[proccnt].funcname); 359 409 } 360 410 fprintf(fp_c, " return 0;\n}\n\n"); 361 v = pi;362 411 363 412 /* building entry-functions */ 364 for( v=pi; v!=NULL; v = v->next) {365 generate_function( v, fp_c);366 generate_header( v, fp_h);413 for(proccnt=0; proccnt<module->proccnt; proccnt++) { 414 generate_function(&module->procs[proccnt], fp_c); 415 generate_header(&module->procs[proccnt], fp_h); 367 416 } 368 417 printf(" done.\n");fflush(stdout); … … 377 426 378 427 fprintf(fp, "BOOLEAN mod_%s(leftv res, leftv h);\n", pi->funcname); 379 #if 1 380 fprintf(fp, "BOOLEAN %s(leftv res", pi->funcname); 381 for (i=0;i<pi->paramcnt; i++) 382 fprintf(fp, ", %s res%d", type_conv[pi->param[i].typ], i); 428 switch( pi->return_val.typ) { 429 case SELF_CMD: 430 fprintf(fp, "BOOLEAN %s(res, ", pi->funcname); 431 break; 432 433 default: 434 fprintf(fp, "%s %s(", type_conv[pi->return_val.typ], 435 pi->funcname); 436 } 437 for (i=0;i<pi->paramcnt; i++) { 438 fprintf(fp, "%s res%d", type_conv[pi->param[i].typ], i); 439 if(i<pi->paramcnt-1) fprintf(fp, ", "); 440 } 383 441 fprintf(fp, ");\n\n"); 384 #else385 fprintf(fp, "BOOLEAN %s(leftv res, leftv h);\n\n", pi->funcname);386 #endif387 442 } 388 443 … … 392 447 printf("%s has %d paramters\n", pi->funcname, pi->paramcnt); 393 448 394 paramdefv pp = pi->param;395 449 fprintf(fp, "BOOLEAN mod_%s(leftv res, leftv h)\n{\n", pi->funcname); 396 #if 1397 450 if(pi->paramcnt>0) { 398 451 if(pi->param[0].typ==SELF_CMD) { … … 414 467 fprintf(fp, " if((index=iiTestConvert(tok, %s))==0)\n", 415 468 pi->param[i].typname); 469 logx("==>'%s'\n", pi->param[i].typname); 416 470 fprintf(fp, " goto mod_%s_error;\n", pi->funcname); 417 471 fprintf(fp, " printf(\"test %d.2\\n\");\n", i); … … 427 481 428 482 fprintf(fp, "\n"); 429 fprintf(fp, " return(%s(res", pi->funcname); 430 for (i=0;i<pi->paramcnt; i++) 431 fprintf(fp, ", (%s) res%d->Data()", type_conv[pi->param[i].typ], i); 432 fprintf(fp, "));\n\n"); 483 switch( pi->return_val.typ) { 484 case SELF_CMD: 485 fprintf(fp, " return(%s(res", pi->funcname); 486 for (i=0;i<pi->paramcnt; i++) 487 fprintf(fp, ", (%s) res%d->Data()", 488 type_conv[pi->param[i].typ], i); 489 fprintf(fp, "));\n\n"); 490 break; 491 492 default: 493 fprintf(fp, " res->rtyp = %s;\n", pi->return_val.typname); 494 fprintf(fp, " res->data = (void *)%s(", pi->funcname); 495 for (i=0;i<pi->paramcnt; i++) { 496 fprintf(fp, "(%s) res%d->Data()", 497 type_conv[pi->param[i].typ], i); 498 if(i<pi->paramcnt-1) fprintf(fp, ", "); 499 } 500 fprintf(fp, ");\n return FALSE;\n\n"); 501 } 502 433 503 fprintf(fp, " mod_%s_error:\n", pi->funcname); 434 504 fprintf(fp, " Werror(\"%s(`%%s`) is not supported\", Tok2Cmdname(tok));\n", … … 446 516 } 447 517 448 #else449 if(pp!= NULL && pp->typ!=SELF_CMD) {450 fprintf(fp, " leftv v = h;\n");451 fprintf(fp, " int tok = NONE, index = 0;\n");452 for (i=0;i<pi->paramcnt; i++)453 fprintf(fp, " leftv res%d = (leftv)Alloc0(sizeof(sleftv));\n", i);454 455 fprintf(fp, "\n");456 457 while(pp!=NULL) {458 fprintf(fp, " if(v==NULL) goto mod_%s_error;\n", pi->funcname);459 fprintf(fp, " tok = v->Typ();\n");460 fprintf(fp, " printf(\"test %d.1\\n\");\n", cnt);461 fprintf(fp, " if((index=iiTestConvert(tok, %s))==0)\n", pp->typname);462 fprintf(fp, " goto mod_%s_error;\n", pi->funcname);463 fprintf(fp, " printf(\"test %d.2\\n\");\n", cnt);464 fprintf(fp, " if(iiConvert(tok, %s, index, v, res%d))\n",465 pp->typname, cnt);466 fprintf(fp, " goto mod_%s_error;\n", pi->funcname);467 fprintf(fp, " printf(\"test %d.3\\n\");\n", cnt);468 fprintf(fp, " v = v->next;\n");469 pp = pp->next;470 cnt++;471 }472 fprintf(fp, " if(v!=NULL) { tok = v->Typ(); goto mod_%s_error; }\n", pi->funcname);473 fprintf(fp, " printf(\"test before return\\n\");\n");474 475 fprintf(fp, "\n");476 fprintf(fp, " return(%s(res", pi->funcname);477 for (i=0;i<pi->paramcnt; i++)478 fprintf(fp, ", res%d", i);479 fprintf(fp, "));\n\n");480 fprintf(fp, " mod_%s_error:\n", pi->funcname);481 fprintf(fp, " Werror(\"%s(`%%s`) is not supported\", Tok2Cmdname(tok));\n",482 pi->procname);483 fprintf(fp, " Werror(\"expected %s(", pi->procname);484 for(pp = pi->param; pp != NULL; pp = pp->next) {485 fprintf(fp, "'%s'", pp->name);486 if(pp->next != NULL) fprintf(fp, ",");487 }488 fprintf(fp, ")\");\n");489 fprintf(fp, " return TRUE;\n}\n\n");490 }491 else {492 fprintf(fp, " return(%s(res,h));\n", pi->funcname);493 fprintf(fp, "}\n\n");494 }495 #endif496 518 497 519 } … … 580 602 581 603 /*========================================================================*/ 582 void mod_create_makefile(moddefv module , cfilesv c_filelist)604 void mod_create_makefile(moddefv module) 583 605 { 584 606 FILE *fp; 585 607 fp = fopen("Makefile", "w"); 586 cfilesv cf = c_filelist; 608 cfilesv cf = module->files; 609 int i; 587 610 588 611 printf("Creating Makefile ...");fflush(stdout); … … 594 617 fprintf(fp, "\n"); 595 618 fprintf(fp, "SRCS\t= "); 596 for(cf = c_filelist; cf != NULL; cf = cf->next) 597 fprintf(fp, "%s ", cf->filename); 619 620 for(i=0; i<module->filecnt; i++) 621 fprintf(fp, "%s ", cf[i].filename); 598 622 599 623 fprintf(fp, "\nOBJS\t= "); 600 for( cf = c_filelist; cf != NULL; cf = cf->next)601 fprintf(fp, "%s ", object_name(cf ->filename));624 for(i=0; i<module->filecnt; i++) 625 fprintf(fp, "%s ", object_name(cf[i].filename)); 602 626 603 627 fprintf(fp, "\n\n");
Note: See TracChangeset
for help on using the changeset viewer.