Id keyword property added
[obnox/wireshark/wip.git] / print.ps
index fa77a49bbb817bc18bf3b408362de7a4faf0bd6a..9ffb825d7a4be6470f0f9f73bb245e2e63dcd2d1 100644 (file)
--- a/print.ps
+++ b/print.ps
@@ -3,20 +3,44 @@
 % Code between start/end remarks is put into ps.c
 % Anything else is thrown away, and is for testing only.
 %
-% ---- ethereal preamble start ---- %
+% ---- wireshark preamble start ---- %
 %!
 %!PS-Adobe-2.0
 %
-% Ethereal - Network traffic analyzer
-% By Gerald Combs <gerald@ethereal.com>
+% Wireshark - Network traffic analyzer
+% By Gerald Combs <gerald@wireshark.org>
 % Copyright 1998 Gerald Combs
 %
-%%Creator: Ethereal
-%%Title: ethereal.ps
+%%Creator: Wireshark
+%%Title: wireshark.ps
 %%DocumentFonts: Helvetica Courier
 %%EndComments
 %!
 
+%
+% Ghostscript http://ghostscript.com/ can convert postscript to pdf files.
+%
+% To convert this postscript file to pdf, type (for US letter format):
+% ps2pdf filename.ps
+%
+% or (for A4 format):
+% ps2pdf -sPAPERSIZE=a4 filename.ps
+%
+% ... and of course replace filename.ps by your current filename.
+%
+% The pdfmark's below will help converting to a pdf file, and have no
+% effect when printing the postscript directly.
+% 
+
+%   This line is necessary if the file should be printable, and not just used
+%   for distilling into PDF:
+%
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+%
+%   This tells PDF viewers to display bookmarks when the document is opened:
+%
+[/PageMode /UseOutlines /DOCVIEW pdfmark
+
 % Get the Imagable Area of the page
 clippath pathbbox
 
@@ -27,10 +51,16 @@ clippath pathbbox
 pop pop                % junk
 
 % 1-inch margins
-/lmargin 72 def
-/tmargin vmax 72 sub def
-/bmargin 72 def
-/pagenumtab hmax 72 sub def
+%/lmargin 72 def
+%/tmargin vmax 72 sub def
+%/bmargin 72 def
+%/pagenumtab hmax 72 sub def
+
+% 1/2-inch margins
+/lmargin 36 def                                        % left margin
+/tmargin vmax 56 sub def               % top margin
+/bmargin 36 def                                        % bottom margin
+/pagenumtab hmax 36 sub def    % right margin
 
 % Counters
 /vpos vmax 40 sub def
@@ -39,8 +69,20 @@ pop pop              % junk
 % Strings
 /pagenostr 7 string def
 
+
+/formfeed {
+       printpagedecorations
+       showpage
+       
+       % we need a new current point after showpage is done
+       lmargin         % X
+       vpos            % Y
+       moveto
+       /vpos tmargin def
+} def
+
 % Prints text with possible indenting
-/putline {
+/putline_single {
        exch 10 mul lmargin add         % X
        vpos                                            % Y
        moveto
@@ -50,53 +92,102 @@ pop pop            % junk
 
        vpos bmargin le                         % is vpos <= bottom margin?
        {
-               printpagenum showpage
-               /vpos tmargin def
+               formfeed
        }
        if                                                      % then formfeed and start at top
 } def
 
-% A put line with smaller spacing and no formfeed
-/titleline {
-       lmargin                                         % X
-       vpos                                            % Y
-       moveto
-       show
 
-       /vpos vpos 8 sub def
+% Prints text with possible indenting and line wrap
+/putline {
+       /text exch def
+       /indent exch def
+       
+       % wrapat = width / sizeof font (remember: monospaced font)
+       /pagewidth pagenumtab bmargin sub def
+       /cwidth (A) stringwidth pop def
+       /wrapat pagewidth cwidth div cvi def
+               
+       text length wrapat le {
+               % print line
+               indent text 0 text length getinterval putline_single
+       }{
+               % print the lines first part
+               indent text 0 wrapat getinterval putline_single
+               % print wrapped rest
+               indent text wrapat text length wrapat sub getinterval putline
+       }
+       ifelse
 } def
 
+
 % Prints the page number at the top right
-/printpagenum {
+/printpagedecorations {
        gsave
                % Set the font to 8 point
                /Helvetica findfont 8 scalefont setfont
 
-               pagenumtab                                      % X
-               vmax 40 sub                                     % Y
+               % title
+               lmargin                                         % X
+               vmax 36 sub                                     % Y
+               moveto
+               eth_pagetitle show
+
+               % this page number
+               pagenumtab (Page ) stringwidth pop sub thispagenum pagenostr cvs stringwidth pop sub                                    % X
+               vmax 36 sub                                     % Y
                moveto
                (Page ) show
                thispagenum pagenostr cvs show
 
                % thispagenum++
                /thispagenum thispagenum 1 add def
+               
+               % line at top of page
+               lmargin                                         % X
+               vmax 38 sub                                     % Y
+               moveto
+               
+               pagenumtab                                      % X
+               vmax 38 sub                                     % Y
+               lineto
+               stroke
+               
+               % line at bottom of page
+               lmargin                                         % X
+               bmargin                                         % Y
+               moveto
+               
+               % title
+               pagenumtab                                      % X
+               bmargin                                         % Y
+               lineto
+               stroke
+               
        grestore
 } def
        
-% Set the font to 8 point
-/Helvetica findfont 8 scalefont setfont
-
-% Create the title
-(Ethereal) titleline
-
 % Reset the vertical position
 /vpos tmargin def
 
-% Set the font to 10 point
-/Courier findfont 10 scalefont setfont
-% ---- ethereal preamble end ---- %
+% ---- wireshark preamble end ---- %
+
+% Set the font to 8 point
+/Courier findfont 8 scalefont setfont
+
+% the page title
+/eth_pagetitle (Wireshark) def
 
 % Display our output lines.
+
+% PDF bookmark link
+[/Dest /__frame1__ /Title (Frame 1)   /OUT pdfmark
+[/View [/XYZ -4 currentpoint matrix currentmatrix matrix defaultmatrix
+ matrix invertmatrix matrix concatmatrix transform exch pop 20 add null]
+ /Dest /__frame1__ /DEST pdfmark
+% packet data
+0 (Frame 1) putline
 0 (Ethernet II \(98 on wire, 68 captured\)) putline
 1 (Destination: 00:00:0c:36:00:2a) putline
 1 (Source: 00:c0:4f:c7:eb:c0) putline
@@ -119,14 +210,48 @@ pop pop           % junk
 0 (0090  01 04 c0 a8 42 ef 39 00 16 08 05 05 05 05 00 00   ....B.9......... ) putline
 0 (00a0  00 00 00 03 20 36 41 20 52 69 6e 67 00 00 00 00   .... 6A Ring.... ) putline
 0 (00b0  00 00 00 00 00 00                                 ......           ) putline
+formfeed
+
+
+% PDF bookmark link
+[/Dest /__frame2__ /Title (Frame 2)   /OUT pdfmark
+[/View [/XYZ -4 currentpoint matrix currentmatrix matrix defaultmatrix
+ matrix invertmatrix matrix concatmatrix transform exch pop 20 add null]
+ /Dest /__frame2__ /DEST pdfmark
+% packet data
+0 (Frame 2) putline
+0 (Ethernet II \(98 on wire, 68 captured\)) putline
+1 (Destination: 00:00:0c:36:00:2a) putline
+1 (Source: 00:c0:4f:c7:eb:c0) putline
+1 (Type: IP \(0x0800\)) putline
+0 (Ethernet II \(98 on wire, 68 captured\)) putline
+1 (Source: 00:c0:4f:c7:eb:c0) putline
+1 (Type: IP \(0x0800\)) putline
+0 (Source: 00:c0:4f:c7:eb:c0) putline
+
+0 () putline
+0 (0000  cc 00 00 00 00 00 07 02 00 00 00 00 00 00 00 00   ................ ) putline
+0 (0010  00 00 bd 0e fe 16 01 00 3e 00 03 08 58 4c 20 38   ........>...XL 8 ) putline
+0 (0020  30 20 49 4d 33 00 16 01 00 34 00 16 01 01 35 00   0 IM3....4....5. ) putline
+0 (0030  16 01 02 36 00 16 01 03 6e 00 16 01 ff 6f 00 16   ...6....n....o.. ) putline
+0 (0040  01 ff 70 00 16 01 ff 71 00 16 01 ff 48 00 01 04   ..p....q....H... ) putline
+0 (0050  ff 03 07 00 24 00 01 01 05 25 00 01 01 05 26 00   ....$....%....&. ) putline
+0 (0060  01 01 05 27 00 01 01 05 6a 00 01 01 00 6b 00 01   ...'....j....k.. ) putline
+0 (0070  01 00 6c 00 01 01 00 6d 00 01 01 00 3d 00 01 02   ..l....m....=... ) putline
+0 (0080  02 00 c0 00 03 08 80 00 00 00 00 00 00 00 b4 00   ................ ) putline
+0 (0090  01 04 c0 a8 42 ef 39 00 16 08 05 05 05 05 00 00   ....B.9......... ) putline
+0 (00a0  00 00 00 03 20 36 41 20 52 69 6e 67 00 00 00 00   .... 6A Ring.... ) putline
+0 (00b0  00 00 00 00 00 00                                 ......           ) putline
+
+% ---- wireshark finale start ---- %
 
-% ---- ethereal finale start ---- %
 % If this is not the first page, then print the page number
 thispagenum 1 gt                               % is thispagenum > 1 ?
 {
-       printpagenum
+       printpagedecorations
 }
 if
 
 showpage
-% ---- ethereal finale end ---- %
+% ---- wireshark finale end ---- %