This is R250Engine.m in view mode; [Download] [Up]
// // R250Engine // // Copyright (C) 1992 Contemporary Design Studios. All rights reserved. // #import "R250Engine.h" #import <stdlib.h> #import <stdio.h> @implementation R250Engine // // unit // + (int)unit { return 4; // r250 creates 4 byte chunks. } // // init // #define SPREAD(num) (11 * num + 3) - init { unsigned long mask, diag; int i; // // Insert pseudo-random numbers into the buffer: // for(i = 0; i < 250; i++) { // Scan through entire array. buffer[i] = rand(); // Put a random number at each location. if(rand() > (RAND_MAX / 2)) // 50% Chance that buffer[i] |= 0x80000000; // we'll OR in the high bit. } // // Guarantee the existance of some specific patterns: // diag = 0x80000000; mask = 0xffffffff; for(i = SPREAD(0); i <= SPREAD(31); i = SPREAD(i)) { buffer[i] = (buffer[i] & mask) | diag; // Turn diagonal on and left bits off. mask >>= 1; // Shift mask to new value. diag >>= 1; // Shift diag to new value. } return self; } // // makeRandom: // - makeRandom:(uchar *)storage; { buffer[index] = buffer[index] ^ buffer[(index + 103) % 250]; // Make the next number. index = (index + 1) % 250; // Increment our index. // printf("R250Engine: Returning unsigned long %ul.\n", buffer[index]); *((unsigned long *)storage) = buffer[index]; // Return it to sender. return self; } // // read: // - read:(NXTypedStream *)stream { int i; [super write:stream]; NXReadTypes(stream, "i", &index); for(i = 0; i < 250; i++) { NXReadTypes(stream, "i", &(buffer[i])); } return self; } // // write: // - write:(NXTypedStream *)stream { int i; [super write:stream]; NXWriteTypes(stream, "i", &index); for(i = 0; i < 250; i++) { NXWriteTypes(stream, "i", &(buffer[i])); } return self; } @end // // End of file. //
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.