Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 28007 | Differences between
and this patch

Collapse All | Expand All

(-)extra/expr~/vexp.c (-171 / +171 lines)
Lines 78-100 Link Here
78
78
79
char *atoif(char *s, long int *value, long int *type);
79
char *atoif(char *s, long int *value, long int *type);
80
80
81
static struct ex_ex *ex_lex(struct expr *exp, long int *n);
81
static struct ex_ex *ex_lex(struct expr *exp_gentoo, long int *n);
82
struct ex_ex *ex_match(struct ex_ex *eptr, long int op);
82
struct ex_ex *ex_match(struct ex_ex *eptr, long int op);
83
struct ex_ex *ex_parse(struct expr *exp, struct ex_ex *iptr,
83
struct ex_ex *ex_parse(struct expr *exp_gentoo, struct ex_ex *iptr,
84
					struct ex_ex *optr, long int *argc);
84
					struct ex_ex *optr, long int *argc);
85
struct ex_ex *ex_eval(struct expr *exp, struct ex_ex *eptr,
85
struct ex_ex *ex_eval(struct expr *exp_gentoo, struct ex_ex *eptr,
86
						struct ex_ex *optr, int i);
86
						struct ex_ex *optr, int i);
87
87
88
int expr_donew(struct expr *expr, int ac, t_atom *av);
88
int expr_donew(struct expr *expr, int ac, t_atom *av);
89
struct ex_ex *eval_func(struct expr *exp,struct ex_ex *eptr,
89
struct ex_ex *eval_func(struct expr *exp_gentoo,struct ex_ex *eptr,
90
						struct ex_ex *optr, int i);
90
						struct ex_ex *optr, int i);
91
struct ex_ex *eval_tab(struct expr *exp, struct ex_ex *eptr,
91
struct ex_ex *eval_tab(struct expr *exp_gentoo, struct ex_ex *eptr,
92
						struct ex_ex *optr, int i);
92
						struct ex_ex *optr, int i);
93
struct ex_ex *eval_var(struct expr *exp, struct ex_ex *eptr,
93
struct ex_ex *eval_var(struct expr *exp_gentoo, struct ex_ex *eptr,
94
						struct ex_ex *optr, int i);
94
						struct ex_ex *optr, int i);
95
struct ex_ex *eval_store(struct expr *exp, struct ex_ex *eptr,
95
struct ex_ex *eval_store(struct expr *exp_gentoo, struct ex_ex *eptr,
96
						struct ex_ex *optr, int i);
96
						struct ex_ex *optr, int i);
97
struct ex_ex *eval_sigidx(struct expr *exp, struct ex_ex *eptr,
97
struct ex_ex *eval_sigidx(struct expr *exp_gentoo, struct ex_ex *eptr,
98
						struct ex_ex *optr, int i);
98
						struct ex_ex *optr, int i);
99
static int cal_sigidx(struct ex_ex *optr,	/* The output value */
99
static int cal_sigidx(struct ex_ex *optr,	/* The output value */
100
	   int i, float rem_i,	    /* integer and fractinal part of index */
100
	   int i, float rem_i,	    /* integer and fractinal part of index */
Lines 102-108 Link Here
102
	   int vsize,				            /* vector size */
102
	   int vsize,				            /* vector size */
103
	   float *curvec, float *prevec);   /* current and previous table */
103
	   float *curvec, float *prevec);   /* current and previous table */
104
t_ex_func *find_func(char *s);
104
t_ex_func *find_func(char *s);
105
void ex_dzdetect(struct expr *exp);
105
void ex_dzdetect(struct expr *exp_gentoo);
106
106
107
#define	MAX_ARGS	10
107
#define	MAX_ARGS	10
108
extern t_ex_func ex_funcs[];
108
extern t_ex_func ex_funcs[];
Lines 110-116 Link Here
110
struct ex_ex nullex;
110
struct ex_ex nullex;
111
111
112
void set_tokens (char *s);
112
void set_tokens (char *s);
113
int getoken (struct expr *exp, struct ex_ex *eptr);
113
int getoken (struct expr *exp_gentoo, struct ex_ex *eptr);
114
void ex_print (struct ex_ex *eptr);
114
void ex_print (struct ex_ex *eptr);
115
#ifdef MSP
115
#ifdef MSP
116
void atom_string(t_atom *a, char *buf, unsigned int bufsize);
116
void atom_string(t_atom *a, char *buf, unsigned int bufsize);
Lines 193-199 Link Here
193
}
193
}
194
#endif /* MSP */
194
#endif /* MSP */
195
/*
195
/*
196
 * expr_donew -- create a new "expr" object.  
196
 * expr_donew -- create a new "expr" object.
197
 *	     returns 1 on failure, 0 on success.
197
 *	     returns 1 on failure, 0 on success.
198
 */ 
198
 */ 
199
int
199
int
Lines 294-300 Link Here
294
 *	     It will also put the number of the nodes in *n.
294
 *	     It will also put the number of the nodes in *n.
295
 */
295
 */
296
struct ex_ex *
296
struct ex_ex *
297
ex_lex(struct expr *exp, long int *n)
297
ex_lex(struct expr *exp_gentoo, long int *n)
298
{
298
{
299
	struct ex_ex *list_arr;
299
	struct ex_ex *list_arr;
300
	struct ex_ex *exptr;
300
	struct ex_ex *exptr;
Lines 323-329 Link Here
323
			exptr = &(list_arr)[non];
323
			exptr = &(list_arr)[non];
324
		}
324
		}
325
325
326
		if (getoken(exp, exptr)) {
326
		if (getoken(exp_gentoo, exptr)) {
327
			fts_free(list_arr);
327
			fts_free(list_arr);
328
			return ((struct ex_ex *)0);
328
			return ((struct ex_ex *)0);
329
		}
329
		}
Lines 684-690 Link Here
684
#define DZC(ARG1,OPR,ARG2)	(ARG1 OPR ARG2)
684
#define DZC(ARG1,OPR,ARG2)	(ARG1 OPR ARG2)
685
685
686
#define	EVAL(OPR); 							\
686
#define	EVAL(OPR); 							\
687
eptr = ex_eval(exp, ex_eval(exp, eptr, &left, idx), &right, idx);	\
687
eptr = ex_eval(exp_gentoo, ex_eval(exp_gentoo, eptr, &left, idx), &right, idx);	\
688
switch (left.ex_type) {							\
688
switch (left.ex_type) {							\
689
case ET_INT:								\
689
case ET_INT:								\
690
	switch(right.ex_type) {						\
690
	switch(right.ex_type) {						\
Lines 692-698 Link Here
692
		if (optr->ex_type == ET_VEC) {				\
692
		if (optr->ex_type == ET_VEC) {				\
693
			op = optr->ex_vec;				\
693
			op = optr->ex_vec;				\
694
			scalar = (float)DZC(left.ex_int, OPR, right.ex_int); \
694
			scalar = (float)DZC(left.ex_int, OPR, right.ex_int); \
695
			for (j = 0; j < exp->exp_vsize; j++)		\
695
			for (j = 0; j < exp_gentoo->exp_vsize; j++)		\
696
				*op++ = scalar;				\
696
				*op++ = scalar;				\
697
		} else {						\
697
		} else {						\
698
			optr->ex_type = ET_INT;				\
698
			optr->ex_type = ET_INT;				\
Lines 703-709 Link Here
703
		if (optr->ex_type == ET_VEC) {				\
703
		if (optr->ex_type == ET_VEC) {				\
704
			op = optr->ex_vec;				\
704
			op = optr->ex_vec;				\
705
			scalar = DZC(((float)left.ex_int), OPR, right.ex_flt);\
705
			scalar = DZC(((float)left.ex_int), OPR, right.ex_flt);\
706
			for (j = 0; j < exp->exp_vsize; j++)		\
706
			for (j = 0; j < exp_gentoo->exp_vsize; j++)		\
707
				*op++ = scalar;				\
707
				*op++ = scalar;				\
708
		} else {						\
708
		} else {						\
709
			optr->ex_type = ET_FLT;				\
709
			optr->ex_type = ET_FLT;				\
Lines 720-738 Link Here
720
			}						\
720
			}						\
721
			optr->ex_type = ET_VEC;				\
721
			optr->ex_type = ET_VEC;				\
722
			optr->ex_vec = (t_float *)			\
722
			optr->ex_vec = (t_float *)			\
723
			  fts_malloc(sizeof (t_float)*exp->exp_vsize);	\
723
			  fts_malloc(sizeof (t_float)*exp_gentoo->exp_vsize);	\
724
		}							\
724
		}							\
725
		scalar = left.ex_int;					\
725
		scalar = left.ex_int;					\
726
		rp = right.ex_vec;					\
726
		rp = right.ex_vec;					\
727
		op = optr->ex_vec;					\
727
		op = optr->ex_vec;					\
728
		for (i = 0; i < exp->exp_vsize; i++) {			\
728
		for (i = 0; i < exp_gentoo->exp_vsize; i++) {			\
729
			*op++ = DZC (scalar, OPR, *rp);			\
729
			*op++ = DZC (scalar, OPR, *rp);			\
730
			rp++;						\
730
			rp++;						\
731
		}							\
731
		}							\
732
		break;							\
732
		break;							\
733
	case ET_SYM:							\
733
	case ET_SYM:							\
734
	default:							\
734
	default:							\
735
		post_error((fts_object_t *) exp, 		   	\
735
		post_error((fts_object_t *) exp_gentoo, 		   	\
736
		      "expr: ex_eval(%d): bad right type %ld\n",	\
736
		      "expr: ex_eval(%d): bad right type %ld\n",	\
737
					      __LINE__, right.ex_type);	\
737
					      __LINE__, right.ex_type);	\
738
		nullret = 1;						\
738
		nullret = 1;						\
Lines 744-750 Link Here
744
		if (optr->ex_type == ET_VEC) {				\
744
		if (optr->ex_type == ET_VEC) {				\
745
			op = optr->ex_vec;				\
745
			op = optr->ex_vec;				\
746
			scalar = DZC((float) left.ex_flt, OPR, right.ex_int); \
746
			scalar = DZC((float) left.ex_flt, OPR, right.ex_int); \
747
			for (j = 0; j < exp->exp_vsize; j++)		\
747
			for (j = 0; j < exp_gentoo->exp_vsize; j++)		\
748
				*op++ = scalar;				\
748
				*op++ = scalar;				\
749
		} else {						\
749
		} else {						\
750
			optr->ex_type = ET_FLT;				\
750
			optr->ex_type = ET_FLT;				\
Lines 755-761 Link Here
755
		if (optr->ex_type == ET_VEC) {				\
755
		if (optr->ex_type == ET_VEC) {				\
756
			op = optr->ex_vec;				\
756
			op = optr->ex_vec;				\
757
			scalar = DZC(left.ex_flt, OPR, right.ex_flt);	\
757
			scalar = DZC(left.ex_flt, OPR, right.ex_flt);	\
758
			for (j = 0; j < exp->exp_vsize; j++)		\
758
			for (j = 0; j < exp_gentoo->exp_vsize; j++)		\
759
				*op++ = scalar;				\
759
				*op++ = scalar;				\
760
		} else {						\
760
		} else {						\
761
			optr->ex_type = ET_FLT;				\
761
			optr->ex_type = ET_FLT;				\
Lines 771-789 Link Here
771
			}						\
771
			}						\
772
			optr->ex_type = ET_VEC;				\
772
			optr->ex_type = ET_VEC;				\
773
			optr->ex_vec = (t_float *)			\
773
			optr->ex_vec = (t_float *)			\
774
			  fts_malloc(sizeof (t_float)*exp->exp_vsize);	\
774
			  fts_malloc(sizeof (t_float)*exp_gentoo->exp_vsize);	\
775
		}							\
775
		}							\
776
		scalar = left.ex_flt;					\
776
		scalar = left.ex_flt;					\
777
		rp = right.ex_vec;					\
777
		rp = right.ex_vec;					\
778
		op = optr->ex_vec;					\
778
		op = optr->ex_vec;					\
779
		for (i = 0; i < exp->exp_vsize; i++) {			\
779
		for (i = 0; i < exp_gentoo->exp_vsize; i++) {			\
780
			*op++ = DZC(scalar, OPR, *rp);			\
780
			*op++ = DZC(scalar, OPR, *rp);			\
781
			rp++;						\
781
			rp++;						\
782
		}							\
782
		}							\
783
		break;							\
783
		break;							\
784
	case ET_SYM:							\
784
	case ET_SYM:							\
785
	default:							\
785
	default:							\
786
		post_error((fts_object_t *) exp, 		   	\
786
		post_error((fts_object_t *) exp_gentoo, 		   	\
787
		      "expr: ex_eval(%d): bad right type %ld\n",	\
787
		      "expr: ex_eval(%d): bad right type %ld\n",	\
788
					      __LINE__, right.ex_type);	\
788
					      __LINE__, right.ex_type);	\
789
		nullret = 1;						\
789
		nullret = 1;						\
Lines 798-818 Link Here
798
		}							\
798
		}							\
799
		optr->ex_type = ET_VEC;					\
799
		optr->ex_type = ET_VEC;					\
800
		optr->ex_vec = (t_float *)				\
800
		optr->ex_vec = (t_float *)				\
801
		  fts_malloc(sizeof (t_float)*exp->exp_vsize);		\
801
		  fts_malloc(sizeof (t_float)*exp_gentoo->exp_vsize);		\
802
	}								\
802
	}								\
803
	op = optr->ex_vec;						\
803
	op = optr->ex_vec;						\
804
	lp = left.ex_vec;						\
804
	lp = left.ex_vec;						\
805
	switch(right.ex_type) {						\
805
	switch(right.ex_type) {						\
806
	case ET_INT:							\
806
	case ET_INT:							\
807
		scalar = right.ex_int;					\
807
		scalar = right.ex_int;					\
808
		for (i = 0; i < exp->exp_vsize; i++) {			\
808
		for (i = 0; i < exp_gentoo->exp_vsize; i++) {			\
809
			*op++ = DZC(*lp, OPR, scalar);			\
809
			*op++ = DZC(*lp, OPR, scalar);			\
810
			lp++;						\
810
			lp++;						\
811
		}							\
811
		}							\
812
		break;                                                  \
812
		break;                                                  \
813
	case ET_FLT:							\
813
	case ET_FLT:							\
814
		scalar = right.ex_flt;					\
814
		scalar = right.ex_flt;					\
815
		for (i = 0; i < exp->exp_vsize; i++) {			\
815
		for (i = 0; i < exp_gentoo->exp_vsize; i++) {			\
816
			*op++ = DZC(*lp, OPR, scalar);			\
816
			*op++ = DZC(*lp, OPR, scalar);			\
817
			lp++;						\
817
			lp++;						\
818
		}							\
818
		}							\
Lines 820-826 Link Here
820
	case ET_VEC:							\
820
	case ET_VEC:							\
821
	case ET_VI:							\
821
	case ET_VI:							\
822
		rp = right.ex_vec;					\
822
		rp = right.ex_vec;					\
823
		for (i = 0; i < exp->exp_vsize; i++) {			\
823
		for (i = 0; i < exp_gentoo->exp_vsize; i++) {			\
824
			/*						\
824
			/*						\
825
			 * on a RISC processor one could copy		\
825
			 * on a RISC processor one could copy		\
826
			 * 8 times in each round to get a considerable	\
826
			 * 8 times in each round to get a considerable	\
Lines 832-838 Link Here
832
		break;                                                  \
832
		break;                                                  \
833
	case ET_SYM:							\
833
	case ET_SYM:							\
834
	default:							\
834
	default:							\
835
		post_error((fts_object_t *) exp, 		   	\
835
		post_error((fts_object_t *) exp_gentoo, 		   	\
836
		      "expr: ex_eval(%d): bad right type %ld\n",	\
836
		      "expr: ex_eval(%d): bad right type %ld\n",	\
837
					      __LINE__, right.ex_type);	\
837
					      __LINE__, right.ex_type);	\
838
		nullret = 1;						\
838
		nullret = 1;						\
Lines 840-846 Link Here
840
	break;								\
840
	break;								\
841
case ET_SYM:								\
841
case ET_SYM:								\
842
default:								\
842
default:								\
843
		post_error((fts_object_t *) exp, 		   	\
843
		post_error((fts_object_t *) exp_gentoo, 		   	\
844
		      "expr: ex_eval(%d): bad left type %ld\n",		\
844
		      "expr: ex_eval(%d): bad left type %ld\n",		\
845
					      __LINE__, left.ex_type);	\
845
					      __LINE__, left.ex_type);	\
846
}									\
846
}									\
Lines 850-861 Link Here
850
 * evaluate a unary operator, TYPE is applied to float operands
850
 * evaluate a unary operator, TYPE is applied to float operands
851
 */
851
 */
852
#define EVAL_UNARY(OPR, TYPE) 						\
852
#define EVAL_UNARY(OPR, TYPE) 						\
853
	eptr = ex_eval(exp, eptr, &left, idx);				\
853
	eptr = ex_eval(exp_gentoo, eptr, &left, idx);				\
854
	switch(left.ex_type) {						\
854
	switch(left.ex_type) {						\
855
	case ET_INT:							\
855
	case ET_INT:							\
856
		if (optr->ex_type == ET_VEC) {				\
856
		if (optr->ex_type == ET_VEC) {				\
857
			ex_mkvector(optr->ex_vec,(float)(OPR left.ex_int),\
857
			ex_mkvector(optr->ex_vec,(float)(OPR left.ex_int),\
858
							exp->exp_vsize);\
858
							exp_gentoo->exp_vsize);\
859
			break;						\
859
			break;						\
860
		}							\
860
		}							\
861
		optr->ex_type = ET_INT;					\
861
		optr->ex_type = ET_INT;					\
Lines 864-870 Link Here
864
	case ET_FLT:							\
864
	case ET_FLT:							\
865
		if (optr->ex_type == ET_VEC) {				\
865
		if (optr->ex_type == ET_VEC) {				\
866
			ex_mkvector(optr->ex_vec, OPR (TYPE left.ex_flt),\
866
			ex_mkvector(optr->ex_vec, OPR (TYPE left.ex_flt),\
867
							exp->exp_vsize);\
867
							exp_gentoo->exp_vsize);\
868
			break;						\
868
			break;						\
869
		}							\
869
		}							\
870
		optr->ex_type = ET_FLT;					\
870
		optr->ex_type = ET_FLT;					\
Lines 872-891 Link Here
872
		break;							\
872
		break;							\
873
	case ET_VI:							\
873
	case ET_VI:							\
874
	case ET_VEC:							\
874
	case ET_VEC:							\
875
		j = exp->exp_vsize;					\
875
		j = exp_gentoo->exp_vsize;					\
876
		if (optr->ex_type != ET_VEC) {				\
876
		if (optr->ex_type != ET_VEC) {				\
877
			optr->ex_type = ET_VEC;				\
877
			optr->ex_type = ET_VEC;				\
878
			optr->ex_vec = (t_float *)			\
878
			optr->ex_vec = (t_float *)			\
879
			  fts_malloc(sizeof (t_float)*exp->exp_vsize);	\
879
			  fts_malloc(sizeof (t_float)*exp_gentoo->exp_vsize);	\
880
		}							\
880
		}							\
881
		op = optr->ex_vec;					\
881
		op = optr->ex_vec;					\
882
		lp = left.ex_vec;					\
882
		lp = left.ex_vec;					\
883
		j = exp->exp_vsize;					\
883
		j = exp_gentoo->exp_vsize;					\
884
		for (i = 0; i < j; i++)					\
884
		for (i = 0; i < j; i++)					\
885
			*op++ = OPR (TYPE *lp++);			\
885
			*op++ = OPR (TYPE *lp++);			\
886
		break;							\
886
		break;							\
887
	default:							\
887
	default:							\
888
		post_error((fts_object_t *) exp,			\
888
		post_error((fts_object_t *) exp_gentoo,			\
889
			"expr: ex_eval(%d): bad left type %ld\n",	\
889
			"expr: ex_eval(%d): bad left type %ld\n",	\
890
					      __LINE__, left.ex_type);	\
890
					      __LINE__, left.ex_type);	\
891
		nullret++;						\
891
		nullret++;						\
Lines 903-928 Link Here
903
 * ex_dzdetect -- divide by zero detected
903
 * ex_dzdetect -- divide by zero detected
904
 */
904
 */
905
void
905
void
906
ex_dzdetect(struct expr *exp)
906
ex_dzdetect(struct expr *exp_gentoo)
907
{
907
{
908
	char *etype;
908
	char *etype;
909
909
910
	if (!exp->exp_error & EE_DZ) {
910
	if (!exp_gentoo->exp_error & EE_DZ) {
911
		if (IS_EXPR(exp))
911
		if (IS_EXPR(exp_gentoo))
912
			etype = "expr";
912
			etype = "expr";
913
		else if (IS_EXPR_TILDE(exp))
913
		else if (IS_EXPR_TILDE(exp_gentoo))
914
			etype = "expr~";
914
			etype = "expr~";
915
		else if (IS_FEXPR_TILDE(exp))
915
		else if (IS_FEXPR_TILDE(exp_gentoo))
916
			etype = "fexpr~";
916
			etype = "fexpr~";
917
		else {
917
		else {
918
			post ("expr -- ex_dzdetect internal error");
918
			post ("expr -- ex_dzdetect internal error");
919
			etype = "";
919
			etype = "";
920
		}
920
		}
921
		post ("%s divide by zero detected", etype);
921
		post ("%s divide by zero detected", etype);
922
		exp->exp_error |= EE_DZ;
922
		exp_gentoo->exp_error |= EE_DZ;
923
	}
923
	}
924
}
924
}
925
		
925
926
926
927
/*
927
/*
928
 * ex_eval -- evaluate the array of prefix expression
928
 * ex_eval -- evaluate the array of prefix expression
Lines 938-944 Link Here
938
look into the variable nullret
938
look into the variable nullret
939
*/
939
*/
940
struct ex_ex *
940
struct ex_ex *
941
ex_eval(struct expr *exp, struct ex_ex *eptr, struct ex_ex *optr, int idx)
941
ex_eval(struct expr *exp_gentoo, struct ex_ex *eptr, struct ex_ex *optr, int idx)
942
/* the expr object data pointer */
942
/* the expr object data pointer */
943
/* the operation stack */
943
/* the operation stack */
944
/* the result pointer */
944
/* the result pointer */
Lines 961-967 Link Here
961
	case ET_INT:
961
	case ET_INT:
962
		if (optr->ex_type == ET_VEC)
962
		if (optr->ex_type == ET_VEC)
963
			ex_mkvector(optr->ex_vec, (float) eptr->ex_int,
963
			ex_mkvector(optr->ex_vec, (float) eptr->ex_int,
964
								exp->exp_vsize);
964
								exp_gentoo->exp_vsize);
965
		else
965
		else
966
			*optr = *eptr;
966
			*optr = *eptr;
967
		return (++eptr);
967
		return (++eptr);
Lines 969-982 Link Here
969
	case ET_FLT:
969
	case ET_FLT:
970
970
971
		if (optr->ex_type == ET_VEC)
971
		if (optr->ex_type == ET_VEC)
972
			ex_mkvector(optr->ex_vec, eptr->ex_flt, exp->exp_vsize);
972
			ex_mkvector(optr->ex_vec, eptr->ex_flt, exp_gentoo->exp_vsize);
973
		else
973
		else
974
			*optr = *eptr;
974
			*optr = *eptr;
975
		return (++eptr);
975
		return (++eptr);
976
976
977
	case ET_SYM:
977
	case ET_SYM:
978
		if (optr->ex_type == ET_VEC) {
978
		if (optr->ex_type == ET_VEC) {
979
			post_error((fts_object_t *) exp,
979
			post_error((fts_object_t *) exp_gentoo,
980
			      "expr: ex_eval: cannot turn string to vector\n");
980
			      "expr: ex_eval: cannot turn string to vector\n");
981
			return (exNULL);
981
			return (exNULL);
982
		}
982
		}
Lines 984-1038 Link Here
984
		return (++eptr);
984
		return (++eptr);
985
	case ET_II:
985
	case ET_II:
986
		if (eptr->ex_int == -1) {
986
		if (eptr->ex_int == -1) {
987
			post_error((fts_object_t *) exp,
987
			post_error((fts_object_t *) exp_gentoo,
988
			    "expr: ex_eval: inlet number not set\n");
988
			    "expr: ex_eval: inlet number not set\n");
989
			return (exNULL);
989
			return (exNULL);
990
		}
990
		}
991
		if (optr->ex_type == ET_VEC) {
991
		if (optr->ex_type == ET_VEC) {
992
			ex_mkvector(optr->ex_vec,
992
			ex_mkvector(optr->ex_vec,
993
			       (t_float)exp->exp_var[eptr->ex_int].ex_int,
993
			       (t_float)exp_gentoo->exp_var[eptr->ex_int].ex_int,
994
			       					exp->exp_vsize);
994
			       					exp_gentoo->exp_vsize);
995
		} else {
995
		} else {
996
			optr->ex_type = ET_INT;
996
			optr->ex_type = ET_INT;
997
			optr->ex_int = exp->exp_var[eptr->ex_int].ex_int;
997
			optr->ex_int = exp_gentoo->exp_var[eptr->ex_int].ex_int;
998
		}
998
		}
999
		return (++eptr);
999
		return (++eptr);
1000
	case ET_FI:
1000
	case ET_FI:
1001
		if (eptr->ex_int == -1) {
1001
		if (eptr->ex_int == -1) {
1002
			post_error((fts_object_t *) exp,
1002
			post_error((fts_object_t *) exp_gentoo,
1003
			    "expr: ex_eval: inlet number not set\n");
1003
			    "expr: ex_eval: inlet number not set\n");
1004
			return (exNULL);
1004
			return (exNULL);
1005
		}
1005
		}
1006
		if (optr->ex_type == ET_VEC) {
1006
		if (optr->ex_type == ET_VEC) {
1007
			ex_mkvector(optr->ex_vec,
1007
			ex_mkvector(optr->ex_vec,
1008
			     exp->exp_var[eptr->ex_int].ex_flt, exp->exp_vsize);
1008
			     exp_gentoo->exp_var[eptr->ex_int].ex_flt, exp_gentoo->exp_vsize);
1009
		} else {
1009
		} else {
1010
			optr->ex_type = ET_FLT;
1010
			optr->ex_type = ET_FLT;
1011
			optr->ex_flt = exp->exp_var[eptr->ex_int].ex_flt;
1011
			optr->ex_flt = exp_gentoo->exp_var[eptr->ex_int].ex_flt;
1012
		}
1012
		}
1013
		return (++eptr);
1013
		return (++eptr);
1014
1014
1015
	case ET_VSYM:
1015
	case ET_VSYM:
1016
		if (optr->ex_type == ET_VEC) {
1016
		if (optr->ex_type == ET_VEC) {
1017
			post_error((fts_object_t *) exp,
1017
			post_error((fts_object_t *) exp_gentoo,
1018
			    "expr: IntErr. vsym in for vec out\n");
1018
			    "expr: IntErr. vsym in for vec out\n");
1019
			return (exNULL);
1019
			return (exNULL);
1020
		}
1020
		}
1021
		if (eptr->ex_int == -1) {
1021
		if (eptr->ex_int == -1) {
1022
			post_error((fts_object_t *) exp,
1022
			post_error((fts_object_t *) exp_gentoo,
1023
				"expr: ex_eval: inlet number not set\n");
1023
				"expr: ex_eval: inlet number not set\n");
1024
			return (exNULL);
1024
			return (exNULL);
1025
		}
1025
		}
1026
		optr->ex_type = ET_SYM;
1026
		optr->ex_type = ET_SYM;
1027
		optr->ex_ptr = exp->exp_var[eptr->ex_int].ex_ptr;
1027
		optr->ex_ptr = exp_gentoo->exp_var[eptr->ex_int].ex_ptr;
1028
		return(++eptr);
1028
		return(++eptr);
1029
1029
1030
	case ET_VI:
1030
	case ET_VI:
1031
		if (optr->ex_type != ET_VEC)
1031
		if (optr->ex_type != ET_VEC)
1032
			*optr = exp->exp_var[eptr->ex_int];
1032
			*optr = exp_gentoo->exp_var[eptr->ex_int];
1033
		else if (optr->ex_vec != exp->exp_var[eptr->ex_int].ex_vec)
1033
		else if (optr->ex_vec != exp_gentoo->exp_var[eptr->ex_int].ex_vec)
1034
			memcpy(optr->ex_vec, exp->exp_var[eptr->ex_int].ex_vec,
1034
			memcpy(optr->ex_vec, exp_gentoo->exp_var[eptr->ex_int].ex_vec,
1035
					exp->exp_vsize * sizeof (t_float));
1035
					exp_gentoo->exp_vsize * sizeof (t_float));
1036
		return(++eptr);
1036
		return(++eptr);
1037
	case ET_VEC:
1037
	case ET_VEC:
1038
		if (optr->ex_type != ET_VEC) {
1038
		if (optr->ex_type != ET_VEC) {
Lines 1042-1048 Link Here
1042
			eptr->ex_int = 0;
1042
			eptr->ex_int = 0;
1043
		} else if (optr->ex_vec != eptr->ex_vec) {
1043
		} else if (optr->ex_vec != eptr->ex_vec) {
1044
			memcpy(optr->ex_vec, eptr->ex_vec,
1044
			memcpy(optr->ex_vec, eptr->ex_vec,
1045
					exp->exp_vsize * sizeof (t_float));
1045
					exp_gentoo->exp_vsize * sizeof (t_float));
1046
/* do we need to free here? or can we free higher up */
1046
/* do we need to free here? or can we free higher up */
1047
/* SDY  the next lines do not make sense */
1047
/* SDY  the next lines do not make sense */
1048
post("calling fts_free\n");
1048
post("calling fts_free\n");
Lines 1050-1056 Link Here
1050
			fts_free(optr->ex_vec);
1050
			fts_free(optr->ex_vec);
1051
			optr->ex_type = ET_INT;
1051
			optr->ex_type = ET_INT;
1052
			eptr->ex_int = 0;
1052
			eptr->ex_int = 0;
1053
		} else { /* this should not happen */	
1053
		} else { /* this should not happen */
1054
			post("expr int. error, optr->ex_vec = %d",optr->ex_vec);
1054
			post("expr int. error, optr->ex_vec = %d",optr->ex_vec);
1055
			abort();
1055
			abort();
1056
		}
1056
		}
Lines 1059-1070 Link Here
1059
		/* short hand for $x?[0] */
1059
		/* short hand for $x?[0] */
1060
1060
1061
		/* SDY delete the following check */
1061
		/* SDY delete the following check */
1062
		if (!IS_FEXPR_TILDE(exp) || optr->ex_type==ET_VEC) {
1062
		if (!IS_FEXPR_TILDE(exp_gentoo) || optr->ex_type==ET_VEC) {
1063
			post("%d:exp->exp_flags = %d", __LINE__,exp->exp_flags);
1063
			post("%d:exp->exp_flags = %d", __LINE__,exp_gentoo->exp_flags);
1064
			abort();
1064
			abort();
1065
		}
1065
		}
1066
		optr->ex_type = ET_FLT;
1066
		optr->ex_type = ET_FLT;
1067
		optr->ex_flt = exp->exp_var[eptr->ex_int].ex_vec[idx];
1067
		optr->ex_flt = exp_gentoo->exp_var[eptr->ex_int].ex_vec[idx];
1068
		return(++eptr);
1068
		return(++eptr);
1069
	case ET_YOM1:
1069
	case ET_YOM1:
1070
		/*
1070
		/*
Lines 1075-1125 Link Here
1075
		optr->ex_type = ET_FLT;
1075
		optr->ex_type = ET_FLT;
1076
		if (idx == 0)
1076
		if (idx == 0)
1077
			optr->ex_flt =
1077
			optr->ex_flt =
1078
			exp->exp_p_res[eptr->ex_int][exp->exp_vsize - 1];
1078
			exp_gentoo->exp_p_res[eptr->ex_int][exp_gentoo->exp_vsize - 1];
1079
		else
1079
		else
1080
			optr->ex_flt=exp->exp_tmpres[eptr->ex_int][idx-1];
1080
			optr->ex_flt=exp_gentoo->exp_tmpres[eptr->ex_int][idx-1];
1081
		return(++eptr);
1081
		return(++eptr);
1082
		
1082
		
1083
	case ET_YO:
1083
	case ET_YO:
1084
	case ET_XI:
1084
	case ET_XI:
1085
		/* SDY delete the following */
1085
		/* SDY delete the following */
1086
		if (!IS_FEXPR_TILDE(exp) || optr->ex_type==ET_VEC) {
1086
		if (!IS_FEXPR_TILDE(exp_gentoo) || optr->ex_type==ET_VEC) {
1087
			post("%d:exp->exp_flags = %d", __LINE__,exp->exp_flags);
1087
			post("%d:exp->exp_flags = %d", __LINE__,exp_gentoo->exp_flags);
1088
			abort();
1088
			abort();
1089
		}
1089
		}
1090
		return (eval_sigidx(exp, eptr, optr, idx));
1090
		return (eval_sigidx(exp_gentoo, eptr, optr, idx));
1091
			
1091
			
1092
	case ET_TBL:
1092
	case ET_TBL:
1093
	case ET_SI:
1093
	case ET_SI:
1094
		return (eval_tab(exp, eptr, optr, idx));
1094
		return (eval_tab(exp_gentoo, eptr, optr, idx));
1095
	case ET_FUNC:
1095
	case ET_FUNC:
1096
		return (eval_func(exp, eptr, optr, idx));
1096
		return (eval_func(exp_gentoo, eptr, optr, idx));
1097
	case ET_VAR:
1097
	case ET_VAR:
1098
		return (eval_var(exp, eptr, optr, idx));
1098
		return (eval_var(exp_gentoo, eptr, optr, idx));
1099
	case ET_OP:
1099
	case ET_OP:
1100
		break;
1100
		break;
1101
	case ET_STR:
1101
	case ET_STR:
1102
	case ET_LP:
1102
	case ET_LP:
1103
	case ET_LB:
1103
	case ET_LB:
1104
	default:
1104
	default:
1105
		post_error((fts_object_t *) exp,
1105
		post_error((fts_object_t *) exp_gentoo,
1106
			"expr: ex_eval: unexpected type %d\n", eptr->ex_type);
1106
			"expr: ex_eval: unexpected type %d\n", eptr->ex_type);
1107
		return (exNULL);
1107
		return (exNULL);
1108
	}
1108
	}
1109
	if (!eptr[1].ex_type) {
1109
	if (!eptr[1].ex_type) {
1110
		post_error((fts_object_t *) exp,
1110
		post_error((fts_object_t *) exp_gentoo,
1111
					"expr: ex_eval: not enough nodes 1\n");
1111
					"expr: ex_eval: not enough nodes 1\n");
1112
		return (exNULL);
1112
		return (exNULL);
1113
	}
1113
	}
1114
	if (!unary_op(eptr->ex_op) && !eptr[2].ex_type) {
1114
	if (!unary_op(eptr->ex_op) && !eptr[2].ex_type) {
1115
		post_error((fts_object_t *) exp,
1115
		post_error((fts_object_t *) exp_gentoo,
1116
					"expr: ex_eval: not enough nodes 2\n");
1116
					"expr: ex_eval: not enough nodes 2\n");
1117
		return (exNULL);
1117
		return (exNULL);
1118
	}
1118
	}
1119
1119
1120
	switch((eptr++)->ex_op) {
1120
	switch((eptr++)->ex_op) {
1121
	case OP_STORE:
1121
	case OP_STORE:
1122
		return (eval_store(exp, eptr, optr, idx));
1122
		return (eval_store(exp_gentoo, eptr, optr, idx));
1123
	case OP_NOT:
1123
	case OP_NOT:
1124
		EVAL_UNARY(!, +);
1124
		EVAL_UNARY(!, +);
1125
	case OP_NEG:
1125
	case OP_NEG:
Lines 1168-1181 Link Here
1168
 */
1168
 */
1169
#undef DZC
1169
#undef DZC
1170
#define DZC(ARG1,OPR,ARG2)	(((ARG2)?(((int)ARG1) OPR ((int)ARG2)) \
1170
#define DZC(ARG1,OPR,ARG2)	(((ARG2)?(((int)ARG1) OPR ((int)ARG2)) \
1171
							: (ex_dzdetect(exp),0)))
1171
							: (ex_dzdetect(exp_gentoo),0)))
1172
	case OP_MOD:
1172
	case OP_MOD:
1173
		EVAL(%);
1173
		EVAL(%);
1174
/*
1174
/*
1175
 * define the divide by zero check for divide
1175
 * define the divide by zero check for divide
1176
 */
1176
 */
1177
#undef DZC
1177
#undef DZC
1178
#define DZC(ARG1,OPR,ARG2)	(((ARG2)?(ARG1 OPR ARG2):(ex_dzdetect(exp),0)))
1178
#define DZC(ARG1,OPR,ARG2)	(((ARG2)?(ARG1 OPR ARG2):(ex_dzdetect(exp_gentoo),0)))
1179
	case OP_DIV:
1179
	case OP_DIV:
1180
		EVAL(/);
1180
		EVAL(/);
1181
	case OP_LP:
1181
	case OP_LP:
Lines 1185-1191 Link Here
1185
	case OP_COMMA:
1185
	case OP_COMMA:
1186
	case OP_SEMI:
1186
	case OP_SEMI:
1187
	default:
1187
	default:
1188
		post_error((fts_object_t *) exp, "expr: ex_print: bad op 0x%x\n", eptr->ex_op);
1188
		post_error((fts_object_t *) exp_gentoo, "expr: ex_print: bad op 0x%x\n", eptr->ex_op);
1189
		return (exNULL);
1189
		return (exNULL);
1190
	}
1190
	}
1191
1191
Lines 1210-1216 Link Here
1210
 *		 appropriate function
1210
 *		 appropriate function
1211
 */
1211
 */
1212
struct ex_ex *
1212
struct ex_ex *
1213
eval_func(struct expr *exp, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1213
eval_func(struct expr *exp_gentoo, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1214
/* the expr object data pointer */
1214
/* the expr object data pointer */
1215
/* the operation stack */
1215
/* the operation stack */
1216
/* the result pointer */
1216
/* the result pointer */
Lines 1224-1239 Link Here
1224
		return (exNULL);
1224
		return (exNULL);
1225
	}
1225
	}
1226
	if (f->f_argc > MAX_ARGS) {
1226
	if (f->f_argc > MAX_ARGS) {
1227
		post_error((fts_object_t *) exp, "expr: eval_func: asking too many arguments\n");
1227
		post_error((fts_object_t *) exp_gentoo, "expr: eval_func: asking too many arguments\n");
1228
		return (exNULL);
1228
		return (exNULL);
1229
	}
1229
	}
1230
1230
1231
	for (i = 0; i < f->f_argc; i++) {
1231
	for (i = 0; i < f->f_argc; i++) {
1232
		args[i].ex_type = 0;
1232
		args[i].ex_type = 0;
1233
		args[i].ex_int = 0;
1233
		args[i].ex_int = 0;
1234
		eptr = ex_eval(exp, eptr, &args[i], idx);
1234
		eptr = ex_eval(exp_gentoo, eptr, &args[i], idx);
1235
	}
1235
	}
1236
	(*f->f_func)(exp, f->f_argc, args, optr);
1236
	(*f->f_func)(exp_gentoo, f->f_argc, args, optr);
1237
	for (i = 0; i < f->f_argc; i++) {
1237
	for (i = 0; i < f->f_argc; i++) {
1238
		if (args[i].ex_type == ET_VEC)
1238
		if (args[i].ex_type == ET_VEC)
1239
			fts_free(args[i].ex_vec);
1239
			fts_free(args[i].ex_vec);
Lines 1248-1254 Link Here
1248
 *		  and call ex_eval on the right operator
1248
 *		  and call ex_eval on the right operator
1249
 */
1249
 */
1250
struct ex_ex *
1250
struct ex_ex *
1251
eval_store(struct expr *exp, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1251
eval_store(struct expr *exp_gentoo, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1252
/* the expr object data pointer */
1252
/* the expr object data pointer */
1253
/* the operation stack */
1253
/* the operation stack */
1254
/* the result pointer */
1254
/* the result pointer */
Lines 1261-1267 Link Here
1261
1261
1262
post("store called\n");
1262
post("store called\n");
1263
ex_print(eptr);
1263
ex_print(eptr);
1264
eptr = ex_eval(exp, ++eptr, optr, idx);
1264
eptr = ex_eval(exp_gentoo, ++eptr, optr, idx);
1265
return (eptr);
1265
return (eptr);
1266
1266
1267
#ifdef notdef /* SDY */
1267
#ifdef notdef /* SDY */
Lines 1307-1313 Link Here
1307
 * eval_tab -- evaluate a table operation
1307
 * eval_tab -- evaluate a table operation
1308
 */
1308
 */
1309
struct ex_ex *
1309
struct ex_ex *
1310
eval_tab(struct expr *exp, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1310
eval_tab(struct expr *exp_gentoo, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1311
/* the expr object data pointer */
1311
/* the expr object data pointer */
1312
/* the operation stack */
1312
/* the operation stack */
1313
/* the result pointer */
1313
/* the result pointer */
Lines 1317-1351 Link Here
1317
	int notable = 0;
1317
	int notable = 0;
1318
	
1318
	
1319
	if (eptr->ex_type == ET_SI) {
1319
	if (eptr->ex_type == ET_SI) {
1320
		if (!exp->exp_var[eptr->ex_int].ex_ptr) {
1320
		if (!exp_gentoo->exp_var[eptr->ex_int].ex_ptr) {
1321
/* SDY post_error() does not work in MAX/MSP yet
1321
/* SDY post_error() does not work in MAX/MSP yet
1322
				post_error((fts_object_t *) exp,
1322
				post_error((fts_object_t *) exp,
1323
				     "expr: syntax error: no string for inlet %d\n", eptr->ex_int + 1);
1323
				     "expr: syntax error: no string for inlet %d\n", eptr->ex_int + 1);
1324
*/
1324
*/
1325
				if (!(exp->exp_error & EE_NOTABLE)) {
1325
				if (!(exp_gentoo->exp_error & EE_NOTABLE)) {
1326
					post("expr: syntax error: no string for inlet %d", eptr->ex_int + 1);
1326
					post("expr: syntax error: no string for inlet %d", eptr->ex_int + 1);
1327
					post("expr: No more table errors will be reported");
1327
					post("expr: No more table errors will be reported");
1328
					post("expr: till the next reset");
1328
					post("expr: till the next reset");
1329
					exp->exp_error |= EE_NOTABLE;
1329
					exp_gentoo->exp_error |= EE_NOTABLE;
1330
				}
1330
				}
1331
				notable++;
1331
				notable++;
1332
		} else
1332
		} else
1333
			tbl = (char *) exp->exp_var[eptr->ex_int].ex_ptr;
1333
			tbl = (char *) exp_gentoo->exp_var[eptr->ex_int].ex_ptr;
1334
	} else if (eptr->ex_type == ET_TBL)
1334
	} else if (eptr->ex_type == ET_TBL)
1335
		tbl = (char *) eptr->ex_ptr;
1335
		tbl = (char *) eptr->ex_ptr;
1336
	else {
1336
	else {
1337
		post_error((fts_object_t *) exp, "expr: eval_tbl: bad type %ld\n", eptr->ex_type);
1337
		post_error((fts_object_t *) exp_gentoo, "expr: eval_tbl: bad type %ld\n", eptr->ex_type);
1338
		notable++;
1338
		notable++;
1339
1339
1340
	}
1340
	}
1341
	arg.ex_type = 0;
1341
	arg.ex_type = 0;
1342
	arg.ex_int = 0;
1342
	arg.ex_int = 0;
1343
	eptr = ex_eval(exp, ++eptr, &arg, idx);
1343
	eptr = ex_eval(exp_gentoo, ++eptr, &arg, idx);
1344
1344
1345
	optr->ex_type = ET_INT;
1345
	optr->ex_type = ET_INT;
1346
	optr->ex_int = 0;
1346
	optr->ex_int = 0;
1347
	if (!notable)
1347
	if (!notable)
1348
		(void)max_ex_tab(exp, (t_symbol *)tbl, &arg, optr);
1348
		(void)max_ex_tab(exp_gentoo, (t_symbol *)tbl, &arg, optr);
1349
	if (arg.ex_type == ET_VEC)
1349
	if (arg.ex_type == ET_VEC)
1350
		fts_free(arg.ex_vec);
1350
		fts_free(arg.ex_vec);
1351
	return (eptr);
1351
	return (eptr);
Lines 1355-1361 Link Here
1355
 * eval_var -- evaluate a variable
1355
 * eval_var -- evaluate a variable
1356
 */
1356
 */
1357
struct ex_ex *
1357
struct ex_ex *
1358
eval_var(struct expr *exp, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1358
eval_var(struct expr *exp_gentoo, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1359
/* the expr object data pointer */
1359
/* the expr object data pointer */
1360
/* the operation stack */
1360
/* the operation stack */
1361
/* the result pointer */
1361
/* the result pointer */
Lines 1365-1388 Link Here
1365
	int novar = 0;
1365
	int novar = 0;
1366
	
1366
	
1367
	if (eptr->ex_type == ET_SI) {
1367
	if (eptr->ex_type == ET_SI) {
1368
		if (!exp->exp_var[eptr->ex_int].ex_ptr) {
1368
		if (!exp_gentoo->exp_var[eptr->ex_int].ex_ptr) {
1369
/* SDY post_error() does not work in MAX/MSP yet
1369
/* SDY post_error() does not work in MAX/MSP yet
1370
post_error((fts_object_t *) exp,
1370
post_error((fts_object_t *) exp,
1371
"expr: syntax error: no string for inlet %d\n", eptr->ex_int + 1);
1371
"expr: syntax error: no string for inlet %d\n", eptr->ex_int + 1);
1372
*/
1372
*/
1373
				if (!(exp->exp_error & EE_NOVAR)) {
1373
				if (!(exp_gentoo->exp_error & EE_NOVAR)) {
1374
					post("expr: syntax error: no string for inlet %d", eptr->ex_int + 1);
1374
					post("expr: syntax error: no string for inlet %d", eptr->ex_int + 1);
1375
					post("expr: No more table errors will be reported");
1375
					post("expr: No more table errors will be reported");
1376
					post("expr: till the next reset");
1376
					post("expr: till the next reset");
1377
					exp->exp_error |= EE_NOVAR;
1377
					exp_gentoo->exp_error |= EE_NOVAR;
1378
				}
1378
				}
1379
				novar++;
1379
				novar++;
1380
		} else
1380
		} else
1381
			var = (char *) exp->exp_var[eptr->ex_int].ex_ptr;
1381
			var = (char *) exp_gentoo->exp_var[eptr->ex_int].ex_ptr;
1382
	} else if (eptr->ex_type == ET_VAR)
1382
	} else if (eptr->ex_type == ET_VAR)
1383
		var = (char *) eptr->ex_ptr;
1383
		var = (char *) eptr->ex_ptr;
1384
	else {
1384
	else {
1385
		post_error((fts_object_t *) exp, "expr: eval_tbl: bad type %ld\n", eptr->ex_type);
1385
		post_error((fts_object_t *) exp_gentoo, "expr: eval_tbl: bad type %ld\n", eptr->ex_type);
1386
		novar++;
1386
		novar++;
1387
1387
1388
	}
1388
	}
Lines 1390-1396 Link Here
1390
	optr->ex_type = ET_INT;
1390
	optr->ex_type = ET_INT;
1391
	optr->ex_int = 0;
1391
	optr->ex_int = 0;
1392
	if (!novar)
1392
	if (!novar)
1393
		(void)max_ex_var(exp, (t_symbol *)var, optr);
1393
		(void)max_ex_var(exp_gentoo, (t_symbol *)var, optr);
1394
	return (++eptr);
1394
	return (++eptr);
1395
}
1395
}
1396
1396
Lines 1398-1404 Link Here
1398
 * eval_sigidx -- evaluate the value of an indexed signal for fexpr~
1398
 * eval_sigidx -- evaluate the value of an indexed signal for fexpr~
1399
 */
1399
 */
1400
struct ex_ex *
1400
struct ex_ex *
1401
eval_sigidx(struct expr *exp, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1401
eval_sigidx(struct expr *exp_gentoo, struct ex_ex *eptr, struct ex_ex *optr, int idx)
1402
/* the expr object data pointer */
1402
/* the expr object data pointer */
1403
/* the operation stack */
1403
/* the operation stack */
1404
/* the result pointer */
1404
/* the result pointer */
Lines 1413-1419 Link Here
1413
1413
1414
	arg.ex_type = 0;
1414
	arg.ex_type = 0;
1415
	arg.ex_int = 0;
1415
	arg.ex_int = 0;
1416
	reteptr = ex_eval(exp, eptr + 1, &arg, idx);
1416
	reteptr = ex_eval(exp_gentoo, eptr + 1, &arg, idx);
1417
	if (arg.ex_type == ET_FLT) {
1417
	if (arg.ex_type == ET_FLT) {
1418
		fi = arg.ex_flt;		/* float index */
1418
		fi = arg.ex_flt;		/* float index */
1419
		i = (int) arg.ex_flt;		/* integer index */
1419
		i = (int) arg.ex_flt;		/* integer index */
Lines 1431-1438 Link Here
1431
	 */
1431
	 */
1432
	if (eptr->ex_type == ET_XI) {
1432
	if (eptr->ex_type == ET_XI) {
1433
		if (fi > 0) {
1433
		if (fi > 0) {
1434
			if (!(exp->exp_error & EE_BI_INPUT)) {
1434
			if (!(exp_gentoo->exp_error & EE_BI_INPUT)) {
1435
				exp->exp_error |= EE_BI_INPUT;
1435
				exp_gentoo->exp_error |= EE_BI_INPUT;
1436
			  post("expr: input vector index > 0, (vector x%d[%f])",
1436
			  post("expr: input vector index > 0, (vector x%d[%f])",
1437
					       eptr->ex_int + 1, i + rem_i);
1437
					       eptr->ex_int + 1, i + rem_i);
1438
				post("fexpr~: index assumed to be = 0");
1438
				post("fexpr~: index assumed to be = 0");
Lines 1443-1457 Link Here
1443
			i = 0;
1443
			i = 0;
1444
			rem_i = 0;
1444
			rem_i = 0;
1445
		}
1445
		}
1446
		if (cal_sigidx(optr, i, rem_i, idx, exp->exp_vsize,
1446
		if (cal_sigidx(optr, i, rem_i, idx, exp_gentoo->exp_vsize,
1447
					exp->exp_var[eptr->ex_int].ex_vec,
1447
					exp_gentoo->exp_var[eptr->ex_int].ex_vec,
1448
						exp->exp_p_var[eptr->ex_int])) {
1448
						exp_gentoo->exp_p_var[eptr->ex_int])) {
1449
			if (!(exp->exp_error & EE_BI_INPUT)) {
1449
			if (!(exp_gentoo->exp_error & EE_BI_INPUT)) {
1450
				exp->exp_error |= EE_BI_INPUT;
1450
				exp_gentoo->exp_error |= EE_BI_INPUT;
1451
				post("expr: input vector index <  -VectorSize, (vector x%d[%f])", eptr->ex_int + 1, fi);
1451
				post("expr: input vector index <  -VectorSize, (vector x%d[%f])", eptr->ex_int + 1, fi);
1452
				ex_print(eptr);
1452
				ex_print(eptr);
1453
				post("fexpr~: index assumed to be = -%d",
1453
				post("fexpr~: index assumed to be = -%d",
1454
					exp->exp_vsize);
1454
					exp_gentoo->exp_vsize);
1455
				post("fexpr~: no error report till next reset");
1455
				post("fexpr~: no error report till next reset");
1456
			}
1456
			}
1457
		}
1457
		}
Lines 1462-1469 Link Here
1462
	} else if (eptr->ex_type == ET_YO) {
1462
	} else if (eptr->ex_type == ET_YO) {
1463
		/* for output vectors index of zero is not legal */
1463
		/* for output vectors index of zero is not legal */
1464
		if (fi >= 0) {
1464
		if (fi >= 0) {
1465
			if (!(exp->exp_error & EE_BI_OUTPUT)) {
1465
			if (!(exp_gentoo->exp_error & EE_BI_OUTPUT)) {
1466
				exp->exp_error |= EE_BI_OUTPUT;
1466
				exp_gentoo->exp_error |= EE_BI_OUTPUT;
1467
				post("fexpr~: bad output index, (%f)", fi);
1467
				post("fexpr~: bad output index, (%f)", fi);
1468
				ex_print(eptr);
1468
				ex_print(eptr);
1469
				post("fexpr~: no error report till next reset");
1469
				post("fexpr~: no error report till next reset");
Lines 1471-1491 Link Here
1471
			}
1471
			}
1472
			i = -1;
1472
			i = -1;
1473
		}
1473
		}
1474
		if (eptr->ex_int >= exp->exp_nexpr) {
1474
		if (eptr->ex_int >= exp_gentoo->exp_nexpr) {
1475
			post("fexpr~: $y%d illegal: not that many exprs",
1475
			post("fexpr~: $y%d illegal: not that many exprs",
1476
								eptr->ex_int);
1476
								eptr->ex_int);
1477
			optr->ex_flt = 0;
1477
			optr->ex_flt = 0;
1478
			return (reteptr);
1478
			return (reteptr);
1479
		}
1479
		}
1480
		if (cal_sigidx(optr, i, rem_i, idx, exp->exp_vsize,
1480
		if (cal_sigidx(optr, i, rem_i, idx, exp_gentoo->exp_vsize,
1481
			     exp->exp_tmpres[eptr->ex_int],
1481
			     exp_gentoo->exp_tmpres[eptr->ex_int],
1482
		     				exp->exp_p_res[eptr->ex_int])) {
1482
		     				exp_gentoo->exp_p_res[eptr->ex_int])) {
1483
			if (!(exp->exp_error & EE_BI_OUTPUT)) {
1483
			if (!(exp_gentoo->exp_error & EE_BI_OUTPUT)) {
1484
				exp->exp_error |= EE_BI_OUTPUT;
1484
				exp_gentoo->exp_error |= EE_BI_OUTPUT;
1485
				post("fexpr~: bad output index, (%f)", fi);
1485
				post("fexpr~: bad output index, (%f)", fi);
1486
				ex_print(eptr);
1486
				ex_print(eptr);
1487
				post("fexpr~: index assumed to be = -%d",
1487
				post("fexpr~: index assumed to be = -%d",
1488
					exp->exp_vsize);
1488
					exp_gentoo->exp_vsize);
1489
			}
1489
			}
1490
		}
1490
		}
1491
	} else {
1491
	} else {
Lines 1552-1581 Link Here
1552
 * getoken -- return 1 on syntax error otherwise 0
1552
 * getoken -- return 1 on syntax error otherwise 0
1553
 */
1553
 */
1554
int
1554
int
1555
getoken(struct expr *exp, struct ex_ex *eptr)
1555
getoken(struct expr *exp_gentoo, struct ex_ex *eptr)
1556
{
1556
{
1557
	char *p;
1557
	char *p;
1558
	long i;
1558
	long i;
1559
1559
1560
1560
1561
	if (!exp->exp_str) {
1561
	if (!exp_gentoo->exp_str) {
1562
		post("expr: getoken: expression string not set\n");
1562
		post("expr: getoken: expression string not set\n");
1563
		return (0);
1563
		return (0);
1564
	}
1564
	}
1565
retry:
1565
retry:
1566
	if (!*exp->exp_str) {
1566
	if (!*exp_gentoo->exp_str) {
1567
		eptr->ex_type = 0;
1567
		eptr->ex_type = 0;
1568
		eptr->ex_int = 0;
1568
		eptr->ex_int = 0;
1569
		return (0);
1569
		return (0);
1570
	}
1570
	}
1571
	if (*exp->exp_str == ';') {
1571
	if (*exp_gentoo->exp_str == ';') {
1572
		exp->exp_str++;
1572
		exp_gentoo->exp_str++;
1573
		eptr->ex_type = 0;
1573
		eptr->ex_type = 0;
1574
		eptr->ex_int = 0;
1574
		eptr->ex_int = 0;
1575
		return (0);
1575
		return (0);
1576
	}
1576
	}
1577
	eptr->ex_type = ET_OP;
1577
	eptr->ex_type = ET_OP;
1578
	switch (*exp->exp_str++) {
1578
	switch (*exp_gentoo->exp_str++) {
1579
	case '\\':
1579
	case '\\':
1580
	case ' ':
1580
	case ' ':
1581
	case '\t':
1581
	case '\t':
Lines 1621-1641 Link Here
1621
		eptr->ex_op = OP_LB;
1621
		eptr->ex_op = OP_LB;
1622
		break;
1622
		break;
1623
	case '!':
1623
	case '!':
1624
		if (*exp->exp_str == '=') {
1624
		if (*exp_gentoo->exp_str == '=') {
1625
			eptr->ex_op = OP_NE;
1625
			eptr->ex_op = OP_NE;
1626
			exp->exp_str++;
1626
			exp_gentoo->exp_str++;
1627
		} else
1627
		} else
1628
			eptr->ex_op = OP_NOT;
1628
			eptr->ex_op = OP_NOT;
1629
		break;
1629
		break;
1630
	case '<':
1630
	case '<':
1631
		switch (*exp->exp_str) {
1631
		switch (*exp_gentoo->exp_str) {
1632
		case '<':
1632
		case '<':
1633
			eptr->ex_op = OP_SL;
1633
			eptr->ex_op = OP_SL;
1634
			exp->exp_str++;
1634
			exp_gentoo->exp_str++;
1635
			break;
1635
			break;
1636
		case '=':
1636
		case '=':
1637
			eptr->ex_op = OP_LE;
1637
			eptr->ex_op = OP_LE;
1638
			exp->exp_str++;
1638
			exp_gentoo->exp_str++;
1639
			break;
1639
			break;
1640
		default:
1640
		default:
1641
			eptr->ex_op = OP_LT;
1641
			eptr->ex_op = OP_LT;
Lines 1643-1656 Link Here
1643
		}
1643
		}
1644
		break;
1644
		break;
1645
	case '>':
1645
	case '>':
1646
		switch (*exp->exp_str) {
1646
		switch (*exp_gentoo->exp_str) {
1647
		case '>':
1647
		case '>':
1648
			eptr->ex_op = OP_SR;
1648
			eptr->ex_op = OP_SR;
1649
			exp->exp_str++;
1649
			exp_gentoo->exp_str++;
1650
			break;
1650
			break;
1651
		case '=':
1651
		case '=':
1652
			eptr->ex_op = OP_GE;
1652
			eptr->ex_op = OP_GE;
1653
			exp->exp_str++;
1653
			exp_gentoo->exp_str++;
1654
			break;
1654
			break;
1655
		default:
1655
		default:
1656
			eptr->ex_op = OP_GT;
1656
			eptr->ex_op = OP_GT;
Lines 1658-1664 Link Here
1658
		}
1658
		}
1659
		break;
1659
		break;
1660
	case '=':
1660
	case '=':
1661
		if (*exp->exp_str++ != '=') {
1661
		if (*exp_gentoo->exp_str++ != '=') {
1662
			post("expr: syntax error: =\n");
1662
			post("expr: syntax error: =\n");
1663
			return (1);
1663
			return (1);
1664
		}
1664
		}
Lines 1675-1696 Link Here
1675
*/
1675
*/
1676
1676
1677
	case '&':
1677
	case '&':
1678
		if (*exp->exp_str == '&') {
1678
		if (*exp_gentoo->exp_str == '&') {
1679
			exp->exp_str++;
1679
			exp_gentoo->exp_str++;
1680
			eptr->ex_op = OP_LAND;
1680
			eptr->ex_op = OP_LAND;
1681
		} else
1681
		} else
1682
			eptr->ex_op = OP_AND;
1682
			eptr->ex_op = OP_AND;
1683
		break;
1683
		break;
1684
1684
1685
	case '|':
1685
	case '|':
1686
		if ((*exp->exp_str == '|')) {
1686
		if ((*exp_gentoo->exp_str == '|')) {
1687
			exp->exp_str++;
1687
			exp_gentoo->exp_str++;
1688
			eptr->ex_op = OP_LOR;
1688
			eptr->ex_op = OP_LOR;
1689
		} else
1689
		} else
1690
			eptr->ex_op = OP_OR;
1690
			eptr->ex_op = OP_OR;
1691
		break;
1691
		break;
1692
	case '$':
1692
	case '$':
1693
		switch (*exp->exp_str++) {
1693
		switch (*exp_gentoo->exp_str++) {
1694
		case 'I':
1694
		case 'I':
1695
		case 'i':
1695
		case 'i':
1696
			eptr->ex_type = ET_II;
1696
			eptr->ex_type = ET_II;
Lines 1705-1736 Link Here
1705
			break;
1705
			break;
1706
		case 'V':
1706
		case 'V':
1707
		case 'v':
1707
		case 'v':
1708
			if (IS_EXPR_TILDE(exp)) {
1708
			if (IS_EXPR_TILDE(exp_gentoo)) {
1709
				eptr->ex_type = ET_VI;
1709
				eptr->ex_type = ET_VI;
1710
				break;
1710
				break;
1711
			}
1711
			}
1712
			post("$v? works only for expr~");
1712
			post("$v? works only for expr~");
1713
			post("expr: syntax error: %s\n", &exp->exp_str[-2]);
1713
			post("expr: syntax error: %s\n", &exp_gentoo->exp_str[-2]);
1714
			return (1);
1714
			return (1);
1715
		case 'X':
1715
		case 'X':
1716
		case 'x':
1716
		case 'x':
1717
			if (IS_FEXPR_TILDE(exp)) {
1717
			if (IS_FEXPR_TILDE(exp_gentoo)) {
1718
				eptr->ex_type = ET_XI;
1718
				eptr->ex_type = ET_XI;
1719
				if (isdigit(*exp->exp_str))
1719
				if (isdigit(*exp_gentoo->exp_str))
1720
					break;
1720
					break;
1721
				/* for $x[] is a shorhand for $x1[] */
1721
				/* for $x[] is a shorhand for $x1[] */
1722
				eptr->ex_int = 0;
1722
				eptr->ex_int = 0;
1723
				goto noinletnum;
1723
				goto noinletnum;
1724
			}
1724
			}
1725
			post("$x? works only for fexpr~");
1725
			post("$x? works only for fexpr~");
1726
			post("expr: syntax error: %s\n", &exp->exp_str[-2]);
1726
			post("expr: syntax error: %s\n", &exp_gentoo->exp_str[-2]);
1727
			return (1);
1727
			return (1);
1728
		case 'y':
1728
		case 'y':
1729
		case 'Y':
1729
		case 'Y':
1730
			if (IS_FEXPR_TILDE(exp)) {
1730
			if (IS_FEXPR_TILDE(exp_gentoo)) {
1731
				eptr->ex_type = ET_YO;
1731
				eptr->ex_type = ET_YO;
1732
				/*$y takes no number */
1732
				/*$y takes no number */
1733
				if (isdigit(*exp->exp_str))
1733
				if (isdigit(*exp_gentoo->exp_str))
1734
					break;
1734
					break;
1735
				/* for $y[] is a shorhand for $y1[] */
1735
				/* for $y[] is a shorhand for $y1[] */
1736
				eptr->ex_int = 0;
1736
				eptr->ex_int = 0;
Lines 1738-1753 Link Here
1738
			}
1738
			}
1739
			post("$y works only for fexpr~");
1739
			post("$y works only for fexpr~");
1740
		default:
1740
		default:
1741
			post("expr: syntax error: %s\n", &exp->exp_str[-2]);
1741
			post("expr: syntax error: %s\n", &exp_gentoo->exp_str[-2]);
1742
			return (1);
1742
			return (1);
1743
		}
1743
		}
1744
		p = atoif(exp->exp_str, &eptr->ex_op, &i);
1744
		p = atoif(exp_gentoo->exp_str, &eptr->ex_op, &i);
1745
		if (!p) {
1745
		if (!p) {
1746
			post("expr: syntax error: %s\n", &exp->exp_str[-2]);
1746
			post("expr: syntax error: %s\n", &exp_gentoo->exp_str[-2]);
1747
			return (1);
1747
			return (1);
1748
		}
1748
		}
1749
		if (i != ET_INT) {
1749
		if (i != ET_INT) {
1750
			post("expr: syntax error: %s\n", exp->exp_str);
1750
			post("expr: syntax error: %s\n", exp_gentoo->exp_str);
1751
			return (1);
1751
			return (1);
1752
		}
1752
		}
1753
		/*
1753
		/*
Lines 1756-1762 Link Here
1756
		 */
1756
		 */
1757
		if (!eptr->ex_op || (eptr->ex_op)-- > MAX_VARS) {
1757
		if (!eptr->ex_op || (eptr->ex_op)-- > MAX_VARS) {
1758
		 post("expr: syntax error: inlet or outlet out of range: %s\n",
1758
		 post("expr: syntax error: inlet or outlet out of range: %s\n",
1759
							     exp->exp_str);
1759
							     exp_gentoo->exp_str);
1760
			return (1);
1760
			return (1);
1761
		}
1761
		}
1762
1762
Lines 1768-1774 Link Here
1768
		 * illegal for fexr~
1768
		 * illegal for fexr~
1769
		 */
1769
		 */
1770
		if (eptr->ex_op == 0 &&
1770
		if (eptr->ex_op == 0 &&
1771
		   (IS_FEXPR_TILDE(exp) ||  IS_EXPR_TILDE(exp)) &&
1771
		   (IS_FEXPR_TILDE(exp_gentoo) ||  IS_EXPR_TILDE(exp_gentoo)) &&
1772
		   (eptr->ex_type==ET_II || eptr->ex_type==ET_FI ||
1772
		   (eptr->ex_type==ET_II || eptr->ex_type==ET_FI ||
1773
		   					eptr->ex_type==ET_SI)) {
1773
		   					eptr->ex_type==ET_SI)) {
1774
		       post("first inlet of expr~/fexpr~ can only be a vector");
1774
		       post("first inlet of expr~/fexpr~ can only be a vector");
Lines 1779-1803 Link Here
1779
			/* it is an outlet  for fexpr~*/
1779
			/* it is an outlet  for fexpr~*/
1780
			/* no need to do anything */
1780
			/* no need to do anything */
1781
			;
1781
			;
1782
		} else if (!exp->exp_var[eptr->ex_op].ex_type)
1782
		} else if (!exp_gentoo->exp_var[eptr->ex_op].ex_type)
1783
			exp->exp_var[eptr->ex_op].ex_type = eptr->ex_type;
1783
			exp_gentoo->exp_var[eptr->ex_op].ex_type = eptr->ex_type;
1784
		else if (exp->exp_var[eptr->ex_op].ex_type != eptr->ex_type) {
1784
		else if (exp_gentoo->exp_var[eptr->ex_op].ex_type != eptr->ex_type) {
1785
			post("expr: syntax error: inlets can only have one type: %s\n", exp->exp_str);
1785
			post("expr: syntax error: inlets can only have one type: %s\n", exp_gentoo->exp_str);
1786
			return (1);
1786
			return (1);
1787
		}
1787
		}
1788
		exp->exp_str = p;
1788
		exp_gentoo->exp_str = p;
1789
noinletnum:
1789
noinletnum:
1790
		break;
1790
		break;
1791
	case '"':
1791
	case '"':
1792
		{
1792
		{
1793
			struct ex_ex ex;
1793
			struct ex_ex ex;
1794
1794
1795
			p = exp->exp_str;
1795
			p = exp_gentoo->exp_str;
1796
			if (!*exp->exp_str || *exp->exp_str == '"') {
1796
			if (!*exp_gentoo->exp_str || *exp_gentoo->exp_str == '"') {
1797
				post("expr: syntax error: empty symbol: %s\n", --exp->exp_str);
1797
				post("expr: syntax error: empty symbol: %s\n", --exp_gentoo->exp_str);
1798
				return (1);
1798
				return (1);
1799
			}
1799
			}
1800
			if (getoken(exp, &ex))
1800
			if (getoken(exp_gentoo, &ex))
1801
				return (1);
1801
				return (1);
1802
			switch (ex.ex_type) {
1802
			switch (ex.ex_type) {
1803
			case ET_STR:
1803
			case ET_STR:
Lines 1815-1821 Link Here
1815
				post("expr: syntax error: bad symbol name: %s\n", p);
1815
				post("expr: syntax error: bad symbol name: %s\n", p);
1816
				return (1);
1816
				return (1);
1817
			}
1817
			}
1818
			if (*exp->exp_str++ != '"') {
1818
			if (*exp_gentoo->exp_str++ != '"') {
1819
				post("expr: syntax error: missing '\"'\n");
1819
				post("expr: syntax error: missing '\"'\n");
1820
				return (1);
1820
				return (1);
1821
			}
1821
			}
Lines 1832-1841 Link Here
1832
	case '7':
1832
	case '7':
1833
	case '8':
1833
	case '8':
1834
	case '9':
1834
	case '9':
1835
		p = atoif(--exp->exp_str, &eptr->ex_int, &eptr->ex_type);
1835
		p = atoif(--exp_gentoo->exp_str, &eptr->ex_int, &eptr->ex_type);
1836
		if (!p)
1836
		if (!p)
1837
			return (1);
1837
			return (1);
1838
		exp->exp_str = p;
1838
		exp_gentoo->exp_str = p;
1839
		break;
1839
		break;
1840
1840
1841
	default:
1841
	default:
Lines 1843-1859 Link Here
1843
		 * has to be a string, it should either be a 
1843
		 * has to be a string, it should either be a 
1844
		 * function or a table 
1844
		 * function or a table 
1845
		 */
1845
		 */
1846
		p = --exp->exp_str;
1846
		p = --exp_gentoo->exp_str;
1847
		for (i = 0; name_ok(*p); i++)
1847
		for (i = 0; name_ok(*p); i++)
1848
			p++;
1848
			p++;
1849
		if (!i) {
1849
		if (!i) {
1850
			post("expr: syntax error: %s\n", exp->exp_str);
1850
			post("expr: syntax error: %s\n", exp_gentoo->exp_str);
1851
			return (1);
1851
			return (1);
1852
		}
1852
		}
1853
		eptr->ex_ptr = (char *)fts_malloc(i + 1);
1853
		eptr->ex_ptr = (char *)fts_malloc(i + 1);
1854
		strncpy(eptr->ex_ptr, exp->exp_str, (int) i);
1854
		strncpy(eptr->ex_ptr, exp_gentoo->exp_str, (int) i);
1855
		(eptr->ex_ptr)[i] = 0;
1855
		(eptr->ex_ptr)[i] = 0;
1856
		exp->exp_str = p;
1856
		exp_gentoo->exp_str = p;
1857
		/*
1857
		/*
1858
		 * we mark this as a string and later we will change this
1858
		 * we mark this as a string and later we will change this
1859
		 * to either a function or a table
1859
		 * to either a function or a table
(-)extra/expr~/vexp_if.c (-7 / +7 lines)
Lines 13-19 Link Here
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
15
 * GNU General Public License for more details.
16
 * 
16
 *
17
 * You should have received a copy of the GNU General Public License
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program; if not, write to the Free Software
18
 * along with this program; if not, write to the Free Software
19
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
Lines 44-50 Link Here
44
44
45
static char *exp_version = "0.4";
45
static char *exp_version = "0.4";
46
46
47
extern struct ex_ex *ex_eval(struct expr *exp, struct ex_ex *eptr,
47
extern struct ex_ex *ex_eval(struct expr *exp_gentoo, struct ex_ex *eptr,
48
						struct ex_ex *optr, int n);
48
						struct ex_ex *optr, int n);
49
49
50
#ifdef PD
50
#ifdef PD
Lines 888-894 Link Here
888
 *  the result pointer 
888
 *  the result pointer 
889
 */
889
 */
890
int
890
int
891
max_ex_tab(struct expr *exp,fts_symbol_t s,struct ex_ex *arg,struct ex_ex *optr)
891
max_ex_tab(struct expr *exp_gentoo,fts_symbol_t s,struct ex_ex *arg,struct ex_ex *optr)
892
{
892
{
893
#ifdef PD
893
#ifdef PD
894
	t_garray *garray;
894
	t_garray *garray;
Lines 900-906 Link Here
900
	{
900
	{
901
		optr->ex_type = ET_FLT;
901
		optr->ex_type = ET_FLT;
902
		optr->ex_flt = 0;
902
		optr->ex_flt = 0;
903
		pd_error(exp, "no such table '%s'", s->s_name);
903
		pd_error(exp_gentoo, "no such table '%s'", s->s_name);
904
		return (1);
904
		return (1);
905
	}
905
	}
906
	optr->ex_type = ET_FLT;
906
	optr->ex_type = ET_FLT;
Lines 915-921 Link Here
915
		break;
915
		break;
916
916
917
	default:	/* do something with strings */
917
	default:	/* do something with strings */
918
		pd_error(exp, "expr: bad argument for table '%s'\n", fts_symbol_name(s));
918
		pd_error(exp_gentoo, "expr: bad argument for table '%s'\n", fts_symbol_name(s));
919
		indx = 0;
919
		indx = 0;
920
	}
920
	}
921
	if (indx < 0) indx = 0;
921
	if (indx < 0) indx = 0;
Lines 933-945 Link Here
933
}
933
}
934
934
935
int
935
int
936
max_ex_var(struct expr *exp, fts_symbol_t var, struct ex_ex *optr)
936
max_ex_var(struct expr *exp_gentoo, fts_symbol_t var, struct ex_ex *optr)
937
{
937
{
938
	optr->ex_type = ET_FLT;
938
	optr->ex_type = ET_FLT;
939
	if (value_getfloat(var, &(optr->ex_flt))) {
939
	if (value_getfloat(var, &(optr->ex_flt))) {
940
		optr->ex_type = ET_FLT;
940
		optr->ex_type = ET_FLT;
941
		optr->ex_flt = 0;
941
		optr->ex_flt = 0;
942
		pd_error(exp, "no such var '%s'", var->s_name);
942
		pd_error(exp_gentoo, "no such var '%s'", var->s_name);
943
		return (1);
943
		return (1);
944
	}
944
	}
945
	return (0);
945
	return (0);
(-)src/s_audio_jack.c (-1 / +1 lines)
Lines 69-75 Link Here
69
static int
69
static int
70
srate (jack_nframes_t srate, void *arg)
70
srate (jack_nframes_t srate, void *arg)
71
{
71
{
72
        printf ("jack: sample rate %ld/sec\n", srate);
72
        printf ("jack: sample rate %ld/sec\n", (long int)srate);
73
	sys_dacsr = srate;
73
	sys_dacsr = srate;
74
        return 0;
74
        return 0;
75
}
75
}

Return to bug 28007