From: Jorge G. <cl...@us...> - 2006-09-25 20:49:12
|
Update of /cvsroot/easycalc/easycalc/mlib In directory sc8-pr-cvs5.sourceforge.net:/tmp/cvs-serv4188/mlib Modified Files: konvert.c slist.c Log Message: concat() now is multiparameter Index: konvert.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/konvert.c,v retrieving revision 1.64 retrieving revision 1.65 diff -C2 -d -r1.64 -r1.65 *** konvert.c 12 Sep 2006 19:40:56 -0000 1.64 --- konvert.c 25 Sep 2006 20:49:05 -0000 1.65 *************** *** 196,200 **** {"stddev",LIST_STDDEV,list_stat,0}, {"linreg",LIST_LINREG,list_regr,2}, ! {"concat",LIST_CONCAT,list_func3,2}, {"conv",LIST_CONV,list_func3,2}, {"kron",LIST_KRON,list_func3,2}, --- 196,200 ---- {"stddev",LIST_STDDEV,list_stat,0}, {"linreg",LIST_LINREG,list_regr,2}, ! {"concat",0,list_concat,0}, {"conv",LIST_CONV,list_func3,2}, {"kron",LIST_KRON,list_func3,2}, Index: slist.c =================================================================== RCS file: /cvsroot/easycalc/easycalc/mlib/slist.c,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** slist.c 24 Sep 2006 14:18:26 -0000 1.33 --- slist.c 25 Sep 2006 20:49:05 -0000 1.34 *************** *** 1036,1058 **** break; - case LIST_CONCAT: - { - Int16 m,n,i; - - m=lst1->size; - n=lst2->size; - result = list_new(m+n); - if (!result){ - list_delete(lst1); - list_delete(lst2); - return c_memory;} - - for(i=0;i<m;i++) - result->item[i] = lst1->item[i]; - for(i=0;i<n;i++) - result->item[i+m] = lst2->item[i]; - } - break; - case LIST_KRON: { --- 1036,1039 ---- *************** *** 1112,1115 **** --- 1093,1146 ---- /************************************************************************** * + * FUNCTION: list_concat + * + * DESCRIPTION: concatenation of two or more lists + * + * PARAMETERS: lists on stack + * + * RETURN: list + * + ***************************************************************************/ + + CError + list_concat(Functype *func, CodeStack *stack) + { + List *lst1,*lst2,*result; + Int16 m,n,i,k; + CError err; + + if (func->paramcount<2) + return c_syntax; + + for(k=1;k<func->paramcount;k++){ + + err = stack_get_val2(stack,&lst1,&lst2,list); + if (err) + return err; + + m=lst1->size; + n=lst2->size; + result = list_new(m+n); + if (!result){ + list_delete(lst1); + list_delete(lst2); + return c_memory; + } + for(i=0;i<m;i++) + result->item[i] = lst1->item[i]; + for(i=0;i<n;i++) + result->item[i+m] = lst2->item[i]; + + list_delete(lst1); + list_delete(lst2); + err = stack_add_val(stack,&result,list); + list_delete(result); + } + + return err; + } + + /************************************************************************** + * * FUNCTION: list_fft * |