-- LogRep.mesa
-- Defines storage format of disk log.
-- Last edited by
-- MBrown on January 30, 1984 10:04:27 am PST
DIRECTORY
AlpineEnvironment,
AlpineInternal,
Log;
LogRep: DEFINITIONS =
BEGIN
wordsPerPage: CARDINAL = AlpineEnvironment.wordsPerPage;
RecordID: TYPE = Log.RecordID;
RecordType: TYPE = Log.RecordType;
StrBody: TYPE = AlpineInternal.StrBody;
PageVersion: TYPE = [0..1];
Header: TYPE = MACHINE DEPENDENT RECORD [
valid: BOOL,
version: PageVersion,
hasContinuation: BOOL,
isContinuation: BOOL,
unused: [0..7] ← 0,
nWords: [0..AlpineEnvironment.wordsPerPage]
-- includes SIZE[Header] words for the header itself
];
-- A Header record with nWords=0 and arbitrary other values is used to terminate a page.
RecordTypeHeader: TYPE = MACHINE DEPENDENT RECORD [
pad: [0..1] ← 0,
type: RecordType ];
NoopRecord: TYPE = MACHINE DEPENDENT RECORD [
pad: [0..1] ← 0,
type: RecordType ← noop,
fillPage: ARRAY [0..fillCount) OF WORD ← ALL[0] ];
fillCount: CARDINAL = wordsPerPage-SIZE[Header]-SIZE[RecordTypeHeader];
AssertNoopRecordSizeOK: CARDINAL [wordsPerPage .. wordsPerPage] =
SIZE[NoopRecord] + SIZE[Header];
CheckpointCompleteRecord: TYPE = MACHINE DEPENDENT RECORD [
pad: [0..1] ← 0,
type: RecordType ← checkpointComplete,
thisRecordID: RecordID ← TRASH,
startAnalysisRecordID: RecordID,
keepRecordID: RecordID,
myFileStore: StrBody ← []];
CheckpointCompleteRecordSize: PROC [nChars: NAT] RETURNS [size: CARDINAL] = INLINE {
RETURN [CheckpointCompleteRecord.SIZE - StrBody.SIZE + TEXT[nChars].SIZE] };
TransactionHeader: TYPE = MACHINE DEPENDENT RECORD [
pad: [0..1] ← 0,
type: RecordType,
transID: AlpineEnvironment.TransID ];
RestartRecord: TYPE = MACHINE DEPENDENT RECORD [
wordNumberForCheckpointCompleteRecord: INT,
recordIDForCheckpointCompleteRecord: RecordID ];
-- written in restart file, not in log
END.
CHANGE LOG
Created by MBrown on May 24, 1982 10:16 pm