-- DebugFormat.mesa  last edit, Bruce  September 24, 1980  12:21 PM

DIRECTORY
  BcdDefs USING [SGIndex],
  Format USING [NumberFormat],
  MachineDefs USING [ConfigIndex, BYTE, GFHandle, WordLength],
  PrincOps USING [BytePC],
  Symbols USING [HTIndex, HTNull, SEIndex, SENull];

DebugFormat: DEFINITIONS =
  BEGIN OPEN MachineDefs;

  BitAddress: TYPE = RECORD [
    base: LONG POINTER,
    offset: [0..WordLength],
    local: BOOLEAN ← FALSE,
    useStack: BOOLEAN ← FALSE];

  Fob: TYPE = RECORD [
    xfer: BOOLEAN,
    hti: Symbols.HTIndex,
    there: BOOLEAN,
    typeOnly: BOOLEAN,
    tsei: Symbols.SEIndex,
    addr: BitAddress,
    words: CARDINAL,			-- normalized length
    bits: [0..WordLength),
    indent: [0..32),
    nesting: [0..32)];

  NullFob: Fob = [
    xfer: FALSE, hti: Symbols.HTNull, there: FALSE, typeOnly: FALSE,
    tsei: Symbols.SENull, addr: [NIL,0,FALSE], words: 0, bits: 0, indent: 0, nesting: 0];

  Foo: TYPE = POINTER TO Fob;

  BreakBlock: TYPE = RECORD [
    link: BBHandle,			-- link to other blocks
    gf: GFHandle,
    condition, exp: STRING,
    pc: PrincOps.BytePC,           -- relative pc
    num: CARDINAL, 
    inst: BYTE,                    -- old inst
    symbolsAvailable: BOOLEAN,
    there: BOOLEAN,
    step: BOOLEAN,
    bt: BreakType];

  CodeObject: TYPE = RECORD [
    config: ConfigIndex,
    seg: BcdDefs.SGIndex];

  BreakType: TYPE = RECORD [ex: EXOI, bt: BT];
  EXOI: TYPE = {entry, exit, octal, in};
  BT: TYPE = {break, trace};
  BBHandle: TYPE = POINTER TO BreakBlock;

  LongSubStringDescriptor: TYPE = RECORD [
    base: LONG STRING,
    offset, length: CARDINAL];
  LongSubString: TYPE = POINTER TO LongSubStringDescriptor;

  NumberFormat: TYPE = Format.NumberFormat;

  OctalFormat: NumberFormat = [8,FALSE,TRUE,6];

  END.