Copyright (C) 1994, Digital Equipment Corp.
MODULE VBTutils;
IMPORT Fmt, KeyTrans, Thread, VBT, Wr;
<* FATAL Thread.Alerted, Wr.Failure *>
PROCEDURE WriteCursorPosition (wr: Wr.T; READONLY cp: VBT.CursorPosition) =
CONST Not = ARRAY BOOLEAN OF TEXT {"not ", ""};
BEGIN
Wr.PutText (
wr, Fmt.F ("{CursorPos pt=[%s,%s] screen=%s %sgone %soffScreen}",
Fmt.Int (cp.pt.h), Fmt.Int (cp.pt.v), Fmt.Int (cp.screen),
Not [cp.gone], Not [cp.offScreen]))
END WriteCursorPosition;
PROCEDURE WriteKeyRec (wr: Wr.T; READONLY kr: VBT.KeyRec) =
BEGIN
Wr.PutText (wr, Fmt.F ("{KeyRec whatChanged=%s (%s) wentDown=%s ",
Fmt.Int (kr.whatChanged),
Fmt.Char (KeyTrans.Latin1 (kr.whatChanged)),
Fmt.Bool (kr.wentDown)));
WriteModifiers (wr, kr.modifiers);
Wr.PutChar (wr, ' ');
WriteTimeStamp (wr, kr.time);
Wr.PutChar (wr, '}')
END WriteKeyRec;
PROCEDURE WriteMiscRec (wr: Wr.T; READONLY cd: VBT.MiscRec) =
BEGIN
Wr.PutText (wr,
Fmt.F ("{MiscRec type=%s detail=<%s,%s> selection=%s ",
VBT.MiscCodeTypeName (cd.type),
Fmt.Int (cd.detail [0]), Fmt.Int (cd.detail [1]),
VBT.SelectionName (cd.selection)));
WriteTimeStamp (wr, cd.time);
Wr.PutChar (wr, '}')
END WriteMiscRec;
PROCEDURE WriteModifiers (wr: Wr.T; READONLY mods: VBT.Modifiers) =
CONST
ModifierNames = ARRAY VBT.Modifier OF
TEXT {
"Shift", "Lock", "Control", "Option", "Mod0", "Mod1",
"Mod2", "Mod3", "MouseL", "MouseM", "MouseR",
"Mouse0", "Mouse1", "Mouse2", "Mouse3", "Mouse4"};
BEGIN
Wr.PutText (wr, "{Modifiers");
FOR i := FIRST (VBT.Modifier) TO LAST (VBT.Modifier) DO
IF i IN mods THEN
Wr.PutChar (wr, ' ');
Wr.PutText (wr, ModifierNames [i])
END
END;
Wr.PutChar (wr, '}')
END WriteModifiers;
PROCEDURE WriteMouseRec (wr: Wr.T; READONLY cd: VBT.MouseRec) =
CONST
ButtonNames = ARRAY VBT.Button OF
TEXT {"MouseL", "MouseM", "MouseR", "Mouse0", "Mouse1",
"Mouse2", "Mouse3", "Mouse4"};
ClickNames = ARRAY VBT.ClickType OF
TEXT {"FirstDown", "OtherDown", "OtherUp", "LastUp"};
BEGIN
Wr.PutText (
wr, Fmt.F ("{MouseRec whatChanged=%s clickType=%s clickCount=%s ",
ButtonNames [cd.whatChanged], ClickNames [cd.clickType],
Fmt.Int (cd.clickCount)));
WriteCursorPosition (wr, cd.cp);
Wr.PutChar (wr, ' ');
WriteTimeStamp (wr, cd.time);
Wr.PutChar (wr, ' ');
WriteModifiers (wr, cd.modifiers);
Wr.PutText (wr, "}")
END WriteMouseRec;
PROCEDURE WritePositionRec (wr: Wr.T; READONLY pr: VBT.PositionRec) =
<* FATAL Wr.Failure, Thread.Alerted *>
BEGIN
Wr.PutText (wr, "{PositionRec ");
WriteCursorPosition (wr, pr.cp);
Wr.PutChar (wr, ' ');
WriteModifiers (wr, pr.modifiers);
Wr.PutChar (wr, ' ');
WriteTimeStamp (wr, pr.time);
Wr.PutChar (wr, '}')
END WritePositionRec;
PROCEDURE WriteTimeStamp (wr: Wr.T; t: VBT.TimeStamp) =
BEGIN
Wr.PutText (wr, Fmt.F ("{time %s}", Fmt.Unsigned (t, 10)))
END WriteTimeStamp;
BEGIN END VBTutils.