/* $Id: assign.c,v 1.6 2004/03/25 00:09:22 jmuelmen Exp $ */ /* This contains the shell actions that deal with assignment */ /* Shell actions do *NO* error checking. The assumption is that this * is done before anything makes it into the parse buffer. */ #include #include #include "act.h" #include "parse.h" void assign (value_t *ret, value_t **argv, int argc) { /* printf("argv[0] = %d\n", argv[0]->value.v_int); */ /* printf("argv[1] = %d\n", argv[1]->value.v_int); */ /* printf("type(argv[0]) = %d\n", argv[0]->val_type); */ /* printf("type(argv[1]) = %d\n", argv[1]->val_type); */ /* type of argv[0] determines what type to convert to */ switch (argv[0]->val_type) { case val_int: conv_int(&argv[0]->value.v_int, argv[1]); break; case val_float: conv_float(&argv[0]->value.v_float, argv[1]); break; case val_string: conv_string(argv[0]->value.v_string, argv[1]); break; case val_time: conv_time(&argv[0]->value.v_time, argv[1]); break; case val_period: conv_time(&argv[0]->value.v_period, argv[1]); break; default: printf("Don't know this variable type!\n"); exit(1); } /* printf("ret = %d\n", ret->value.v_int); */ value_copy(ret, argv[0]); /* printf("ret = %d\n", ret->value.v_int); */ } void mul_assign (value_t *ret, value_t **argv, int argc) { value_t tmp; value_t *args[2]; multiply(&tmp, argv, argc); args[0] = argv[0]; args[1] = &tmp; assign(ret, args, 2); } void div_assign (value_t *ret, value_t **argv, int argc) { value_t tmp; value_t *args[2]; divide(&tmp, argv, argc); args[0] = argv[0]; args[1] = &tmp; assign(ret, args, 2); } void mod_assign (value_t *ret, value_t **argv, int argc) { value_t tmp; value_t *args[2]; modulus(&tmp, argv, argc); args[0] = argv[0]; args[1] = &tmp; assign(ret, args, 2); } void add_assign (value_t *ret, value_t **argv, int argc) { value_t tmp; value_t *args[2]; printf("Calling add_assign\n"); typecheck_add(&tmp, argv, 2); add(&tmp, argv, argc); args[0] = argv[0]; args[1] = &tmp; printf("tmp = %d\n", tmp.value.v_int); assign(ret, args, 2); printf("ret = %d\n", ret->value.v_int); } void sub_assign (value_t *ret, value_t **argv, int argc) { value_t tmp; value_t *args[2]; subtract(&tmp, argv, argc); args[0] = argv[0]; args[1] = &tmp; assign(ret, args, 2); } void and_assign (value_t *ret, value_t **argv, int argc) { } void xor_assign (value_t *ret, value_t **argv, int argc) { } void or_assign (value_t *ret, value_t **argv, int argc) { } void fetch_ident (value_t *ret, value_t **argv, int argc) { value_copy(ret, argv[0]); } /* value_t less (value_t ** */