<> <> DIRECTORY RTZones USING[nZiMaxInit, MapZiZn, ZoneIndex]; ZoneIndicesImpl: MONITOR -- protects ziNext IMPORTS RTZones EXPORTS RTZones = BEGIN OPEN RTZones; TooManyZones: ERROR = CODE; <> ziNext: ZoneIndex; <> GetZiNext: PUBLIC PROC RETURNS[zi: ZoneIndex] = {RETURN[ziNext]}; SetZiNext: PUBLIC ENTRY PROC[zi: ZoneIndex] = {ziNext _ zi}; <> AllocateZi: PUBLIC ENTRY PROC RETURNS[zi: ZoneIndex] = { ENABLE UNWIND => NULL; IF ziNext = nZiMaxInit THEN { FOR zi IN [1..nZiMaxInit] DO IF MapZiZn[zi] = NIL THEN RETURN[zi] ENDLOOP; ERROR TooManyZones}; zi _ ziNext; ziNext _ ziNext+1; }; END.