home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 199.lha / LWP_v1.02 / box.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-12-27  |  1.2 KB  |  73 lines

  1.  
  2. #include <exec/types.h>
  3. #include <stdio.h>
  4.  
  5. extern long LastLWPMem;
  6.  
  7. extern APTR ForkLWP();
  8. extern APTR box();
  9. int N;        /*  successes    */
  10.  
  11. main(ac,av)
  12. char *av[];
  13. {
  14.     int deep;
  15.     int should, stack;
  16.     APTR com;
  17.  
  18.     if (ac != 2) {
  19.     puts("box <deep>");
  20.     puts("numbers > 4 at your own risk");
  21.     puts("defaulting to 4");
  22.     deep = 4;
  23.     } else {
  24.     deep = atoi(av[1]);
  25.     }
  26.  
  27.     com = box(deep);
  28.     stack = LastLWPMem;
  29.     should = count(deep);
  30.     RunLWP();               /*  Initialize  */
  31.     printf("init done, %d/%d & (%d per)%ld/%ld memory boxes\n", N, should, stack, (long)N * (long)stack, (long)should * (long)stack);
  32.     puts("running");
  33.     AlertLWP(com);
  34.     RunLWP();
  35.     puts("");
  36. }
  37.  
  38. count(n)
  39. {
  40.     if (n)
  41.     return(1+4*count(n-1));
  42.     return(1);
  43. }
  44.  
  45. APTR
  46. box(n)
  47. register int n;
  48. {
  49.     APTR com[4];
  50.     APTR desc;
  51.  
  52.     if (desc = ForkLWP(32L, (long)sizeof(int)))
  53.     return(desc);
  54.     if (n) {
  55.     com[0] = box(n-1);
  56.     com[1] = box(n-1);
  57.     com[2] = box(n-1);
  58.     com[3] = box(n-1);
  59.     }
  60.     ++N;
  61.     WaitLWP();
  62.     if (n) {
  63.     AlertLWP(com[0]);
  64.     AlertLWP(com[1]);
  65.     AlertLWP(com[2]);
  66.     AlertLWP(com[3]);
  67.     }
  68.     if (ForkLWP(2048L, (long)sizeof(int)))
  69.     return;
  70.     printf("%d", n);
  71. }
  72.  
  73.