DEFINITION MODULE DebugDef;
(*$ Implementation:=FALSE *)
(* 21.06.92/bp Zwischenstufe vor Runtime *)
(* wird direkt von m2l importiert! *)

FROM SYSTEM	IMPORT	ADDRESS;
FROM Arts	IMPORT	ModName,ErrorFrame;
FROM ExecD	IMPORT	Message;

CONST
  debPortName='m2debug.port';

  (* Feld magic in DebugMsg legt Aktion fest: *)
  magicTerminate = 4A931234H; (* Beende Debugprozess *)
  magicForget = 77654329H; (* sollte jeder Task am Schluß senden! *)
  magicDebug = 1; (* Debug me! *)
  magicDebugAndStay = 2; (* Debug me and let Screen open! *)
  (* Rückgabewerte des Debuggers im Feld magic: *)
  magicOk = -1;
  magicErr = 0;

TYPE

  CPUType = [0..8];

  ErrorFramePtr = POINTER TO ErrorFrame;

  ModuleInfo=RECORD
    modname:ModName;
    bssmerged:BOOLEAN;
    cpuType: CPUType; (* welches Object eingebunden? wichtig für ref! *)
    mObj,
    posInfo:ADDRESS; (* mObj und posInfo nur für Debugger! *)
    modcodeSize:LONGINT;
    modcode,
    modbss:ADDRESS;
  END;
  ModuleInfo2=RECORD
    modini:ADDRESS; (* offset zu A4 oder absAdr *)
    inimerged:BOOLEAN; (* mergeddata? *)
  END;

  DebugInfoPtr = POINTER TO DebugInfo;
  DebugInfo2Ptr = POINTER TO RECORD
    modCount:LONGINT; (* zum Testen für Debugger *)
    arr2:ARRAY[0..1000] OF ModuleInfo2;
  END;

  DebugInfo = RECORD
    modCount:LONGINT;
    arr: ARRAY [0..1000] OF ModuleInfo;
    (*arr2:ARRAY[0..1000] OF ModuleInfo2; *)
  END;

  DebugMsgPtr = POINTER TO DebugMsg;
  DebugMsg = RECORD
    msg:Message;
    (*
     *  magic zur Unterscheidung von Versionen und Aktionen!
     *)
    magic:LONGINT;
    process: ADDRESS; (* Task/Process to debug *)
    info: DebugInfoPtr;
    frame:ErrorFramePtr;
  END;

END DebugDef.
