-- TexError.mesa

-- last written by Doug Wyatt, November 10, 1979  5:43 PM

DIRECTORY
	TexErrorDefs: FROM "TexErrorDefs",
	TexIODefs: FROM "TexIODefs",
	TexMemDefs: FROM "TexMemDefs",
	TexStringDefs: FROM "TexStringDefs",
	TexSynDefs: FROM "TexSynDefs";

TexError: PROGRAM
IMPORTS TexIODefs,TexMemDefs,TexStringDefs,TexSynDefs
EXPORTS TexErrorDefs =
BEGIN

errString: STRING←NIL;
errStream: TexStringDefs.StringHandle←NIL;

EndOfTex: PUBLIC ERROR = CODE;

Error: PUBLIC PROCEDURE[s: STRING] =
	BEGIN OPEN TexIODefs;
	c: CHARACTER;
	Cr; Ws["! "]; Ws[s]; Ws["."];
	TexSynDefs.DumpContext;
	IF NOT pause THEN RETURN;
	DO
	Cr; Wc['↑]; c←ReadChar[];
	SELECT c FROM
		CR => RETURN; -- press on
		LF => BEGIN pause←FALSE; RETURN END;
		'X,'x =>
			BEGIN
			Ps["Type x again to exit:"];
			c←ReadChar[];
			SELECT c FROM
				'X,'x => ERROR EndOfTex;
				ENDCASE;
			END;
		ENDCASE => Ps["Type <cr> to continue, <lf> to flash error messages,
   x or X to quit.
"];
	ENDLOOP;
	END;

BackError: PUBLIC PROCEDURE[s: STRING] =
	BEGIN
	TexSynDefs.BackInput; Error[s];
	END;

pause: BOOLEAN←TRUE;

PausingOnErrors: PUBLIC PROCEDURE[b: BOOLEAN] =
	BEGIN
	pause←b;
	END;

BeginError: PUBLIC PROCEDURE =
	BEGIN
	TexIODefs.SetStream[errStream]; errStream.reset[errStream];
	END;

EndError: PUBLIC PROCEDURE RETURNS[STRING] =
	BEGIN
	TexIODefs.UseDisplay;
	RETURN[errString];
	END;

Confusion: PUBLIC SIGNAL = CODE;
OverFlow: PUBLIC ERROR[s: STRING] = CODE;
PageEndError: PUBLIC SIGNAL = CODE;

-- initialization

errString←TexMemDefs.AllocString[100];
errStream←TexStringDefs.CreateStringStream[errString];

END.