-- file: Replace.Mesa
-- edited by Brotz, October 12, 1981 3:24 PM

DIRECTORY
exD: FROM "ExceptionDefs",
inD: FROM "InteractorDefs",
intCommon,
opD: FROM "OperationsDefs",
tsD: FROM "TOCSelectionDefs",
vmD: FROM "VirtualMgrDefs";

Replace: PROGRAM
IMPORTS exD, inD, intC: intCommon, opD, tsD, vmD =

BEGIN

tnp: inD.TOCTextNbrPtr = intC.tocTextNbr;
toc: vmD.TOCHandle = intC.tocTextNbr.toc;
tocIndex: vmD.TOCIndex;
key: CARDINAL;

IF ~tnp.haveToc OR ~intC.cmTextNbr.haveMessage THEN
exD.DisplayExceptionString["No toc or message"L]
ELSE BEGIN
key ← vmD.WaitForLock[toc];
IF tsD.TOCSelectionEmpty[toc, key] THEN
BEGIN
exD.DisplayExceptionString["No message selected"L];
vmD.UnlockTOC[toc, key];
END
ELSE BEGIN
worked: BOOLEAN;
tocIndex ← tsD.LastSelectedEntry[toc, key];
inD.IndicateCommandBusy[intC.mailFileCommandHouse];
tsD.DeconsiderAll[tnp, key];
tsD.ResetTOCSelection[toc, key];
worked ← opD.ReplaceMailOperation
[delete: TRUE, toc: toc, msg: intC.cmTextNbr.message, index: tocIndex, key: key];
IF worked THEN
BEGIN
tsD.SetTOCSelection[toc, key, tocIndex];
inD.Consider[tocIndex, tocIndex, tnp, key];
END
ELSE exD.DisplayExceptionString["Not enough room to perform replace."L];
inD.UpdateTOCThumbLine[tnp, key];
vmD.UnlockTOC[toc, key];
inD.IndicateCommandFinished[intC.mailFileCommandHouse];
END;
END;

END. -- of Replace --