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 >
Wrap
Pascal/Delphi Source File
|
1991-04-09
|
2KB
|
121 lines
Program EX_0501;
{Listing 9P - 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;
inter, rept : real;
{ For MS Pascal $include:'SSSP2.H' }
procedure prime;
begin
INIQUE(3,1,1);
INISTA(1,'Sojourn time',0,10,0.0,0.2);
CREATE(0, WATCH );
CREATE(0.5, CLOSES);
SIMEND(10);
opens := true;
repars := false;
inter := 7.0/25.0;
rept := 2.0/24.0;
end;
procedure clshop;
begin
opens := false;
while NQ(3) > 0 do
begin
REMVFQ(3,1);
TALLY(1, T - A(1));
DISPOS;
end;
end;
procedure newday;
begin
CREATE(0.5, CLOSES);
DISPOS;
opens := true;
repars := false;
while NQ(1) > 0 do
begin
REMVFQ(1, 1);
QUEUE(2, 0);
end;
end;
begin
prime;
repeat
ecode := NEXTEV;
if ecode > 0 then
begin
case ecode of
ARRIVL: begin
if IDE = WATCH then
begin
CREATE(EX(inter), WATCH);
SETA(1,T);
SCHED(0, NEXTAC, WATCH );
end
else
begin
SCHED(0.5, STRTDY, CLOSES);
clshop;
end;
end;
NEXTAC: begin
if opens then
begin
if repars then QUEUE(2, 0)
else SCHED(0,STARTA,IDE);
end else QUEUE(1, 0);
end;
STARTA: begin
SCHED(EX(rept), ENDACT, 0);
repars := true;
end;
ENDACT: begin
QUEUE(3, 0);
if NQ(2) > 0 then
begin
REMVFQ(2,1);
SCHED(0, STARTA, 0);
end else repars := false;
end;
STRTDY: newday;
end;
end;
until ecode = 0;
SUMRY('');
end.