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_0805.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-04-10
|
2KB
|
105 lines
Program EX_0805;
{Listing 17P - see documentation in TUTOR.SSS}
uses SSS, crt;
{ For Pascal other than Turbo/Quick erase above line }
const
ARRIVL = 1;
STARTA = 2;
ENDACT = 3;
NEXTAC = 4;
REPORT = 5;
REPTME = -1;
TIMEL = 120;
SSIZE = 4;
{ For MS Pascal $include:'SSSP1.H' }
var
n, countr, server, ecode : integer;
{ For MS Pascal $include:'SSSP2.H' }
procedure signal(s:string; v: real; w,d: integer);
var x, y: integer;
begin
x := wherex;
y := wherey;
clreol;
write(s,v:w:d);
gotoxy(x,y);
end;
procedure prime;
begin
n := 0;
countr := 0;
server := 1;
INIQUE(1,1,1);
INISTA(1,'bus',1,0,0,0);
TALLY(1,server);
CREATE(0, n);
CREATE(TIMEL, REPTME);
end;
begin
prime;
repeat
ecode := NEXTEV;
if ecode > 0 then
begin
case ecode of
ARRIVL: if IDE = REPTME then
SCHED(0, REPORT, IDE)
else
begin
n := n + 1;
signal('Simulated time: ',T,7,2);
SETA(1, EX(0.9));
CREATE(EX(1), n);
SCHED(0, NEXTAC, IDE);
end;
NEXTAC: if server > 0 then SCHED(0, STARTA, IDE)
else QUEUE(1, 0);
STARTA: begin
SCHED(A(1), ENDACT, IDE);
server := server - 1;
TALLY(1,server);
end;
ENDACT: begin
DISPOS;
server := server + 1;
TALLY(1,server);
if NQ(1) > 0 then
begin
REMVFQ(1,1);
SCHED(0, STARTA, IDE);
end;
end;
REPORT: begin
SCHED(TIMEL, REPORT, IDE);
if countr = 0 then
writeln('# average avail.s ')
else
writeln(countr:1,QAVG(1):8:1,
SAVG(1):8:3,' ');
CLEARQ(1);
CLEARS(0);
countr := countr + 1;
if countr > SSIZE then SIMEND(0);
end;
end;
end;
until ecode = 0;
end.