-- Grapevine: server support: internal DEFS for display
-- [Juniper]<Grapevine>MS>LogPrivateDefs.mesa
-- Roy Levin February 18, 1980 3:45 PM
-- Andrew Birrell 2-Jun-81 11:58:29
DIRECTORY
AltoDisplay: FROM "AltoDisplay" USING [
DCBchainHead, DCBnil, LongDCBSeal, MaxBitsPerLine, MaxScanLines, MaxWordsPerLine],
FontDefs: FROM "FontDefs" USING [FontHandle],
LogDefs: FROM "LogDefs" USING [Format, Percentage],
ProcessDefs: FROM "ProcessDefs" USING [Seconds],
TimeDefs: FROM "TimeDefs" USING [PackedTime];
LogPrivateDefs: DEFINITIONS =
BEGIN
-- Types and Related Constants --
DCB: TYPE = RECORD[
next: DCBHandle,
resolution: {high, low} ← high,
background: {white, black} ← white,
indenting: [0..77B], -- in units of 16 bits --
width: [0..377B], -- likewise; even --
shortBitmap: POINTER ← NIL,
tag: {short, long} ← short,
height: [0..77777B],
longBitmap: LONG POINTER ← NIL ];
dcbSeal: POINTER = AltoDisplay.LongDCBSeal;
DCBHandle: TYPE = POINTER TO DCB;
DCBnil: DCBHandle = LOOPHOLE[AltoDisplay.DCBnil];
DCBchainHead: POINTER TO DCBHandle = LOOPHOLE[AltoDisplay.DCBchainHead];
NumberHouseObject: TYPE = RECORD [
leftX, width: ScreenPoints,
dcb: DCBHandle,
caption: STRING,
item: SELECT format: LogDefs.Format FROM
short => [max, min: CARDINAL, p: POINTER TO UNSPECIFIED],
long => [max, min: LONG CARDINAL, p: POINTER TO LONG CARDINAL],
percent => [max, min: LogDefs.Percentage,
p: POINTER TO LogDefs.Percentage],
ENDCASE];
NumberHouse: TYPE = POINTER TO NumberHouseObject;
ScreenPoints: TYPE = [0..MAX[AltoDisplay.MaxBitsPerLine,
AltoDisplay.MaxScanLines]);
BitmapState: TYPE = RECORD[ -- similar to FontDefs, but LONG origin --
origin: LONG POINTER,
wordsPerLine, x, y: [0..77777B] ];
BMStatePtr: TYPE = POINTER TO BitmapState;
Face: TYPE = {plain, bold, italic};
Cursor: TYPE = ARRAY [0..16) OF UNSPECIFIED;
Machine: TYPE = { altoI, xmesa39, altoMesa, dMachine };
-- Screen Parameters --
maxBMWordsPerLine: CARDINAL = AltoDisplay.MaxWordsPerLine;
screenPointsPerWord: ScreenPoints = 16;
marginWords: CARDINAL = 2; -- equal words on each side
bmWordsPerLine: CARDINAL = maxBMWordsPerLine - 2*marginWords;
bmPointsPerLine: ScreenPoints = screenPointsPerWord*bmWordsPerLine;
leftMargin: ScreenPoints = screenPointsPerWord*marginWords;
rightMargin: ScreenPoints = leftMargin + bmPointsPerLine;
italicSlant: CARDINAL = 3; -- (approximate) slope of italics
topMargin: ScreenPoints = 60; -- should be even
spaceAfterHeading: ScreenPoints = 20; -- should be even
spaceAfterStatus: ScreenPoints = 14; -- should be even
interValueSeparatorWidth: ScreenPoints = 15;
intraValueSeparatorWidth: ScreenPoints = 4;
-- Global Variables --
houses: DESCRIPTOR FOR ARRAY OF NumberHouseObject;
statsFont: FontDefs.FontHandle;
scriptFont: FontDefs.FontHandle;
startUpTime: TimeDefs.PackedTime;
uptimeHouse: NumberHouseObject;
typescriptOn: BOOLEAN;
headingDCB, firstScriptDCB, lastScriptDCB, firstScriptLineDCB: DCBHandle;
scriptCurrentDCB: DCBHandle;
scriptBMStatePtr: BMStatePtr;
machineFlavor: Machine;
-- Miscellaneous Declarations --
IllegalUseOfLog: ERROR;
cursorBM: POINTER TO Cursor = LOOPHOLE[431B];
-- Procedures --
LogDisplayHot: PROGRAM;
Displayer: PROCEDURE [waitInterval: ProcessDefs.Seconds];
-- expects to be FORKed. Loops until aborted, waiting for the argument
-- interval, then updates the statistics display.
PutStringInBitmap: PROCEDURE [
s: STRING, font: FontDefs.FontHandle, face: Face, bmState: BMStatePtr];
-- computes the width in ScreenPoints of the string 's' presented in
-- 'font' and 'face'.
AppendElapsedTime: PROCEDURE [s: STRING, pt: TimeDefs.PackedTime];
-- appends to 's' a time derived from 'pt' of the form: 1314:35:28.
Even: PROCEDURE [v: UNSPECIFIED] RETURNS [UNSPECIFIED];
-- rounds 'v' up to an even number.
Zero: PROC[p: LONG POINTER, count: CARDINAL];
-- zeros "count" words starting at "p".
END.