-- File: HostWatcherOps.mesa,  Last Edit: HGM  February 9, 1981  10:15 AM

DIRECTORY
  System USING [gmtEpoch, GreenwichMeanTime],
  PupDefs USING [PupBuffer],
  PupTypes USING [fillInPupAddress, PupAddress];

HostWatcherOps: DEFINITIONS =
  BEGIN

  Mode: TYPE = {gate, chat, ftp, mail, librarian, spruce, eftp};

  State: TYPE = {inaccessible, up, full, down, rejecting, timeout, unknown};

  UpDown: TYPE = {unknown, up, down};

  Info: TYPE = POINTER TO InfoObject;
  InfoObject: TYPE = RECORD [
    name: STRING,
    to, cc, full: STRING,
    address: PupTypes.PupAddress,
    mode: Mode,
    state: State ← unknown,
    upDown: UpDown ← unknown, -- the last time we knew what was happening
    probes: LONG CARDINAL ← 0,
    counters: ARRAY State OF LONG CARDINAL ← ALL[0],
    lastUp: System.GreenwichMeanTime ← System.gmtEpoch,
    lastGateway: PupTypes.PupAddress ← PupTypes.fillInPupAddress,
    lastHops, previousHops: CARDINAL ← 0,
    noPath: BOOLEAN ← TRUE,
    lastLineChanged, lastHopUsesPhoneLine: BOOLEAN ← FALSE,
    foundLastGateway, lastGatewayOk: BOOLEAN ← FALSE,
    text: STRING,
    next: Info];

  PokeGateway: PROCEDURE [info: Info];
  PokeChat: PROCEDURE [info: Info];
  PokeFtp: PROCEDURE [info: Info];
  PokeMail: PROCEDURE [info: Info];
  PokeLibrarian: PROCEDURE [info: Info];
  PokeSpruce: PROCEDURE [info: Info];
  PokeEftp: PROCEDURE [info: Info];

  ShowErrorPup: PUBLIC PROCEDURE [b: PupDefs.PupBuffer];

  END.