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_0407.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-04-09  |  2.3 KB  |  129 lines

  1. program EX_0407;
  2. {Listing 8P - 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.   n, r, d, inter, rept : real;
  23.  
  24. { For MS Pascal $include:'SSSP2.H' }
  25.  
  26. procedure prime;
  27. begin
  28.   INIQUE(0,0,3);
  29.  
  30.   INISTA(1,'Night',1,0,0,0);
  31.   INISTA(2,'W f repair',1,0,0,0);
  32.   INISTA(3,'W f delivery',1,0,0,0);
  33.  
  34.   CREATE(0.0, WATCH );
  35.   CREATE(0.5, CLOSES);
  36.   SIMEND(10.0);
  37.  
  38.   n := 0.0;
  39.   r := 0.0;
  40.   d := 0.0;
  41.  
  42.   opens  := true;
  43.   repars := false;
  44.   inter  := 7.0/25.0;
  45.   rept   := 2.0/24.0;
  46. end;
  47.  
  48. procedure clshop;
  49. begin
  50.   opens := false;
  51.   d := 0;
  52.   TALLY(3, d);
  53. end;
  54.  
  55. procedure box;
  56. begin
  57.   DISPOS;
  58.   n := n + 1;
  59.   TALLY(1, n);
  60. end;
  61.  
  62. procedure newday;
  63. begin
  64.   CREATE(0.5, CLOSES);
  65.   DISPOS;
  66.   opens  := true;
  67.   repars := false;
  68.   r := r + n;
  69.   TALLY(2, r);
  70.   n := 0;
  71.   TALLY(1, n);
  72. end;
  73.  
  74. begin
  75.  
  76.   prime;
  77.  
  78.   repeat
  79.     ecode := NEXTEV;
  80.     if ecode > 0 then
  81.     begin
  82.       case ecode of
  83.  
  84.       ARRIVL: if IDE = WATCH then
  85.               begin
  86.                 CREATE(EX(inter), WATCH );
  87.                 SCHED(0.0, NEXTAC, WATCH );
  88.               end
  89.               else
  90.               begin
  91.                 SCHED(0.5, STRTDY, CLOSES);
  92.                 clshop;
  93.               end;
  94.  
  95.       NEXTAC: if opens then
  96.               begin
  97.                 r := r + 1;
  98.                 TALLY(2, r);
  99.                 if repars then DISPOS
  100.                           else SCHED(0,STARTA,IDE);
  101.               end else box;
  102.  
  103.       STARTA: begin
  104.                 SCHED(EX(rept), ENDACT, 0);
  105.                 r := r - 1;
  106.                 TALLY(2, r);
  107.                 repars := true;
  108.               end;
  109.  
  110.       ENDACT: begin
  111.                 d := d + 1;
  112.                 TALLY(3, d);
  113.                 if r > 0 then SCHED(0, STARTA, 0)
  114.                 else
  115.                 begin
  116.                   DISPOS;
  117.                   repars := false;
  118.                 end;
  119.               end;
  120.  
  121.       STRTDY: newday;
  122.       end;
  123.     end;
  124.   until ecode = 0;
  125.  
  126.   SUMRY('');
  127.  
  128. end.
  129.