-- Copyright (C) 1983 by Xerox Corporation. All rights reserved. -- PupTimeServerCold.mesa, HGM, 23-Sep-83 3:00:54 DIRECTORY Event USING [aboutToSwap], EventTypes USING [aboutToBoot, aboutToBootPhysicalVolume], Supervisor USING [ AddDependency, AgentProcedure, CreateSubsystem, RemoveDependency, SubsystemHandle], MiscServerDefs USING [ PupMiscServerOn, PupMiscServerOff, IgnoreThisPacket, SetTimeServer], PupTimeServer USING [], PupTimeServerOps USING [PupTimeServer], Stats USING [ StatCounterIndex, StatsGetCounters, StatsStringToIndex]; PupTimeServerCold: PROGRAM IMPORTS Event, Supervisor, MiscServerDefs, PupTimeServerOps, Stats EXPORTS PupTimeServer, PupTimeServerOps = BEGIN OPEN Stats; broom: Supervisor.SubsystemHandle = Supervisor.CreateSubsystem[Broom]; useCount: CARDINAL ← 0; pleaseStop, running: PUBLIC BOOLEAN ← FALSE; resetText: PUBLIC LONG STRING ← [50]; stats: POINTER TO ARRAY StatCounterIndex OF LONG CARDINAL ← StatsGetCounters[]; statAlto, statTenex, statText: PUBLIC StatCounterIndex; GetAltoTimeRequests: PUBLIC PROCEDURE RETURNS [LONG CARDINAL] = BEGIN RETURN[stats[statAlto]]; END; GetTenexTimeRequests: PUBLIC PROCEDURE RETURNS [LONG CARDINAL] = BEGIN RETURN[stats[statTenex]]; END; GetTextTimeRequests: PUBLIC PROCEDURE RETURNS [LONG CARDINAL] = BEGIN RETURN[stats[statText]]; END; PupTimeServerOn: PUBLIC PROCEDURE = BEGIN IF (useCount ← useCount + 1) = 1 THEN BEGIN Supervisor.AddDependency[client: broom, implementor: Event.aboutToSwap]; running ← TRUE; Starter[]; END; END; Starter: PROCEDURE = BEGIN MiscServerDefs.PupMiscServerOn[]; MiscServerDefs.SetTimeServer[PupTimeServerOps.PupTimeServer]; pleaseStop ← FALSE; END; PupTimeServerOff: PUBLIC PROCEDURE = BEGIN IF useCount # 0 AND (useCount ← useCount - 1) = 0 THEN BEGIN running ← FALSE; Stopper[]; Supervisor.RemoveDependency[client: broom, implementor: Event.aboutToSwap]; END; END; Stopper: PROCEDURE = BEGIN MiscServerDefs.PupMiscServerOff[]; MiscServerDefs.SetTimeServer[MiscServerDefs.IgnoreThisPacket]; pleaseStop ← TRUE; END; SetupTimeServerThings: PUBLIC PROCEDURE = BEGIN statText ← StatsStringToIndex["Text Date Requests"]; statTenex ← StatsStringToIndex["Tenex Date Requests"]; statAlto ← StatsStringToIndex["Alto Date Requests"]; END; Broom: Supervisor.AgentProcedure = BEGIN SELECT event FROM EventTypes.aboutToBoot, EventTypes.aboutToBootPhysicalVolume => IF running THEN Stopper[]; ENDCASE => NULL; END; SetupTimeServerThings[]; END.