+ if (0 != use_seed)
+ seed = new_seed;
+ seed = ((seed * 1103515245) + 12345) % 2147483648; // Values as recommended by POSIX.1-2001 (see rand(3)).
+ return (seed / 65536); } // Ignore least significant 16 bits (they are less random).
+
+uint32_t load_seed() {
+// Load seed integer from seed file.
+ uint32_t seed;
+ const uint16_t nchar = UCHAR_MAX + 1;
+ FILE * file = fopen("seed", "r");
+ unsigned char a = fgetc(file);
+ unsigned char b = fgetc(file);
+ unsigned char c = fgetc(file);
+ unsigned char d = fgetc(file);
+ seed = (a * nchar * nchar * nchar) + (b * nchar * nchar) + (c * nchar) + d;
+ fclose(file);
+ return seed; }
+
+void save_seed(uint32_t seed) {
+// Save seed integer to seed file.
+ const uint16_t nchar = UCHAR_MAX + 1;
+ unsigned char a = seed / (nchar * nchar * nchar);
+ unsigned char b = (seed - (a * nchar * nchar * nchar)) / (nchar * nchar);
+ unsigned char c = (seed - ((a * nchar * nchar * nchar) + (b * nchar * nchar))) / nchar;
+ unsigned char d = seed % nchar;
+ FILE * file = fopen("seed", "w");
+ fputc(a, file);
+ fputc(b, file);
+ fputc(c, file);
+ fputc(d, file);
+ fclose(file); }