
void ran_init(unsigned init);
unsigned ran_nxt(void);

static unsigned ran_internal(void);

static unsigned V[347], Y;
static unsigned x;

void ran_init(unsigned init) {
	int i;

	x = init;
	for (i = 0; i < 347; i += 1) {
		V[i] = ran_internal();
	}
	Y = ran_internal();

	return;
}

unsigned ran_nxt(void) {
	int j;

	j = (347 * (Y >> 16)) >> 16;
	Y = V[j];
	V[j] = ran_internal();
	return(Y);
}

static unsigned ran_internal(void) {
	x = x * 0x74210845 + 0x4f1bacdd;
	return(x);
}


