int SOMAascii (SOMAsetup *ssetup, const char *expr, int nparams, Parameter *params, const char *file, SOMAreturn* sr) { Array2D array; int i; char *buf; long len; struct csv_parser csvp; clock_t begin, end; MuExpr me; array_init(&array); //Parse CSV file if (csv_init (&csvp, CSV_APPEND_NULL)!=0) return ERR; if ((buf=read_file_into_buffer (file, &len))==NULL) return ERR_FILE; csv_parse (&csvp, buf, len, csvcallback1, csvcallback2, (void*) &array); csv_fini (&csvp, csvcallback1, csvcallback2, (void*) &array); csv_free (&csvp); //array_print (&array); //debug muexpr_init (&me, expr); for (i=0; i<nparams; i++) if (defpar (&me, params+i, i)!=OK) { return ERR_PARAMS; array_delete (&array); muexpr_free (&me); } findvars (&me, VAR_NAME_PREFIX); //CVS file and expression don't match if (me.nvars!=array.ncolumns-1) { array_delete (&array); muexpr_free (&me); return ERR_COLUMNS; } muexpr_eval (&me); if (mupError (me.hparser)) { array_delete (&array); muexpr_free (&me); return ERR_EXPR; } //Initialize output struct SOMAreturn_init (sr, ssetup->Migrations, nparams); begin=clock(); //SOMA call SOMA (ssetup, nparams, params, sr, &array, &me); end=clock(); sr->time=(double) (end-begin)/CLOCKS_PER_SEC; array_delete (&array); muexpr_free (&me); return OK; }
/* Executa o programa */ int Mepa::exec(){ int op; if(detalha) { p->imprime(); /* Imprime o programa */ } op = p->next(); while( op != PARA ) { if(detalha) { debug(); } switch(op) { /* Funcoes MEPA */ case 0: { AMEM(); break; } case 1: { ARMI(); break; } case 2: { ARMP(); break; } case 3: { ARMZ(); break; } case 4: { CHPP(); break; } case 5: { CHPR(); break; } case 6: { CMAF(); break; } case 7: { CMAG(); break; } case 8: { CMDF(); break; } case 9: { CMDG(); break; } case 10: { CMEF(); break; } case 11: { CMEG(); break; } case 12: { CMIF(); break; } case 13: { CMIG(); break; } case 14: { CMMA(); break; } case 15: { CMMF(); break; } case 16: { CMME(); break; } case 17: { CMNF(); break; } case 18: { CONJ(); break; } case 19: { CRCT(); break; } case 20: { CRCF(); break; } case 21: { CREG(); break; } case 22: { CREN(); break; } case 23: { CRVI(); break; } case 24: { CRVL(); break; } case 25: { CRVP(); break; } case 26: { DISJ(); break; } case 27: { DIVF(); break; } case 28: { DIVI(); break; } case 29: { DMEM(); break; } case 30: { DSVF(); break; } case 31: { DSVS(); break; } case 32: { ENTR(); break; } case 33: { IMPC(); break; } case 34: { IMPF(); break; } case 35: { IMPR(); break; } case 36: { INPP(); break; } case 37: { INVF(); break; } case 38: { INVR(); break; } case 39: { LEIT(); break; } case 40: { LEIF(); break; } case 41: { MULF(); break; } case 42: { MULT(); break; } case 43: { NEGA(); break; } case 44: { RTPR(); break; } case 45: { SOMA(); break; } case 46: { SOMF(); break; } case 47: { SUBT(); break; } case 48: { SUBF(); break; } default:{ cerr << "O programa executou uma operacao invalida." << endl; cerr << "i = " << p->getI() << endl; abort(); } } op = p->next(); } return 0; }