-- File: DispatcherCold.mesa, Last Edit: HGM November 12, 1979 5:35 PM -- Copyright Xerox Corporation 1979, 1980 DIRECTORY StatsDefs: FROM "StatsDefs" USING [StatIncr], DriverDefs: FROM "DriverDefs" USING [ dispatcherLock, dispatcherReady, dispatcherPleaseDie, globalInputQueue, globalOutputQueue, MainDispatcher, Network, Router, RouterObject, doStats, doDebug, giantVector, GiantVector], CommUtilDefs: FROM "CommUtilDefs" USING [SetTimeout, MsecToTicks], BufferDefs: FROM "BufferDefs" USING [ Buffer, ReturnFreeBuffer, QueueCleanup, QueueInitialize]; DispatcherCold: MONITOR LOCKS DriverDefs.dispatcherLock IMPORTS CommUtilDefs, StatsDefs, DriverDefs, BufferDefs EXPORTS DriverDefs = BEGIN pupRouter: PUBLIC DriverDefs.Router _ @dummyRouter; mainFork: PROCESS; dummyRouter: DriverDefs.RouterObject _ [ input: DummyInputer, broadcast: DummyBroadcaster, addNetwork: DummyAddDelete, removeNetwork: DummyAddDelete ]; Buffer: TYPE = BufferDefs.Buffer; DummyInputer: PUBLIC PROCEDURE [b: Buffer] = BEGIN IF DriverDefs.doStats THEN StatsDefs.StatIncr[statPacketsDiscarded]; BufferDefs.ReturnFreeBuffer[b]; END; DummyBroadcaster: PROCEDURE [b: Buffer] = BEGIN b.requeueProcedure[b]; END; DummyAddDelete: PROCEDURE [DriverDefs.Network] = BEGIN END; DispatcherOn: PUBLIC PROCEDURE = BEGIN DriverDefs.dispatcherPleaseDie _ FALSE; BufferDefs.QueueInitialize[@DriverDefs.globalInputQueue]; BufferDefs.QueueInitialize[@DriverDefs.globalOutputQueue]; mainFork _ FORK DriverDefs.MainDispatcher[]; END; SetPupRouter: PUBLIC PROCEDURE [router: DriverDefs.Router] = BEGIN IF router=NIL THEN router _ @dummyRouter; pupRouter _ router; END; DispatcherOff: PUBLIC PROCEDURE = BEGIN DispatcherOffLocked[]; JOIN mainFork; BufferDefs.QueueCleanup[@DriverDefs.globalInputQueue]; BufferDefs.QueueCleanup[@DriverDefs.globalOutputQueue]; END; DispatcherOffLocked: ENTRY PROCEDURE = INLINE BEGIN DriverDefs.dispatcherPleaseDie _ TRUE; NOTIFY DriverDefs.dispatcherReady; END; -- initialization CommUtilDefs.SetTimeout[@DriverDefs.dispatcherReady,CommUtilDefs.MsecToTicks[30000]]; IF DriverDefs.doDebug THEN BEGIN debugPointer: LONG POINTER TO DriverDefs.GiantVector _ DriverDefs.giantVector; debugPointer.globalInputQueue _ @DriverDefs.globalInputQueue; debugPointer.globalOutputQueue _ @DriverDefs.globalOutputQueue; END; END. -- DispatcherCold(2048)\957b12B154b16B67b14B48b12B247b12B131b13B194b19B