-- Copyright (C) 1981, 1984  by Xerox Corporation. All rights reserved. 
-- PolicyDefs.mesa, Transport Mechanism Mail Server - DEFS for policy module --

-- HGM: 16-Dec-84  1:26:24
-- Randy Gobbel		19-May-81 18:43:01 --
-- Andrew Birrell	September 13, 1982 3:47 pm --
-- Hankins		20-Aug-84 17:21:23

DIRECTORY
  Time USING [Packed];

PolicyDefs: DEFINITIONS =

  BEGIN



  -- Egg-timer --

  Wait: PROC [
    days: CARDINAL ← 0, hrs: [0..24) ← 0, mins: [0..60) ← 0, secs: [0..60) ← 0];
  -- Returns after specified time has elapsed --

  WaitUntil: PROC [time: Time.Packed];
  -- Returns at the specified time --



  -- Compactor scheduling strategy --

  CompactorStart: PROC;
  -- Returns when it is appropriate for compactor to start a cycle --

  CompactorPause: PROC;
  -- Returns after a pause suitable for the compactor between pages --

  AmountOfFreeHeap: PROC [[0..100]];
  -- Notifies the percentage of the heap currently empty --

  GapExists: PROC;
  -- Notifies the fact that there is now an empty area in the heap --



  -- Other Time delays --

  PeriodicProcess: TYPE = {readPending, prodServers, archiver, regPurger};

  PeriodicWait: PROC [process: PeriodicProcess];

  Activate: PROC [process: PeriodicProcess];

  ReadPendingPause: PROC = INLINE {PeriodicWait[readPending]};

  ProdServersPause: PROC = INLINE {PeriodicWait[prodServers]};

  ArchiverPause: PROC = INLINE {PeriodicWait[archiver]};

  RegPurgerPause: PROC = INLINE {PeriodicWait[regPurger]};

  -- Control of operations --

  Operation: TYPE = {
    work,  -- any form of operation --
    connection,  -- any form of connection --
    clientInput,  -- receiver accepting input from client --
    serverInput,  -- receiver accepting input from server --
    readMail,  -- client reading mail --
    regExpand,  -- RServer connections --
    FTP,  -- FTP server --
    telnet,  -- miscellaneous Telnet connections --
    mainLine,  -- main server processes --
    readExpress,  -- reading express-mail queue --
    readInput,  -- reading input queue --
    readPending,  -- reading pending queue --
    readMailbox,  -- reading locked mailbox queue --
    readForward,  -- reading forward queue --
    remailing,  -- transfering mail from inbox to input --
    background,  -- non-urgent background stuff --
    RSReadMail,  -- R-Server reading internal mail --
    MSReadMail,  -- M-Server reading internal mail --
    archiver,  -- Mailbox archiver process --
    regPurger  -- R-Server BTree cleanup --
    };

  WaitOperation: PROC [op: Operation];
  -- Returns when the given operation is permissable, and notes that it is
  -- in progress --

  CheckOperation: PROC [op: Operation, set: BOOLEAN ← TRUE] RETURNS [BOOLEAN];
  -- Returns whether the given operation is permissable, and if it is
  -- permissable and set is true, itnotes that it is in progress --

  EndOperation: PROC [op: Operation];
  -- Notifies that the operation has been completed --

  OpLimit: TYPE = [0..128);
  -- Limit on instances of operations, used in Control (below) --

  Control: TYPE = RECORD [limit: OpLimit, allowed: BOOLEAN];
  -- values for operation controls, below --

  ReadOperationControl: PROC [op: Operation] RETURNS [Control];
  -- Returns the control on the given operation --

  SetOperationLimit: PROC [op: Operation, limit: OpLimit];
  -- Sets the limit on the given operation --

  SetOperationAllowed: PROC [op: Operation, allowed: BOOLEAN];
  -- allows or disallows the given operation --

  SetTelnetAllowed: PROC;
  -- allows everything needed for telnet connections --

  ReadOperationCurrent: PROC [op: Operation] RETURNS [OpLimit];
  -- returns current count for the operation --

  END.