home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1994 June / NEBULA_SE.ISO / SourceCode / Tutorial / Cookbook / 36.Rnd / Random.m < prev    next >
Encoding:
Text File  |  1993-01-19  |  2.2 KB  |  135 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "Random.h"
  5. #import <stdio.h>
  6. #import <libc.h>
  7. #import <appkit/nextstd.h>
  8. #import <appkit/Control.h>
  9. #import <appkit/Form.h>
  10. #import <appkit/Text.h>
  11. #import <appkit/Matrix.h>
  12. #import <appkit/ScrollView.h>
  13. #import <appkit/Application.h>
  14. extern void srandom();
  15. extern int random();
  16.  
  17. @implementation Random
  18.  
  19. +new {
  20. int i;
  21.     self = [super new];
  22.     [self initialize];
  23.     return self;
  24. }
  25.  
  26. -initialize {
  27. int i;
  28. id tmp_id;
  29.     [self stop:self];
  30.     total = 0;
  31.     average = 0.0;
  32.     numGen = 0;
  33.     [numGenForm setIntValue:numGen];        
  34.     [averageForm setFloatValue:average];
  35.     for (i=0; i<100; i++) {
  36.         numbers[i] = 0;
  37.         tmp_id = [textMatrix findCellWithTag:i];
  38.         [tmp_id setStringValue:"0"];
  39.     }
  40.     srandom(time(0));
  41.     scrollText = [scrollView docView];
  42.     [scrollText setText:""];
  43.     numberText[0] = '\0';
  44. }
  45.  
  46. - setNumGenForm:anObject
  47. {
  48.     numGenForm = anObject;
  49.     return self;
  50. }
  51.  
  52. - setAverageForm:anObject
  53. {
  54.     averageForm = anObject;
  55.     return self;
  56. }
  57.  
  58. - setTextMatrix:anObject
  59. {
  60.     textMatrix = anObject;
  61.     return self;
  62. }
  63.  
  64. - setScrollView:anObject
  65. {
  66.     scrollView = anObject;
  67.     return self;
  68. }
  69.  
  70. void update (teNum, now, myself)
  71. DPSTimedEntry teNum;
  72. double now;
  73. id myself;
  74. {
  75.     [myself doTimedEntry];        
  76. }
  77.  
  78. - doTimedEntry
  79. {
  80. char string[5];
  81. static id this_text;
  82.     newNumber = (random() % 100) + 1;  /* random number from 1 to 100 */
  83.     numGen += 1;
  84.     if (numGen > MAX_COUNT)
  85.         [self stop:self];
  86.     total += newNumber;
  87.     numbers[newNumber]++;
  88.     average = (float) total / (float) numGen;
  89.     [numGenForm setIntValue:numGen];        
  90.     [averageForm setFloatValue:average];
  91.     this_text = [textMatrix findCellWithTag:newNumber];
  92.     sprintf(string, "%d", numbers[newNumber]);
  93.     [this_text setStringValue:string];
  94.     sprintf(string, "%d\n", newNumber);
  95.     strcat(numberText, string);
  96.     [scrollText setText:numberText];
  97.  
  98. }
  99.  
  100. // Good programming practice. Free what you create!
  101. - free
  102. {
  103.     [self stop:self];
  104.     return [super free];
  105. }
  106.  
  107.  
  108.  
  109. - start:sender
  110. {
  111.     if (!running) {
  112.         running = 1;
  113.         clockTE = DPSAddTimedEntry(0.0, &update, self, NX_MODALRESPTHRESHOLD);
  114.     }
  115.     return self;
  116. }
  117.  
  118. - stop:sender
  119. {
  120.     if (running) {
  121.         running = 0;
  122.         DPSRemoveTimedEntry (clockTE);
  123.     }
  124.     return self;
  125. }
  126.  
  127.  
  128. - reset:sender
  129. {
  130.     [self initialize];
  131.     return self;
  132. }
  133.  
  134. @end
  135.