<> <> DIRECTORY PDFileWriter, Rope ; PDFileWriterTest: CEDAR PROGRAM IMPORTS PDFileWriter = BEGIN InkWell: TYPE = ARRAY [0..16) OF PACKED ARRAY [0..16) OF [0..1]; InkWellGray: PROC [gray: [0..256]] RETURNS [inkWell: InkWell] = { i, j: NAT _ 0; FOR i: NAT IN [0..16) DO inkWell[i] _ [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]; ENDLOOP; WHILE gray>0 DO inkWell[i][j] _ 0; i _ i+1; IF i>=16 THEN {i_i-16; j _ j+1}; j _ j+3; IF j>=16 THEN j_j-16; gray_gray-1; ENDLOOP; }; tryLeftoverMode: BOOLEAN _ TRUE; tryBandSize: NAT _ 16; SetInkWellGray: PROC [pdState: PDFileWriter.PDState, gray: [0..256]] = { inkWell: InkWell _ InkWellGray[gray]; bitsPtr: LONG POINTER; loadReference: PDFileWriter.LoadReference; TRUSTED {bitsPtr _ @inkWell}; loadReference _ PDFileWriter.LoadContiguousColorTile[pdState: pdState, phase: 0, sMin: 0, fMin: 0, sSize: 16, fSize: 16, bitsPtr: bitsPtr]; PDFileWriter.SetColorTile[pdState, black, loadReference, PDFileWriter.opaqueFlag]; }; TryOverlappingRectangles: PROC = { <> pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "OR.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; FOR i: NAT IN [0..5) DO SetInkWellGray[pdState, i*256/9]; PDFileWriter.MaskRectangle[pdState, 1000+60*i, 300+71*i, 200, 400]; ENDLOOP; FOR i: NAT IN [5..10) DO SetInkWellGray[pdState, i*256/9]; PDFileWriter.MaskRectangle[pdState, 1000+60*5-60*(i-5), 300+71*i, 200, 400]; ENDLOOP; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; TryMaskSampleRefs: PROC = TRUSTED { pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "MSR.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; stamp: PDFileWriter.LoadReference; a: PACKED ARRAY [0..250*128) OF [0..1]; FOR s: NAT IN [0..250) DO FOR f: NAT IN [0..128) DO a[s*128+f] _ 0 ENDLOOP ENDLOOP; FOR s: NAT IN [0..250) DO fSize: INT _ INT[s]*(250-s); fSize _ fSize/125; FOR f: NAT IN [MAX[(125-fSize)/3, 0]..MIN[fSize+(125-fSize)/3,128]) DO a[s*128+f] _ 1; ENDLOOP; ENDLOOP; stamp _ PDFileWriter.LoadContiguousSampleArray[pdState, 250, 128, @a]; PDFileWriter.MaskSamplesRef[pdState, stamp, 1000, 300]; PDFileWriter.MaskSamplesRef[pdState, stamp, 1200, 800]; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; TryRunGroupRef: PROC = { pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "RGR.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; MakeRunGroup: PROC [runProc: PDFileWriter.CaptureRunProc] = { FOR s: NAT IN [0..400] DO fSize: INT _ INT[s]*(400-s); fSize _ fSize/100; runProc[s, fSize/3, fSize]; ENDLOOP; }; ref: PDFileWriter.LoadReference _ PDFileWriter.LoadRunGroup[pdState, MakeRunGroup]; PDFileWriter.MaskRunGroupRef[pdState, ref, 1000, 300]; PDFileWriter.MaskRunGroupRef[pdState, ref, 1200, 800]; SetInkWellGray[pdState, 64]; PDFileWriter.MaskRunGroupRef[pdState, ref, 600, 800]; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; TryRunGroup: PROC = { pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "RG.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; MakeRunGroup: PROC [runProc: PDFileWriter.CaptureRunProc] = { FOR s: NAT IN [0..400] DO fSize: INT _ INT[s]*(400-s); fSize _ fSize/100; runProc[s+sOrg, fSize/3+fOrg, fSize]; ENDLOOP; }; sOrg, fOrg: NAT; sOrg _ 1000; fOrg _ 300; PDFileWriter.MaskRunGroup[pdState, MakeRunGroup]; sOrg _ 1200; fOrg _ 800; PDFileWriter.MaskRunGroup[pdState, MakeRunGroup]; SetInkWellGray[pdState, 64]; sOrg _ 600; fOrg _ 800; PDFileWriter.MaskRunGroup[pdState, MakeRunGroup]; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; TryTrivialRunGroupRef: PROC = { pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "TRG.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; MakeRunGroup: PROC [runProc: PDFileWriter.CaptureRunProc] = { FOR s: NAT IN [0..8] DO fSize: INT _ INT[s]*(8-s); fSize _ fSize; runProc[s, fSize/3, fSize]; ENDLOOP; }; ref: PDFileWriter.LoadReference _ PDFileWriter.LoadRunGroup[pdState, MakeRunGroup]; PDFileWriter.MaskRunGroupRef[pdState, ref, 1000, 300]; PDFileWriter.MaskRunGroupRef[pdState, ref, 1200, 800]; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; TryMaskSamples: PROC = { pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "MS.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; size: NAT = 1400; radiusSquared: INT _ INT[size]*INT[size]/4; DeliverSamples: PROC [scanLineProc: PROC [slp: LONG POINTER]] = TRUSTED { line: PACKED ARRAY [0..size) OF [0..1]; FOR s: INT IN [0..size) DO FOR f: INT IN [0..size) DO d: INT _ (s-size/2)*(s-size/2) + (f-size/2)*(f-size/2); line[f] _ IF d>radiusSquared OR (d MOD 2000 >= 1000) THEN 0 ELSE 1; ENDLOOP; scanLineProc[@line]; ENDLOOP; }; PDFileWriter.MaskSamples[pdState, 313, 613, size, size, DeliverSamples]; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; TryColorSamples: PROC = { pdState: PDFileWriter.PDState _ PDFileWriter.Create[fileName: "CS.pd", deviceCode: hornet, sResolution: 384, fResolution: 384, imageSSize: 3264, imageFSize: 4224, nColors: 1, bandSSize: tryBandSize, leftOverMode: tryLeftoverMode, priorityImportant: tryLeftoverMode]; size: NAT = 222; radiusSquared: INT _ INT[size]*INT[size]/4; DeliverSamples: PROC [scanLineProc: PROC [slp: LONG POINTER]] = TRUSTED { line: PACKED ARRAY [0..size) OF [0..1]; FOR s: INT IN [0..size) DO FOR f: INT IN [0..size) DO d: INT _ (s-size/2)*(s-size/2) + (f-size/2)*(f-size/2); line[f] _ IF (d MOD 2000 >= 1000) THEN 0 ELSE 1; ENDLOOP; scanLineProc[@line]; ENDLOOP; }; PDFileWriter.ColorSamples[pdState, black, 600, 700, size, size, DeliverSamples]; PDFileWriter.EndPage[pdState]; PDFileWriter.Close[pdState]; }; END.