(**********************************************************************

    :Program.    ErrorReq.mod
    :Contents.   Requesters or Messages to handle Errors, Warnings...
    :Author.     Nicolas Benezan [bne]
    :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
    :Phone.      711/333679
    :Copyright.  Public Domain
    :Language.   Modula-2
    :Translator. M2Amiga AMSoft 3.2d
    :History.    V1.0b [bne] 27.Jan.1989 (extracted from MemSystem1.1)
    :History.    V1.1a [bne] 27.Jan.1989 (YesNoReq. modified, m2cV3.2)
    :History.    V1.2b [bne] 12.Feb.1989 (+ Assert)
    :History.    V1.3a [bne] 22.Mar.1989 (bug fixed)

**********************************************************************)

IMPLEMENTATION MODULE ErrorReq;

FROM SYSTEM     IMPORT ADDRESS, ADR;
FROM Arts       IMPORT Terminate, CurrentLevel, Requester, wbStarted;
FROM Dos        IMPORT Write, Output;
FROM Str        IMPORT Length, Concat, Copy;
IMPORT ASCII;

CONST   ReqWidth=320;
        ReqHeight=72;
VAR     LineFeed:ARRAY [0..0] OF CHAR;

PROCEDURE YesNoRequest(BodyText,PositiveText,NegativeText:ADDRESS):BOOLEAN;
BEGIN
  RETURN Requester(ADR(ErrHeader),BodyText,PositiveText,NegativeText);
END YesNoRequest;

PROCEDURE RecoverableExit(ReqBody,PosText,NegText:ADDRESS);
BEGIN
  IF NOT YesNoRequest(ReqBody,PosText,NegText) THEN
    ExitQuiet;
  END;
END RecoverableExit;

PROCEDURE DeadEndExit(ReqBody:ADDRESS);
VAR     Dummy:BOOLEAN;
BEGIN
  Dummy:=YesNoRequest(ReqBody,NIL,ADR(ABORT));
  ExitQuiet;
END DeadEndExit;

(*нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн*)
(* Assert CLI: writes message to current window WB: Requester           *)
(*нннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн*)
PROCEDURE Assert(Condition:BOOLEAN;Text:ADDRESS);
TYPE    String=ARRAY [0..80] OF CHAR;
VAR     Dummy:LONGINT;
        TextPtr:POINTER TO String;
        Line:String;
BEGIN
  IF NOT Condition THEN
    IF wbStarted THEN
      DeadEndExit(Text);
    ELSE
      TextPtr:=Text;
      Copy(Line,AssertMessage);
      Concat(Line,TextPtr^);
      Concat(Line,LineFeed);
      Dummy:=Write(Output(),ADR(Line),Length(Line));
      ExitQuiet;
    END;
  END;
END Assert;

PROCEDURE ExitQuiet;
BEGIN
  Terminate(CurrentLevel());
END ExitQuiet;

BEGIN
  ErrHeader:="Modula-2 Error Handler";
  AssertMessage:="Break (Assert): ";
  LineFeed:=ASCII.lf;
END ErrorReq.
