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 */ |
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[]; |
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); |
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 |
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; |
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 |
} |
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) { \ |
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; \ |
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; \ |
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; \ |
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; \ |
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; \ |
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; \ |
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 |
} \ |
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 \ |
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; \ |
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 |
} \ |
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; \ |
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; \ |
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++; \ |
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 |
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 */ |
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); |
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 |
} |
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) { |
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"); |
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 |
} |
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 |
/* |
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: |
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: |
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 |
|
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 */ |
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); |
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 */ |
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 */ |
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 */ |
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); |
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 */ |
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 |
} |
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 |
|
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 */ |
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 */ |
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"); |
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 |
} |
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"); |
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 { |
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': |
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; |
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; |
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 |
} |
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; |
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; |
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 |
/* |
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 |
|
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"); |
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: |
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 |
} |
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: |
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 |