home *** CD-ROM | disk | FTP | other *** search
- program EX_0407;
- {Listing 8P - see documentation in TUTOR.SSS}
-
- uses SSS;
- { For Pascal other than Turbo/Quick erase above line }
-
- const
- ARRIVL = 1;
- STARTA = 2;
- ENDACT = 3;
- NEXTAC = 4;
- STRTDY = 5;
-
- CLOSES = 0;
- WATCH = 1;
-
- { For MS Pascal $include:'SSSP1.H' }
-
- var
- ecode : integer;
- opens, repars : Boolean;
- n, r, d, inter, rept : real;
-
- { For MS Pascal $include:'SSSP2.H' }
-
- procedure prime;
- begin
- INIQUE(0,0,3);
-
- INISTA(1,'Night',1,0,0,0);
- INISTA(2,'W f repair',1,0,0,0);
- INISTA(3,'W f delivery',1,0,0,0);
-
- CREATE(0.0, WATCH );
- CREATE(0.5, CLOSES);
- SIMEND(10.0);
-
- n := 0.0;
- r := 0.0;
- d := 0.0;
-
- opens := true;
- repars := false;
- inter := 7.0/25.0;
- rept := 2.0/24.0;
- end;
-
- procedure clshop;
- begin
- opens := false;
- d := 0;
- TALLY(3, d);
- end;
-
- procedure box;
- begin
- DISPOS;
- n := n + 1;
- TALLY(1, n);
- end;
-
- procedure newday;
- begin
- CREATE(0.5, CLOSES);
- DISPOS;
- opens := true;
- repars := false;
- r := r + n;
- TALLY(2, r);
- n := 0;
- TALLY(1, n);
- end;
-
- begin
-
- prime;
-
- repeat
- ecode := NEXTEV;
- if ecode > 0 then
- begin
- case ecode of
-
- ARRIVL: if IDE = WATCH then
- begin
- CREATE(EX(inter), WATCH );
- SCHED(0.0, NEXTAC, WATCH );
- end
- else
- begin
- SCHED(0.5, STRTDY, CLOSES);
- clshop;
- end;
-
- NEXTAC: if opens then
- begin
- r := r + 1;
- TALLY(2, r);
- if repars then DISPOS
- else SCHED(0,STARTA,IDE);
- end else box;
-
- STARTA: begin
- SCHED(EX(rept), ENDACT, 0);
- r := r - 1;
- TALLY(2, r);
- repars := true;
- end;
-
- ENDACT: begin
- d := d + 1;
- TALLY(3, d);
- if r > 0 then SCHED(0, STARTA, 0)
- else
- begin
- DISPOS;
- repars := false;
- end;
- end;
-
- STRTDY: newday;
- end;
- end;
- until ecode = 0;
-
- SUMRY('');
-
- end.