home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Reference Guide / C-C++ Interactive Reference Guide.iso / c_ref / csource5 / 349_01 / sss.arc / EX_0501.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-09  |  2.0 KB  |  116 lines

  1. /* Program EX_0501.C
  2.    Listing 9C - see documentation in TUTOR.SSS
  3. */
  4.  
  5. #include "SSSC.H"
  6.  
  7. #define ARRIVL  1
  8. #define STARTA  2
  9. #define ENDACT  3
  10. #define NEXTAC  4
  11. #define STRTDY  5
  12.  
  13. #define CLOSES  0
  14. #define WATCH   1
  15.  
  16. #define FALSE   0
  17. #define TRUE    1
  18.  
  19. int    ecode, opens, repars;
  20. double inter, rept;
  21.  
  22. void prime()
  23. {
  24.   INIQUE(3, 1, 1);
  25.   INISTA(1, "Sojourn time", 0, 10, 0.0, 0.2);
  26.  
  27.   CREATE(0.0, WATCH );
  28.   CREATE(0.5, CLOSES);
  29.   SIMEND(10.0);
  30.  
  31.   opens  = TRUE;
  32.   repars = FALSE;
  33.   inter  = 7.0/25.0;
  34.   rept   = 2.0/24.0;
  35. }
  36.  
  37. void clshop()
  38. {
  39.   opens = FALSE;
  40.   while (NQ(3))
  41.   {
  42.     REMVFQ(3, 1);
  43.     TALLY(1, T() - A(1));
  44.     DISPOS();
  45.   }
  46. }
  47.  
  48. void newday()
  49. {
  50.   CREATE(0.5, CLOSES);
  51.   DISPOS();
  52.   opens  = TRUE;
  53.   repars = FALSE;
  54.  
  55.   while (NQ(1))
  56.   {
  57.     REMVFQ(1, 1);
  58.     QUEUE(2, 0.0);
  59.   }
  60. }
  61.  
  62. main()
  63. {
  64.   prime();
  65.  
  66.   do
  67.   {
  68.     if ((ecode = NEXTEV()) > 0)
  69.     switch(ecode)
  70.     {
  71.  
  72.       case ARRIVL:
  73.                 if (IDE() == WATCH)
  74.                 {
  75.                   CREATE(EX(inter), WATCH);
  76.                   SETA(1, T());
  77.                   SCHED(0.0, NEXTAC, WATCH);
  78.                 } else
  79.                 {
  80.                   SCHED(0.5, STRTDY, CLOSES);
  81.                   clshop();
  82.                 }
  83.                 break;
  84.  
  85.       case NEXTAC:
  86.                 if (opens)
  87.                 {
  88.                   if (repars) QUEUE(2, 0.0);
  89.                   else SCHED(0.0, STARTA, IDE());
  90.                 }
  91.                 else QUEUE(1, 0.0);
  92.                 break;
  93.  
  94.       case STARTA:
  95.                SCHED(EX(rept), ENDACT, 0);
  96.                repars = TRUE;
  97.                break;
  98.  
  99.       case ENDACT:
  100.                QUEUE(3, 0.0);
  101.                if (NQ(2))
  102.                {
  103.                  REMVFQ(2, 1);
  104.                  SCHED(0.0, STARTA, 0);
  105.                }
  106.                else repars = FALSE;
  107.                break;
  108.  
  109.       case STRTDY:
  110.                 newday();
  111.                 break;
  112.     }
  113.   } while (ecode);
  114.  
  115.   SUMRY("");
  116. }