#include "random.h" static uint32_t state = 1; void set_random_seed(uint32_t seed) { state = seed ? seed : 1; } uint32_t random_u32(void) { state ^= state << 13; state ^= state >> 17; state ^= state << 5; return state; } uint32_t random_range(uint32_t max) { if (max == 0) return 0; uint32_t threshold = (0xFFFFFFFFU / max) * max; uint32_t r; do { r = random_u32(); } while (r >= threshold); return r % max; } void advance_state(uint32_t n) { state += n; }