-- File RasterLogFontImpl.mesa -- last edited by Strickberger 19-Jul-85 1:22:31 -- Copyright (C) Xerox Corporation 1982, 1983, 1984, 1985. All rights reserved. DIRECTORY BandBLT USING [BlItem, charCmd, Font], BandBLTImage USING [BandlistSequence, FontloadSequence, Handle, Transfer], Environment USING [PageCount], File USING [nullFile], Heap USING [systemZone], RasterLogFont USING [], Space USING [Class, Interval, Life, Map, PageCount, wordsPerPage], StringSequence USING [Handle]; RasterLogFontImpl: PROGRAM IMPORTS Heap, Space EXPORTS RasterLogFont = BEGIN -- Constants: bandlistSequenceLength: CARDINAL = 1; bandlistSpaceCount: Space.PageCount = 32; fontloadInkwellSpaceCount: Space.PageCount = 1; fontloadLeftoverSpaceCount: Space.PageCount = 1; fontloadRasterSpaceCount: Space.PageCount = 5; fontloadSequenceLength: CARDINAL = 1; fontloadVectorSpaceCount: Space.PageCount = 2; -- Variables: transferInternal: BandBLTImage.Handle; -- PUBLIC PROCEDUREs: TransferStringSequence: PUBLIC PROCEDURE [sequence: StringSequence.Handle] RETURNS [transfer: BandBLTImage.Handle] = BEGIN bandList: LONG POINTER; BandlistFull: PROCEDURE RETURNS [full: BOOLEAN] = BEGIN RETURN[ full: (bandList - transferInternal.bandlists[0].bandlist.pointer) > (bandlistSpaceCount*Space.wordsPerPage - SIZE[BandBLT.BlItem])]; END; bandCountPerLine: CARDINAL = 2; emptyLeadingBandCount: CARDINAL = 10; xLocation: CARDINAL [0B..17B] = 0B; yDisplacement: CARDINAL [0B..7777B] = 22B; yLocation: CARDINAL [0B..7777B]; yOffset: CARDINAL [0B..7777B] = 220B; bandList ¬ transferInternal.bandlists[0].bandlist.pointer; THROUGH [FIRST[CARDINAL]..emptyLeadingBandCount) UNTIL BandlistFull[] DO LOOPHOLE[bandList, LONG POINTER TO endOfBand BandBLT.BlItem]­ ¬ BandBLT.BlItem[endOfBand[]]; bandList ¬ bandList + SIZE[endOfBand BandBLT.BlItem]; ENDLOOP; FOR i: CARDINAL IN [FIRST[CARDINAL]..sequence.length) UNTIL BandlistFull[] DO yLocation ¬ yOffset; FOR column: CARDINAL IN [FIRST[CARDINAL]..sequence[i].length) UNTIL BandlistFull[] DO LOOPHOLE[bandList, LONG POINTER TO char BandBLT.BlItem]­ ¬ BandBLT.BlItem[ char[ type: BandBLT.charCmd, font: 0, cc: LOOPHOLE[sequence[i][column]], xloc: xLocation, yloc: yLocation]]; bandList ¬ bandList + SIZE[char BandBLT.BlItem]; yLocation ¬ yLocation + yDisplacement; ENDLOOP; THROUGH [FIRST[CARDINAL]..bandCountPerLine) UNTIL BandlistFull[] DO LOOPHOLE[bandList, LONG POINTER TO endOfBand BandBLT.BlItem]­ ¬ BandBLT.BlItem[endOfBand[]]; bandList ¬ bandList + SIZE[endOfBand BandBLT.BlItem]; ENDLOOP; ENDLOOP; LOOPHOLE[bandList, LONG POINTER TO endOfPage BandBLT.BlItem]­ ¬ BandBLT.BlItem[endOfPage[]]; RETURN[transfer: transferInternal]; END; -- PRIVATE PROCEDUREs: Initialize: PROCEDURE = BEGIN InitializeRasters: PROCEDURE = BEGIN fontBitMapMemory: LONG POINTER TO FontBitMapMemory = transferInternal.fontloads[0].rasters.pointer; fontBitMapMemory­ ¬ [ [ 16, 16, [ 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B]], --" " [ 16, 16, [ 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 00000B]], --"!" [ 16, 16, [ 07070B, 07070B, 07070B, 07070B, 07070B, 07070B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B]], --""" [ 16, 16, [ 07070B, 07070B, 07070B, 77777B, 77777B, 77777B, 07070B, 07070B, 07070B, 77777B, 77777B, 77777B, 07070B, 07070B, 07070B, 00000B]], --"#" [ 16, 16, [ 77777B, 77777B, 77777B, 77700B, 77700B, 77700B, 00700B, 00700B, 00700B, 00777B, 00777B, 00777B, 77777B, 77777B, 77777B, 00000B]], --"$" [ 16, 16, [ 70007B, 70007B, 70007B, 00070B, 00070B, 00070B, 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 70007B, 70007B, 70007B, 00000B]], --"%" [ 16, 16, [ 77700B, 77700B, 77700B, 70700B, 70700B, 70700B, 70707B, 70707B, 70707B, 70777B, 70777B, 70777B, 77707B, 77707B, 77707B, 00000B]], --"&" [ 16, 16, [ 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B]], --"'" [ 16, 16, [ 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 00700B, 00700B, 00700B, 00000B]], --"(" [ 16, 16, [ 00700B, 00700B, 00700B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00700B, 00700B, 00700B, 00000B]], --")" [ 16, 16, [ 00700B, 00700B, 00700B, 07770B, 07770B, 07770B, 77777B, 77777B, 77777B, 07770B, 07770B, 07770B, 00700B, 00700B, 00700B, 00000B]], --"*" [ 16, 16, [ 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 07770B, 07770B, 07770B, 00700B, 00700B, 00700B, 00000B, 00000B, 00000B, 00000B]], --"+" [ 16, 16, [ 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 00000B]], --"," [ 16, 16, [ 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 07770B, 07770B, 07770B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B]], --"-" [ 16, 16, [ 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 00000B]], --"." [ 16, 16, [ 00007B, 00007B, 00007B, 00070B, 00070B, 00070B, 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 70000B, 70000B, 70000B, 00000B]], --"/" [ 16, 16, [ 77777B, 77777B, 77777B, 70077B, 70077B, 70077B, 70707B, 70707B, 70707B, 77007B, 77007B, 77007B, 77777B, 77777B, 77777B, 00000B]], --"0" [ 16, 16, [ 00700B, 00700B, 00700B, 07700B, 07700B, 07700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 77777B, 77777B, 77777B, 00000B]], --"1" [ 16, 16, [ 77777B, 77777B, 77777B, 00007B, 00007B, 00007B, 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 00000B]], --"2" [ 16, 16, [ 77777B, 77777B, 77777B, 00007B, 00007B, 00007B, 77777B, 77777B, 77777B, 00007B, 00007B, 00007B, 77777B, 77777B, 77777B, 00000B]], --"3" [ 16, 16, [ 70070B, 70070B, 70070B, 70070B, 70070B, 70070B, 77777B, 77777B, 77777B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00000B]], --"4" [ 16, 16, [ 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 00007B, 00007B, 00007B, 77777B, 77777B, 77777B, 00000B]], --"5" [ 16, 16, [ 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"6" [ 16, 16, [ 77777B, 77777B, 77777B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00000B]], --"7" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"8" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00007B, 00007B, 00007B, 77777B, 77777B, 77777B, 00000B]], --"9" [ 16, 16, [ 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 00000B, 00000B, 00000B, 00000B]], --":" [ 16, 16, [ 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 00000B, 00000B, 00000B, 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 00000B]], --";" [ 16, 16, [ 00070B, 00070B, 00070B, 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 00700B, 00700B, 00700B, 00070B, 00070B, 00070B, 00000B]], --"<" [ 16, 16, [ 00000B, 00000B, 00000B, 07770B, 07770B, 07770B, 00000B, 00000B, 00000B, 07770B, 07770B, 07770B, 00000B, 00000B, 00000B, 00000B]], --"=" [ 16, 16, [ 07000B, 07000B, 07000B, 00700B, 00700B, 00700B, 00070B, 00070B, 00070B, 00700B, 00700B, 00700B, 07000B, 07000B, 07000B, 00000B]], --">" [ 16, 16, [ 07770B, 07770B, 07770B, 07070B, 07070B, 07070B, 00070B, 00070B, 00070B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00000B]], --"?" [ 16, 16, [ 07777B, 07777B, 07777B, 00007B, 00007B, 00007B, 77707B, 77707B, 77707B, 70707B, 70707B, 70707B, 77777B, 77777B, 77777B, 00000B]], --"@" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 00000B]], --"A" [ 16, 16, [ 77770B, 77770B, 77770B, 70070B, 70070B, 70070B, 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"B" [ 16, 16, [ 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 00000B]], --"C" [ 16, 16, [ 77000B, 77000B, 77000B, 70700B, 70700B, 70700B, 70070B, 70070B, 70070B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"D" [ 16, 16, [ 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 00000B]], --"E" [ 16, 16, [ 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 00000B]], --"F" [ 16, 16, [ 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 70077B, 70077B, 70077B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"G" [ 16, 16, [ 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 00000B]], --"H" [ 16, 16, [ 77777B, 77777B, 77777B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 77777B, 77777B, 77777B, 00000B]], --"I" [ 16, 16, [ 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 00007B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"J" [ 16, 16, [ 70007B, 70007B, 70007B, 70070B, 70070B, 70070B, 77700B, 77700B, 77700B, 70070B, 70070B, 70070B, 70007B, 70007B, 70007B, 00000B]], --"K" [ 16, 16, [ 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 77777B, 77777B, 77777B, 00000B]], --"L" [ 16, 16, [ 77777B, 77777B, 77777B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 00000B]], --"M" [ 16, 16, [ 70007B, 70007B, 70007B, 77007B, 77007B, 77007B, 70707B, 70707B, 70707B, 70077B, 70077B, 70077B, 70007B, 70007B, 70007B, 00000B]], --"N" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"O" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 70000B, 70000B, 70000B, 70000B, 70000B, 70000B, 00000B]], --"P" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 77777B, 77777B, 77777B, 00000B]], --"Q" [ 16, 16, [ 77777B, 77777B, 77777B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 70070B, 70070B, 70070B, 70007B, 70007B, 70007B, 00000B]], --"R" [ 16, 16, [ 77777B, 77777B, 77777B, 77000B, 77000B, 77000B, 00700B, 00700B, 00700B, 00077B, 00077B, 00077B, 77777B, 77777B, 77777B, 00000B]], --"S" [ 16, 16, [ 77777B, 77777B, 77777B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00000B]], --"T" [ 16, 16, [ 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 77777B, 77777B, 77777B, 00000B]], --"U" [ 16, 16, [ 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 70007B, 07070B, 07070B, 07070B, 00700B, 00700B, 00700B, 00000B]], --"V" [ 16, 16, [ 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 70707B, 77777B, 77777B, 77777B, 00000B]], --"W" [ 16, 16, [ 70007B, 70007B, 70007B, 07070B, 07070B, 07070B, 00700B, 00700B, 00700B, 07070B, 07070B, 07070B, 70007B, 70007B, 70007B, 00000B]], --"X" [ 16, 16, [ 70007B, 70007B, 70007B, 07070B, 07070B, 07070B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00000B]], --"Y" [ 16, 16, [ 77777B, 77777B, 77777B, 00077B, 00077B, 00077B, 00700B, 00700B, 00700B, 77000B, 77000B, 77000B, 77777B, 77777B, 77777B, 00000B]], --"Z" [ 16, 16, [ 07770B, 07770B, 07770B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07000B, 07770B, 07770B, 07770B, 00000B]], --"[" [ 16, 16, [ 07770B, 07770B, 07770B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 00070B, 07770B, 07770B, 07770B, 00000B]], --"]" [ 16, 16, [ 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00700B, 00000B]], --"|" [ 16, 16, [ 00000B, 00000B, 00000B, 77707B, 77707B, 77707B, 00700B, 00700B, 00700B, 70777B, 70777B, 70777B, 00000B, 00000B, 00000B, 00000B]], --"~" [ 16, 16, [ 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 77777B, 00000B]] -- Jocker ]; END; -- InitializeRasters InitializeVectors: PROCEDURE = BEGIN fontPointerTable: LONG POINTER TO FontPointerTable = transferInternal.fontloads[0].vectors.pointer; fontVectorTable: LONG POINTER TO FontVectorTable; halfSizeFontBitMap: CARDINAL = SIZE[FontBitMap]/2; mappingA: STRING = " !""#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[]|~"L; mappingB: STRING = " !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]|~"L; lastDisplacement: CARDINAL = halfSizeFontBitMap*LAST[Character]; fontPointerTable[FIRST[BandBLT.Font]] ¬ fontVectorTable ¬ LOOPHOLE[fontPointerTable + Space.wordsPerPage]; FOR character: CHARACTER IN CHARACTER DO fontVectorTable[character] ¬ lastDisplacement; -- Fall back for unimplemented CHARACTERs. ENDLOOP; FOR i: CARDINAL IN [FIRST[CARDINAL]..mappingA.length) DO fontVectorTable[mappingA[i]] ¬ halfSizeFontBitMap*i; ENDLOOP; FOR i: CARDINAL IN [FIRST[CARDINAL]..mappingB.length) DO fontVectorTable[mappingB[i]] ¬ halfSizeFontBitMap*i; ENDLOOP; END; -- InitializeVectors MapScratch: PROCEDURE [count: Environment.PageCount] RETURNS [interval: Space.Interval] = INLINE BEGIN RETURN[ Space.Map[ window: [file: File.nullFile, base: NULL, count: count], class: data, life: dead]] END; -- MapScratch Character: TYPE = [FIRST[CARDINAL]..CARDINAL[64]); FontBitMap: TYPE = MACHINE DEPENDENT RECORD [ height, width: CARDINAL, bitMap: ARRAY [0..16) OF WORD]; FontBitMapMemory: TYPE = ARRAY Character OF FontBitMap; FontPointerTable: TYPE = ARRAY BandBLT.Font OF LONG POINTER TO FontVectorTable; FontVectorTable: TYPE = ARRAY CHARACTER OF CARDINAL; transferInternal ¬ Heap.systemZone.NEW[ BandBLTImage.Transfer ¬ [ fontloads: Heap.systemZone.NEW[ BandBLTImage.FontloadSequence[fontloadSequenceLength]], bandlists: Heap.systemZone.NEW[ BandBLTImage.BandlistSequence[bandlistSequenceLength]]]]; transferInternal.fontloads[0] ¬ [ leftovers: [MapScratch[count: fontloadLeftoverSpaceCount], MapScratch[count: fontloadLeftoverSpaceCount]], vectors: MapScratch[count: fontloadVectorSpaceCount], inkwells: MapScratch[count: fontloadInkwellSpaceCount], rasters: MapScratch[count: fontloadRasterSpaceCount]]; transferInternal.bandlists[0] ¬ [ font: 0, bandlist: MapScratch[count: bandlistSpaceCount], maxBandEntries: 1]; -- basically meaningless transferInternal.fontloads.length ¬ transferInternal.bandlists.length ¬ 1; InitializeVectors; InitializeRasters; END; -- Initialize -- MAINLINE CODE: Initialize; END. LOG When/Who/What. 30-Mar-82/Claude Pany/Created. 15-Sep-83 17:06:52/Strickberger/name DecomposeExtrasImpl ¬ RavenLogFontImpl. Update for Klamath. 20-Nov-84 23:01:05/Strickberger/Change name to RasterLogFontImpl. Add copyright. 19-Jul-85 1:22:31/Strickberger/BandBltImage ¬ BandBLTImage for Euclid. FixArrows.