Another corewar problem
Mats Wichmann
mats at dual.UUCP
Wed Jul 4 06:03:16 AEST 1984
Another problem with the Corewar program beyond the one already fixed
in this newsgroup is that differences in the rand() function are not
accounted for. BSD (4.1 & 4.2) returns a number in the range
0 to 2^31 - 1; System V (and presumably other AT&T releases) return
a number in the range 0 to 2^15 -1. In the routine load(), a random
number is generated for the load address of the second program in a loop
which continues if the number is not far enough from the address the first
program was loaded at. In generating the number, the return value from
rand() is right-shifted by 12, which will make it too small (on USG
systems with the smaller return range) to ever become a legal address -
thus an endless loop with no exit....
Fix is to decrease the right-shift amount for USG Systems (such as our
System V). A simple change follows, including Berry's original comment.
Note: also remember that for System III/V UNIX, index() is called strchr().
Mats
======= corewar.c =============
162c162
< r = (rand() >> 12) % MEMSIZE; /* 4.1 rand() sucks */
---
> r = (rand() >> 3) % MEMSIZE; /* 4.1 rand() sucks */
169c169
< r = (rand() >> 12) % MEMSIZE;
---
> r = (rand() >> 3) % MEMSIZE;
More information about the Comp.sources.unix
mailing list