%%
%% Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
%%
%%
%% This PostScript file is used as input to tsol_labeled_banner,
%% which will prepend code to set the values of a number of
%% variables.
%% This PostScript file may be modified for local customizations or
%% internationalization. Comments marked "INTERNATIONALIZE:" show
%% places where changes may be made for internationalization. Comments
%% marked "CUSTOMIZE:" show places where some typical customization
%% changes may be made.
%% The following comments describe variables set by tsol_labeled_banner
%% These variables are from the print job information that can be
%% displayed with lpstat or lpq.
%%
%% /Job_Classification The classification (from the sensitivity label) to
%% be displayed at the top and bottom of the banner
%% /Job_Printer Printer Name
%% /Job_Host Host job was submitted from
%% /Job_User User who submitted the job
%% /Job_JobID Job number
%% /Job_Title Job title
%%
%% Job Page labels are added in pstops filter, so page labels should not be
%% added here.
%%
%% /Job_DoPageLabels Print page labels NO.
%%
%% These variables are generated from the system clock value.
%%
%% /Job_Date Date and time the job is being printed, in the
%% locale's default format
%% /Job_Hash A randomly generatred identifying number for
%% matching up the banner and trailer pages of the job
%%
%%
%% The following variables are the job's labels
%% as interpreted by the bcltobanner(3TSOL) library routine.
%%
%% /Job_Classification The classification (from the sensitivity label) to be
%% displayed at the top and bottom of the banner page.
%% /Job_Protect The sensitivity label to be displayed in the protect-as
%% field.
%% /Job_Caveats The caveats from the sesitivity label.
%% /Job_Channels The channels from the sesitivity label.
%%
%%
%% The following variables are the job's Sensitivity Label and
%% Information Label as interpreted by the bsltos and biltos library
%% routines.
%%
%% /Job_SL_Internal The sensitivity label in internal view format.
%% /Job_SL_External The sensitivity label in external view format.
/SeparatorPagesDict 100 dict def
userdict /JobDict known not {
userdict /JobDict 100 dict put
} if
SeparatorPagesDict
begin
%% CUSTOMIZE: To print header page label left-justified, set this to false
/center_label true def
/center_show where {
pop
} {
userdict /center_show
{
dup stringwidth exch
2 div neg exch rmoveto show
} put
} ifelse
/append where
{ pop }
{
/append
{
1 index length 1 index length add
1 index dup type /dicttype eq
{
pop dict
begin
exch { def } forall
{ def } forall
currentdict
end
}
{
/arraytype eq { array } { string } ifelse
dup 4 -1 roll 1 index copy length 4 -1 roll putinterval
}
ifelse
} def
} ifelse
/fontheight
systemdict /fontheight known
{ systemdict /fontheight get }
{
{
gsave
setfont (qf) true charpath flattenpath pathbbox
4 -1 roll pop exch pop exch sub
grestore
}
} ifelse
def
/m { moveto } def
/r { rmoveto } def
/rl { rlineto } def
/NewLine {
currentpoint exch pop
currentfont fontheight sub errorx0 exch moveto
} def
/clipSL {
/MaxWidth exch def
dup stringwidth pop MaxWidth gt {
{
dup stringwidth pop (<-) stringwidth pop add MaxWidth le {exit} if
dup 0 exch length 1 sub getinterval
} loop
(<-)
%% Concatenate strings
dup length 2 index length add 1 index pop string
dup 0 4 index putinterval
dup 4 -1 roll length 4 -1 roll putinterval
} if
} def
/BreakWithBlanks {
{restoftext ( ) search
{
/blank_nextword exch def pop
/blank_restoftext exch def
/blank_wordwidth blank_nextword stringwidth pop def
restoftext (/) search
{
/slash_nextword exch def pop
/slash_restoftext exch def
/slash_wordwidth slash_nextword stringwidth pop def
blank_wordwidth slash_wordwidth lt
{
/nextword blank_nextword def
/restoftext blank_restoftext def
/wordwidth blank_wordwidth def
/breakwidth ( ) stringwidth pop def
}
{
/nextword slash_nextword def
/restoftext slash_restoftext def
/wordwidth slash_wordwidth def
/breakwidth (/) stringwidth pop def
}ifelse
}
{
pop
/nextword blank_nextword def
/restoftext blank_restoftext def
/wordwidth blank_wordwidth def
/breakwidth ( ) stringwidth pop def
}ifelse
curwidth wordwidth add linewidth gt
{textstring startchar
lastwordbreak startchar sub
getinterval proc
/startchar lastwordbreak def
/curwidth wordwidth breakwidth add def }
{/curwidth curwidth wordwidth add
breakwidth add def
} ifelse
/lastwordbreak lastwordbreak
nextword length add 1 add def
}
{pop BreakWithSlashes exit}
ifelse
}loop
}def
/BreakWithSlashes
{
/breakchar (/) def
/breakwidth breakchar stringwidth pop def
{restoftext breakchar search
{/nextword exch def pop
/restoftext exch def
/wordwidth nextword stringwidth pop def
curwidth wordwidth add linewidth gt
{textstring startchar
lastwordbreak startchar sub
getinterval proc
/startchar lastwordbreak def
/curwidth wordwidth breakwidth add def }
{/curwidth curwidth wordwidth add
breakwidth add def
} ifelse
/lastwordbreak lastwordbreak
nextword length add 1 add def
}
{pop exit}
ifelse
}loop
}def
/BreakIntoLines
{/proc exch def
/linewidth exch 40 sub def
/textstring exch def
/curwidth 0 def
/lastwordbreak 0 def
/startchar 0 def
/restoftext textstring def
% begin scale the font if necessary
/allowedarea linewidth fbh 10 div mul def
/currentarea currentfont fontheight textstring stringwidth pop mul def
currentarea allowedarea gt
{
currentfont allowedarea currentarea div scalefont setfont
}if
% end scale the font if necessary
BreakWithBlanks
/lastchar textstring length def
textstring startchar lastchar startchar sub
getinterval proc
}def
/ShowBanner {
JobDict /Job_Proclam? get {
systemdict /showpage get cvx exec
} if
} def
/Init {
initgraphics
/#copies 1 def
initmatrix
erasepage
clippath pathbbox /fbh exch def
/fbw exch def
pop pop newpath
0 0 moveto
0 fbh translate
0 0 moveto
/margin fbh 20 div def
/imargin margin 1.1 mul def
/errorx0 imargin def
/errorx1 fbw imargin sub def
/errory1 imargin def
gsave
} def
% this stuff is lpd dependant.
/lpdglue {
userdict
begin
JobDict
begin
% If Job_Printer is defined, assume the others are too,
/Job_Printer where
{
pop
/Job_Proclam? true def
/Job_Endclam? true def
/Printer Job_Printer def
/Host Job_Host def
/User Job_User def
/Title Job_Title def
/JobID Job_JobID def
/Date Job_Date def
%% CUSTOMIZE: To use a different string at the top and
%% bottom of each page, change the following line. For
%% instance, to use the sensitivity label in external view
%% format, change the line to: /PageLabel Job_SL_External def
%% To eliminate page labels completely, change this line to
%% set the page label to an empty string: /PageLabel () def
/PageLabel Job_SL_Internal def
Job_Protect () eq
{
%% Job_Protect is empty because SLs are turned
%% off in secconf. (Turning off SLs is actually not yet
%% supported by the system.)
/Protect () def
/Protect_Text1 () def
/Protect_Text2 () def
}
{
%% INTERNATIONALIZE/CUSTOMIZE: Replace the text between
%% parentheses with the appropriate text to display
%% above and below the SL.
/Protect Job_Protect def
/Protect_Text1 (This output must be protected as:) def
/Protect_Text2 (unless manually reviewed and downgraded.) def
}
ifelse
%% CUSTOMIZE: To not print the caveats, change
%% this line to /Caveats () def
/Caveats Job_Caveats def
%% CUSTOMIZE: To not print the channels, change
%% this line to /Channels () def
/Channels Job_Channels def
%% CUSTOMIZE: To not print the hash number, change
%% this line to /Hash () def
/Hash Job_Hash def
%% CUSTOMIZE: To not print the head label, change
%% this line to /HeadLabel () def
%% You may also substitute another string. For example, to use
%% the SL in internal view format: /HeadLabel Job_SL_Internal def
/HeadLabel Job_Classification def
} {
/Job_Proclam? false def
/Job_Endclam? false def
} ifelse
end
end
} def
/border {
gsave
setlinewidth
setgray
30 -20 moveto
0 60 fbh sub rlineto
fbw 60 sub 0 rlineto
0 fbh 60 sub rlineto
60 currentlinewidth 2 div sub fbw sub 0 rlineto
stroke
grestore
} def
/TSOLJobInfo {
gsave
/fontscale fbh 50 div def
/Courier-Bold findfont fontscale scalefont setfont
/ClippedLabel
JobDict /HeadLabel get
SeparatorPagesDict /fbw get 90 sub
SeparatorPagesDict /clipSL get exec
def
/head_len {
ClippedLabel stringwidth pop 5 add
HeadLabel () eq { pop 0 } if
} def
15 setlinewidth
fbw 2 div head_len 2 div sub -20 moveto
head_len 0 rlineto stroke
1 setgray
fbw 10 div -25 m gsave ClippedLabel
currentpoint exch pop fbw 2 div exch moveto
center_show NewLine grestore
0 setgray
/fontscale fbh 70 div def
/Helvetica findfont fontscale scalefont setfont
0 fbh 8 div neg r Protect_Text1
currentpoint exch pop
center_label {
fbw 2 div exch moveto center_show
}
{
fbw 10 div exch moveto show
}
ifelse
/fontscale fbh 60 div def
/Helvetica-Bold findfont fontscale scalefont setfont
0 fbh 150 div neg r
Protect
fbw errorx0 3 mul sub % width minus margins
center_label {
{NewLine currentpoint exch pop fbw 2 div exch moveto center_show}
BreakIntoLines
}
{
{NewLine currentpoint exch pop fbw 10 div exch moveto show}
BreakIntoLines
}
ifelse
/fontscale fbh 70 div def
/Helvetica findfont fontscale scalefont setfont
0 fbh 50 div neg r Protect_Text2
currentpoint exch pop
center_label {
fbw 2 div exch moveto center_show
}
{
fbw 10 div exch moveto show
}
ifelse
/fontscale fbh 60 div def
/Helvetica-Bold findfont fontscale scalefont setfont
0 fbh 200 div neg r
0 fbh 10 div neg r
/fontscale fbh 40 div def
/Helvetica-Bold findfont fontscale scalefont setfont
0 fbh 30 div neg r gsave
%% INTERNATIONALIZE: Replace the text between
%% parentheses with the appropriate text.
(User: ) User (@) Host append append append
currentpoint exch pop fbw 2 div exch moveto center_show
NewLine grestore
0 fbh 30 div neg r gsave
%% INTERNATIONALIZE: Replace the text between
%% parentheses with the appropriate text.
(Job: ) JobID append
currentpoint exch pop fbw 2 div exch moveto center_show
NewLine grestore
0 fbh 30 div neg r gsave
Title
currentpoint exch pop fbw 2 div exch moveto center_show
NewLine grestore
/fontscale fbh 70 div def
/Helvetica findfont fontscale scalefont setfont
0 fbh 30 div neg r gsave
%% INTERNATIONALIZE: Replace the text between
%% parentheses with the appropriate text.
(Printed at: ) Date append
currentpoint exch pop fbw 2 div exch moveto center_show
NewLine grestore
0 fbh 30 div neg r gsave
%% INTERNATIONALIZE: Replace the text between
%% parentheses with the appropriate text.
(Printer queue: ) Printer append
currentpoint exch pop fbw 2 div exch moveto center_show
NewLine grestore
/Helvetica-Bold findfont fontscale scalefont setfont
0 fbh 20 div neg r
Caveats
fbw errorx0 3 mul sub % width minus margins
{NewLine currentpoint exch pop fbw 2 div exch moveto center_show}
BreakIntoLines
0 fbh 30 div neg r
Channels
fbw errorx0 3 mul sub % width minus margins
{NewLine currentpoint exch pop fbw 2 div exch moveto center_show}
BreakIntoLines
/fontscale fbh 50 div def
/Courier-Bold findfont fontscale scalefont setfont
15 setlinewidth
fbw 2 div head_len 2 div sub 40 fbh sub moveto
head_len 0 rlineto stroke
1 setgray
fbw 10 div 35 fbh sub m gsave ClippedLabel
currentpoint exch pop fbw 2 div exch moveto center_show
NewLine grestore
grestore
} def
/JobHashInfo {
gsave
0 setgray
/fontscale fbh 50 div def
/Helvetica-Bold findfont fontscale scalefont setfont
%% Upper left corner
Hash
fbw 12 div 50 neg m gsave show grestore
%% Lower left corner
Hash
fbw 12 div fbh 60 sub neg m gsave show grestore
%% Lower right corner
Hash dup stringwidth pop
fbw 11 mul 12 div exch sub fbh 60 sub neg m gsave show grestore
%% Upper right corner
Hash dup stringwidth pop
fbw 11 mul 12 div exch sub 50 neg m gsave show grestore
/fontscale fbh 40 div def
/Helvetica-Bold findfont fontscale scalefont setfont
fbw 10 div 120 fbh sub m gsave
currentpoint exch pop fbw 2 div exch moveto center_show
grestore
} def
/jobproclam {
JobDict
begin
Job_Proclam?
%% INTERNATIONALIZE: Replace the text between
%% parentheses with the appropriate text.
{ TSOLJobInfo (JOB START) JobHashInfo}
{ 0 -100 rmoveto }
ifelse
end
} def
/jobendclam {
JobDict
begin
Job_Endclam?
%% INTERNATIONALIZE: Replace the text between
%% parentheses with the appropriate text.
{ TSOLJobInfo (JOB END) JobHashInfo}
{ 0 -100 rmoveto }
ifelse
end
} def
/JobProclam {
jobproclam
} def
/JobEndclam {
jobendclam
} def
% A fancy box around page
/BannerBorder {
.7 16 border
} def
/TrailerBorder {
0 4 border
} def
%
% -------------------------------------------------------------------------
%
% The structure of separator pages is defined below. This is invoked by
% using a line like:
%
% SeparatorPagesDict /Banner get exec
%
/Banner {
SeparatorPagesDict
begin
Init
lpdglue
BannerBorder
JobProclam
end
} def
/Trailer {
SeparatorPagesDict
begin
Init
lpdglue
TrailerBorder
JobEndclam
end
} def
/SkipPageLabels false def
end
SeparatorPagesDict begin
clippath pathbbox /fbh exch def
/fbw exch def
pop pop
lpdglue
end
JobDict /Job_DoPageLabels get (YES) eq
JobDict /PageLabel get () ne and {
userdict begin
/showpage {
systemdict /showpage get cvx exec
} bind def
end
}if
%% End of tsol_separator.ps