-- BP.mesa  last edit, Johnsson  July 15, 1980  10:45 AM

DIRECTORY
  DebugFormat USING [BBHandle, BreakType, Foo],
  MachineDefs USING [GFHandle, UBBPointer],
  PrincOps USING [BytePC, SVPointer],
  Tree USING [NodeName];

BP: DEFINITIONS =
  BEGIN

  BBHandle: TYPE = DebugFormat.BBHandle;
  GFHandle: TYPE = MachineDefs.GFHandle;
  BytePC: TYPE = PrincOps.BytePC;

  -- Break Blocks
  WriteUserBB: PROCEDURE [ubb: MachineDefs.UBBPointer];
  FindUserBB: PROCEDURE [gf: GFHandle, pc: BytePC] RETURNS [CARDINAL];
  GetUserBB: PROCEDURE [gf: GFHandle, pc: BytePC] RETURNS [CARDINAL];
  FreeUserBB: PROCEDURE [gf: GFHandle, pc: BytePC];

  Alloc: PROC RETURNS [BBHandle];
  Free: PROC [BBHandle];

  DeleteBB: PROCEDURE [bb: BBHandle] RETURNS [last: BOOLEAN];
  FindBB: PROCEDURE [gf: GFHandle, pc: BytePC] RETURNS [bb: BBHandle];
  FindModBB: PROCEDURE [gf: GFHandle, pc: BytePC] RETURNS [bb: BBHandle];
  FindBBNum: PROC [CARDINAL] RETURNS [BBHandle];
  ResetBBs: PROCEDURE;
  EnumerateBBs: PROCEDURE [
    proc: PROC [BBHandle] RETURNS [BOOLEAN], gf: GFHandle ← NIL]
    RETURNS [BBHandle];

  -- Breakpoints
  BreakEntry, BreakExit, TraceEntry, TraceExit: PROC [proc: STRING];
  ClearEntryBreak, ClearXitBreak: PROC [proc: STRING];
  ClearEntryTrace, ClearXitTrace: PROC [proc: STRING];
  BreakAllEntries, BreakAllXits: PROCEDURE [mod, exp: STRING];
  TraceAllEntries, TraceAllXits: PROCEDURE [mod, exp: STRING];
  ClearAllEntries, ClearAllXits: PROCEDURE [mod: STRING];
  ClearBreak: PROC [bbNum: STRING];
  ClearDefault: PROC [BBHandle];

  AttachCondition: PROC [bbNum, cond: STRING];
  AttachExpression: PROC [bbNum, exp: STRING];
  ClearCondition: PROC [bbNum: STRING];
  ClearExpression: PROC [bbNum: STRING];
  ListBreak: PROC [bbNum: STRING];

  ClearAllBreaks, ListBreaks: PROCEDURE;

  -- Utilities

  OctalBreak, ClearOctal: PROCEDURE [gf, pc: STRING];

  Insert: PROCEDURE [
    gf: GFHandle, pc: BytePC, bt: DebugFormat.BreakType, haveSyms: BOOLEAN]
    RETURNS [bb: BBHandle];
  Remove: PROCEDURE [gf: GFHandle, pc: BytePC];

  Conditionalize: PROCEDURE [BBHandle, STRING];
  Condition: PROC [left: DebugFormat.Foo, rel: Tree.NodeName, right: DebugFormat.Foo];
  Expressionalize: PROCEDURE [BBHandle, STRING];

  List: PROC [BBHandle];

  Validate: PROCEDURE [PrincOps.SVPointer] RETURNS [BOOLEAN];

  Error: TYPE = {
    tooManyConditions, invalidRelation, conditionNotFound, size, stack,
    portI, notExchangable, notFound, noneSet, noSym, noFGT, inInline,
    alreadySet, noReturn, worryOn, spare1, spare2, spare3, spare4};
  Fail: SIGNAL [type: Error];

  AbortWithError: PROC [err: Error];
  WriteError: PROC [err: Error];
  AppendError: PROC [STRING, Error];


  END.