RavenFace.mesa
Copyright (C) 1980, 1981, 1982, 1985 by Xerox Corporation. All rights reserved.
last edit by Grundler on 26-Sep-84 1:40:21
last edit by Gobbel on January 22, 1981 3:27 PM
last edit by Jarvis on July 7, 1980 5:02 PM
last edit by Olmstead on August 28, 1980 11:41 AM
last edit by Forrest on 16-Mar-82 13:14:35
last edit by Pany on October 15, 1981 10:08 AM.
Tim Diebert: November 17, 1985 3:55:49 pm PST
DIRECTORY
PrincOps USING [wordsPerPage],
VM USING [Interval];
RavenFace: DEFINITIONS = BEGIN
MaxBands:CARDINAL = 8;
BandBufferCount: TYPE = CARDINAL (FIRST[CARDINAL]..MaxBands];
Index: TYPE [1];
BandPointer: TYPE = LONG POINTER;
ResolutionPair: TYPE = ARRAY {fast, slow} OF CARDINAL;
resolution: READONLY ResolutionPair;
SizePair: TYPE = ARRAY {fast, slow} OF CARDINAL;
size: READONLY SizePair;
Fuser/ROS Control:
DozeOff: PROC;
WakeUp: PROC;
Initialization, Device Cleanup.
AllocateBands: PROC [bandVM: VM.Interval, nBands: (0..MaxBands], sizeEachBand: CARDINAL];
bandVM is VM.Interval of at least (nBands*sizeEachBand)+slop pages long.
Slop pages is provided for the drivers convenience. There is a time
tradeoff associated with checking to make sure an item is going to fit;
if the driver choses it may ask for slopPages after the last band which
it may write into while composing bands.
InitializeCleanUp: PROC;
SetInterruptMasks: PROC [control, status, data: WORD];
DeallocateBands: PROC;
Console Character
ConsoleCharacter: TYPE = MACHINE DEPENDENT{
(0), F(57B),
zero(60B), one, two, three, four, five, six, seven,
eight(70B), nine, A, L, C, D, E, blank(77B)};
Display: PROC [char: ConsoleCharacter];
Paper Control
PaperSource: TYPE = MACHINE DEPENDENT{bottom(0), top(1)};
PaperStacking: TYPE = MACHINE DEPENDENT{aligned(0), offset(1)};
Feed: PROC [paperSource: PaperSource, paperStacking: PaperStacking];
Status
PrinterStatus: TYPE = MACHINE DEPENDENT{
noStatus(0B),
key0(60B), key1(61B), key2(62B), key3(63B),
key4(64B), key5(65B), key6(66B), key7(67B),
key8(70B), key9(71B), keyClear(72B), keyTest(73B),
keyOnLine(74B), keyOffLine(75B), (76B), (77B),
warming(100B), standBy(101B), feederFault(102B),
registrationJam(104B), fuserJam(105B), noExit(106B),
interlockOpen(110B), fuserCold(111B), feeding(112B),
readyToFeed(113B),
displayAcknowledge(114B), parityError(115B),
illegalCharacter(116B), illegalSequence(117B),
(120B), noPaper(121B), pageSync(122B), pageAtOutputTray(123B),
tonerLow(124B), goingOffLine(125B), offLine(126B), onLine(127B),
outputTrayFull(130B), aboutToDozeOff(131B),
(174B), statusError(176B), statusOverRun(177B)};
SolicitStatus: PROC RETURNS [status: PrinterStatus];
ReadStatus: PROC RETURNS [status: PrinterStatus];
The same as SolicitStatus except that a Read Status command is sent.
Reset and describe Bands, image, and advance bands.
A band consists of sizeEachBands pages, with one scan line residing in each
page.A line goes in portrait mode from bottom to top of page; lines are scanned
from left to right accross the page.
Bands are filled by clients, and imaged by the LSEP
SetScanLineLength: PROC [activeWordsEachScanline: (0..PrincOps.wordsPerPage]];
indicate the number of words to make up each scanLine
SetPageOffsets: PROC [linesFromLeft: CARDINAL, wordTabFromBottom: CARDINAL];
indicate where first band and beginning of each band is printed.
ResetBands: PROC RETURNS [firstBand: Index, firstBandAddress: BandPointer];
StartImage: PROC [firstBand: Index];-- start imaging
BandOverrun: PROC RETURNS [BOOLEAN];-- imaging got ahead of filling.
AdvanceBand: PROC [currentBand: Index]
RETURNS [nextBand: Index, nextBandAddress: BandPointer];
this band filled; mark for imagingget next band to fill.nextBand should
not be refilled untill BandFull[nextBand]=FALSE.
BandFull: PROC [band: Index] RETURNS [bandBusy: BOOLEAN];
see if band has been imaging.
LastBand: PROC [Index];-- indicate last band is filled
Diagnostic use
PutCommand: PROCEDURE [CARDINAL [0B..200B)];
END....