home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 349_01 / sss.arc / EX_0501.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-09  |  2KB  |  121 lines

  1. Program EX_0501;
  2. {Listing 9P - see documentation in TUTOR.SSS}
  3.  
  4. uses SSS;
  5. { For Pascal other than Turbo/Quick erase above line }
  6.  
  7. const
  8.   ARRIVL = 1;
  9.   STARTA = 2;
  10.   ENDACT = 3;
  11.   NEXTAC = 4;
  12.   STRTDY = 5;
  13.  
  14.   CLOSES = 0;
  15.   WATCH  = 1;
  16.  
  17. { For MS Pascal $include:'SSSP1.H' }
  18.  
  19. var
  20.   ecode          : integer;
  21.   opens, repars  : Boolean;
  22.   inter, rept    : real;
  23.  
  24. { For MS Pascal $include:'SSSP2.H' }
  25.  
  26. procedure prime;
  27. begin
  28.   INIQUE(3,1,1);
  29.   INISTA(1,'Sojourn time',0,10,0.0,0.2);
  30.  
  31.   CREATE(0,   WATCH );
  32.   CREATE(0.5, CLOSES);
  33.   SIMEND(10);
  34.  
  35.   opens  := true;
  36.   repars := false;
  37.   inter  := 7.0/25.0;
  38.   rept   := 2.0/24.0;
  39. end;
  40.  
  41. procedure clshop;
  42. begin
  43.   opens := false;
  44.   while NQ(3) > 0 do
  45.   begin
  46.     REMVFQ(3,1);
  47.     TALLY(1, T - A(1));
  48.     DISPOS;
  49.   end;
  50. end;
  51.  
  52. procedure newday;
  53. begin
  54.   CREATE(0.5, CLOSES);
  55.   DISPOS;
  56.   opens  := true;
  57.   repars := false;
  58.  
  59.   while NQ(1) > 0 do
  60.   begin
  61.     REMVFQ(1, 1);
  62.     QUEUE(2, 0);
  63.   end;
  64. end;
  65.  
  66. begin
  67.  
  68.   prime;
  69.  
  70.   repeat
  71.     ecode := NEXTEV;
  72.     if ecode > 0 then
  73.     begin
  74.       case ecode of
  75.  
  76.       ARRIVL: begin
  77.                 if IDE = WATCH then
  78.                 begin
  79.                   CREATE(EX(inter), WATCH);
  80.                   SETA(1,T);
  81.                   SCHED(0,   NEXTAC, WATCH );
  82.                 end
  83.  
  84.                 else
  85.                 begin
  86.                   SCHED(0.5, STRTDY, CLOSES);
  87.                   clshop;
  88.                 end;
  89.               end;
  90.  
  91.       NEXTAC: begin
  92.                 if opens then
  93.                 begin
  94.                   if repars then QUEUE(2, 0)
  95.                             else SCHED(0,STARTA,IDE);
  96.                 end else QUEUE(1, 0);
  97.               end;
  98.  
  99.       STARTA: begin
  100.                 SCHED(EX(rept), ENDACT, 0);
  101.                 repars := true;
  102.               end;
  103.  
  104.       ENDACT: begin
  105.                 QUEUE(3, 0);
  106.                 if NQ(2) > 0 then
  107.                 begin
  108.                   REMVFQ(2,1);
  109.                   SCHED(0, STARTA, 0);
  110.                 end else repars := false;
  111.               end;
  112.  
  113.       STRTDY: newday;
  114.       end;
  115.     end;
  116.   until ecode = 0;
  117.  
  118.   SUMRY('');
  119.  
  120. end.
  121.