/* this function simply checks to see if the user has changed the order, and if so, updates the matrix */ void new_rot_order() { if ((rotorder_var = lookup_global(ROTORDER_NAME)) < 0) { rotorder_var = add_global(ROTORDER_NAME); globals(rotorder_var)->value.real = 4.; globals(rotorder_var)->flags = ORDINARY_PARAM | RECALC_PARAMETER | ALWAYS_RECALC; } rotorder = (int)globals(rotorder_var)->value.real; if ((genpower_var = lookup_global(GENPOWER_NAME)) < 0) { genpower_var = add_global(GENPOWER_NAME); globals(genpower_var)->value.real = 1.; globals(genpower_var)->flags = ORDINARY_PARAM | RECALC_PARAMETER | ALWAYS_RECALC; } genpower = (int)globals(genpower_var)->value.real; rotmat[0][0] = rotmat[1][1] = cos(2*M_PI*genpower/rotorder); rotmat[1][0] = -(rotmat[0][1] = sin(2*M_PI*genpower/rotorder)); }
/* called by recalc() even if not using symmetry, hence don't set user var */ void reset_rot_order() { if (lookup_global(ROTORDER_NAME) >= 0) new_rot_order(); }
oop defineGlobal(oop name, oop kind, oop value) { binary *s = (binary *) symbol_name(name); box *b = lookup_global(s->data, oop_len(s)); setbox(b, value); return b; }