home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programming
/
powerprogramming1994.iso
/
progtool
/
microcrn
/
issue_33.arc
/
PASCAL.FIG
< prev
next >
Wrap
Text File
|
1986-11-20
|
3KB
|
117 lines
Program LIFOdemo;
const
qsize = 20;
var
queue : array [0..qsize] of char; { must be global vars since can be }
qptr : 0..qsize; { asynchronously updated }
ch2, ch3 : char;
function PutOnQ (ch:char):boolean;
begin
if succ(qptr) > qsize then { queue full? }
PutOnQ := false { yes, signal failure }
else begin
qptr := succ(qptr); { not full, update pointer & add data }
queue[qptr] := ch;
PutOnQ := true;
end;
end;
function GetFromQ (var ch:char):boolean;
begin
if qptr = 0 then { queue empty? }
GetFromQ := false { yes, signal failure }
else begin
ch :=queue[qptr]; { else get data & update pointer }
qptr := pred(qptr);
GetFromQ := true;
end;
end;
procedure ProcessInput (ch:char); { not really much processing here! }
begin
write(ch);
end;
begin
qptr := 0;
ch2 := '@'; { pred('A') }
repeat
ch2 := succ(ch2);
{ the following statement is to demonstrate the effects of async removal }
{ if random(10) > 3 then
if GetFromQ(ch3) then ProcessInput(ch3); }
until not(PutOnQ(ch2));
while GetFromQ(ch2) do
ProcessInput(ch2);
end.
{-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=}
Program FIFOdemo;
const
qsize = 20;
var
queue : array [0..qsize] of char; { must be global vars }
q_top_ptr, q_bot_ptr : 0..qsize;
ch2, ch3 : char;
function PutOnQ (ch:char):boolean;
begin
if succ(q_bot_ptr) mod (qsize + 1) = q_top_ptr then { queue full? }
PutOnQ := false { if yes, can't add }
else begin
q_bot_ptr := succ(q_bot_ptr) mod (qsize + 1); { update bottom pointer }
queue[q_bot_ptr] := ch; { store the data }
PutOnQ := true; { signal success }
end;
end;
function GetFromQ (var ch:char):boolean;
begin
if q_top_ptr = q_bot_ptr then { queue empty? }
GetFromQ := false { if yes, then nothing to get }
else begin
q_top_ptr := succ(q_top_ptr) mod (qsize + 1); { update top pointer }
ch := queue[q_top_ptr]; { get the data }
GetFromQ := true; { signal success }
end;
end;
procedure ProcessInput (ch:char); { not a lot of processing here! }
begin
write(ch);
end;
begin { Program FIFO }
q_top_ptr := 0; { initialize pointers }
q_bot_ptr := 0;
ch2 := '@'; { pred ('A') for demo }
repeat
ch2 := succ(ch2); { bump input data }
{ the following statement is to show asynchronous removal }
{ if random(10) > 3 then
if GetFromQ(ch3) then ProcessInput(ch3); }
until not(PutOnQ(ch2));
while GetFromQ(ch2) do
ProcessInput(ch2);
end.