-- file: EditorMisc.Mesa -- edited by Brotz, April 15, 1981 3:06 PM DIRECTORY Ascii, DMSTimeDefs, dsD: FROM "DisplayDefs", Editor, exD: FROM "ExceptionDefs", inD: FROM "InteractorDefs", intCommon: FROM "IntCommon", ovD: FROM "OverviewDefs", TimeDefs, vmD: FROM "VirtualMgrDefs"; EditorMisc: PROGRAM IMPORTS DMSTimeDefs, Editor, exD, inD, intC: intCommon, TimeDefs, vmD EXPORTS Editor = BEGIN OPEN Editor, inD; TCommand: PUBLIC PROCEDURE [mnp: MessageTextNbrPtr] = BEGIN target: TextSelectionPtr = @intC.target; modelessEditor: BOOLEAN = (intC.editorType = modeless); timeString: STRING _ [DMSTimeDefs.timeStringLength]; start: ovD.CharIndex _ IF modelessEditor THEN target.point ELSE target.start; targetIndex, end: ovD.CharIndex; deletedChars: CARDINAL _ 0; composedMessage: vmD.ComposeMessagePtr = LOOPHOLE[mnp.message]; IF ~modelessEditor OR intC.newTargetSelection THEN BEGIN ResetBuffers[mnp]; targetIndex _ 0; IF modelessEditor AND target.pendingDelete THEN BEGIN start _ target.start; InsertRangeInMess[targetIndex: 0, targetMessage: mnp.deletionBuffer, from: vmD.MessageRange[start, target.end, composedMessage]]; vmD.DeleteRangeInMessage [from: vmD.MessageRange[start, target.end, composedMessage]]; deletedChars _ target.end - start; InitializeSelection[target]; intC.commandType _ replace; END ELSE intC.commandType _ insert; intC.actionPoint _ start; DeUnderlineSelection[target, target]; intC.newTargetSelection _ FALSE; END ELSE BEGIN -- continue modeless insertion -- targetIndex _ vmD.GetMessageSize[mnp.insertionBuffer]; intC.commandType _ SELECT intC.commandType FROM delete, replace => replace, ENDCASE => insert; END; DMSTimeDefs.MapPackedTimeToTimeZoneString [LOOPHOLE[TimeDefs.CurrentDayTime[]], timeString, laurelMsg]; vmD.StartMessageInsertion[composedMessage, start]; [] _ vmD.InsertSubstringInMessage [composedMessage, timeString, 0, timeString.length]; vmD.StopMessageInsertion[composedMessage]; end _ start + timeString.length; target^ _ TextSelection[mnp, start, end, end, char, FALSE]; IF modelessEditor THEN target.start _ end; InsertRangeInMess [targetIndex: targetIndex, targetMessage: mnp.insertionBuffer, from: vmD.MessageRange[start, end, composedMessage]]; UpdateScreen[start: start, nCharsDeleted: deletedChars, nCharsInserted: timeString.length,mnp: mnp]; TurnOnDeliver[]; END; -- of TCommand -- BracketCommand: PUBLIC PROCEDURE [mnp: MessageTextNbrPtr, char: CHARACTER] = BEGIN target: TextSelectionPtr = @intC.target; start, end: ovD.CharIndex; hyphens: STRING = "------------------- "L; composedMessage: vmD.ComposeMessagePtr _ LOOPHOLE[mnp.message]; bracketLength: CARDINAL = IF char = '- THEN hyphens.length ELSE 1; ResetBuffers[mnp]; intC.actionPoint _ start _ target.start; intC.commandType _ replace; end _ target.end; InsertRangeInMess [targetIndex: 0, targetMessage: mnp.deletionBuffer, from: vmD.MessageRange[start, end, composedMessage]]; vmD.StartMessageInsertion[composedMessage, end]; IF char = '- THEN [] _ vmD.InsertSubstringInMessage[composedMessage, hyphens, 0, hyphens.length] ELSE [] _ vmD.InsertMessageChar [composedMessage, SELECT char FROM 'b => Ascii.ControlB, '[ => '], '< => '>, '( => '), '{ => '}, ENDCASE => char]; vmD.StopMessageInsertion[composedMessage]; vmD.StartMessageInsertion[composedMessage, start]; IF char = '- THEN [] _ vmD.InsertSubstringInMessage[composedMessage, hyphens, 0, hyphens.length] ELSE [] _ vmD.InsertMessageChar [composedMessage, SELECT char FROM 'b => Ascii.ControlA, '' => 140C, ENDCASE => char]; vmD.StopMessageInsertion[composedMessage]; target.point _ target.end _ end + bracketLength; target.start _ target.start + bracketLength; target.mode _ char; target.pendingDelete _ FALSE; InsertRangeInMess [targetIndex: 0, targetMessage: mnp.insertionBuffer, from: vmD.MessageRange[start, end + 2 * bracketLength, composedMessage]]; UpdateScreen[start: start, nCharsDeleted: end - start, nCharsInserted: end - start + 2 * bracketLength, mnp: mnp]; target.point _ target.end; intC.newTargetSelection _ TRUE; END; -- of BracketCommand -- ButlersBoundaryCommand: PUBLIC PROCEDURE [commandNumber: CARDINAL] = BEGIN tocCommandLines: CARDINAL _ intC.TOCCommandRegion.bottomY - intC.TOCCommandRegion.topY; linesAvailable: CARDINAL _ intC.tocTextNbr.nLines + intC.dmTextNbr.nLines + intC.cmTextNbr.nLines; textNbrSizes: TextNbrSizes _ intC.boundarySet[commandNumber]; total: CARDINAL _ textNbrSizes.toc + textNbrSizes.dm + textNbrSizes.cm; tocLines, dmLines, cmLines: CARDINAL; IF total = 0 THEN RETURN; tocLines _ (textNbrSizes.toc * linesAvailable) / total; cmLines _ (textNbrSizes.cm * linesAvailable) / total; dmLines _ linesAvailable - tocLines - cmLines; AdjustBoundaries [tocdmY: intC.TOCRegion.topY + dsD.lineHeight * tocLines, dmcmY: intC.TOCRegion.topY + tocCommandLines + dsD.lineHeight * (tocLines+dmLines)]; END; -- of ButlersBoundaryCommand -- UnrecognizedCommand: PUBLIC PROCEDURE = BEGIN s: STRING _ [70]; char: CHARACTER; exD.GetExceptionString[exD.unrecCommand, s]; exD.AppendExceptionString[exD.pressToContinue, s]; exD.DisplayBothExceptionLines[s, exD.nil, NIL, exD.commandsAre]; DO UNTIL ~intC.keystream.endof[intC.keystream] DO IdleLoop[]; ENDLOOP; IF (char _ intC.keystream.get[intC.keystream]) = cancelCode OR char = Ascii.DEL THEN EXIT; ENDLOOP; exD.ClearExceptionsRegion[]; END; -- of UnrecognizedCommand -- END. -- of EditorMisc --z20461(529)\f1