-- File: PerfOps.mesa Edited by
-- Sandman on September 4, 1980  10:36 AM
-- Karlton on June 24, 1980  6:35 PM

DIRECTORY
  FormSW USING [EnumeratedNotifyProcType, ItemHandle, NotifyProcType],
  MachineDefs USING [GFHandle],
  PerfPrivate USING [
    HistBase, HistClass, HistIndex, HistType, LegAddClass, LegIndex, LegTab,
    LegTrackClass, NodeID, NodeIndex, NodeTab, Number, PCR, ReadWrite];

PerfOps: DEFINITIONS =
  BEGIN OPEN PerfPrivate;

  GetHistBase: PROCEDURE [ReadWrite] RETURNS [histBase: HistBase];
  GetLegTable: PROCEDURE [ReadWrite] RETURNS [leg: POINTER TO LegTab];
  GetNodeTable: PROCEDURE [ReadWrite] RETURNS [node: POINTER TO NodeTab];
  GetPCR: PROCEDURE [ReadWrite] RETURNS [pCR: PCR];

  GetConfigAndModuleName: PROCEDURE [
    frame: MachineDefs.GFHandle, config, module: STRING];
  FindIndex: PROCEDURE [NodeID, POINTER TO NodeTab, PCR] RETURNS [NodeIndex];
  NoContext: SIGNAL;

  Error: TYPE = {
    notOn, goofUp, syntaxError, badLeg, badChar, noLegRoom, badNode, version,
    noContext, badProcess};

  PostError: PROCEDURE [error: Error];

  PerfMessage: TYPE = {
    getLeg, successor, none, all, totalTime, elapsedTime, totalOverhead, nBreaks,
    avgOverhead, percentInMont, tooSmall, processes, process, legs, aborted};

  PutMessage: PROCEDURE [message: PerfMessage];

  TurnOn: PROCEDURE;
  TurnOff: PROCEDURE RETURNS [BOOLEAN];
  ClearTables: PROCEDURE;
  CollectNodes: PROCEDURE;
  ZeroCounts: PROCEDURE;
  DeleteLeg: PROCEDURE [index: LegIndex];
  SetProcess: PROCEDURE;
  AddLeg: PROCEDURE [from, to: NodeIndex];
  NodeIDToBpNum: PROCEDURE [id: NodeID] RETURNS [CARDINAL];
  BpNumToNodeID: PROCEDURE [num: CARDINAL] RETURNS [id: NodeID];
  FindNodeIndex: PROCEDURE [
    id: NodeID, nodeTable: POINTER TO NodeTab, nNodes: CARDINAL]
    RETURNS [CARDINAL];
  PrintTables: PROCEDURE;
  PrintNodeTable: PROCEDURE;
  PrintLegTable: PROCEDURE;
  WriteNodeTableHeader: PROCEDURE;
  WriteLegTableHeader: PROCEDURE;
  DeleteHist: PROCEDURE [HistIndex];
  AddHistogram, DeleteHistogram, PrintHistogram: PROCEDURE;
  InitSession: PROCEDURE;

  ParamIndex: TYPE = {
    mon, collect, init, zero, condition, printtables, printnodes, printlegs,
    addleg, from, to, delete, leg, mode, add, track, setProcess, process,
    histcommands, addhist, delhist, printhist, histType, histClass, histNode,
    histLeg, buckets, scale, base};

  Params: TYPE = DESCRIPTOR FOR ARRAY ParamIndex OF FormSW.ItemHandle;

  ParamNotify: FormSW.NotifyProcType;
  ParamEnumNotify: FormSW.EnumeratedNotifyProcType;

  GetFromNode: PROCEDURE RETURNS [NodeIndex];
  GetToNode: PROCEDURE RETURNS [NodeIndex];
  GetDeleteLeg: PROCEDURE RETURNS [LegIndex];
  GetHistNode: PROCEDURE RETURNS [NodeIndex];
  GetHistLeg: PROCEDURE RETURNS [LegIndex];
  GetBuckets: PROCEDURE RETURNS [CARDINAL];
  GetScale: PROCEDURE RETURNS [CARDINAL];
  GetBase: PROCEDURE RETURNS [Number];

  monitorOn: BOOLEAN;
  addMode: LegAddClass;
  trackMode: LegTrackClass;
  process: STRING;
  histType: HistType;
  histClass: HistClass;

  END..