-- PackPilotEnviron.mesa -- Defines PackEnviron for Pilot -- Last edited by Lewis on 21-Jan-81 16:10:33 DIRECTORY BcdDefs USING [BCD, PackedString], Environment USING [Byte, charsPerWord, wordsPerPage], Inline USING [LongCOPY], Segments USING [DefaultANYBase, PageCount, PageNumber], Stream USING [PutByteProcedure], SymbolSegment USING [STHeader]; PackEnviron: DEFINITIONS IMPORTS Inline, Segments = BEGIN -- Types Byte: TYPE = Environment.Byte; StreamPosition: TYPE = LONG CARDINAL; PutByteProcedure: TYPE = Stream.PutByteProcedure; BcdStringHandle: TYPE = LONG POINTER TO BcdDefs.PackedString; BcdHandle: TYPE = LONG POINTER TO BcdDefs.BCD; SymSegHandle: TYPE = LONG POINTER TO SymbolSegment.STHeader; -- Useful constants PageSize: CARDINAL = Environment.wordsPerPage; CharsPerWord: CARDINAL = Environment.charsPerWord; CharsPerPage: CARDINAL = PageSize * CharsPerWord; BytesPerPage: CARDINAL = CharsPerPage; -- Segment bases SourceBcdSegmentBase: Segments.PageNumber = Segments.DefaultANYBase; SymbolSegmentBase: Segments.PageNumber = Segments.DefaultANYBase; -- Table storage size TablePages: Segments.PageCount = 170; -- Procedures Copy: PROC [from: LONG POINTER, nwords: CARDINAL, to: LONG POINTER] = Inline.LongCOPY; Zero: PROC [p: LONG POINTER, l: CARDINAL] = INLINE BEGIN IF l # 0 THEN {p↑ ← 0; Inline.LongCOPY[from: p, to: (p+1), nwords: (l-1)]}; END; SetBlock: PROC [p: LONG POINTER, v: UNSPECIFIED, n: UNSPECIFIED] = INLINE BEGIN IF n # 0 THEN {p↑ ← v; Inline.LongCOPY[from: p, to: (p+1), nwords: (n-1)]}; END; END.