From: Jorge G. <cl...@us...> - 2007-12-24 01:09:05
|
Update of /cvsroot/easycalc/easycalc/mlib In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv8587/mlib Modified Files: display.c funcs.c integ.c stack.c Log Message: debugged and simplified _item functions. LitemType removed Index: integ.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/integ.c,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** integ.c 28 Sep 2006 13:24:20 -0000 1.23 --- integ.c 24 Dec 2007 01:08:59 -0000 1.24 *************** *** 126,130 **** for (i = 0;i < argnum;i++) { item = stack_pop(stack); ! if (item.type==variable || item.type==litem) { err=rpn_eval_variable(&item,item); if (err) { --- 126,130 ---- for (i = 0;i < argnum;i++) { item = stack_pop(stack); ! if (item.type==variable) { err=rpn_eval_variable(&item,item); if (err) { Index: display.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/display.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** display.c 19 Dec 2007 15:47:26 -0000 1.13 --- display.c 24 Dec 2007 01:08:59 -0000 1.14 *************** *** 243,251 **** char *result; CError err; - Boolean deleterpn = false; ! if (rpn.type==variable || rpn.type == litem) { ! if (rpn.type == litem) ! deleterpn = true; err=rpn_eval_variable(&rpn,rpn); if (err) { --- 243,248 ---- char *result; CError err; ! if (rpn.type==variable ) { err=rpn_eval_variable(&rpn,rpn); if (err) { *************** *** 306,311 **** break; } ! if (deleterpn) ! rpn_delete(rpn); return result; } --- 303,307 ---- break; } ! return result; } Index: stack.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/stack.c,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** stack.c 22 Aug 2007 19:38:54 -0000 1.40 --- stack.c 24 Dec 2007 01:08:59 -0000 1.41 *************** *** 240,244 **** tmpitem = stack_pop(stack); ! if (tmpitem.type == variable || tmpitem.type == litem) { err = rpn_eval_variable(&tmpitem,tmpitem); if (err) --- 240,244 ---- tmpitem = stack_pop(stack); ! if (tmpitem.type == variable) { err = rpn_eval_variable(&tmpitem,tmpitem); if (err) *************** *** 546,550 **** tmp = stack->stack[stack->size - itnum -1]; ! if (tmp.type!=variable && tmp.type!=litem) { *type = tmp.type; return c_noerror; --- 546,550 ---- tmp = stack->stack[stack->size - itnum -1]; ! if (tmp.type!=variable) { *type = tmp.type; return c_noerror; *************** *** 595,599 **** for (i=0;i < funcval->paramcount;i++) { item = stack_pop(varstack); ! if (item.type == variable || item.type == litem) { err = rpn_eval_variable(&item,item); if (err) { --- 595,599 ---- for (i=0;i < funcval->paramcount;i++) { item = stack_pop(varstack); ! if (item.type == variable) { err = rpn_eval_variable(&item,item); if (err) { *************** *** 694,698 **** for (i=0;i < funcval->paramcount;i++) { item = stack_pop(varstack); ! if (item.type == variable || item.type == litem) { err = rpn_eval_variable(&item,item); if (err) { --- 694,698 ---- for (i=0;i < funcval->paramcount;i++) { item = stack_pop(varstack); ! if (item.type == variable) { err = rpn_eval_variable(&item,item); if (err) { *************** *** 830,834 **** item.type==string || item.type == complex || item.type == list || item.type == matrix || ! item.type == litem || item.type == cmatrix) { stack_push(varstack,item); } else if (item.type==function) { --- 830,834 ---- item.type==string || item.type == complex || item.type == list || item.type == matrix || ! item.type == cmatrix) { stack_push(varstack,item); } else if (item.type==function) { Index: funcs.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/funcs.c,v retrieving revision 1.53 retrieving revision 1.54 diff -C2 -d -r1.53 -r1.54 *** funcs.c 7 Sep 2007 18:15:18 -0000 1.53 --- funcs.c 24 Dec 2007 01:08:59 -0000 1.54 *************** *** 205,209 **** { Int16 i; - Trpn tmp; CError err; --- 205,208 ---- *************** *** 214,265 **** return ConstTable[i].func(dest,ConstTable[i].param); ! tmp = db_read_variable(source.u.varname,&err); ! if (err) ! return err; ! ! *dest=tmp; ! return c_noerror; ! } else if (source.type == litem) { ! CodeStack *tstack; ! Functype *func=MemPtrNew(sizeof(*func)); ! UInt32 row=source.u.litemval.row; ! UInt32 col=source.u.litemval.col; ! ! tmp = db_read_variable(source.u.litemval.name,&err); if (err) return err; - - func->paramcount=3; - tstack = stack_new(3); - - if(tmp.type==list) - err = stack_add_val(tstack,&tmp.u.listval,list); - else if(tmp.type==matrix) - err = stack_add_val(tstack,&tmp.u.matrixval,matrix); - else if(tmp.type==cmatrix) - err = stack_add_val(tstack,&tmp.u.cmatrixval,cmatrix); - else - err = c_badarg; - - if(!err) - err = stack_add_val(tstack,&row,integer); - err = stack_add_val(tstack,&col,integer); - #ifdef SPECFUN_ENABLED - if(!err){ - if(tmp.type==list) - err = list_item(func,tstack); - else if(tmp.type==matrix) - err = matrix_item(func,tstack); - else - err = cmatrix_item(func,tstack); - } - #endif - if(!err) - *dest = stack_pop(tstack); ! MemPtrFree(func); ! stack_delete(tstack); ! rpn_delete(tmp); ! return err; } return c_internal; --- 213,221 ---- return ConstTable[i].func(dest,ConstTable[i].param); ! *dest = db_read_variable(source.u.varname,&err); if (err) return err; ! return c_noerror; } return c_internal; *************** *** 272,276 **** Boolean freeitem = false; ! if (ans.type==variable || ans.type==litem) { err=rpn_eval_variable(&ans,ans); if (err) --- 228,232 ---- Boolean freeitem = false; ! if (ans.type==variable) { err=rpn_eval_variable(&ans,ans); if (err) *************** *** 397,401 **** /* Evaluate variable, if it is var... */ ! if (item1.type==variable || item1.type==litem) { err=rpn_eval_variable(&item1,item1); if (err) { --- 353,357 ---- /* Evaluate variable, if it is var... */ ! if (item1.type==variable) { err=rpn_eval_variable(&item1,item1); if (err) { *************** *** 457,572 **** StrCopy(item1.u.funcname,item2.u.funcname); item1.allocsize=0; - } else if (item2.type == litem) { - /* In place modification of list/matrix (a[1]=5) */ - Trpn tmp; - Int16 row = item2.u.litemval.row; - Int16 col = item2.u.litemval.col; - CodeStack *tstack; - - tstack = stack_new(1); - stack_push(tstack,item1); - - tmp = db_read_variable(item2.u.litemval.name,&err); - if (!err) { - if (tmp.type == list) { - List *lst = tmp.u.listval; - if ( row==0 || col == 0 || row > lst->size || col > lst->size) - err = c_baddim; - else if(row==col){ - err = stack_get_val(tstack,&lst->item[col-1],complex); - } - #ifdef SPECFUN_ENABLED - else{ - List *lst2; - err = stack_get_val(tstack,&lst2,list); - if(!err){ - Int16 i,dif=col-row; - if(lst2->size != abs(dif)+1) - err = c_baddim; - else for(i=0;i<lst2->size;i++){ - lst->item[row-1]=lst2->item[i]; - row+=sgn(dif); - } - list_delete(lst2); - } - } - #endif - if (!err) - db_write_variable(item2.u.litemval.name,tmp); - } else if (tmp.type == matrix) { - Matrix *m = tmp.u.matrixval; - if ( row > m->rows || col > m->cols || (col == 0 && row==0)) - err = c_baddim; - else if(col && row) - err = stack_get_val(tstack,&MATRIX(m,row-1,col-1),real); - #ifdef SPECFUN_ENABLED - else{ - List *lst; - err = stack_get_val(tstack,&lst,list); - if(!err){ - Int16 i; - if(row==0){ - if(lst->size != m->rows) - err = c_baddim; - for(i=0;(!err && i<m->rows);i++){ - if(!IS_ZERO(lst->item[i].imag)) - err = c_badarg; - MATRIX(m,i,col-1)=lst->item[i].real; - } - }else{ - if(lst->size != m->cols) - err = c_baddim; - for(i=0;(!err && i<m->cols);i++){ - if(!IS_ZERO(lst->item[i].imag)) - err = c_badarg; - MATRIX(m,row-1,i)=lst->item[i].real; - } - } - list_delete(lst); - } - } - #endif - if (!err) - db_write_variable(item2.u.litemval.name,tmp); - } else if (tmp.type == cmatrix) { - CMatrix *m = tmp.u.cmatrixval; - if ( row > m->rows || col > m->cols || (col == 0 && row==0)) - err = c_baddim; - else if(col && row) - err = stack_get_val(tstack,&MATRIX(m,row-1,col-1),complex); - #ifdef SPECFUN_ENABLED - else{ - List *lst; - err = stack_get_val(tstack,&lst,list); - if(!err){ - Int16 i; - if(row==0){ - if(lst->size != m->rows) - err = c_baddim; - else for(i=0;i<m->rows;i++) - MATRIX(m,i,col-1)=lst->item[i]; - }else{ - if(lst->size != m->cols) - err = c_baddim; - else for(i=0;i<m->cols;i++) - MATRIX(m,row-1,i)=lst->item[i]; - } - list_delete(lst); - } - } - #endif - if (!err) - db_write_variable(item2.u.litemval.name,tmp); - } else - err = c_badarg; - if(!err) - /* Return all the list/matrix, not only the element(s) */ - stack_push(stack,tmp); - else - rpn_delete(tmp); - } - stack_delete(tstack); - rpn_delete(item2); - return err; } else if (item2.type == variable) { /* Definition of a variable */ --- 413,416 ---- *************** *** 615,619 **** for (i=0;i<paramcount;i++) { argarr[i] = stack_pop(varstack); ! if (argarr[i].type==variable || argarr[i].type==litem) { err=rpn_eval_variable(&argarr[i],argarr[i]); if (err) { --- 459,463 ---- for (i=0;i<paramcount;i++) { argarr[i] = stack_pop(varstack); ! if (argarr[i].type==variable) { err=rpn_eval_variable(&argarr[i],argarr[i]); if (err) { *************** *** 1107,1111 **** if (type1 == variable) { UInt32 arg1=0,arg2=0; ! Trpn item,ritem; err = stack_get_val(stack,&arg2,integer); --- 951,955 ---- if (type1 == variable) { UInt32 arg1=0,arg2=0; ! Trpn item; err = stack_get_val(stack,&arg2,integer); *************** *** 1116,1131 **** if (err) return err; ! }else ! arg1=arg2; item = stack_pop(stack); ! ritem.allocsize = 0; ! ritem.type = litem; ! StrCopy(ritem.u.litemval.name,item.u.varname); ! ritem.u.litemval.row = arg1; ! ritem.u.litemval.col = arg2; ! stack_push(stack,ritem); ! rpn_delete(item); ! } else switch (type2){ case list: return list_item(func,stack); --- 960,980 ---- if (err) return err; ! } item = stack_pop(stack); ! err = rpn_eval_variable(&item,item); ! if (err) ! return err; ! stack_push(stack,item); ! if (func->paramcount == 3){ ! err=stack_add_val(stack,&arg1,integer); ! if (err) ! return err; ! } ! err=stack_add_val(stack,&arg2,integer); ! if (err) ! return err; ! } ! switch (type2){ case list: return list_item(func,stack); |