DIRECTORY Environment, PDFileFormat, PDInterpBasic, PDInterpOutput, PDInterpBitmap, RavenSlotDriver, OthelloDefs, PDInterpSysCalls, Process, ProcessorFace; PDInterpOutputImpl: PROGRAM IMPORTS PDInterpBitmap, RavenSlotDriver, PDInterpSysCalls, OthelloDefs -- , Process, ProcessorFace EXPORTS PDInterpOutput = BEGIN bitsPerWord: NAT = Environment.bitsPerWord; currentHerald: PDFileFormat.Herald; currentStartImage: PDFileFormat.StartImage; currentBandNumber: NAT _ 0; bandWords: INT _ 0; band: PDInterpBitmap.BitmapDesc _ [sOrigin: 0, fOrigin: 0, sMin: 0, fMin: 0, sSize: 0, fSize: 0, pointer: NIL, rast: 0, lines: 0]; bandWordsAllocated: INT _ 0; CurrentBandDesc: PROC RETURNS [PDInterpBitmap.BitmapDesc] = { band.sOrigin _ currentHerald.bandSSize*(currentBandNumber+currentStartImage.passBands); PDInterpBitmap.Clear[band]; RETURN [band] }; StartImage: PUBLIC PROC [herald: PDFileFormat.Herald, startImage: PDFileFormat.StartImage] RETURNS [PDInterpBitmap.BitmapDesc] = { rast: NAT = (startImage.fSizePage+bitsPerWord-1)/bitsPerWord; lines: INT = herald.bandSSize; words: INT = rast*lines; currentHerald _ herald; currentStartImage _ startImage; currentBandNumber _ 0; IF words > bandWordsAllocated THEN { IF band.pointer # NIL THEN PDInterpSysCalls.FreeSpace[band.pointer]; band.pointer _ PDInterpSysCalls.AllocateSpace[words]; bandWordsAllocated _ words; }; band.sOrigin _ 0; band.fOrigin _ startImage.fMinPage; band.sMin _ 0; band.fMin _ 0; band.sSize _ herald.bandSSize; band.fSize _ rast*bitsPerWord; band.rast _ rast; band.lines _ herald.bandSSize; bandWords _ words; RETURN [CurrentBandDesc[]] }; EndBand: PUBLIC PROC RETURNS [PDInterpBitmap.BitmapDesc] = { RavenSlotDriver.HyperStore[ sourcePtr: band.pointer, destOffset: bandWords*currentBandNumber, wordCount: bandWords ]; currentBandNumber _ currentBandNumber + 1; RETURN [CurrentBandDesc[]] }; EndImage: PUBLIC PROC = { successCode: RavenSlotDriver.SuccessCode; slowMargin: CARDINAL _ currentHerald.bandSSize*currentStartImage.passBands; fastMargin: CARDINAL _ band.fOrigin; numberOfLines: CARDINAL _ currentHerald.bandSSize*currentStartImage.nBands; scanLineLength: CARDINAL _ band.fSize; FOR copyNum: CARDINAL IN [0..currentHerald.copies) DO DO s:RavenSlotDriver.PrinterStatus; successCode _ RavenSlotDriver.PrintPage[ slowMargin: slowMargin, fastMargin: fastMargin, numberOfLines: numberOfLines, scanLineLength: scanLineLength, paperSource: top, paperStacking: aligned ]; SELECT successCode FROM warning => EXIT; error => { WHILE (s_RavenSlotDriver.GetStatus[])#standBy DO RavenSlotDriver.DisplayBadStatusInMP[s]; SELECT s FROM registrationJam => OthelloDefs.WriteLine[" - Registration jam"]; fuserJam => OthelloDefs.WriteLine[" - Fuser jam"]; warming => OthelloDefs.WriteLine[" - Warming up"]; feederFault => OthelloDefs.WriteLine[" - Out of paper"]; interlockOpen => OthelloDefs.WriteLine[" - Door open"]; fuserCold => OthelloDefs.WriteLine[" - Fuser cold"]; parityError => OthelloDefs.WriteLine[" - Parity Error"]; offLine => OthelloDefs.WriteLine[" - Offline"]; ENDCASE => OthelloDefs.WriteLine[" - Can't feed page"]; ENDLOOP }; ENDCASE => EXIT; -- ok ENDLOOP; ENDLOOP; }; END. LPDInterpOutputImpl.mesa Michael Plass, March 1, 1984 10:46:13 am PST Êl˜Jšœ™J™,šÏk œ’˜›J˜—šÏnœ˜Jšœ@Ïc˜bJšœ˜—šœ˜J˜—Jšœ œ˜+Jšœ#˜#Jšœ+˜+Jšœœ˜Jšœ œ˜Jšœjœ˜‚šœœ˜J˜—šžœœœ ˜=JšœW˜WJšœ˜Jšœ˜ Jšœ˜J˜—šž œœœC˜ZJšœ ˜'Jšœœ4˜=Jšœœ˜Jšœœ˜Jšœ˜Jšœ˜Jšœ˜šœœ˜$Jšœœœ*˜DJšœ5˜5Jšœ˜Jšœ˜—Jšœ˜Jšœ#˜#Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ˜J™—šžœœœœ ˜<šœ˜Jšœ˜Jšœ(˜(Jšœ˜Jšœ˜—Jšœ*˜*Jšœ˜Jšœ˜J˜—šžœœœ˜Jšœ)˜)Jšœ œ7˜KJšœ œœ˜$Jšœœ4˜KJšœœ˜&šœ œœ˜5š˜Jšœœ˜ šœ(˜(Jšœ˜Jšœ˜Jšœ˜Jšœ˜J˜Jšœ˜J˜—šœ ˜Jšœ œ˜šœ ˜ šœ)˜0Jšœ(˜(šœ˜ Jšœ@˜@Jšœ2˜2Jšœ2˜2Jšœ8˜8Jšœ7˜7Jšœ4˜4Jšœ8˜8Jšœ/˜/Jšœ0˜7—Jš˜—Jšœ˜—JšœœŸ˜—Jšœ˜—Jšœ˜—Jšœ˜—J˜Jšœ˜—…— T