home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol072
/
circque.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
1KB
|
58 lines
{ Donated by Warren Smith, Feb 1982 }
Module Circular_Queue ;
{ This set of routines is intended only as a guide for handling }
{ circular buffers or queues. Normally, I/O buffering would }
{ be handled through this type of data structure and operations.}
Type
Q_range = Min_Q..Max_Q ;
Q_Type = byte ;
Queue = record
Q_not_empty,
Q_not_full : boolean ;
Q_head,
Q_tail : Q_Range ;
Q : array [Q_Range] of Q_Type ;
end ;
Function Put_Q (Var Cur_Q : Queue ; Var Cur_Entry : Q_Type) : boolean ;
begin { Put_Q }
With Cur_Q do
If Q_not_full then
begin
Q[Q_head] := Cur_Entry ;
If Q_head = Max_Q then
Q_head := Min_Q
else
Q_head := Q_head + 1 ;
Q_not_full := Q_head <> Q_tail ;
Q_not_empty := TRUE ;
Put_Q := TRUE
end
else
Put_Q := FALSE
end ; { Put_Q }
Function Get_Q (Var Cur_Q : Queue ; Var Cur_Entry : Q_Type) : boolean ;
begin { Get_Q }
With Cur_Q do
If Q_not_empty then
begin
Cur_Entry := Q[Q_tail] ;
If Q_tail = Max_Q then
Q_tail := Min_Q
else
Q_tail := Q_tail + 1 ;
Q_not_full := TRUE ;
Q_not_empty := Q_head <> Q_tail ;
Get_Q := TRUE
end
else
Get_Q := FALSE
end ; { Get_Q }
ModEnd.