-- MOSSIMFIFOImpl.sak
-- last edited by Suzuki: 20-Nov-81 16:02:15
DIRECTORY
Connector,
FIFO,
MOSSIMFunc,
Process,
Scheduler;
MOSSIMFIFOImpl: MONITOR IMPORTS Connector, MOSSIMFunc, Process, Scheduler
EXPORTS FIFO ={
FIFOFunc: PUBLIC DEVICE [size: CARDINAL] = {
IN Init, WriteRequest, ReadRequest: BOOLEAN,
DIn: CARDINAL
OUT SpaceAv, DataAv: BOOLEAN, DOut: CARDINAL
GUARDIAN {
Initialized: BOOLEAN ← FALSE;
DO CHOICE {
WHEN Init UP -> {IF ReadRequest OR WriteRequest THEN ERROR;
Initialized ← TRUE} ||
WHEN ReadRequest UP -> IF ~Initialized OR Init OR ~DataAv
THEN ERROR ||
WHEN WriteRequest UP -> IF ~Initialized OR Init OR ~SpaceAv
THEN ERROR}
ENDLOOP }
MOSSIM fifo.sim
};
NULL
}. -- end of FIFO DEFINITION