DIRECTORY ImagerSample, PDFileFormat, PDFileReader, Commander, IO, Rope, SF; CheckPDImpl: CEDAR PROGRAM IMPORTS ImagerSample, PDFileReader, Commander, IO, Rope ~ BEGIN Break: PROC [char: CHAR] RETURNS [IO.CharClass] = { IF char = '_ OR char = '; THEN RETURN [break]; IF char = ' OR char = ' OR char = ', OR char = '\n THEN RETURN [sepr]; RETURN [other]; }; BitTable: TYPE ~ REF BitTableRep; BitTableRep: TYPE ~ ARRAY [0..10000) OF PACKED ARRAY [0..16) OF InitFalseBoolean; InitFalseBoolean: TYPE ~ BOOLEAN _ FALSE; TypePDCommand: Commander.CommandProc ~ { stream: IO.STREAM _ IO.RIS[cmd.commandLine]; name: Rope.ROPE _ stream.GetTokenRope[Break].token; reader: PDFileReader.Handle _ PDFileReader.Open[name]; out: IO.STREAM _ cmd.out; bitTable: BitTable _ NEW[BitTableRep]; AlreadyPrinted: PROC [loadAddress: INT] RETURNS [BOOLEAN] ~ { IF loadAddress < 0 THEN RETURN [TRUE] ELSE { address: LONG CARDINAL _ loadAddress; IF bitTable[address/16][address MOD 16] THEN RETURN [TRUE] ELSE {bitTable[address/16][address MOD 16] _ TRUE; RETURN [FALSE]}; }; }; quiet: BOOLEAN _ Rope.Find[cmd.commandLine, "QUIET"] >= 0; out.Put[IO.refAny[NEW[PDFileFormat.Herald _ reader.herald]]]; out.PutChar['\n]; DO ref: REF _ PDFileReader.Get[reader]; WITH ref SELECT FROM stateChange: PDFileReader.StateChange => { SELECT stateChange.whatChanged FROM imageStart => { out.PutRope["StartImage "]; out.Put[IO.refAny[NEW[PDFileFormat.StartImage _ reader.image]]]; out.PutChar['\n]; }; imageEnd => out.PutRope["EndImage\n"]; priorityChange => out.PutF["Priority %g\n", IO.int[reader.priority]]; colorChange => { out.PutF["Color Change %g addr %g", IO.refAny[NEW[PDFileReader.ColorType _ reader.colorType]], IO.int[reader.colorTileLoadAddress]]; IF quiet OR reader.colorTileLoadAddress < 0 OR AlreadyPrinted[reader.colorTileLoadAddress] THEN NULL ELSE { sampleMap: ImagerSample.SampleMap; phase: CARDINAL; min, size: SF.Vec; [sampleMap, phase] _ PDFileReader.ColorTileFromLoad[reader, reader.colorTileLoadAddress]; min _ ImagerSample.GetBox[sampleMap].min; size _ ImagerSample.GetSize[sampleMap]; out.PutF[" [sOrigin: %g, fOrigin: %g, sSize: %g, fSize: %g, phase: %g]\n", IO.int[min.s], IO.int[min.f], IO.int[size.s], IO.int[size.f], IO.int[phase]]; }; }; bandChange => out.PutRope["New Band\n"]; loadChange => out.PutF["Load %g(%g)\n", IO.int[stateChange.loadChangeStart], IO.int[stateChange.loadChangeLength]]; documentEnd => EXIT; ENDCASE => ERROR; }; maskSamples: PDFileReader.MaskSamples => { min: SF.Vec ~ ImagerSample.GetBox[maskSamples.samples].min; size: SF.Vec ~ ImagerSample.GetSize[maskSamples.samples]; out.PutRope[" MaskSamples"]; IF maskSamples.loadAddress # -1 THEN { out.PutF["Ref %g", IO.int[maskSamples.loadAddress]]; }; out.PutF[" [%g, %g, %g, %g]\n", IO.int[min.s], IO.int[min.f], IO.int[size.s], IO.int[size.f]]; }; maskRunGroup: PDFileReader.MaskRunGroup => TRUSTED { p: LONG POINTER TO PDFileFormat.Run _ maskRunGroup.pointer; out.PutRope[" MaskRunGroup"]; IF maskRunGroup.loadAddress # -1 THEN { out.PutF["Ref %g", IO.int[maskRunGroup.loadAddress]]; }; out.PutF[" [%g, %g, %g, %g] %g runs:\n", IO.int[maskRunGroup.sMin], IO.int[maskRunGroup.fMin], IO.int[maskRunGroup.sSize], IO.int[maskRunGroup.fSize], IO.int[maskRunGroup.runCount] ]; IF quiet OR AlreadyPrinted[maskRunGroup.loadAddress] THEN NULL ELSE { FOR i: INT IN [0..maskRunGroup.runCount) DO out.PutF[" %g(%g)", IO.int[p.fMin], IO.int[p.fSize]]; IF p.lastRun THEN out.PutChar['\n]; p _ p + SIZE[PDFileFormat.Run]; ENDLOOP; }; }; ENDCASE => { out.PutRope[" "]; out.Put[IO.refAny[ref]]; out.PutChar['\n]; }; ENDLOOP; PDFileReader.Close[reader]; cmd.out.PutRope[" Done.\n"]; }; StatsRep: TYPE ~ RECORD [ priorityChange: INT _ 0, colorChange: INT _ 0, bandChange: INT _ 0, loadChange: INT _ 0, maskRectangle: INT _ 0, maskTrapezoid: INT _ 0, maskRunGroup: INT _ 0, maskRunGroupRef: INT _ 0, maskSamples: INT _ 0, maskSamplesRef: INT _ 0, colorSamples: INT _ 0, deviceCommand: INT _ 0 ]; CheckPDCommand: Commander.CommandProc ~ { stream: IO.STREAM _ IO.RIS[cmd.commandLine]; name: Rope.ROPE _ stream.GetTokenRope[Break].token; reader: PDFileReader.Handle _ PDFileReader.Open[name]; out: IO.STREAM _ cmd.out; stats: REF StatsRep _ NEW[StatsRep _ []]; out.Put[IO.refAny[NEW[PDFileFormat.Herald _ reader.herald]]]; out.PutChar['\n]; DO ref: REF _ PDFileReader.Get[handle: reader, scanning: TRUE]; WITH ref SELECT FROM stateChange: PDFileReader.StateChange => { SELECT stateChange.whatChanged FROM imageStart => { out.PutRope["StartImage "]; out.Put[IO.refAny[NEW[PDFileFormat.StartImage _ reader.image]]]; out.PutChar['\n]; stats^ _ []; }; documentEnd => EXIT; imageEnd => { out.PutRope["EndImage "]; out.Put[IO.refAny[stats]]; out.PutRope["\n\n"]; }; priorityChange => { stats.priorityChange _ stats.priorityChange + 1; }; colorChange => { stats.colorChange _ stats.colorChange + 1; }; bandChange => { stats.bandChange _ stats.bandChange + 1; }; loadChange => { stats.loadChange _ stats.loadChange + 1; }; ENDCASE => NULL; }; maskRectangle: PDFileReader.MaskRectangle => { stats.maskRectangle _ stats.maskRectangle + 1; }; maskTrapezoid: PDFileReader.MaskTrapezoid => { stats.maskTrapezoid _ stats.maskTrapezoid + 1; }; maskRunGroup: PDFileReader.MaskRunGroup => { IF maskRunGroup.loadAddress >= 0 THEN stats.maskRunGroupRef _ stats.maskRunGroupRef + 1 ELSE stats.maskRunGroup _ stats.maskRunGroup + 1 }; maskSamples: PDFileReader.MaskSamples => { IF maskSamples.loadAddress >= 0 THEN stats.maskSamplesRef _ stats.maskSamplesRef + 1 ELSE stats.maskSamples _ stats.maskSamples + 1 }; colorSamples: PDFileReader.ColorSamples => { stats.colorSamples _ stats.colorSamples + 1; }; deviceCommand: PDFileReader.DeviceCommand => { stats.deviceCommand _ stats.deviceCommand + 1; }; ENDCASE => NULL; ENDLOOP; PDFileReader.Close[reader]; cmd.out.PutRope[" Done.\n"]; }; Commander.Register["CheckPD", CheckPDCommand, "Check a PD file"]; Commander.Register["TypePD", TypePDCommand, "Type a PD file"]; END. ŽCheckPDImpl.mesa Copyright Σ 1983, 1986, 1987, Xerox Corporation. All rights reserved. Michael Plass, February 6, 1987 7:59:27 pm PST Κω˜code™K™FK™.K™—KšΟk œ6œœ˜LK˜KšΠln œ ˜Kšœ(œ˜7šœ˜K˜– "cedar" styleš Οnœœœœœ˜3Kšœ œ œœ ˜.Kš œ œ œ œ œœ˜HKšœ ˜Kšœ˜K˜—Kšœ œœ ˜!Kš œ œœ œœœ œ˜Qšœœœœ˜)K˜—šŸ œ˜(Kš œœœœœ˜,Kšœ œ$˜3Kšœ6˜6Kšœœœ ˜Kšœœ˜&š Ÿœœœœœ˜=Kšœœœœ˜%šœ˜Kšœ œœ˜%Kš œœœœœ˜:Kš œœœœœ˜CKšœ˜—Kšœ˜—Kšœœ,˜:Kšœœœ(˜=K˜š˜Kšœœ˜$šœœ˜šœ*˜*šœ˜#šœ˜K˜Kšœœœ+˜@K˜Kšœ˜—Kšœ&˜&KšœE˜Ešœ˜Kšœ$œœ.œ#˜„š œœ!œ-œ˜dšœ˜K˜"Kšœœ˜Kšœ œ˜KšœY˜YKšœ)˜)Kšœ'˜'Kš œKœ œ œœœ ˜˜Kšœ˜——K˜—Kšœ(˜(Kšœs˜sKšœœ˜Kšœœ˜—Kšœ˜—šœ*˜*Kšœœ4˜;Kšœœ1˜9Kšœ˜šœœ˜&Kšœ4˜4Kšœ˜—Kš œ œ œ œœ˜^Kšœ˜—šœ+œ˜4Kšœœœœ)˜;Kšœ˜šœœ˜'Kšœ5˜5Kšœ˜—šœ(˜(Kšœ˜Kšœ˜Kšœ˜Kšœ˜Kšœ˜K˜—Kšœœ*œ˜>šœ˜šœœœ˜+Kšœœœ˜8Kšœ œ˜#Kšœœ˜Kšœ˜—Kšœ˜—Kšœ˜—šœ˜ Kšœ˜Kšœœ˜K˜Kšœ˜——Kšœ˜—Kšœ˜K˜Kšœ˜K˜—šœ œœ˜Kšœœ˜Kšœ œ˜Kšœ œ˜Kšœ œ˜Kšœœ˜Kšœœ˜Kšœœ˜Kšœœ˜Kšœ œ˜Kšœœ˜Kšœœ˜Kšœœ˜Kšœ˜K˜—šŸœ˜)Kš œœœœœ˜,Kšœ œ$˜3Kšœ6˜6Kšœœœ ˜Kšœœ œ˜)Kšœœœ(˜=K˜š˜K•StartOfExpansion<[handle: PDFileReader.Handle, scanning: BOOLEAN _ FALSE]šœœ.œ˜<šœœ˜šœ*˜*šœ˜#šœ˜K˜Kšœœœ+˜@K˜Kšœ ˜ Kšœ˜—Kšœœ˜šœ ˜ K˜Kšœœ˜K˜Kšœ˜—šœ˜Kšœ0˜0Kšœ˜—šœ˜Kšœ*˜*Kšœ˜—šœ˜Kšœ(˜(Kšœ˜—šœ˜Kšœ(˜(Kšœ˜—Kšœœ˜—Kšœ˜—šœ.˜.Kšœ.˜.Kšœ˜—šœ.˜.Kšœ.˜.Kšœ˜—šœ,˜,šœ˜ Kšœ2˜6Kšœ,˜0—Kšœ˜—šœ*˜*šœ˜Kšœ0˜4Kšœ*˜.—Kšœ˜—šœ,˜,Kšœ,˜,Kšœ˜—šœ.˜.Kšœ.˜.Kšœ˜—Kšœœ˜—Kšœ˜—Kšœ˜K˜Kšœ˜K˜—KšœA˜AKšœ>˜>K˜—Kšœ˜K˜—…—JΡ