<> <> <> DIRECTORY BansheeEngine USING [Job, JobHandle], BansheeSequence USING []; BansheeSequenceImpl: CEDAR PROGRAM EXPORTS BansheeSequence = BEGIN <> pageCount: PUBLIC CARDINAL; -- total pages (all copies, with any or all banner sheets) <> job: BansheeEngine.JobHandle; -- set in call to Set plateCount: CARDINAL; <> GetBandlist: PUBLIC PROCEDURE [page: CARDINAL] RETURNS [bandlist: CARDINAL] = BEGIN <> <> <<(plates and pages relate to print order)>> SELECT job.printOrder FROM firstPageOutFirst => SELECT job.banner FROM oncePerDocument, oncePerJob => IF Banner[page: page] THEN RETURN[0] -- banner page from bandlist 0 ELSE RETURN[job.firstPage + Plate[page: page]]; suppressed => RETURN[job.firstPage + Plate[page: page]]; ENDCASE; lastPageOutFirst => SELECT job.banner FROM oncePerDocument, oncePerJob => IF Banner[page: page] THEN RETURN[0] ELSE RETURN[1 + job.lastPage - Plate[page: page]]; suppressed => RETURN[job.lastPage - Plate[page: page]]; ENDCASE; ENDCASE; END; Set: PUBLIC PROCEDURE [job: BansheeEngine.JobHandle] RETURNS [valid: BOOLEAN] = BEGIN IF job.document = NIL OR job.document.pages = 0 OR job.copyCount = 0 THEN RETURN[FALSE]; IF job.banner # suppressed AND job.document.pages = 1 THEN BEGIN <> job.banner _ suppressed; job.copyCount _ 1; job.firstPage _ job.lastPage _ 0; END ELSE job.lastPage _ MIN[LONG[job.lastPage], job.document.pages - 1 - (IF job.banner # suppressed THEN 1 ELSE 0)]; < job.lastPage THEN RETURN[FALSE]; **removed to fix AR>> <> plateCount _ job.lastPage - job.firstPage + 1 + (IF job.banner # suppressed THEN 1 ELSE 0); pageCount _ SELECT job.banner FROM oncePerDocument, suppressed => job.copyCount * plateCount, ENDCASE => 1 + job.copyCount * (plateCount - 1); RETURN[TRUE]; END; <> Banner: PROCEDURE [page: CARDINAL] RETURNS [banner: BOOLEAN] = BEGIN <> SELECT job.banner FROM oncePerDocument => SELECT job.printOrder FROM firstPageOutFirst => -- banner is page 0 RETURN[page MOD plateCount = 0]; lastPageOutFirst => -- banner is plateCount + 1 RETURN[page MOD plateCount = plateCount + 1]; ENDCASE; oncePerJob => SELECT job.printOrder FROM firstPageOutFirst => RETURN[page = 0]; lastPageOutFirst => RETURN[page = pageCount - 1]; ENDCASE; suppressed => RETURN[FALSE]; ENDCASE; END; Plate: PROCEDURE [page: CARDINAL] RETURNS [plate: CARDINAL] = BEGIN <> SELECT job.banner FROM oncePerDocument, suppressed => RETURN[page MOD plateCount]; oncePerJob => IF plateCount = 1 THEN RETURN[0] ELSE SELECT job.printOrder FROM firstPageOutFirst => IF page < plateCount THEN RETURN[page] ELSE RETURN[1 + (page - 1) MOD (plateCount - 1)]; lastPageOutFirst => IF page = pageCount - 1 THEN RETURN[plateCount + 1] ELSE RETURN[page MOD (plateCount - 1)]; ENDCASE; ENDCASE; END; END... LOG Who / When / What Strickberger / 27-Nov-84 12:33:41 / Created from FaxSequenceImpl. Add copyright. Strickberger / 4-Aug-85 23:16:04 / FixArrows.