32 lines
833 B
Plaintext
32 lines
833 B
Plaintext
FIFOSIZE = 1000
|
|
|
|
FOR n = 3 TO 5
|
|
PRINT "Push ";n : PROCenqueue(n)
|
|
NEXT
|
|
PRINT "Pop " ; FNdequeue
|
|
PRINT "Push 6" : PROCenqueue(6)
|
|
REPEAT
|
|
PRINT "Pop " ; FNdequeue
|
|
UNTIL FNisempty
|
|
PRINT "Pop " ; FNdequeue
|
|
END
|
|
|
|
DEF PROCenqueue(n) : LOCAL f%
|
|
DEF FNdequeue : LOCAL f% : f% = 1
|
|
DEF FNisempty : LOCAL f% : f% = 2
|
|
PRIVATE fifo(), rptr%, wptr%
|
|
DIM fifo(FIFOSIZE-1)
|
|
CASE f% OF
|
|
WHEN 0:
|
|
wptr% = (wptr% + 1) MOD FIFOSIZE
|
|
IF rptr% = wptr% ERROR 100, "Error: queue overflowed"
|
|
fifo(wptr%) = n
|
|
WHEN 1:
|
|
IF rptr% = wptr% ERROR 101, "Error: queue empty"
|
|
rptr% = (rptr% + 1) MOD FIFOSIZE
|
|
= fifo(rptr%)
|
|
WHEN 2:
|
|
= (rptr% = wptr%)
|
|
ENDCASE
|
|
ENDPROC
|