command_state_t *cs); static void op_CHAOS_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_CHAOS_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_CHAOS_R_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_CHAOS_R_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_CHAOS_ALG_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_CHAOS_ALG_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); // clang-format off const tele_op_t op_ADD = MAKE_GET_OP(ADD , op_ADD_get , 2, true); const tele_op_t op_SUB = MAKE_GET_OP(SUB , op_SUB_get , 2, true); const tele_op_t op_MUL = MAKE_GET_OP(MUL , op_MUL_get , 2, true); const tele_op_t op_DIV = MAKE_GET_OP(DIV , op_DIV_get , 2, true); const tele_op_t op_MOD = MAKE_GET_OP(MOD , op_MOD_get , 2, true); const tele_op_t op_RAND = MAKE_GET_OP(RAND , op_RAND_get , 1, true); const tele_op_t op_RRAND = MAKE_GET_OP(RRAND , op_RRAND_get , 2, true); const tele_op_t op_R = MAKE_GET_OP(R , op_R_get , 0, true); const tele_op_t op_R_MIN = MAKE_GET_SET_OP(R.MIN, op_R_MIN_get, op_R_MIN_set, 0, true); const tele_op_t op_R_MAX = MAKE_GET_SET_OP(R.MAX, op_R_MAX_get, op_R_MAX_set, 0, true); const tele_op_t op_TOSS = MAKE_GET_OP(TOSS , op_TOSS_get , 0, true); const tele_op_t op_MIN = MAKE_GET_OP(MIN , op_MIN_get , 2, true); const tele_op_t op_MAX = MAKE_GET_OP(MAX , op_MAX_get , 2, true); const tele_op_t op_LIM = MAKE_GET_OP(LIM , op_LIM_get , 3, true); const tele_op_t op_WRAP = MAKE_GET_OP(WRAP , op_WRAP_get , 3, true); const tele_op_t op_QT = MAKE_GET_OP(QT , op_QT_get , 2, true);
// clang-format off const tele_op_t op_A = MAKE_SIMPLE_VARIABLE_OP(A , variables.a ); const tele_op_t op_B = MAKE_SIMPLE_VARIABLE_OP(B , variables.b ); const tele_op_t op_C = MAKE_SIMPLE_VARIABLE_OP(C , variables.c ); const tele_op_t op_D = MAKE_SIMPLE_VARIABLE_OP(D , variables.d ); const tele_op_t op_DRUNK_MAX = MAKE_SIMPLE_VARIABLE_OP(DRUNK.MAX , variables.drunk_max ); const tele_op_t op_DRUNK_MIN = MAKE_SIMPLE_VARIABLE_OP(DRUNK.MIN , variables.drunk_min ); const tele_op_t op_DRUNK_WRAP = MAKE_SIMPLE_VARIABLE_OP(DRUNK.WRAP, variables.drunk_wrap); const tele_op_t op_O_INC = MAKE_SIMPLE_VARIABLE_OP(O.INC , variables.o_inc ); const tele_op_t op_O_MAX = MAKE_SIMPLE_VARIABLE_OP(O.MAX , variables.o_max ); const tele_op_t op_O_MIN = MAKE_SIMPLE_VARIABLE_OP(O.MIN , variables.o_min ); const tele_op_t op_O_WRAP = MAKE_SIMPLE_VARIABLE_OP(O.WRAP , variables.o_wrap ); const tele_op_t op_T = MAKE_SIMPLE_VARIABLE_OP(T , variables.t ); const tele_op_t op_TIME = MAKE_SIMPLE_VARIABLE_OP(TIME , variables.time ); const tele_op_t op_TIME_ACT = MAKE_SIMPLE_VARIABLE_OP(TIME.ACT , variables.time_act ); const tele_op_t op_LAST = MAKE_GET_OP(LAST , op_LAST_get, 1, true); const tele_op_t op_X = MAKE_SIMPLE_VARIABLE_OP(X , variables.x ); const tele_op_t op_Y = MAKE_SIMPLE_VARIABLE_OP(Y , variables.y ); const tele_op_t op_Z = MAKE_SIMPLE_VARIABLE_OP(Z , variables.z ); const tele_op_t op_DRUNK = MAKE_GET_SET_OP(DRUNK, op_DRUNK_get, op_DRUNK_set, 0, true); const tele_op_t op_FLIP = MAKE_GET_SET_OP(FLIP , op_FLIP_get , op_FLIP_set , 0, true); const tele_op_t op_O = MAKE_GET_SET_OP(O , op_O_get , op_O_set , 0, true); const tele_op_t op_I = MAKE_GET_SET_OP(I , op_I_get, op_I_set, 0, true); // clang-format on static void op_LAST_get(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { int16_t script_number = cs_pop(cs) - 1; int16_t last = ss_get_script_last(ss, script_number); cs_push(cs, last);
static void op_TI_STORE_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_TI_RESET_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_TI_PARAM_INIT_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_TI_IN_INIT_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_TI_INIT_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); // clang-format off // TXo Operators const tele_op_t op_TO_TR = MAKE_GET_OP(TO.TR , op_TO_TR_get , 2, false); const tele_op_t op_TO_TR_TOG = MAKE_GET_OP(TO.TR.TOG , op_TO_TR_TOG_get , 1, false); const tele_op_t op_TO_TR_PULSE = MAKE_GET_OP(TO.TR.PULSE , op_TO_TR_PULSE_get , 1, false); const tele_op_t op_TO_TR_TIME = MAKE_GET_OP(TO.TR.TIME , op_TO_TR_TIME_get , 2, false); const tele_op_t op_TO_TR_TIME_S = MAKE_GET_OP(TO.TR.TIME.S , op_TO_TR_TIME_S_get , 2, false); const tele_op_t op_TO_TR_TIME_M = MAKE_GET_OP(TO.TR.TIME.M , op_TO_TR_TIME_M_get , 2, false); const tele_op_t op_TO_TR_POL = MAKE_GET_OP(TO.TR.POL , op_TO_TR_POL_get , 2, false); const tele_op_t op_TO_KILL = MAKE_GET_OP(TO.KILL , op_TO_KILL_get , 1, false); const tele_op_t op_TO_TR_PULSE_DIV = MAKE_GET_OP(TO.TR.PULSE.DIV , op_TO_TR_PULSE_DIV_get , 2, false); const tele_op_t op_TO_TR_PULSE_MUTE = MAKE_GET_OP(TO.TR.PULSE.MUTE , op_TO_TR_PULSE_MUTE_get , 2, false); const tele_op_t op_TO_TR_M_MUL = MAKE_GET_OP(TO.TR.M.MUL , op_TO_TR_M_MUL_get , 2, false); const tele_op_t op_TO_M = MAKE_GET_OP(TO.M , op_TO_M_get , 2, false); const tele_op_t op_TO_M_S = MAKE_GET_OP(TO.M.S , op_TO_M_S_get , 2, false); const tele_op_t op_TO_M_M = MAKE_GET_OP(TO.M.M , op_TO_M_M_get , 2, false);
command_state_t *cs); static void op_SCENE_set(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_SCRIPT_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_KILL_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); const tele_mod_t mod_PROB = MAKE_MOD(PROB, mod_PROB_func, 1); const tele_mod_t mod_IF = MAKE_MOD(IF, mod_IF_func, 1); const tele_mod_t mod_ELIF = MAKE_MOD(ELIF, mod_ELIF_func, 1); const tele_mod_t mod_ELSE = MAKE_MOD(ELSE, mod_ELSE_func, 0); const tele_mod_t mod_L = MAKE_MOD(L, mod_L_func, 2); const tele_op_t op_SCRIPT = MAKE_GET_OP(SCRIPT, op_SCRIPT_get, 1, false); const tele_op_t op_KILL = MAKE_GET_OP(KILL, op_KILL_get, 0, false); const tele_op_t op_SCENE = MAKE_GET_SET_OP(SCENE, op_SCENE_get, op_SCENE_set, 0, true); static void mod_PROB_func(scene_state_t *NOTUSED(ss), exec_state_t *es, command_state_t *cs, tele_command_t *sub_command) { int16_t a = cs_pop(cs); if (rand() % 101 < a) { process(es, sub_command); } } static void mod_IF_func(scene_state_t *NOTUSED(ss), exec_state_t *es, command_state_t *cs, tele_command_t *sub_command) { es->if_else_condition = false;
#include "teletype_io.h" static void mod_S_func(scene_state_t *ss, exec_state_t *es, command_state_t *cs, tele_command_t *sub_command); static void op_S_ALL_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_S_POP_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_S_CLR_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); static void op_S_L_get(const void *data, scene_state_t *ss, exec_state_t *es, command_state_t *cs); const tele_mod_t mod_S = MAKE_MOD(S, mod_S_func, 0); const tele_op_t op_S_ALL = MAKE_GET_OP(S.ALL, op_S_ALL_get, 0, false); const tele_op_t op_S_POP = MAKE_GET_OP(S.POP, op_S_POP_get, 0, false); const tele_op_t op_S_CLR = MAKE_GET_OP(S.CLR, op_S_CLR_get, 0, false); const tele_op_t op_S_L = MAKE_GET_OP(S.L, op_S_L_get, 0, true); static void mod_S_func(scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *NOTUSED(cs), tele_command_t *sub_command) { if (ss->stack_op.top < STACK_OP_SIZE) { copy_command(&ss->stack_op.commands[ss->stack_op.top], sub_command); ss->stack_op.top++; if (ss->stack_op.top == 1) tele_s(1); } } static void op_S_ALL_get(const void *NOTUSED(data), scene_state_t *ss,
int16_t m = cs_pop(cs); if (m < METRO_MIN_UNSUPPORTED_MS) m = METRO_MIN_UNSUPPORTED_MS; ss->variables.m = m; tele_metro_updated(); } const tele_op_t op_M_ACT = MAKE_GET_SET_OP(M.ACT, op_M_ACT_get, op_M_ACT_set, 0, true); static void op_M_ACT_get(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { cs_push(cs, ss->variables.m_act); } static void op_M_ACT_set(const void *NOTUSED(data), scene_state_t *ss, exec_state_t *NOTUSED(es), command_state_t *cs) { bool m_act = cs_pop(cs) > 0; ss->variables.m_act = m_act; tele_metro_updated(); } const tele_op_t op_M_RESET = MAKE_GET_OP(M.RESET, op_M_RESET_get, 0, false); static void op_M_RESET_get(const void *NOTUSED(data), scene_state_t *NOTUSED(ss), exec_state_t *NOTUSED(es), command_state_t *NOTUSED(cs)) { tele_metro_reset(); }