+ /* Time to figure out which rule to use for this simulation. */
+ /* We ignore any weirdness resulting from the following cast since every */
+ /* bit pattern is also a valid rule; if the user provides weird input, */
+ /* then we'll return weird (but well-defined!) output. */
+ state->rule_requested = (uint8_t) get_integer_resource(state->dpy, "rule-requested", "Integer");
+ state->rule_random = get_boolean_resource(state->dpy, "rule-random", "Boolean");
+ /* Through the following set of branches, we enforce CLI flag precedence. */
+ if (state->rule_random) {
+ /* If this flag is set, the user wants truly random rules rather than */
+ /* random rules from a curated list. */
+ state->rule_number = (uint8_t) random();
+ } else if (state->rule_requested != 0) {
+ /* Rule 0 is terribly uninteresting, so we are reusing it as a 'null' */
+ /* value and hoping nobody notices. Finding a non-zero value means */
+ /* the user requested a specific rule. Use it. */
+ state->rule_number = state->rule_requested;
+ } else {
+ /* No command-line options were specified, so select rules randomly */
+ /* from a curated list. */
+ size_t number_of_array_elements = sizeof(curated_rule_list)/sizeof(curated_rule_list[0]);
+ state->rule_number = curated_rule_list[random() % number_of_array_elements];
+ }
+