-- ALEFormat.mesa 
--   Edited by Sweet, September 26, 1980  9:56 AM

DIRECTORY
  ALEOps;
ALEFormat: DEFINITIONS =
  BEGIN
  PictureBase: TYPE = BASE POINTER TO Header;
  SubTableBase: TYPE = BASE POINTER TO SubTable;
  SubTable: TYPE = RECORD[UNSPECIFIED];
  BlockDescriptor: TYPE = RECORD [
    offset: PictureBase RELATIVE POINTER TO SubTable,
    length: CARDINAL];
  NullDescriptor: BlockDescriptor = [LOOPHOLE[0], 0];

  IndexRange: CARDINAL = 37777B;

  Password: CARDINAL = 9260;
  Header: TYPE = RECORD [
    password: CARDINAL ← Password,
    hash: BlockDescriptor ← NullDescriptor,
    string: BlockDescriptor ← NullDescriptor,
    points: BlockDescriptor ← NullDescriptor,
    lines: BlockDescriptor ← NullDescriptor,
    labels: BlockDescriptor ← NullDescriptor];

  Point: TYPE = RECORD [pos: ALEOps.APosition];
  PointIndex: TYPE = SubTableBase RELATIVE POINTER [0..IndexRange] TO Point;

  Line: TYPE = RECORD [
    width: ALEOps.LineWidth,
    p1: PointIndex,
    texture: ALEOps.LineTexture,
    p2: PointIndex];
  LineIndex: TYPE = SubTableBase RELATIVE POINTER [0..IndexRange] TO Line;

  Label: TYPE = RECORD [
    font: ALEOps.FontSize,
    mode: ALEOps.LabelMode,
    hti: ALEOps.HTIndex,
    pos: ALEOps.APosition];
  LabelIndex: TYPE = SubTableBase RELATIVE POINTER [0..IndexRange] TO Label;

  END.