home *** CD-ROM | disk | FTP | other *** search
- //
- // StandardEngine
- //
- // Copyright (C) 1992 Contemporary Design Studios. All rights reserved.
- //
-
-
- #import "StandardEngine.h"
- #import <sys/time.h>
- #import <stdlib.h>
-
-
- @implementation StandardEngine
-
-
- //
- // unit
- //
- // The standard random call returns 31 pseudo-random bits in a 32-bit signed long.
- // We want every byte in our buffer to have 8 pseudo-random bits. So, we generate
- // one word of 31 random bits, and then generate 31 more words (each with 31
- // pseudo-random bits), and to each we add a bit from the first to bring the total
- // in each word to 32. This means we must create a total of 31 words for each call
- // to makeRandom, so our unit size is 31 * 4, or 124.
- //
-
- + (int)unit
- {
- return 124;
- }
-
-
- //
- // init
- //
-
- - init
- {
- struct timeval theTime;
- gettimeofday(&theTime, 0);
- last = theTime.tv_usec;
- srand(last);
-
- return self;
- }
-
-
- //
- // makeRandom:
- //
-
- - makeRandom:(uchar *)storage;
- {
- ulong temp;
- int i;
- ulong *out = (ulong *)storage;
-
- temp = rand();
-
- for(i = 0; i < 31; i++) {
- out[i] = rand() + ((temp & 0x00000001) ? 0x80000000 : 0x00000000);
- temp = temp >> 1;
- }
-
- last = out[30];
-
-
- ((uchar *)storage)[ 0] = (last & 0x000000ff);
- ((uchar *)storage)[ 1] = (last & 0x0000ff00) >> 8;
- ((uchar *)storage)[ 2] = (last & 0x00ff0000) >> 16;
-
- last = rand();
-
- ((uchar *)storage)[ 3] = (last & 0x000000ff);
- ((uchar *)storage)[ 4] = (last & 0x0000ff00) >> 8;
- ((uchar *)storage)[ 5] = (last & 0x00ff0000) >> 16;
-
- last = rand();
-
- ((uchar *)storage)[ 6] = (last & 0x000000ff);
- ((uchar *)storage)[ 7] = (last & 0x0000ff00) >> 8;
- ((uchar *)storage)[ 8] = (last & 0x00ff0000) >> 16;
-
- last = rand();
-
- ((uchar *)storage)[ 9] = (last & 0x000000ff);
- ((uchar *)storage)[10] = (last & 0x0000ff00) >> 8;
- ((uchar *)storage)[11] = (last & 0x00ff0000) >> 16;
-
- return self;
- }
-
-
- //
- // read:
- //
-
- - read:(NXTypedStream *)stream
- {
- [super write:stream];
-
- NXReadTypes(stream, "i", &last);
- srand(last);
-
- return self;
- }
-
-
- //
- // write:
- //
-
- - write:(NXTypedStream *)stream
- {
- [super write:stream];
-
- NXWriteTypes(stream, "i", &last);
-
- return self;
- }
-
-
- @end
-
-
- //
- // End of file.
- //