BansheeSequenceImpl.mesa
Copyright (C) Xerox Corporation 1984, 1985. All rights reserved.
Last edited by Strickberger: 4-Aug-85 23:16:04
DIRECTORY
BansheeEngine USING [Job, JobHandle],
BansheeSequence USING [];
BansheeSequenceImpl: CEDAR PROGRAM
EXPORTS BansheeSequence = BEGIN
PUBLIC Variables:
pageCount: PUBLIC CARDINAL; -- total pages (all copies, with any or all banner sheets)
PRIVATE Variables:
job: BansheeEngine.JobHandle; -- set in call to Set
plateCount: CARDINAL;
PUBLIC PROCEDUREs:
GetBandlist: PUBLIC PROCEDURE [page: CARDINAL] RETURNS [bandlist: CARDINAL] = BEGIN
returns correct index into bandlist sequence for page number passed
bandlists correspond to doc. page order, not print order
(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
sole page in job is banner page
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)];
IF job.firstPage > job.lastPage THEN RETURN[FALSE]; **removed to fix AR
set up globals (pertaining to all pages in job)
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;
PRIVATE PROCEDUREs:
Banner: PROCEDURE [page: CARDINAL] RETURNS [banner: BOOLEAN] = BEGIN
returns TRUE if page is a banner, FALSE otherwise
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
returns plate number given page number in the first or only copy, page and plate number are the same, except for
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.