Initial import.
[debian/pforth] / fth / utils / make_all256.fth
1 \ @(#) make_all256.fth 97/12/10 1.1\r
2 \ Make a file with all possible 256 bytes in random order.\r
3 \\r
4 \ Author: Phil Burk\r
5 \ Copyright 1987 Phil Burk\r
6 \ All Rights Reserved.\r
7 \r
8 ANEW TASK-MAKE_ALL256\r
9 \r
10 variable RAND8-SEED\r
11 19 rand8-seed !\r
12 : RANDOM8 ( -- r8 , generate random bytes, repeat every 256 )\r
13         RAND8-SEED @\r
14         77 * 55 +\r
15         $ FF and\r
16         dup RAND8-SEED !\r
17 ;\r
18 \r
19 create rand8-pad 256 allot\r
20 : make.256.data\r
21         256 0\r
22         DO\r
23                 random8 rand8-pad i + c!\r
24         LOOP\r
25 ;\r
26 \r
27 : SHUFFLE.DATA { num | ind1 ind2 -- }\r
28         num 0\r
29         DO\r
30                 256 choose -> ind1\r
31                 256 choose -> ind2\r
32                 ind1 rand8-pad + c@\r
33                 ind2 rand8-pad + c@\r
34                 ind1 rand8-pad + c!\r
35                 ind2 rand8-pad + c!\r
36         LOOP\r
37 ;\r
38         \r
39 : WRITE.256.FILE   { | fid -- }\r
40         p" all256.raw" count r/w create-file\r
41         IF\r
42                 drop ." Could not create file." cr\r
43         ELSE\r
44                 -> fid\r
45                 fid . cr\r
46                 rand8-pad 256 fid write-file abort" write failed!"\r
47                 fid close-file drop\r
48         THEN\r
49 ;\r
50 \r
51 : MAKE.256.FILE\r
52         make.256.data\r
53         1000 shuffle.data\r
54         write.256.file\r
55 ;\r
56 \r
57 MAKE.256.FILE\r