home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume36 / formes / part01 / random.c < prev    next >
C/C++ Source or Header  |  1993-04-01  |  1KB  |  83 lines

  1.  
  2. /*
  3.  *  Copyright (C) 1992-1993 Jeffrey Chilton
  4.  *
  5.  *  Permission is granted to anyone to make or distribute copies of
  6.  *  this program, in any medium, provided that the copyright notice
  7.  *  and permission notice are preserved, and that the distributor
  8.  *  grants the recipient permission for further redistribution as
  9.  *  permitted by this notice.
  10.  *  
  11.  *  Author's E-mail address:  172-9221@mcimail.com
  12.  *  
  13.  */
  14.  
  15. static char *whatstring = "@(#)random.c    2.2 JWC";
  16.  
  17. #include <stdio.h>
  18. #include <malloc.h>
  19.  
  20. #include "class.h"
  21. #include "random.h"
  22.  
  23. #if TESTMAIN
  24.  
  25. main()
  26. {
  27.     register int i;
  28.     Random *squiz;
  29.     long l;
  30.  
  31.     squiz = Random_new();
  32.     for (i = 0; i < 10000; i++)
  33.     {
  34.     l = Random_long(squiz);
  35.     putchar(l & 0xFF);
  36.     }
  37.  
  38. }
  39.  
  40. #endif
  41.  
  42. Random *
  43. Random_new()
  44. {
  45.     Random *self;
  46.  
  47.     self = (Random *)malloc(sizeof (Random));
  48.     if (self)
  49.     {
  50.     *self = time((long *)0);
  51.     }
  52.  
  53.     return self;
  54.  
  55. }
  56.  
  57. long
  58. Random_long(self)
  59. Random *self;
  60. {
  61.     long t;
  62.  
  63.     /* New seed is absolute value of Squizzing's function applied to old */
  64.  
  65.     t = *self;
  66.     t = t / 5L ^ t * 6L;
  67.     if (t < 0L)
  68.     {
  69.     t = -t;
  70.     }
  71.     *self = t;
  72.     return t;
  73.  
  74. }
  75.  
  76. void
  77. Random_destroy(self)
  78. Random *self;
  79. {
  80.     free(self);
  81. }
  82.  
  83.